{"version":3,"sources":["node_modules/util/support/isBufferBrowser.js","node_modules/minimatch/minimatch.js","node_modules/path/path.js","node_modules/util/node_modules/inherits/inherits_browser.js","node_modules/lodash/lodash.js","node_modules/util/util.js","node_modules/brace-expansion/index.js","(webpack)/buildin/module.js","node_modules/concat-map/index.js","node_modules/balanced-match/index.js","node_modules/hammerjs/hammer.js","node_modules/rxjs/_esm2015/internal/util/isFunction.js","node_modules/rxjs/_esm2015/internal/config.js","node_modules/rxjs/_esm2015/internal/util/hostReportError.js","node_modules/rxjs/_esm2015/internal/Observer.js","node_modules/rxjs/_esm2015/internal/util/isArray.js","node_modules/rxjs/_esm2015/internal/util/isObject.js","node_modules/rxjs/_esm2015/internal/util/UnsubscriptionError.js","node_modules/rxjs/_esm2015/internal/Subscription.js","node_modules/rxjs/_esm2015/internal/symbol/rxSubscriber.js","node_modules/rxjs/_esm2015/internal/Subscriber.js","node_modules/rxjs/_esm2015/internal/symbol/observable.js","node_modules/rxjs/_esm2015/internal/util/identity.js","node_modules/rxjs/_esm2015/internal/util/pipe.js","node_modules/rxjs/_esm2015/internal/Observable.js","node_modules/rxjs/_esm2015/internal/util/toSubscriber.js","node_modules/rxjs/_esm2015/internal/util/canReportError.js","node_modules/rxjs/_esm2015/internal/util/ObjectUnsubscribedError.js","node_modules/rxjs/_esm2015/internal/Subject.js","node_modules/rxjs/_esm2015/internal/SubjectSubscription.js","node_modules/rxjs/_esm2015/internal/util/isScheduler.js","node_modules/rxjs/_esm2015/internal/operators/map.js","node_modules/rxjs/_esm2015/internal/util/subscribeToArray.js","node_modules/rxjs/_esm2015/internal/symbol/iterator.js","node_modules/rxjs/_esm2015/internal/util/isArrayLike.js","node_modules/rxjs/_esm2015/internal/util/isPromise.js","node_modules/rxjs/_esm2015/internal/util/subscribeTo.js","node_modules/rxjs/_esm2015/internal/util/subscribeToObservable.js","node_modules/rxjs/_esm2015/internal/util/subscribeToPromise.js","node_modules/rxjs/_esm2015/internal/util/subscribeToIterable.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleArray.js","node_modules/rxjs/_esm2015/internal/observable/from.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduled.js","node_modules/rxjs/_esm2015/internal/util/isInteropObservable.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleObservable.js","node_modules/rxjs/_esm2015/internal/scheduled/schedulePromise.js","node_modules/rxjs/_esm2015/internal/util/isIterable.js","node_modules/rxjs/_esm2015/internal/scheduled/scheduleIterable.js","node_modules/rxjs/_esm2015/internal/innerSubscribe.js","node_modules/rxjs/_esm2015/internal/operators/mergeMap.js","node_modules/rxjs/_esm2015/internal/operators/mergeAll.js","node_modules/rxjs/_esm2015/internal/observable/fromArray.js","node_modules/rxjs/_esm2015/internal/observable/merge.js","node_modules/rxjs/_esm2015/internal/operators/refCount.js","node_modules/rxjs/_esm2015/internal/observable/ConnectableObservable.js","node_modules/rxjs/_esm2015/internal/operators/multicast.js","node_modules/rxjs/_esm2015/internal/operators/share.js","node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js","src/environments/environment.ts","node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js","node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js","node_modules/rxjs/_esm2015/internal/observable/of.js","node_modules/rxjs/_esm2015/internal/operators/concatMap.js","node_modules/rxjs/_esm2015/internal/operators/filter.js","node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js","src/app/decorators/component-lookup.ts","node_modules/tslib/tslib.es6.js","src/app/configuration/api-mapping.ts","src/app/configuration/persona-types.ts","src/app/filter_selection/filter-choices.service.ts","src/app/authentication/authentication.service.ts","src/app/api/refresh-handler.service.ts","src/app/configuration/param-logic.service.ts","src/app/control_tower/selected-manager.service.ts","src/app/navigation/navbar-builder.service.ts","src/app/preferences/preference-selection.service.ts","src/app/api/persona.service.ts","src/app/dashboards/selected-tab.service.ts","src/app/filter_selection/details/detail-choices.service.ts","src/app/configuration/param-mapping.ts","src/app/configuration/default-params.ts","src/app/configuration/persona-levels.ts","src/app/configuration/nav-filter-selection.ts","src/app/business_review/md5.ts","node_modules/rxjs/_esm2015/internal/BehaviorSubject.js","node_modules/rxjs/_esm2015/internal/util/EmptyError.js","node_modules/rxjs/_esm2015/internal/OuterSubscriber.js","node_modules/rxjs/_esm2015/internal/InnerSubscriber.js","node_modules/rxjs/_esm2015/internal/util/subscribeToResult.js","node_modules/rxjs/_esm2015/internal/observable/combineLatest.js","node_modules/rxjs/_esm2015/internal/observable/empty.js","node_modules/rxjs/_esm2015/internal/observable/defer.js","node_modules/rxjs/_esm2015/internal/operators/concatAll.js","node_modules/rxjs/_esm2015/internal/util/ArgumentOutOfRangeError.js","node_modules/rxjs/_esm2015/internal/operators/takeLast.js","node_modules/rxjs/_esm2015/internal/operators/throwIfEmpty.js","node_modules/rxjs/_esm2015/internal/operators/defaultIfEmpty.js","node_modules/rxjs/_esm2015/internal/operators/last.js","node_modules/rxjs/_esm2015/internal/operators/catchError.js","node_modules/rxjs/_esm2015/internal/operators/take.js","node_modules/rxjs/_esm2015/internal/operators/first.js","node_modules/rxjs/_esm2015/internal/operators/every.js","node_modules/rxjs/_esm2015/internal/operators/switchMap.js","node_modules/rxjs/_esm2015/internal/observable/concat.js","node_modules/rxjs/_esm2015/internal/operators/scan.js","node_modules/rxjs/_esm2015/internal/util/noop.js","node_modules/rxjs/_esm2015/internal/operators/tap.js","node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js","node_modules/rxjs/_esm2015/internal/operators/finalize.js","node_modules/rxjs/_esm2015/internal/operators/startWith.js","node_modules/rxjs/_esm2015/internal/operators/reduce.js","src/app/api/parameter-resolver.service.ts","src/app/business_review/br-params.service.ts","node_modules/rxjs/_esm2015/internal/observable/throwError.js","src/app/api/cached-response-repo.service.ts","src/app/api/stack-request.service.ts","src/app/tiles/base/tile.component.ts","src/app/tiles/base/base-tile.component.ts","src/app/business_review/nodatacheck.service.ts","src/app/business_review/detail-query-params.service.ts","src/app/business_review/presentation-select.service.ts","src/app/business_review/presentation-toggle-handler.service.ts","src/app/business_review/br-history-range.service.ts","src/app/preferences/preference-api-connector.service.ts","src/app/api/api.service.ts","src/app/api/request-handler.ts","src/app/api/state-handler/state-handler.component.html","src/app/api/state-handler/state-handler.component.ts","node_modules/rxjs/_esm2015/internal/scheduler/AsyncAction.js","node_modules/rxjs/_esm2015/internal/scheduler/Action.js","node_modules/rxjs/_esm2015/internal/Scheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/AsyncScheduler.js","node_modules/rxjs/_esm2015/internal/scheduler/async.js","node_modules/rxjs/_esm2015/internal/operators/audit.js","node_modules/rxjs/_esm2015/internal/util/isNumeric.js","node_modules/rxjs/_esm2015/internal/observable/timer.js","node_modules/rxjs/_esm2015/internal/operators/auditTime.js","node_modules/@progress/kendo-charts/dist/es2015/common/constants.js","node_modules/@progress/kendo-charts/dist/es2015/common/is-array.js","node_modules/@progress/kendo-charts/dist/es2015/common/add-class.js","node_modules/@progress/kendo-charts/dist/es2015/common/remove-class.js","node_modules/@progress/kendo-drawing/dist/es2015/common/class.js","node_modules/@progress/kendo-drawing/dist/es2015/core/has-observers.js","node_modules/@progress/kendo-drawing/dist/es2015/util/defined.js","node_modules/@progress/kendo-drawing/dist/es2015/core/options-store.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-accessors.js","node_modules/@progress/kendo-drawing/dist/es2015/util/round.js","node_modules/@progress/kendo-drawing/dist/es2015/util/constants.js","node_modules/@progress/kendo-drawing/dist/es2015/util/rad.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/matrix.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/to-matrix.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/point.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/size.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/rect.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/transformation.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/transform.js","node_modules/@progress/kendo-drawing/dist/es2015/util/definition-id.js","node_modules/@progress/kendo-drawing/dist/es2015/util/value-or-default.js","node_modules/@progress/kendo-drawing/dist/es2015/util/is-transparent.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/element.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/ellipse-extreme-angles.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/circle.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/paintable.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/measurable.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-geometry.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/circle.js","node_modules/@progress/kendo-drawing/dist/es2015/util/deg.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/constants.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/close-or-less.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/arc.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersection.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/elements-array.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/geometry-elements-array.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/is-out-of-end-point.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/calculate-curve-at.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/to-cubic-polynomial.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/complex-number.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/solve-cubic-equation.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/has-roots-in-range.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/line-intersections-count.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-points.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/segment.js","node_modules/@progress/kendo-drawing/dist/es2015/geometry/math/curve-intersections-count.js","node_modules/@progress/kendo-drawing/dist/es2015/util/last.js","node_modules/@progress/kendo-drawing/dist/es2015/parsing/shape-map.js","node_modules/@progress/kendo-drawing/dist/es2015/parsing/parse-path.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-bounding-box.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/utils/elements-clippend-bounding-box.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/path.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/arc.js","node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/lru-cache.js","node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/util.js","node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/text-metrics.js","node_modules/@progress/kendo-drawing/dist/es2015/text-metrics/measure-text.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/text.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/image.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/traversable.js","node_modules/@progress/kendo-drawing/dist/es2015/util/append.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/group.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/translate-to-point.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-start-reverse.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/layout.js","node_modules/@progress/kendo-drawing/dist/es2015/shapes/rect.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/align-elements.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/align.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-align.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack-elements.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/create-stack-elements.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/stack.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-stack.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap-elements.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/wrap.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/v-wrap.js","node_modules/@progress/kendo-drawing/dist/es2015/alignment/fit.js","node_modules/@progress/kendo-drawing/dist/es2015/gradients/stops-array.js","node_modules/@progress/kendo-drawing/dist/es2015/mixins/with-options.js","node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient-stop.js","node_modules/@progress/kendo-drawing/dist/es2015/gradients/gradient.js","node_modules/@progress/kendo-drawing/dist/es2015/gradients/linear-gradient.js","node_modules/@progress/kendo-drawing/dist/es2015/gradients/radial-gradient.js","node_modules/@progress/kendo-drawing/dist/es2015/animations/easing-functions.js","node_modules/@progress/kendo-drawing/dist/es2015/util/now.js","node_modules/@progress/kendo-drawing/dist/es2015/util/limit-value.js","node_modules/@progress/kendo-drawing/dist/es2015/common/animation-frame.js","node_modules/@progress/kendo-drawing/dist/es2015/animations/animation-factory.js","node_modules/@progress/kendo-drawing/dist/es2015/parsing/path-parser.js","node_modules/@progress/kendo-drawing/dist/es2015/animations/animation.js","node_modules/@progress/kendo-drawing/dist/es2015/core/base-node.js","node_modules/@progress/kendo-drawing/dist/es2015/common/observable.js","node_modules/@progress/kendo-drawing/dist/es2015/util/element-styles.js","node_modules/@progress/kendo-drawing/dist/es2015/util/element-size.js","node_modules/@progress/kendo-drawing/dist/es2015/util/event-element.js","node_modules/@progress/kendo-drawing/dist/es2015/util/element-padding.js","node_modules/@progress/kendo-drawing/dist/es2015/util/element-offset.js","node_modules/@progress/kendo-drawing/dist/es2015/util/event-coordinates.js","node_modules/@progress/kendo-drawing/dist/es2015/util/element-scale.js","node_modules/@progress/kendo-drawing/dist/es2015/core/surface.js","node_modules/@progress/kendo-drawing/dist/es2015/common/log-to-console.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-attribute.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-all-attributes.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-style.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/node-map.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/constants.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/utils/render-svg.js","node_modules/@progress/kendo-drawing/dist/es2015/common/support.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-stop-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/gradient-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/linear-gradient-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/radial-gradient-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/clip-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/definition-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/root-node.js","node_modules/@progress/kendo-drawing/dist/es2015/util/bind-events.js","node_modules/@progress/kendo-drawing/dist/es2015/util/unbind-events.js","node_modules/@progress/kendo-drawing/dist/es2015/core/constants.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/path-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/arc-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/circle-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/group-node.js","node_modules/@progress/kendo-drawing/dist/es2015/common/html-encode.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/image-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/multi-path-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/rect-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/text-node.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/surface.js","node_modules/@progress/kendo-drawing/dist/es2015/util/create-promise.js","node_modules/@progress/kendo-drawing/dist/es2015/util/promise-all.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/node-map.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/utils/render-path.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/group-node.js","node_modules/@progress/kendo-drawing/dist/es2015/common/throttle.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/root-node.js","node_modules/@progress/kendo-drawing/dist/es2015/search/quad-root.js","node_modules/@progress/kendo-drawing/dist/es2015/search/quad-node.js","node_modules/@progress/kendo-drawing/dist/es2015/search/shapes-quad-tree.js","node_modules/@progress/kendo-drawing/dist/es2015/common/color/named-colors.js","node_modules/@progress/kendo-drawing/dist/es2015/common/color/parse-color.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/path-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/arc-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/circle-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/image-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/multi-path-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/rect-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/text-node.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface.js","node_modules/@progress/kendo-drawing/dist/es2015/surface-factory.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/surface-cursor.js","node_modules/@progress/kendo-drawing/dist/es2015/surface.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/export-group.js","node_modules/@progress/kendo-drawing/dist/es2015/util/arabic-to-roman.js","node_modules/@progress/kendo-drawing/dist/es2015/util/encode-utf.js","node_modules/@progress/kendo-drawing/dist/es2015/util/encode-base64.js","node_modules/@progress/kendo-drawing/dist/es2015/util/merge-sort.js","node_modules/@progress/kendo-drawing/dist/es2015/canvas/export-image.js","node_modules/@progress/kendo-drawing/dist/es2015/svg/export-svg.js","node_modules/@progress/kendo-charts/dist/es2015/common/align-path-to-pixel.js","node_modules/@progress/kendo-charts/dist/es2015/common/clockwise.js","node_modules/@progress/kendo-charts/dist/es2015/common/is-number.js","node_modules/@progress/kendo-charts/dist/es2015/common/is-string.js","node_modules/@progress/kendo-charts/dist/es2015/common/convertable-to-number.js","node_modules/@progress/kendo-charts/dist/es2015/common/is-function.js","node_modules/@progress/kendo-charts/dist/es2015/common/deep-extend.js","node_modules/@progress/kendo-charts/dist/es2015/common/is-object.js","node_modules/@progress/kendo-charts/dist/es2015/common/style-value.js","node_modules/@progress/kendo-charts/dist/es2015/common/element-styles.js","node_modules/@progress/kendo-charts/dist/es2015/common/get-spacing.js","node_modules/@progress/kendo-charts/dist/es2015/services/intl-service.js","node_modules/@progress/kendo-charts/dist/es2015/services/dom-events-builder.js","node_modules/@progress/kendo-charts/dist/es2015/services/format-service.js","node_modules/@progress/kendo-charts/dist/es2015/services/chart-service.js","node_modules/@progress/kendo-charts/dist/es2015/services/template-service.js","node_modules/@progress/kendo-charts/dist/es2015/common/get-template.js","node_modules/@progress/kendo-charts/dist/es2015/common/getter.js","node_modules/@progress/kendo-charts/dist/es2015/common/grep.js","node_modules/@progress/kendo-charts/dist/es2015/common/has-classes.js","node_modules/@progress/kendo-charts/dist/es2015/common/hash-map.js","node_modules/@progress/kendo-charts/dist/es2015/common/in-array.js","node_modules/@progress/kendo-charts/dist/es2015/common/interpolate-value.js","node_modules/@progress/kendo-charts/dist/es2015/common/instance-observer.js","node_modules/@progress/kendo-charts/dist/es2015/common/map.js","node_modules/@progress/kendo-charts/dist/es2015/common/mousewheel-delta.js","node_modules/@progress/kendo-charts/dist/es2015/drawing-utils.js","node_modules/@progress/kendo-charts/dist/es2015/common/font-loader.js","node_modules/@progress/kendo-charts/dist/es2015/common/set-default-options.js","node_modules/@progress/kendo-charts/dist/es2015/common/sparse-array-limits.js","node_modules/@progress/kendo-charts/dist/es2015/common/find.js","node_modules/@progress/kendo-charts/dist/es2015/common/element-scale.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-major-unit.js","node_modules/@progress/kendo-charts/dist/es2015/core/point.js","node_modules/@progress/kendo-charts/dist/es2015/core/box.js","node_modules/@progress/kendo-charts/dist/es2015/core/ring.js","node_modules/@progress/kendo-charts/dist/es2015/core/shape-builder.js","node_modules/@progress/kendo-charts/dist/es2015/core/chart-element.js","node_modules/@progress/kendo-charts/dist/es2015/core/box-element.js","node_modules/@progress/kendo-charts/dist/es2015/core/shape-element.js","node_modules/@progress/kendo-charts/dist/es2015/core/gradients.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/box-diff.js","node_modules/@progress/kendo-charts/dist/es2015/core/root-element.js","node_modules/@progress/kendo-charts/dist/es2015/core/float-element.js","node_modules/@progress/kendo-charts/dist/es2015/core/text.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/rect-to-box.js","node_modules/@progress/kendo-charts/dist/es2015/core/text-box.js","node_modules/@progress/kendo-charts/dist/es2015/core/title.js","node_modules/@progress/kendo-charts/dist/es2015/core/axis-label.js","node_modules/@progress/kendo-charts/dist/es2015/core/note.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-tick.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/create-axis-grid-line.js","node_modules/@progress/kendo-charts/dist/es2015/core/axis.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/constants.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/absolute-date-diff.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-ticks.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-date.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/add-duration.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/start-of-week.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/floor-date.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/ceil-date.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-comparer.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-diff.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/to-time.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-equals.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/date-index.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/duration.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-date.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/parse-dates.js","node_modules/@progress/kendo-charts/dist/es2015/date-utils/first-day.js","node_modules/@progress/kendo-charts/dist/es2015/core/category-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/constants.js","node_modules/@progress/kendo-charts/dist/es2015/core/date-category-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/floor.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/ceil.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/limit-coordinate.js","node_modules/@progress/kendo-charts/dist/es2015/core/numeric-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-min.js","node_modules/@progress/kendo-charts/dist/es2015/core/utils/auto-axis-max.js","node_modules/@progress/kendo-charts/dist/es2015/core/date-value-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/logarithmic-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/mixins/grid-lines-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/core/radar-category-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/polar-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/mixins/radar-numeric-axis-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/core/radar-numeric-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/radar-logarithmic-axis.js","node_modules/@progress/kendo-charts/dist/es2015/core/curve-processor.js","node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-axis.js","node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/find-axis-by-name.js","node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-pane.js","node_modules/@progress/kendo-charts/dist/es2015/chart/api-elements/chart-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/count-numbers.js","node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/aggregates.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-field.js","node_modules/@progress/kendo-charts/dist/es2015/chart/series-binder.js","node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-range-calculator.js","node_modules/@progress/kendo-charts/dist/es2015/chart/constants.js","node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/error-bar-base.js","node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/categorical-error-bar.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/eval-options.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/categories-count.js","node_modules/@progress/kendo-charts/dist/es2015/chart/categorical-chart.js","node_modules/@progress/kendo-drawing/dist/es2015/common/color/color.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/point-events-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/note-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-point.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/step-line-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/spline-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/line-chart-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/animations/clip-animation.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/any-has-z-index.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/clip-animation-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/line-chart/line-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/step-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/spline-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/area-chart/area-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/axis-group-range-tracker.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-label.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-gradient-overlay.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar.js","node_modules/@progress/kendo-charts/dist/es2015/chart/layout/utils.js","node_modules/@progress/kendo-charts/dist/es2015/chart/layout/cluster-layout.js","node_modules/@progress/kendo-charts/dist/es2015/chart/layout/stack-wrap.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bar-chart/bar-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/are-numbers.js","node_modules/@progress/kendo-charts/dist/es2015/chart/candlestick-chart/candlestick-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot.js","node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/vertical-box-plot.js","node_modules/@progress/kendo-charts/dist/es2015/chart/box-plot-chart/box-plot-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/error-bars/scatter-error-bar.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/has-value.js","node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bubble-chart/bubble-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/target.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet.js","node_modules/@progress/kendo-charts/dist/es2015/chart/bullet-chart/bullet-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/base-tooltip.js","node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair-tooltip.js","node_modules/@progress/kendo-charts/dist/es2015/chart/crosshair/crosshair.js","node_modules/@progress/kendo-charts/dist/es2015/chart/chart-container.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pane.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/append-if-not-null.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/segment-visible.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/bind-segments.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/equals-ignore-case.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/filter-series-by-type.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/get-date-field.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/is-date-axis.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/single-item-or-array.js","node_modules/@progress/kendo-charts/dist/es2015/chart/utils/create-out-of-range-points.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-base.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/plotarea-events-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/series-aggregator.js","node_modules/@progress/kendo-charts/dist/es2015/chart/aggregates/default-aggregates.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-bar-chart/range-bar-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-line-point.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-point.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/spline-range-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/step-range-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/range-area-chart/range-area-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-point.js","node_modules/@progress/kendo-charts/dist/es2015/chart/ohlc-chart/ohlc-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/waterfall-chart/waterfall-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/categorical-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/highlight.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/accept-key.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/to-chart-axis-ranges.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/pannable.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/zoom-selection.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pan-and-zoom/mousewheel-zoom.js","node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-layout.js","node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend-item.js","node_modules/@progress/kendo-charts/dist/es2015/chart/legend/legend.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/plotarea-factory.js","node_modules/@progress/kendo-charts/dist/es2015/chart/selection.js","node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/tooltip.js","node_modules/@progress/kendo-charts/dist/es2015/chart/tooltip/shared-tooltip.js","node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bar-chart-animation.js","node_modules/@progress/kendo-charts/dist/es2015/chart/animations/bubble-animation.js","node_modules/@progress/kendo-charts/dist/es2015/chart/animations/fade-in-animation.js","node_modules/@progress/kendo-charts/dist/es2015/chart/animations/pie-animation.js","node_modules/@progress/kendo-charts/dist/es2015/chart/scatter-charts/scatter-line-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/xy-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/mixins/pie-chart-mixin.js","node_modules/@progress/kendo-charts/dist/es2015/chart/pie-chart/pie-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/pie-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/donut-chart/donut-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea-base.js","node_modules/@progress/kendo-charts/dist/es2015/chart/polar-scatter-chart/polar-scatter-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/polar-line-chart/polar-line-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/spline-polar-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/polar-area-chart/polar-area-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/polar-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-line-chart/radar-line-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/spline-radar-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-area-chart/radar-area-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-cluster-layout.js","node_modules/@progress/kendo-charts/dist/es2015/chart/layout/radar-stack-layout.js","node_modules/@progress/kendo-charts/dist/es2015/chart/radar-bar-chart/radar-bar-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/radar-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-segment.js","node_modules/@progress/kendo-charts/dist/es2015/chart/funnel-chart/funnel-chart.js","node_modules/@progress/kendo-charts/dist/es2015/chart/register-charts.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/donut-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/plotarea/funnel-plotarea.js","node_modules/@progress/kendo-charts/dist/es2015/chart/chart.js","node_modules/@progress/kendo-charts/dist/es2015/sparkline/shared-tooltip.js","node_modules/@progress/kendo-charts/dist/es2015/sparkline/sparkline.js","node_modules/@progress/kendo-charts/dist/es2015/stock/fade-out-animation.js","node_modules/@progress/kendo-charts/dist/es2015/stock/navigator-hint.js","node_modules/@progress/kendo-charts/dist/es2015/stock/navigator.js","node_modules/@progress/kendo-charts/dist/es2015/stock/constants.js","node_modules/@progress/kendo-charts/dist/es2015/stock/stock-chart.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/constants.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/pad.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/build-label-element.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/get-range.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/utils/unpad.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/gauge.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-scale.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/pointer.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-pointer.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer-animation.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/arrow-linear-pointer.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer-animation.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/bar-linear-pointer.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/linear/linear-gauge.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-scale.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer-animation.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-pointer.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/radial/radial-gauge.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/arc-scale.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer-animation.js","node_modules/@progress/kendo-charts/dist/es2015/gauges/arc/range-pointer.js","node_modules/@progress/kendo-charts/dist/es2015/chart/base-theme.js","node_modules/@telerik/kendo-draggable/dist/es2015/main.js","node_modules/rxjs/_esm2015/internal/observable/fromEvent.js","node_modules/@progress/kendo-angular-common/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-popup-common/dist/es2015/owner-document.js","node_modules/@progress/kendo-popup-common/dist/es2015/window.js","node_modules/@progress/kendo-popup-common/dist/es2015/document.js","node_modules/@progress/kendo-popup-common/dist/es2015/scrollbar-width.js","node_modules/@progress/kendo-popup-common/dist/es2015/window-viewport.js","node_modules/@progress/kendo-popup-common/dist/es2015/bounding-offset.js","node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent.js","node_modules/@progress/kendo-popup-common/dist/es2015/offset.js","node_modules/@progress/kendo-popup-common/dist/es2015/parents.js","node_modules/@progress/kendo-popup-common/dist/es2015/scroll-position.js","node_modules/@progress/kendo-popup-common/dist/es2015/element-scroll-position.js","node_modules/@progress/kendo-popup-common/dist/es2015/position-with-scroll.js","node_modules/@progress/kendo-popup-common/dist/es2015/position.js","node_modules/@progress/kendo-popup-common/dist/es2015/offset-parent-scroll-position.js","node_modules/@progress/kendo-popup-common/dist/es2015/parent-scroll-position.js","node_modules/@progress/kendo-popup-common/dist/es2015/restrict-to-view.js","node_modules/@progress/kendo-popup-common/dist/es2015/align-point.js","node_modules/@progress/kendo-popup-common/dist/es2015/siblings.js","node_modules/@angular/animations/__ivy_ngcc__/fesm2015/animations.js","node_modules/@progress/kendo-angular-popup/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-popup-common/dist/es2015/add-scroll.js","node_modules/@progress/kendo-popup-common/dist/es2015/align.js","node_modules/@progress/kendo-popup-common/dist/es2015/remove-scroll.js","node_modules/@progress/kendo-popup-common/dist/es2015/collision.js","node_modules/@progress/kendo-popup-common/dist/es2015/sibling-container.js","node_modules/rxjs/_esm2015/internal/operators/skip.js","node_modules/@progress/kendo-angular-l10n/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@telerik/kendo-intl/dist/es2015/common/is-string.js","node_modules/@telerik/kendo-intl/dist/es2015/errors.js","node_modules/@telerik/kendo-intl/dist/es2015/error-details.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/info.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/default-data.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/territory.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-format-names.js","node_modules/@telerik/kendo-intl/dist/es2015/common/constants.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/parse-range-date.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/currency.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/constants.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/first-day.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/weekend-range.js","node_modules/@telerik/kendo-intl/dist/es2015/common/is-negative-zero.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-currency-symbol.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/group-integer.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/is-currency-style.js","node_modules/@telerik/kendo-intl/dist/es2015/common/pad.js","node_modules/@telerik/kendo-intl/dist/es2015/common/round.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/standard-number-format.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/utils.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/custom-number-format.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-options.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/format-number.js","node_modules/@telerik/kendo-intl/dist/es2015/common/is-number.js","node_modules/@telerik/kendo-intl/dist/es2015/numbers/parse-number.js","node_modules/@telerik/kendo-intl/dist/es2015/common/format-string.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/date-pattern.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/date-name-type.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/format-names.js","node_modules/@telerik/kendo-intl/dist/es2015/common/is-date.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/constants.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/format-date.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/time-utils.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/parse-date.js","node_modules/@telerik/kendo-intl/dist/es2015/dates/split-date-format.js","node_modules/@telerik/kendo-intl/dist/es2015/format.js","node_modules/@progress/kendo-angular-intl/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/date-field-name.js","node_modules/@telerik/kendo-intl/dist/es2015/cldr/number-symbols.js","node_modules/@progress/kendo-angular-charts/__ivy_ngcc__/dist/fesm2015/index.js","src/app/tiles/base/stacked-bar-line-chart/stacked-bar-line-chart.component.html","src/app/tiles/base/stacked-bar-line-chart/stacked-bar-line-chart.component.ts","src/app/tiles/base/text-indicators/text-indicators.component.html","src/app/tiles/base/text-indicators/text-indicators.component.ts","src/app/tiles/base/stacked-bar-chart-by-product/stacked-bar-chart-by-product.component.html","src/app/tiles/base/stacked-bar-chart-by-product/stacked-bar-chart-by-product.component.ts","src/app/tiles/base/top-stats-list/top-stats-list.component.html","src/app/tiles/base/top-stats-list/top-stats-list.component.ts","src/app/tiles/base/multi-api-tile.component.ts","src/app/tiles/base/vertical-split-text-indicators/vertical-split-text-indicators.component.html","src/app/tiles/base/vertical-split-text-indicators/vertical-split-text-indicators.component.ts","src/app/tiles/base/shape-indicators/shape-indicators.component.html","src/app/tiles/base/shape-indicators/shape-indicators.component.ts","node_modules/@progress/kendo-drawing/dist/es/common/class.js","node_modules/@progress/kendo-drawing/dist/es/core/has-observers.js","node_modules/@progress/kendo-drawing/dist/es/mixins/with-accessors.js","node_modules/@progress/kendo-drawing/dist/es/util/round.js","node_modules/@progress/kendo-drawing/dist/es/util/defined.js","node_modules/@progress/kendo-drawing/dist/es/util/constants.js","node_modules/@progress/kendo-drawing/dist/es/util/rad.js","node_modules/@progress/kendo-drawing/dist/es/geometry/matrix.js","node_modules/@progress/kendo-drawing/dist/es/geometry/point.js","node_modules/@progress/kendo-drawing/dist/es/geometry/to-matrix.js","node_modules/@progress/kendo-drawing/dist/es/geometry/size.js","node_modules/@progress/kendo-drawing/dist/es/geometry/rect.js","node_modules/@progress/kendo-drawing/dist/es/geometry/circle.js","node_modules/@progress/kendo-drawing/dist/es/geometry/math/ellipse-extreme-angles.js","src/app/tiles/base/pie-chart/pie-chart.component.html","src/app/tiles/base/pie-chart/pie-chart.component.ts","src/app/tiles/base/area-line-chart/area-line-chart.component.html","src/app/tiles/base/area-line-chart/area-line-chart.component.ts","src/app/tiles/base/multi-line-chart/multi-line-chart.component.html","src/app/tiles/base/multi-line-chart/multi-line-chart.component.ts","node_modules/@progress/pako-esm/dist/pako-esm2015.js","node_modules/@progress/kendo-drawing/dist/es2015/html/core.js","node_modules/@progress/kendo-angular-gauges/__ivy_ngcc__/dist/fesm2015/index.js","src/app/tiles/metrics/compliance-chart/compliance-chart.component.html","src/app/tiles/metrics/compliance-chart/compliance-chart.component.ts","src/app/tiles/metrics/nps/nps.component.ts","src/app/tiles/metrics/nps/nps.component.html","src/app/tiles/metrics/utilization-tpd/utilization-tpd.component.html","src/app/tiles/metrics/utilization-tpd/utilization-tpd.component.ts","src/app/tiles/placeholder/placeholder.component.ts","src/app/tiles/placeholder/placeholder.component.html","node_modules/@progress/kendo-data-query/dist/es2015/utils.js","node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-descriptor.interface.js","node_modules/@progress/kendo-data-query/dist/es2015/funcs.js","node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter.operators.js","node_modules/@progress/kendo-data-query/dist/es2015/accessor.js","node_modules/@progress/kendo-data-query/dist/es2015/mvc/operators.js","node_modules/@progress/kendo-data-query/dist/es2015/filter-serialization.common.js","node_modules/@progress/kendo-data-query/dist/es2015/mvc/deserialization.js","node_modules/@progress/kendo-data-query/dist/es2015/sorting/sort-array.operator.js","node_modules/@progress/kendo-data-query/dist/es2015/transducers.js","node_modules/@progress/kendo-data-query/dist/es2015/grouping/aggregate.operators.js","node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-no-eval.js","node_modules/@progress/kendo-data-query/dist/es2015/filtering/filter-expression.factory.js","node_modules/@progress/kendo-data-query/dist/es2015/grouping/group.operators.js","node_modules/@progress/kendo-data-query/dist/es2015/array.operators.js","node_modules/@progress/kendo-data-query/dist/es2015/sorting/sort.js","node_modules/@fortawesome/free-solid-svg-icons/index.es.js","node_modules/rxjs/_esm2015/internal/observable/forkJoin.js","node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js","node_modules/rxjs/_esm2015/internal/observable/interval.js","node_modules/rxjs/_esm2015/internal/operators/takeUntil.js","node_modules/rxjs/_esm2015/internal/operators/debounceTime.js","node_modules/@progress/kendo-angular-inputs/node_modules/@progress/kendo-common/dist/es2015/util.js","node_modules/@progress/kendo-angular-inputs/node_modules/@progress/kendo-common/dist/es2015/support.js","node_modules/@progress/kendo-angular-inputs/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/rxjs/_esm2015/internal/operators/throttle.js","node_modules/rxjs/_esm2015/internal/operators/throttleTime.js","node_modules/rxjs/_esm2015/internal/operators/skipWhile.js","node_modules/@progress/kendo-common/dist/es2015/util.js","node_modules/@progress/kendo-common/dist/es2015/support.js","node_modules/@progress/kendo-common/dist/es2015/accessors/field-list.js","node_modules/@progress/kendo-common/dist/es2015/accessors/getter.js","node_modules/@progress/kendo-angular-dropdowns/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-angular-pager/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-angular-listview/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@fortawesome/fontawesome-svg-core/index.es.js","node_modules/@fortawesome/angular-fontawesome/__ivy_ngcc__/fesm2015/angular-fontawesome.js","src/app/ui_tools/autoselect-list/autoselect-list.component.html","src/app/ui_tools/autoselect-list/autoselect-list.component.ts","src/app/filter_selection/details/toggle-switches.ts","src/app/filter_selection/details/detail-assay-filter/detail-assay-filter.component.ts","src/app/filter_selection/details/detail-account-filter/detail-account-filter.component.ts","src/app/filter_selection/details/detail-account-filter/detail-account-filter.component.html","src/app/filter_selection/details/detail-assay-filter/detail-assay-filter.component.html","src/app/filter_selection/details/detail-capital-service-assay-switches-filter/detail-capital-service-assay-switches-filter.component.html","src/app/filter_selection/details/detail-capital-service-assay-switches-filter/detail-capital-service-assay-switches-filter.component.ts","src/app/filter_selection/details/detail-category-switches-filter/detail-category-switches-filter.component.html","src/app/filter_selection/details/detail-category-switches-filter/detail-category-switches-filter.component.ts","src/app/business_review/snapshots/br-placeholder/br-placeholder.component.ts","src/app/filter_selection/details/detail-product-line-filter/detail-product-line-filter.component.ts","src/app/filter_selection/details/detail-disease-state-filter/detail-disease-state-filter.component.ts","src/app/filter_selection/details/detail-customer-filter/detail-customer-filter.component.ts","src/app/filter_selection/details/detail-customer-filter/detail-customer-filter.component.html","src/app/filter_selection/details/detail-disease-state-filter/detail-disease-state-filter.component.html","src/app/filter_selection/details/detail-product-line-filter/detail-product-line-filter.component.html","src/app/business_review/snapshots/br-placeholder/br-placeholder.component.html","src/app/business_review/snapshots/br-stacked-bar-line-chart/br-stacked-bar-line-chart.component.html","src/app/business_review/snapshots/br-stacked-bar-line-chart/br-stacked-bar-line-chart.component.ts","src/app/business_review/snapshots/br-multi-line-chart/br-multi-line-chart.component.html","src/app/business_review/snapshots/br-multi-line-chart/br-multi-line-chart.component.ts","src/app/business_review/snapshots/br-multi-bar-chart/br-multi-bar-chart.component.html","src/app/business_review/snapshots/br-multi-bar-chart/br-multi-bar-chart.component.ts","src/app/business_review/snapshots/br-line-chart/br-line-chart.component.html","src/app/business_review/snapshots/br-line-chart/br-line-chart.component.ts","src/app/business_review/snapshots/br-pie-chart/br-pie-chart.component.html","src/app/business_review/snapshots/br-pie-chart/br-pie-chart.component.ts","src/app/business_review/snapshots/br-stacked-bar-chart-by-product/br-stacked-bar-chart-by-product.component.html","src/app/business_review/snapshots/br-stacked-bar-chart-by-product/br-stacked-bar-chart-by-product.component.ts","src/app/business_review/snapshots/br-text-indicator/br-text-indicator.component.ts","src/app/business_review/snapshots/br-text-indicator/br-text-indicator.component.html","src/app/business_review/snapshots/br-top-items/br-top-items.component.html","src/app/business_review/snapshots/br-top-items/br-top-items.component.ts","src/app/business_review/snapshots/br-example-pie-chart/br-example-pie-chart.component.html","src/app/business_review/snapshots/br-example-pie-chart/br-example-pie-chart.component.ts","src/app/business_review/snapshots/api-test/api-test.component.ts","src/app/api/persona-options.service.ts","node_modules/rxjs/_esm2015/internal/Notification.js","src/app/business_review/snapshots/api-test/api-test.component.html","node_modules/rxjs/_esm2015/internal/observable/never.js","node_modules/rxjs/_esm2015/internal/operators/delay.js","node_modules/rxjs/_esm2015/internal/util/isDate.js","node_modules/@angular/service-worker/__ivy_ngcc__/fesm2015/service-worker.js","node_modules/rxjs/_esm2015/internal/operators/publish.js","src/app/api/push-notification-service.ts","node_modules/msal/lib-es6/utils/Constants.js","node_modules/msal/lib-es6/utils/CryptoUtils.js","node_modules/msal/lib-es6/authority/Authority.js","node_modules/msal/lib-es6/error/AuthError.js","node_modules/msal/lib-es6/utils/StringUtils.js","node_modules/msal/lib-es6/error/ClientAuthError.js","node_modules/msal/lib-es6/error/ClientConfigurationError.js","node_modules/msal/lib-es6/ScopeSet.js","node_modules/msal/lib-es6/utils/UrlUtils.js","node_modules/msal/lib-es6/cache/AccessTokenKey.js","node_modules/msal/lib-es6/cache/AccessTokenValue.js","node_modules/msal/lib-es6/ServerRequestParameters.js","node_modules/msal/lib-es6/packageMetadata.js","node_modules/msal/lib-es6/XHRClient.js","node_modules/msal/lib-es6/authority/TrustedAuthority.js","node_modules/msal/lib-es6/Logger.js","node_modules/msal/lib-es6/ClientInfo.js","node_modules/msal/lib-es6/utils/TimeUtils.js","node_modules/msal/lib-es6/utils/TokenUtils.js","node_modules/msal/lib-es6/IdToken.js","node_modules/msal/lib-es6/cache/AccessTokenCacheItem.js","node_modules/msal/lib-es6/cache/BrowserStorage.js","node_modules/msal/lib-es6/utils/RequestUtils.js","node_modules/msal/lib-es6/cache/AuthCache.js","node_modules/msal/lib-es6/Account.js","node_modules/msal/lib-es6/utils/WindowUtils.js","node_modules/msal/lib-es6/utils/ResponseUtils.js","node_modules/msal/lib-es6/authority/AuthorityFactory.js","node_modules/msal/lib-es6/Configuration.js","node_modules/msal/lib-es6/error/ServerError.js","node_modules/msal/lib-es6/error/InteractionRequiredAuthError.js","node_modules/msal/lib-es6/AuthResponse.js","node_modules/msal/lib-es6/telemetry/TelemetryConstants.js","node_modules/msal/lib-es6/telemetry/ApiEvent.js","node_modules/msal/lib-es6/telemetry/TelemetryUtils.js","node_modules/msal/lib-es6/telemetry/TelemetryEvent.js","node_modules/msal/lib-es6/telemetry/DefaultEvent.js","node_modules/@azure/msal-angular/__ivy_ngcc__/fesm2015/azure-msal-angular.js","node_modules/msal/lib-es6/telemetry/HttpEvent.js","node_modules/msal/lib-es6/telemetry/TelemetryManager.js","node_modules/msal/lib-es6/utils/AuthCacheUtils.js","node_modules/msal/lib-es6/UserAgentApplication.js","node_modules/@progress/kendo-angular-tooltip/__ivy_ngcc__/dist/fesm2015/index.js","src/app/navigation/tool-selector/tool-selector.component.ts","node_modules/@progress/kendo-angular-buttons/__ivy_ngcc__/dist/fesm2015/index.js","src/app/navigation/tool-selector/tool-selector.component.html","src/app/navigation/bookmarks/bookmarks.component.html","src/app/navigation/bookmarks/bookmarks.component.ts","node_modules/@progress/kendo-angular-label/__ivy_ngcc__/dist/fesm2015/index.js","src/app/navigation/preferences/preferences.component.html","src/app/navigation/preferences/preferences.component.ts","src/app/filter_selection/account-rep/account-rep.component.ts","src/app/filter_selection/manager-amb-selector/manager-amb-selector.component.ts","src/app/filter_selection/geo-location-selector/geo-location-selector.component.ts","src/app/filter_selection/cua-manager-selector/cua-manager-selector.component.ts","src/app/filter_selection/manager-selector/manager-selector.component.ts","src/app/filter_selection/tss-ambassador-selector/tss-ambassador-selector.component.ts","src/app/configuration/personas.ts","src/app/filter_selection/tss-ambassador-selector/tss-ambassador-selector.component.html","src/app/filter_selection/manager-selector/manager-selector.component.html","src/app/filter_selection/cua-manager-selector/cua-manager-selector.component.html","src/app/filter_selection/geo-location-selector/geo-location-selector.component.html","src/app/filter_selection/manager-amb-selector/manager-amb-selector.component.html","src/app/filter_selection/account-rep/account-rep.component.html","src/app/api/state-handler-search/state-handler-search.component.html","src/app/api/state-handler-search/state-handler-search.component.ts","src/app/ui_tools/customer-select-list/customer-select-list.component.html","src/app/ui_tools/customer-select-list/customer-select-list.component.ts","src/app/filter_selection/ct-customer-selector/ct-customer-selector.component.ts","src/app/filter_selection/ct-customer-selector/ct-customer-selector.component.html","src/app/ui_tools/account-select-list/account-select-list.component.html","src/app/ui_tools/account-select-list/account-select-list.component.ts","src/app/filter_selection/ct-account-selector/ct-account-selector.component.ts","src/app/filter_selection/ct-account-selector/ct-account-selector.component.html","src/app/filter_selection/persona-selector/persona-selector.component.html","src/app/filter_selection/persona-selector/persona-selector.component.ts","src/app/filter_selection/toggle-switches/toggle-switch.component.ts","src/app/filter_selection/toggle-switches/customer-toggle/customer-toggle.component.html","src/app/filter_selection/toggle-switches/customer-toggle/customer-toggle.component.ts","src/app/filter_selection/toggle-switches/instrument-toggle/instrument-toggle.component.html","src/app/filter_selection/toggle-switches/instrument-toggle/instrument-toggle.component.ts","src/app/filter_selection/toggle-switches/track-toggle/track-toggle.component.html","src/app/filter_selection/toggle-switches/track-toggle/track-toggle.component.ts","src/app/filter_selection/toggle-switches/flagship-toggle/flagship-toggle.component.html","src/app/filter_selection/toggle-switches/flagship-toggle/flagship-toggle.component.ts","src/app/navigation/parameter-switches/parameter-switches.component.html","src/app/navigation/parameter-switches/parameter-switches.component.ts","src/app/filter_selection/account/account.component.ts","src/app/filter_selection/sn-selector/sn-selector.component.ts","src/app/filter_selection/instrument-selector/instrument-selector.component.ts","src/app/filter_selection/customer-selector/customer-selector.component.ts","src/app/filter_selection/customer-selector/customer-selector.component.html","src/app/filter_selection/instrument-selector/instrument-selector.component.html","src/app/filter_selection/sn-selector/sn-selector.component.html","src/app/filter_selection/account/account.component.html","src/app/filter_selection/persona-selector2/persona-selector2.component.html","src/app/filter_selection/persona-selector2/persona-selector2.component.ts","node_modules/@progress/kendo-angular-dialog/__ivy_ngcc__/dist/fesm2015/index.js","src/app/filter_selection/search-popup/search-popup.component.html","src/app/filter_selection/search-popup/search-popup.component.ts","src/app/navigation/dashboard-navbar/dashboard-navbar.component.html","src/app/navigation/dashboard-navbar/dashboard-navbar.component.ts","src/app/filter_selection/detail-persona-selector/detail-persona-selector.component.html","src/app/filter_selection/detail-persona-selector/detail-persona-selector.component.ts","src/app/navigation/metric-detail-navbar/metric-detail-navbar.component.html","src/app/navigation/metric-detail-navbar/metric-detail-navbar.component.ts","src/app/control_tower/ct-service.service.ts","src/app/filter_selection/ct-product-set-selector/ct-product-set-selector.component.html","src/app/filter_selection/ct-product-set-selector/ct-product-set-selector.component.ts","src/app/navigation/ct-navbar/ct-navbar.component.html","src/app/navigation/gs-alerts-navbar/gs-alerts-navbar.component.ts","src/app/navigation/alerts-navbar/alerts-navbar.component.ts","src/app/navigation/ct-navbar/ct-navbar.component.ts","src/app/navigation/alerts-navbar/alerts-navbar.component.html","src/app/navigation/gs-alerts-navbar/gs-alerts-navbar.component.html","src/app/navigation/metric-detail-no-filter/metric-detail-no-filter.component.html","src/app/navigation/metric-detail-no-filter/metric-detail-no-filter.component.ts","src/app/business_review/presentation-toggle-switch/presentation-toggle-switch.component.html","src/app/business_review/presentation-toggle-switch/presentation-toggle-switch.component.ts","src/app/business_review/br-navbar/br-navbar.component.html","src/app/business_review/br-navbar/br-navbar.component.ts","src/app/app.component.html","src/app/app.component.ts","src/app/configuration/service-metric-tile-reference-default-arrangement.ts","src/app/dashboards/tile-insert/tile-insert.component.ts","src/app/dashboards/tile-insert/tile-insert.component.html","src/app/dashboards/dashboard/dashboard.component.html","src/app/dashboards/dashboard/dashboard.component.ts","src/app/details/row-parser.service.ts","src/app/configuration/details/style1-pages.ts","src/app/details/grid.component.ts","src/app/configuration/details/row-parsers.ts","src/app/details/row_parsers/stack-keys.ts","src/app/details/row_parsers/stack-values.ts","src/app/details/row_parsers/stack-totals.ts","src/app/details/row_parsers/percents.ts","src/app/details/row_parsers/percent-goals.ts","src/app/details/row_parsers/point-values.ts","node_modules/rxjs/_esm2015/internal/observable/zip.js","node_modules/rxjs/_esm2015/internal/operators/switchMapTo.js","node_modules/rxjs/_esm2015/internal/operators/distinctUntilChanged.js","node_modules/rxjs/_esm2015/internal/operators/bufferCount.js","node_modules/@progress/kendo-date-math/dist/es2015/clone-date.js","node_modules/@progress/kendo-date-math/dist/es2015/adjust-dst.js","node_modules/@progress/kendo-date-math/dist/es2015/add-days.js","node_modules/@progress/kendo-date-math/dist/es2015/create-date.js","node_modules/@progress/kendo-date-math/dist/es2015/get-date.js","node_modules/@progress/kendo-date-math/dist/es2015/is-equal.js","node_modules/@progress/kendo-date-math/dist/es2015/last-day-of-month.js","node_modules/@progress/kendo-date-math/dist/es2015/add-months.js","node_modules/@progress/kendo-date-math/dist/es2015/set-year.js","node_modules/@progress/kendo-date-math/dist/es2015/add-years.js","node_modules/@progress/kendo-date-math/dist/es2015/add-decades.js","node_modules/@progress/kendo-date-math/dist/es2015/add-centuries.js","node_modules/@progress/kendo-date-math/dist/es2015/normalize-year.js","node_modules/@progress/kendo-date-math/dist/es2015/first-decade-of-century.js","node_modules/@progress/kendo-date-math/dist/es2015/last-decade-of-century.js","node_modules/@progress/kendo-date-math/dist/es2015/first-year-of-decade.js","node_modules/@progress/kendo-date-math/dist/es2015/duration-in-centuries.js","node_modules/@progress/kendo-date-math/dist/es2015/last-year-of-decade.js","node_modules/@progress/kendo-date-math/dist/es2015/duration-in-decades.js","node_modules/@progress/kendo-date-math/dist/es2015/add-weeks.js","node_modules/@progress/kendo-date-math/dist/es2015/first-day-of-month.js","node_modules/@progress/kendo-date-math/dist/es2015/direction.enum.js","node_modules/@progress/kendo-date-math/dist/es2015/day-of-week.js","node_modules/@progress/kendo-date-math/dist/es2015/duration-in-months.js","node_modules/@progress/kendo-date-math/dist/es2015/set-month.js","node_modules/@progress/kendo-date-math/dist/es2015/first-month-of-year.js","node_modules/@progress/kendo-date-math/dist/es2015/last-month-of-year.js","node_modules/@progress/kendo-date-math/dist/es2015/duration-in-years.js","node_modules/@progress/kendo-date-math/dist/es2015/day.enum.js","node_modules/@progress/kendo-date-math/dist/es2015/week-in-year.js","node_modules/@progress/kendo-date-math/dist/es2015/prev-day-of-week.js","node_modules/@progress/kendo-date-math/dist/es2015/constants.js","node_modules/rxjs/_esm2015/internal/scheduler/QueueAction.js","node_modules/rxjs/_esm2015/internal/scheduler/queue.js","node_modules/rxjs/_esm2015/internal/scheduler/QueueScheduler.js","node_modules/rxjs/_esm2015/internal/operators/observeOn.js","node_modules/rxjs/_esm2015/internal/ReplaySubject.js","node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameAction.js","node_modules/rxjs/_esm2015/internal/scheduler/animationFrame.js","node_modules/rxjs/_esm2015/internal/scheduler/AnimationFrameScheduler.js","node_modules/rxjs/_esm2015/internal/operators/takeWhile.js","node_modules/@progress/kendo-angular-dateinputs/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-file-saver/dist/es2015/save-as.js","node_modules/@progress/kendo-ooxml/dist/es2015/services/intl-service.js","node_modules/@progress/kendo-ooxml/dist/es2015/services/template-service.js","node_modules/@progress/kendo-ooxml/dist/es2015/utils/getter.js","node_modules/@progress/kendo-ooxml/dist/es2015/utils/map.js","node_modules/@progress/kendo-ooxml/dist/es2015/excel-exporter.js","node_modules/@progress/jszip-esm/dist/jszip-esm2015.js","node_modules/@progress/kendo-ooxml/dist/es2015/utils/time.js","node_modules/@progress/kendo-ooxml/dist/es2015/ooxml.js","node_modules/@progress/kendo-ooxml/dist/es2015/utils/create-zip.js","node_modules/@progress/kendo-angular-excel-export/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-angular-grid/__ivy_ngcc__/dist/fesm2015/index.js","src/app/ui_tools/formatter/abbott-big-number-formatter-pipe.ts","src/app/details/style1-grid/style1-grid.component.html","src/app/details/style1-grid/style1-grid.component.ts","src/app/ui_tools/formatter/empty-value-mask-pipe.ts","src/app/details/set-values-grid/set-values-grid.component.html","src/app/details/set-values-grid/set-values-grid.component.ts","src/app/details/custom-grid/custom-grid.component.html","src/app/details/custom-grid/custom-grid.component.ts","src/app/details/custom-compliance-grid/custom-compliance-grid.component.html","src/app/details/custom-compliance-grid/custom-compliance-grid.component.ts","src/app/filter_selection/details/filter-insert/filter-insert.component.ts","src/app/filter_selection/details/filter-insert/filter-insert.component.html","src/app/details/style1/style1.component.html","src/app/details/style1/style1.component.ts","src/app/dashboards/customer/customer.component.html","src/app/dashboards/customer/customer.component.ts","src/app/dashboards/instruments/instruments.component.html","src/app/dashboards/instruments/instruments.component.ts","src/app/dashboards/ambassador/ambassador.component.html","src/app/dashboards/ambassador/ambassador.component.ts","node_modules/@progress/kendo-licensing/dist/index-esm.js","node_modules/@progress/kendo-angular-progressbar/__ivy_ngcc__/dist/fesm2015/index.js","node_modules/@progress/kendo-angular-layout/__ivy_ngcc__/dist/fesm2015/index.js","src/app/control_tower/customer-health-alerts-grid/customer-health-alerts-grid.component.html","src/app/control_tower/customer-health-alerts-grid/customer-health-alerts-grid.component.ts","src/app/control_tower/customer-health-grid/customer-health-grid.component.html","src/app/control_tower/customer-health-grid/customer-health-grid.component.ts","src/app/control_tower/customer-profile-info/customer-profile-info.component.html","src/app/control_tower/customer-profile-info/customer-profile-info.component.ts","src/app/control_tower/data-trend-chart/data-trend-chart.component.html","src/app/control_tower/data-trend-chart/data-trend-chart.component.ts","src/app/control_tower/data-trend-table/data-trend-table.component.html","src/app/control_tower/data-trend-table/data-trend-table.component.ts","src/app/control_tower/customer-data-trends/customer-data-trends.component.html","src/app/control_tower/customer-data-trends/customer-data-trends.component.ts","src/app/control_tower/ct-dashboard/ct-dashboard.component.html","src/app/control_tower/ct-dashboard/ct-dashboard.component.ts","src/app/alerts/alerts-grid/alerts-grid.component.html","src/app/alerts/alerts-grid/alerts-grid.component.ts","src/app/alerts/alerts-dashboard/alerts-dashboard.component.ts","src/app/ui_tools/formatter/custom-date-formatter-pipe.ts","src/app/alerts/alerts-dashboard/alerts-dashboard.component.html","src/app/configuration/details/style2-pages.ts","src/app/details/style2-grid/style2-grid.component.html","src/app/details/style2-grid/style2-grid.component.ts","src/app/details/style2/style2.component.html","src/app/details/style2/style2.component.ts","src/app/configuration/details/style3-pages.ts","src/app/details/style3-grid/style3-grid.component.html","src/app/details/style3-grid/style3-grid.component.ts","src/app/details/style3/style3.component.html","src/app/details/style3/style3.component.ts","src/app/configuration/details/style4-pages.ts","src/app/details/style4/style4.component.html","src/app/details/style4/style4.component.ts","src/app/details/service-contracts/service-contract-pages.ts","src/app/details/service-contracts/service-contracts-level2/service-contracts-level2.component.html","src/app/details/service-contracts/service-contracts-level2/service-contracts-level2.component.ts","src/app/details/service-contracts/service-contracts-level3/service-contracts-level3.component.html","src/app/details/service-contracts/service-contracts-level3/service-contracts-level3.component.ts","src/app/details/service-contracts/service-contracts-level4/service-contracts-level4.component.html","src/app/details/service-contracts/service-contracts-level4/service-contracts-level4.component.ts","src/app/details/uptime-customer-details/uptime-customer-details.component.html","src/app/details/uptime-customer-details/uptime-customer-details.component.ts","src/app/details/survey-comment-details/survey-comment-pages.ts","src/app/details/survey-comment-details/survey-comment-details.component.html","src/app/details/survey-comment-details/survey-comment-details.component.ts","src/app/details/customer-order-details/customer-order-details.component.html","src/app/details/customer-order-details/customer-order-details.component.ts","src/app/details/sgm-details/sgm-details.component.html","src/app/details/sgm-details/sgm-details.component.ts","src/app/details/predictive-alerts/predictive-alerts-level2/predictive-alerts-level2.component.html","src/app/details/predictive-alerts/predictive-alerts-level2/predictive-alerts-level2.component.ts","src/app/details/predictive-alerts/predictive-alerts-level3/predictive-alerts-level3.component.html","src/app/details/predictive-alerts/predictive-alerts-level3/predictive-alerts-level3.component.ts","src/app/details/rnps-survey-comment-details/rnps-survey-comment-details.component.html","src/app/details/rnps-survey-comment-details/rnps-survey-comment-details.component.ts","src/app/details/sales/sales-summary/sales-summary.component.html","src/app/details/sales/sales-summary/sales-summary.component.ts","src/app/details/sales/sales-details/sales-details.component.html","src/app/details/sales/sales-details/sales-details.component.ts","src/app/ui_tools/formatter/safe-html-pipe.ts","src/app/alerts/gs-alerts-dashboard/gs-alerts-dashboard.component.html","src/app/alerts/gs-alerts-dashboard/gs-alerts-dashboard.component.ts","src/app/business_review/br-template-selection.service.ts","src/app/business_review/configuration/dashboard-arrangement.ts","src/app/business_review/presentation-select/presentation-select.component.html","src/app/business_review/presentation-select/presentation-select.component.ts","src/app/business_review/search_options/br-location-selector/br-location-selector.component.html","src/app/business_review/search_options/br-location-selector/br-location-selector.component.ts","src/app/business_review/search_options/br-business-segment-selector/br-business-segment-selector.component.ts","src/app/business_review/search_options/br-business-segment-selector/br-business-segment-selector.component.html","src/app/business_review/ui-multi-column-list-select/ui-multi-column-list-select.component.html","src/app/business_review/ui-multi-column-list-select/ui-multi-column-list-select.component.ts","src/app/business_review/search_options/account-customer-selector/account-customer-selector.component.html","src/app/business_review/search_options/account-customer-selector/account-customer-selector.component.ts","src/app/business_review/search_options/br-history-range-selector/br-history-range-selector.component.html","src/app/business_review/search_options/br-history-range-selector/br-history-range-selector.component.ts","src/app/business_review/search_options/br-servicing-group-selector/br-servicing-group-selector.component.ts","src/app/business_review/search_options/br-product-selector/br-product-selector.component.ts","src/app/business_review/search_options/br-product-selector/br-product-selector.component.html","src/app/business_review/search_options/br-servicing-group-selector/br-servicing-group-selector.component.html","src/app/business_review/br-template-viewer/br-template-viewer.component.html","src/app/business_review/br-template-viewer/br-template-viewer.component.ts","src/app/business_review/br-template-editor/br-template-editor.component.html","src/app/business_review/br-template-editor/br-template-editor.component.ts","src/app/business_review/br-template-selector/br-template-selector.component.html","src/app/business_review/br-template-selector/br-template-selector.component.ts","src/app/business_review/filter-presentation-header/filter-presentation-header.component.html","src/app/business_review/filter-presentation-header/filter-presentation-header.component.ts","src/app/business_review/br-tile-insert/br-tile-insert.component.ts","src/app/business_review/br-tile-insert/br-tile-insert.component.html","src/app/business_review/filter-presentation-footer/filter-presentation-footer.component.html","src/app/business_review/filter-presentation-footer/filter-presentation-footer.component.ts","src/app/business_review/br-dashboard/br-dashboard.component.html","src/app/business_review/br-dashboard/br-dashboard.component.ts","src/app/business_review/configuration/details/expanded-view-pages.ts","src/app/business_review/detail_pages/br-expanded-chart-view/br-expanded-chart-view.component.html","src/app/business_review/detail_pages/br-expanded-chart-view/br-expanded-chart-view.component.ts","src/app/business_review/configuration/details/list-view-pages.ts","src/app/business_review/detail_pages/br-list-view/br-list-view.component.html","src/app/business_review/detail_pages/br-list-view/br-list-view.component.ts","src/app/business_review/system-comparison-pages/br-system-comparison-list-view/br-system-comparison-list-view.component.html","src/app/business_review/system-comparison-pages/br-system-comparison-list-view/br-system-comparison-list-view.component.ts","src/app/business_review/timeline-pages/br-timeline-view/br-timeline-view.component.html","src/app/business_review/timeline-pages/br-timeline-view/br-timeline-view.component.ts","src/app/business_review/configuration/details/ddt-config.ts","src/app/business_review/dynamic-data-table/dynamic-data-table.component.html","src/app/business_review/dynamic-data-table/dynamic-data-table.component.ts","src/app/business_review/ddt-loader/ddt-loader.component.html","src/app/business_review/ddt-loader/ddt-loader.component.ts","src/app/business_review/br-detail-component-viewer/br-detail-component-viewer.component.html","src/app/app-routing.module.ts","src/app/business_review/br-detail-component-viewer/br-detail-component-viewer.component.ts","node_modules/@angular/animations/__ivy_ngcc__/fesm2015/browser.js","node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/animations.js","src/app/app.module.ts","src/main.ts","$_lazy_route_resource lazy namespace object"],"names":["module","exports","arg","copy","fill","readUInt8","minimatch","Minimatch","path","sep","er","GLOBSTAR","expand","plTypes","open","close","reSpecials","split","reduce","set","c","slashSplit","ext","a","b","t","Object","keys","forEach","k","p","pattern","options","TypeError","nocomment","charAt","trim","match","this","join","regexp","negate","comment","empty","make","braceExpand","nobrace","filter","i","list","defaults","def","length","orig","m","prototype","debug","_made","parseNegate","globSet","console","error","globParts","map","s","si","parse","indexOf","negateOffset","nonegate","l","substr","isSub","noglobstar","stateChar","re","hasMagic","nocase","escaping","patternListStack","negativeLists","inClass","reClassStart","classStart","patternStart","dot","self","clearStateChar","qmark","len","noext","push","type","start","reStart","pl","pop","reEnd","cs","substring","RegExp","sp","SUBPARSE","tail","slice","replace","_","$1","$2","addPatternStart","n","nl","nlBefore","nlFirst","nlLast","nlAfter","openParensBefore","cleanAfter","dollar","flags","regExp","_glob","_src","makeRe","twoStar","ex","mm","f","nonull","partial","filename","file","matchBase","matchOne","flipNegate","fi","pi","fl","hit","fr","pr","swallowee","toLowerCase","Error","isWindows","process","platform","util","normalizeArray","parts","allowAboveRoot","res","trimArray","arr","lastIndex","end","splitDeviceRe","splitTailRe","win32","win32SplitPath","result","exec","device","result2","win32StatPath","isUnc","isAbsolute","normalizeUNCRoot","resolve","resolvedDevice","resolvedTail","resolvedAbsolute","arguments","env","cwd","isString","normalize","trailingSlash","test","paths","joined","relative","from","to","lowerFrom","lowerTo","toParts","lowerFromParts","lowerToParts","Math","min","samePartsLength","outputParts","concat","_makeLong","resolvedPath","dirname","root","dir","basename","extname","format","pathObject","isObject","base","pathString","allParts","name","delimiter","splitPathRe","posix","posixSplitPath","segment","fromParts","create","ctor","superCtor","super_","constructor","value","enumerable","writable","configurable","TempCtor","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","source","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrimStart","reWhitespace","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reForbiddenIdentifierChars","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsBreak","rsCombo","rsDigits","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsModifier","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","global","freeSelf","Function","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","require","types","binding","e","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","apply","func","thisArg","args","call","arrayAggregator","array","setter","iteratee","accumulator","index","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","Array","arrayPush","values","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","key","baseFindIndex","fromIndex","fromRight","baseIsNaN","baseIndexOfWith","baseMean","baseSum","object","basePropertyOf","baseReduce","current","baseTimes","baseTrim","string","trimmedEndIndex","baseUnary","baseValues","props","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","size","overArg","transform","replaceHolders","setToArray","setToPairs","stringSize","stringToArray","unescapeHtmlChar","runInContext","context","uid","pick","Date","String","arrayProto","objectProto","coreJsData","funcToString","toString","hasOwnProperty","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Symbol","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","toStringTag","defineProperty","getNative","ctxClearTimeout","clearTimeout","ctxNow","now","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","data","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","skip","get","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","input","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","keysIn","getSymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneTypedArray","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","isFunction","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","convert","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","isPartial","objProps","objLength","objStacked","othStacked","skipCtor","othValue","compared","objCtor","othCtor","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","undefined","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","sort","objCriteria","criteria","othCriteria","ordersLength","compareAscending","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","id","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","fn","reorder","createInverter","toIteratee","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","noop","createToPairs","createWrap","srcBitmask","newBitmask","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrStacked","arrValue","flatten","otherFunc","symbol","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","count","lastCalled","stamp","remaining","rand","memoize","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bind","bindKey","WRAP_BIND_FLAG","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","time","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","overArgs","transforms","funcsLength","partialRight","rearg","gt","gte","isError","isInteger","isNumber","lt","lte","toArray","next","done","remainder","toLength","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","isProto","merge","omit","CLONE_DEEP_FLAG","pickBy","prop","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","cond","conforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","target","position","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","truncate","omission","search","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","formatRegExp","objects","inspect","str","x","Number","JSON","stringify","deprecate","msg","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","obj","opts","ctx","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","ret","primitive","simple","visibleKeys","hash","val","idx","getOwnPropertyNames","formatError","output","braces","toUTCString","formatProperty","prev","cur","desc","getOwnPropertyDescriptor","line","ar","objectToString","d","o","debuglog","NODE_DEBUG","pid","isNullOrUndefined","isPrimitive","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","log","inherits","origin","concatMap","balanced","isTop","expansions","pre","isNumericSequence","body","isAlphaSequence","isSequence","isOptions","post","escClose","parseCommaParts","postParts","shift","embrace","N","numeric","y","width","incr","abs","isPadded","fromCharCode","need","z","el","j","expansion","escSlash","escOpen","escComma","escPeriod","unescapeBraces","webpackPolyfill","children","xs","maybeMatch","r","reg","begs","beg","left","right","ai","bi","window","document","exportName","VENDOR_PREFIXES","TEST_ELEMENT","createElement","setTimeoutContext","timeout","bindFn","invokeArrayArg","deprecationMessage","warn","nextKey","dest","src","inherit","child","childP","baseP","_super","boolOrFn","ifUndefined","val1","val2","addEventListeners","handler","splitStr","addEventListener","removeEventListeners","removeEventListener","hasParent","node","parentNode","inStr","inArray","findByKey","uniqueArray","results","prefixed","camelProp","_uniqueId","getWindowForElement","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","SUPPORT_ONLY_TOUCH","navigator","userAgent","PROPS_XY","PROPS_CLIENT_XY","Input","manager","inputTarget","domHandler","ev","enable","init","inputHandler","eventType","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","session","pointersLength","firstInput","simpleCloneInputData","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offsetDelta","prevDelta","prevInput","deltaX","deltaY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","rotation","maxPointers","velocity","velocityX","velocityY","direction","lastInterval","v","srcEvent","emit","recognize","clientX","clientY","p1","p2","sqrt","atan2","PI","evEl","evTarget","evWin","destroy","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MouseInput","pressed","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","2","3","4","5","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","PointerEventInput","store","pointerEvents","MSPointerEvent","PointerEvent","removePointer","eventTypeNormalized","isTouch","storeIndex","pointerId","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SingleTouchInput","started","normalizeSingleTouches","all","touches","changed","changedTouches","TOUCH_INPUT_MAP","TouchInput","targetIds","getTouches","allTouches","identifier","targetTouches","changedTargetTouches","touch","TouchMouseInput","mouse","primaryTouch","lastTouches","recordTouches","eventData","setLastTouch","lastTouch","lts","isSyntheticEvent","dx","dy","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","PREFIXED_TOUCH_ACTION","NATIVE_TOUCH_ACTION","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","TouchAction","Recognizer","state","simultaneous","requireFail","stateStr","directionStr","getRecognizerByNameIfManager","otherRecognizer","recognizer","AttrRecognizer","PanRecognizer","pX","pY","PinchRecognizer","PressRecognizer","_timer","_input","RotateRecognizer","SwipeRecognizer","TapRecognizer","pTime","pCenter","Hammer","recognizers","preset","Manager","handlers","oldCssProps","inputClass","touchAction","toggleCssProps","item","recognizeWith","requireFailure","cssProps","compute","getTouchAction","hasPanX","hasPanY","preventDefaults","prevented","preventDefault","hasNone","DIRECTION_LEFT","DIRECTION_UP","preventSrc","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","inputDataClone","reset","attrTest","optionPointers","isRecognized","isValid","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","validPointers","validMovement","validTime","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stop","force","stopped","curRecognizer","existing","on","events","off","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_DOWN","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","_enable_super_gross_mode_that_will_cause_bad_things","hostReportError","err","closed","useDeprecatedSynchronousErrorHandling","Subscription","UnsubscriptionError","UnsubscriptionErrorImpl","errors","unsubscribe","_parentOrParents","_subscriptions","_ctorUnsubscribe","_unsubscribe","flattenUnsubscriptionErrors","sub","teardown","subscription","EMPTY","tmp","subscriptions","subscriptionIndex","errs","rxSubscriber","destinationOrNext","complete","super","syncErrorValue","syncErrorThrown","syncErrorThrowable","isStopped","destination","_next","_error","_complete","subscriber","_parentSubscriber","observerOrNext","_context","__tryOrSetError","__tryOrUnsub","wrappedComplete","observable","pipe","fns","pipeFromArray","Observable","subscribe","_isScalar","_subscribe","sink","nextOrObserver","_trySubscribe","observer","promiseCtor","getPromiseCtor","operations","Subject","ObjectUnsubscribedError","ObjectUnsubscribedErrorImpl","subject","observers","subscriberIndex","hasError","thrownError","isScheduler","schedule","project","lift","MapOperator","subscribeToArray","isPromise","then","subscribeTo","obs","promise","scheduleArray","scheduler","notifyNext","notifyError","notifyComplete","innerValue","innerSubscribe","innerSubscriber","mergeMap","resultSelector","POSITIVE_INFINITY","concurrent","ii","MergeMapOperator","hasCompleted","active","_tryNext","_innerSub","ish","innerSubscription","mergeAll","fromArray","observables","refCount","RefCountOperator","connectableProto","connectable","_refCount","refCounter","connection","connect","sharedConnection","_connection","connectableObservableDescriptor","_subject","subjectFactory","_isComplete","getSubject","multicast","subjectOrSubjectFactory","selector","MulticastOperator","shareSubjectFactory","share","noSideEffects","makeParamDecorator","parentClass","metaCtor","propName","ParamDecoratorFactory","annotationInstance","ParamDecorator","annotation","cls","unusedKey","parameters","ngMetadataName","annotationCls","Inject","token","Optional","Self","SkipSelf","InjectFlags","getClosureSafeProperty","objWithPropertyToExtract","fillProperties","ɵɵdefineInjectable","providedIn","factory","defineInjectable","ɵɵdefineInjector","providers","getInjectableDef","getOwnDefinition","NG_PROV_DEF","NG_INJECTABLE_DEF","getInjectorDef","NG_INJ_DEF","NG_INJECTOR_DEF","ɵprov","ɵinj","NG_PROV_DEF_FALLBACK","ɵprovFallback","ngInjectableDef","ngInjectorDef","overriddenName","newLineIndex","concatStringsWithSpace","__forward_ref__","forwardRef","forwardRefFn","resolveForwardRef","isForwardRef","_injectImplementation","__globalThis","globalThis","__window","__self","WorkerGlobalScope","__global","_global","NG_COMP_DEF","ɵcmp","NG_DIR_DEF","ɵdir","NG_PIPE_DEF","ɵpipe","NG_MOD_DEF","ɵmod","NG_LOC_ID_DEF","ɵloc","NG_FACTORY_DEF","ɵfac","NG_ELEMENT_ID","__NG_ELEMENT_ID__","InjectionToken","_desc","INJECTOR","THROW_IF_NOT_FOUND","NEW_LINE","USE_VALUE","provide","useValue","_currentInjector","setCurrentInjector","injector","former","setInjectImplementation","impl","injectInjectorOnly","Default","injectRootLimpMode","ɵɵinject","inject","notFoundValue","injectableDef","injectArgs","meta","NullInjector","NgModuleRef","NgModuleFactory","addAllToArray","items","deepForEach","addToArray","removeFromArray","newArray","keyValueArraySet","keyValueArray","keyValueArrayIndexOf","value1","value2","keyValueArrayGet","middle","ChangeDetectionStrategy","OnPush","ViewEncapsulation$1","Emulated","Native","None","ShadowDom","EMPTY_OBJ","EMPTY_ARRAY","_renderCompCount","ɵɵdefineComponent","componentDefinition","typePrototype","declaredInputs","providersResolver","decls","vars","consts","ngContentSelectors","hostBindings","hostVars","hostAttrs","contentQueries","inputs","outputs","exportAs","onChanges","onInit","ngOnInit","doCheck","ngDoCheck","afterContentInit","ngAfterContentInit","afterContentChecked","ngAfterContentChecked","afterViewInit","ngAfterViewInit","afterViewChecked","ngAfterViewChecked","onDestroy","ngOnDestroy","onPush","changeDetection","directiveDefs","pipeDefs","selectors","viewQuery","features","encapsulation","setInput","schemas","tView","directiveTypes","feature","pipeTypes","invertObject","extractDirectiveDef","extractPipeDef","getComponentDef","autoRegisterModuleById","ɵɵdefineNgModule","bootstrap","declarations","transitiveCompileScopes","secondary","newLookup","minifiedKey","publicName","declaredName","ɵɵdefineDirective","ɵɵdefinePipe","pipeDef","pure","getFactoryDef","throwNotFound","getNgModuleDef","ngModuleDef","isLView","isLContainer","isContentQueryHost","tNode","isComponentHost","isDirectiveHost","isComponentDef","isRootView","DOCUMENT","getDocument","isProceduralRenderer","renderer","domRendererFactory3","createRenderer","hostElement","rendererType","unwrapRNode","getNativeByIndex","lView","getNativeByTNode","getTNode","load","getComponentLViewByIndex","nodeIndex","hostView","slotValue","readPatchedLView","isCreationMode","viewAttachedToChangeDetector","getConstant","resetPreOrderHookFlags","instructionState","lFrame","createLFrame","bindingsEnabled","checkNoChangesMode","getBindingsEnabled","getLView","getTView","ɵɵrestoreView","viewToRestore","contextLView","getPreviousOrParentTNode","previousOrParentTNode","setPreviousOrParentTNode","isParent","getIsParent","setIsNotParent","getCheckNoChangesMode","setCheckNoChangesMode","mode","getBindingRoot","bindingRootIndex","bindingStartIndex","getBindingIndex","bindingIndex","nextBindingIndex","incrementBindingIndex","setBindingRootForHostBindings","currentDirectiveIndex","getCurrentQueryIndex","currentQueryIndex","setCurrentQueryIndex","enterDI","newView","newLFrame","allocLFrame","enterView","currentLFrame","childLFrame","selectedIndex","elementDepthCount","currentNamespace","currentSanitizer","leaveViewLight","oldLFrame","leaveDI","leaveView","getSelectedIndex","setSelectedIndex","getSelectedTNode","registerPostOrderHooks","directiveStart","directiveEnd","directiveDef","contentHooks","contentCheckHooks","viewHooks","viewCheckHooks","destroyHooks","executeCheckHooks","hooks","callHooks","executeInitAndCheckHooks","initPhase","incrementInitPhaseFlags","currentView","currentNodeIndex","nodeIndexLimit","lastNodeIndexFound","callHook","isInitHook","hook","directive","NodeInjectorFactory","isViewProvider","injectImplementation","resolving","canSeeViewProviders","injectImpl","setUpAttributes","native","attrs","isProc","namespaceURI","attrName","attrVal","setAttribute","setAttributeNS","isAnimationProp","setProperty","isNameOnlyAttributeMarker","marker","mergeHostAttrs","dst","srcMarker","mergeHostAttribute","key1","key2","markerInsertPosition","dstValue","hasParentInjector","parentLocation","getParentInjectorIndex","getParentInjectorViewOffset","getParentInjectorView","location","startView","viewOffset","parentView","renderStringify","stringifyForError","defaultScheduler","requestAnimationFrame","ɵɵresolveWindow","ɵɵresolveDocument","maybeUnwrapFn","includeViewProviders","setIncludeViewProviders","oldValue","nextNgElementId","getOrCreateNodeInjectorForNode","existingInjectorIndex","getInjectorIndex","firstCreatePass","injectorIndex","insertBloom","blueprint","parentLoc","getParentInjectorLocation","parentIndex","parentLView","parentData","footer","hostTNode","diPublicInInjector","bloomBit","BLOOM_SIZE","mask","b6","b5","tData","getOrCreateInjectable","bloomHash","tokenId","NodeInjector","previousTView","hostTElementNode","Host","shouldSearchParent","bloomHasToken","instance","searchTokensOnInjector","NOT_FOUND","moduleInjector","previousInjectImplementation","currentTView","injectableIdx","locateDirectiveOrProvider","getNodeInjectable","canAccessViewProviders","isHostSpecialCase","nodeProviderIndexes","providerIndexes","tInjectables","injectablesStart","directivesStart","cptViewProvidersCount","endIndex","providerTokenOrDef","dirDef","previousIncludeViewProviders","directiveIndex","preOrderHooks","preOrderCheckHooks","injectorView","isFirstHostTNode","_tNode","_lView","ɵɵgetInheritedFactory","ɵɵgetFactoryOf","typeAny","injectorDef","getDebugContext","getOriginalError","defaultErrorLogger","ErrorHandler","_console","originalError","_findOriginalError","_findContext","errorLogger","SafeValueImpl","changingThisBreaksApplicationSecurity","SafeHtmlImpl","SafeStyleImpl","SafeScriptImpl","SafeUrlImpl","SafeResourceUrlImpl","unwrapSafeValue","allowSanitizationBypassAndThrow","actualType","getSanitizationBypassType","getTypeName","_devMode","_runModeLocked","isDevMode","InertBodyHelper","defaultDoc","inertDocument","implementation","createHTMLDocument","inertBodyElement","inertHtml","appendChild","innerHTML","querySelector","getInertBodyElement","DOMParser","_a","getInertBodyElement_DOMParser","getInertBodyElement_InertDocument","getInertBodyElement_XHR","nextSibling","html","encodeURI","xhr","XMLHttpRequest","responseType","send","response","removeChild","parseFromString","templateEl","inertBody","documentMode","stripCustomNsAttrs","elAttrs","attributes","removeAttribute","childNode","Node","ELEMENT_NODE","SAFE_URL_PATTERN","DATA_URL_PATTERN","_sanitizeUrl","url","tagSet","tags","sets","inertBodyHelper","VOID_ELEMENTS","OPTIONAL_END_TAG_BLOCK_ELEMENTS","OPTIONAL_END_TAG_INLINE_ELEMENTS","OPTIONAL_END_TAG_ELEMENTS","VALID_ELEMENTS","URI_ATTRS","SRCSET_ATTRS","VALID_ATTRS","SKIP_TRAVERSING_CONTENT_IF_INVALID_ELEMENTS","SanitizingHtmlSerializer","sanitizedSomething","buf","nextNode","traverseContent","startElement","TEXT_NODE","firstChild","endElement","checkClobberedElement","tagName","nodeName","srcset","elAttr","encodeEntities","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","outerHTML","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","_sanitizeHtml","unsafeHtmlInput","unsafeHtml","mXSSAttempts","parsedHtml","sanitizer","safeHtml","sanitizeChildren","getTemplateContent","content","SecurityContext","NONE","HTML","STYLE","SCRIPT","URL","RESOURCE_URL","SAFE_STYLE_VALUE","URL_RE","_sanitizeStyle","urlMatch","outsideSingle","outsideDouble","ɵɵsanitizeHtml","getSanitizer","sanitize","ɵɵsanitizeUrl","unsafeUrl","attachPatchData","throwMultipleComponentError","throwMixedMultiProviderError","classIndexOf","className","classToSearch","startingIndex","foundIndex","isCssClassMatching","cssClassToMatch","isProjectionMode","hasTagAndTypeMatch","currentSelector","isNodeMatchingSelector","nodeAttrs","nameOnlyMarkerIdx","skipToNextSelector","isPositive","selectorAttrValue","attrIndexInNode","findAttrIndexInNode","nodeAttrValue","compareAgainstClassName","isInlineTemplate","bindingsMode","maybeAttrName","isNodeMatchingSelectorList","isSelectorInSelectorList","selectorListLoop","currentSelectorInList","maybeWrapInNotSelector","isNegativeMode","stringifyCSSSelector","currentChunk","valueOrMarker","attrValue","NO_CHANGE","getLViewParent","ɵɵadvance","delta","selectIndexInternal","toTStylingRange","getTStylingRangePrev","tStylingRange","setTStylingRangePrevDuplicate","getTStylingRangeNext","setTStylingRangeNext","setTStylingRangeNextDuplicate","refreshContentQueries","queryStartIdx","directiveDefIdx","elementCreate","namespace","createElementNS","createLView","host","tHostNode","rendererFactory","getOrCreateTNode","adjustedIndex","createTNode","renderView","executeViewQueryFn","templateFn","executeTemplate","staticContentQueries","staticViewQueries","components","hostLView","renderComponent","refreshView","hooksInitPhaseCompleted","viewOrContainer","activeIndexFlag","embeddedLView","embeddedTView","refreshTransplantedViews","expandoInstructions","expandoStartIndex","instruction","refreshComponent","firstUpdatePass","renderComponentOrTemplate","normalExecutionPath","creationModeIsActive","begin","rf","prevSelectedIndex","executeContentQueries","createDirectivesInstances","initialInputs","isComponent","addComponentLogic","setInputsFromAttrs","expando","elementIndex","invokeHostBindingsInCreationMode","saveResolvedLocalsInData","viewData","localRefExtractor","localNames","localIndex","getOrCreateTComponentView","createTView","viewIndex","directives","pipes","initialViewLength","queries","cleanup","directiveRegistry","pipeRegistry","tParent","directiveStylingLast","propertyBindings","mergedAttrs","tViews","projectionNext","projection","residualStyles","classes","residualClasses","classBindings","styleBindings","generatePropertyAliases","inputAliasMap","propStore","internalName","elementPropertyInternal","nativeOnly","dataValue","setInputsForProperty","childComponentLView","resolveDirectives","localRefs","hasDirectives","registry","markAsComponentHost","unshift","exportsMap","totalDirectiveHostVars","initTNodeFlags","generateExpandoInstructionBlock","preOrderHooksFound","preOrderCheckHooksFound","baseResolveDirective","saveNameToExportMap","addHostBindingsToExpandoInstructions","defs","tNodeAttrs","inputsFromAttrs","inputsStore","outputsStore","directiveInputs","generateInitialInputs","growHostVarsSpace","directiveCount","providerCount","numberOfDirectives","directiveFactory","nodeInjectorFactory","componentView","addToViewTree","elementAttributeInternal","strValue","initialInputData","privateName","inputsToStore","createLContainer","hostNative","lContainer","declaredComponentLView","movedViews","movedLView","insertedComponentLView","movedTView","componentHostIdx","componentTView","lViewOrLContainer","markViewDirty","detectChangesInternal","handleError","detectChangesInRootView","rootContext","rootComponent","viewQueryFn","component","CLEAN_PROMISE","getLCleanup","getTViewCleanup","errorHandler","textBindingInternal","setValue","textContent","getLContainer","embeddedView","container","getContainerRenderParent","tViewNode","nativeParentNode","applyToElementOrContainer","lNodeToHandle","beforeNode","rNode","nativeAppendChild","nativeInsertBefore","isHostElement","nativeParent","renderParent","anchor","applyView","addRemoveViewFromContainer","insertMode","detachMovedView","declarationContainer","declaredViewIndex","detachView","removeIndex","indexInContainer","viewToDetach","declarationLContainer","removedLView","lQueries","destroyLView","destroyNode","rootView","cleanUpView","firstView","getParentState","tCleanup","lCleanup","idxOrTargetGetter","listener","useCaptureOrSubIdx","getRenderParent","parentTNode","insertBefore","nativeAppendOrInsertBefore","getNativeAnchorNode","getBeforeNodeForView","childEl","childTNode","anchorNode","viewIndexInContainer","nextViewIndex","firstTNodeOfView","getFirstNativeNode","tNodeType","elIcuContainerChild","rNodeOrLContainer","componentHost","firstProjectedTNode","applyNodes","isProjection","rawSlotValue","applyProjectionRecursive","tProjectionNode","componentLView","nodeToProjectOrRNodes","writeDirectStyle","cssText","writeDirectClass","R3ElementRef","R3TemplateRef","R3ViewContainerRef","ViewRef","_cdRefInjectingView","_appRef","_viewContainerRef","_tViewNode","appRef","collectNativeNodes","lNode","lViewInAContainer","lViewFirstChildTNode","firstProjectedNode","detach","cleanupFn","vcRef","RootViewRef","_view","createElementRef","ElementRefToken","createTemplateRef","TemplateRefToken","_declarationView","_declarationTContainer","elementRef","declarationViewLQueries","createEmbeddedView","viewRef","createContainerRef","ViewContainerRefToken","_lContainer","_hostTNode","_hostView","startTNode","templateRef","insert","componentFactory","projectableNodes","ngModuleRef","contextInjector","parentInjector","ngModule","componentRef","destroyed","allocateContainerIfNeeded","prevIdx","prevLContainer","prevVCRef","adjustedIdx","_adjustIndex","containerLength","insertView","attachToViewContainerRef","newIndex","viewRefsArr","detachedView","commentNode","createComment","ChangeDetectorRef","SWITCH_CHANGE_DETECTOR_REF_FACTORY","isPipe","INJECTOR_SCOPE","NOT_YET","CIRCULAR","EMPTY_ARRAY$2","NULL_INJECTOR","getNullInjector","createInjectorWithoutInjectorInstances","defType","additionalProviders","R3Injector","records","injectorDefTypes","_destroyed","dedupStack","provider","processProvider","processInjectorType","makeRecord","record","scope","assertNotDestroyed","service","previousInjector","injectableDefInScope","injectableDefOrInjectorDefFactory","hydrate","injectorErrorName","tokenPath","text","tokens","defOrWrappedDef","parents","isDuplicate","importTypesWithProviders","imported","defProviders","injectorType","ngModuleType","isTypeProvider","isValueProvider","providerToFactory","multi","multiRecord","paramLength","inheritedInjectableDef","typeName","unwrappedProvider","useFactory","deps","useExisting","classRef","useClass","ngModuleDetail","INJECTOR_IMPL","_resolveInjectorDefTypes","Injector","NULL","ANALYZE_FOR_ENTRY_COMPONENTS","componentResourceResolutionQueue","componentDefPendingResolution","unwrapResponse","computeStaticStyling","_symbolIterator","looseIdentical","WrappedValue","isWrapped","isListLikeIterable$1","isJsObject$1","updateBinding","getBinding","bindingUpdated","is","bindingUpdated2","exp1","exp2","different","bindingUpdated3","exp3","bindingUpdated4","exp4","ɵɵattribute","interpolation1","v0","suffix","interpolation2","i0","v1","interpolation3","i1","v2","ɵɵtemplate","attrsIndex","localRefsIndex","tViewConsts","embeddedTViewNode","ɵɵreference","ɵɵdirectiveInject","ɵɵinjectAttribute","attrNameToInject","attrsLength","ɵɵinvalidFactory","ɵɵproperty","setDirectiveInputsWhichShadowsStyling","isClassBased","ɵɵelementStart","elementStart","ɵɵelementEnd","elementEnd","ɵɵelement","ɵɵelementContainerStart","ɵɵelementContainerEnd","ɵɵelementContainer","ɵɵgetCurrentView","isObservable","ɵɵlistener","eventName","listenerFn","eventTargetResolver","useCapture","isTNodeDirectiveHost","processOutputs","resolved","lCleanupIndex","existingListener","tNodeIdx","cleanupEventName","listenerIdxInLCleanup","__ngLastListenerFn__","__ngNextListenerFn__","wrapListener","listen","executeListenerWithErrorHandling","wrapWithPreventDefault","wrapListenerIn_markDirtyAndPreventDefault","nextListenerFn","returnValue","ɵɵnextContext","level","nestingLevel","matchingProjectionSlotIndex","projectionSlots","wildcardNgContentIndex","ngProjectAsAttrVal","ngProjectAsAttrIdx","ɵɵprojectionDef","componentNode","projectionHeads","tails","componentChild","slotIndex","ɵɵprojection","selectorIndex","ɵɵpropertyInterpolate","ɵɵpropertyInterpolate1","interpolatedValue","ɵɵpropertyInterpolate2","ɵɵpropertyInterpolate3","EMPTY_ARRAY$3","markDuplicates","tStylingKey","isPrevDir","isClassBinding","tStylingAtIndex","cursor","foundDuplicate","tStyleRangeAtCursor","isStylingMatch","tStylingKeyCursor","parserState","textEnd","keyEnd","valueEnd","getLastParsedKey","getLastParsedValue","parseClassNameNext","startIndex","consumeWhitespace","parseStyleNext","ch","consumeSeparator","ch1","ch2","ch3","lastChIndex","consumeQuotedText","resetParserState","quoteCharCode","ɵɵstyleProp","checkStylingProperty","ɵɵclassProp","ɵɵstyleMap","checkStylingMap","styleKeyValueArraySet","styleStringParser","ɵɵclassMap","classStringParser","suffixOrSanitizer","styleSanitizer","stylingFirstUpdatePass","updateStyling","stringParser","hasStylingInputShadow","isInHostBindings","staticPrefix","oldKeyValueArray","newKeyValueArray","oldIndex","oldKey","newKey","setKey","styleKeyValueArray","unwrappedValue","isHostBindings","stylingKey","hostDirectiveDef","residual","collectStylingFromTAttrs","collectStylingFromDirectives","templateStylingKey","bindings","tStylingKeyWithStatic","isHostBinding","tBindings","tmplHead","tmplTail","isKeyDuplicateOfStatic","staticKeyValueArray","previousNode","currentDirective","desiredMarker","currentMarker","unsafeStyle","tRange","isStylingValuePresent","findStylingValue","isProcedural","addClass","classList","removeClass","removeStyle","removeProperty","setStyle","isPrevDirection","rawKey","containsStatics","isStylingMap","valueAtLViewIndex","currentValue","ɵɵtext","textNative","createText","createTextNode","ɵɵtextInterpolate","ɵɵtextInterpolate1","interpolated","ɵɵtextInterpolate2","ɵɵtextInterpolate3","ɵɵtextInterpolate5","i2","v3","i3","v4","ɵɵstyleMapInterpolate1","ɵɵhostProperty","LifecycleHooksFeature","rootTView","dirIndex","ɵɵInheritDefinitionFeature","definition","superType","shouldInheritFields","inheritanceChain","superDef","writeableDef","maybeUnwrapEmpty","superHostBindings","inheritHostBindings","superViewQuery","superContentQueries","inheritViewQuery","inheritContentQueries","animation","defData","ngInherit","prevViewQuery","prevContentQueries","prevHostBindings","SimpleChange","previousValue","firstChange","ɵɵNgOnChangesFeature","ngOnChanges","ngOnChangesSetInput","simpleChangesStore","getSimpleChangesStore","previousChange","resolveProvider$1","lInjectablesBlueprint","providerFactory","beginIndex","existingFactoryIndex","registerDestroyHooksIfSupported","existingProvidersFactoryIndex","existingViewProvidersFactoryIndex","doesProvidersFactoryExist","doesViewProvidersFactoryExist","factoryFn","componentProviders","multiFactoryAdd","multiViewProvidersFactoryResolver","multiProvidersFactoryResolver","contextIndex","multiFactory","isComponentProvider","lData","multiResolve","factories","componentCount","multiProviders","ɵɵProvidersFeature","viewProviders","processProvidersFn","ComponentFactory","_NullComponentFactoryResolver","ComponentFactoryResolver","ElementRef","nativeElement","SWITCH_ELEMENT_REF_FACTORY","RendererFactory2","RendererStyleFlags2","Important","DashCase","Renderer2","SWITCH_RENDERER2_FACTORY","nodeAtIndex","Sanitizer","full","major","minor","patch","DefaultIterableDifferFactory","trackByFn","DefaultIterableDiffer","trackByIdentity","_linkedRecords","_unlinkedRecords","_previousItHead","_itHead","_itTail","_additionsHead","_additionsTail","_movesHead","_movesTail","_removalsHead","_removalsTail","_identityChangesHead","_identityChangesTail","_trackByFn","nextIt","nextRemove","addRemoveOffset","moveOffsets","getPreviousIndex","adjPreviousIndex","currentIndex","_nextRemoved","previousIndex","localMovePreviousIndex","localCurrentIndex","_nextPrevious","_nextAdded","_nextMoved","_nextIdentityChange","check","_reset","itemTrackBy","mayBeDirty","trackById","_verifyReinsertion","_addIdentityChange","_mismatch","_truncate","isDirty","nextRecord","previousRecord","_prev","_remove","_moveAfter","_reinsertAfter","_addAfter","IterableChangeRecord_","reinsertRecord","_addToMoves","_addToRemovals","_unlink","prevRecord","_prevRemoved","_insertAfter","_DuplicateMap","put","toIndex","_prevDup","_nextDup","_DuplicateItemRecordList","_head","_tail","atOrAfterIndex","duplicates","recordList","moveOffset","DefaultKeyValueDifferFactory","DefaultKeyValueDiffer","_records","_mapHead","_appendAfter","_previousMapHead","_changesHead","_changesTail","_nextChanged","_forEach","_maybeAddToChanges","_getOrCreateRecordForKey","_insertBeforeOrAppend","KeyValueChangeRecord_","_addToAdditions","_addToChanges","IterableDiffers","copied","KeyValueDiffers","kv","keyValDiff","defaultIterableDiffers","defaultKeyValueDiffers","TemplateRef","SWITCH_TEMPLATE_REF_FACTORY","ViewContainerRef","SWITCH_VIEW_CONTAINER_REF_FACTORY","NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR","ComponentFactoryResolver$1","componentDef","ComponentFactory$1","toRefArray","nonMinified","templateName","SCHEDULER","componentType","isBoundToModule","rootSelectorOrNode","tElementNode","rootViewInjector","hostRenderer","elementName","hostRNode","elementOrSelector","selectRootElement","rElement","rootFlags","isIsolated","clean","playerHandler","rootLView","viewRenderer","nodesforSlot","hostFeatures","rootTNode","ComponentRef$1","_rootLView","destroyCbs","changeDetectorRef","u","localeEn","LOCALE_DATA","findLocaleData","locale","normalizedLocale","getLocaleData","parentLocale","ng","common","locales","LocaleDataIndex","LocaleId","DayPeriodsFormat","DayPeriodsStandalone","DaysFormat","DaysStandalone","MonthsFormat","MonthsStandalone","Eras","FirstDayOfWeek","WeekendRange","DateFormat","TimeFormat","DateTimeFormat","NumberSymbols","NumberFormats","CurrencyCode","CurrencySymbol","CurrencyName","Currencies","PluralCase","ExtraData","BINDING_REGEXP","ICU_REGEXP","generateBindingUpdateOpCodes","destinationNode","sanitizeFn","updateOpCodes","textParts","textValue","toMaskBit","ɵɵi18nAttributes","previousElementIndex","setLocaleId","localeId","actual","expected","comparison","modules","NgModuleRef$1","_parent","_bootstrapComponents","componentFactoryResolver","ngLocaleIdDef","_r3Injector","injectFlags","NgModuleFactory$1","moduleType","registerNgModuleType","incoming","ɵɵpureFunction0","slotOffset","pureFn","ɵɵpureFunction1","exp","pureFunction1Internal","ɵɵpureFunction2","pureFunction2Internal","ɵɵpureFunction3","pureFunction3Internal","ɵɵpureFunction4","bindingRoot","getPureFunctionReturnValue","ɵɵpureFunction6","exp5","exp6","ɵɵpureFunction7","exp7","returnValueIndex","lastReturnValue","ɵɵpipe","pipeName","pipeFactory","pipeInstance","ɵɵpipeBind1","unwrapValue$1","isPure","ɵɵpipeBind2","ɵɵpipeBind3","unwrap","isAsync","__isAsync","generatorOrNext","schedulerFn","errorFn","completeFn","symbolIterator","QueryList","dirty","_results","changes","resultsTree","LQuery_","queryList","setDirty","LQueries_","tQueries","noOfInheritedQueries","viewLQueries","tQuery","getByIndex","indexInDeclarationView","dirtyQueriesWithMatches","getTQuery","TQueryMetadata_","descendants","isStatic","read","TQueries_","tquery","queriesForTemplateRef","childQueryIndex","tqueryClone","TQuery_","metadata","crossesNgTemplate","_appliesToNextNode","_declarationNodeIndex","matchIdx","isApplyingToNode","matchTNode","addMatch","declarationNodeIdx","matchTNodeWithReadOption","getIdxOfMatchingSelector","typePredicate","nodeMatchIdx","directiveOrProviderIdx","createResultForNode","matchingIdx","materializeViewResults","queryIndex","lQuery","tViewData","tQueryMatches","matchedNodeIdx","ɵɵqueryRefresh","collectQueryResults","lViewResults","embeddedLViews","notifyOnChanges","ɵɵstaticViewQuery","descend","viewQueryInternal","ɵɵviewQuery","createTQuery","createLQuery","ɵɵcontentQuery","contentQueryInternal","ɵɵstaticContentQuery","tViewContentQueries","ɵɵloadQuery","track","ɵɵtemplateRefExtractor","APP_INITIALIZER","ApplicationInitStatus","appInits","initialized","donePromise","rej","asyncInitPromises","initResult","APP_ID","APP_ID_RANDOM_PROVIDER","_randomChar","PLATFORM_INITIALIZER","PLATFORM_ID","APP_BOOTSTRAP_LISTENER","Console","LOCALE_ID$1","DEFAULT_CURRENCY_CODE","ModuleWithComponentFactories","ngModuleFactory","componentFactories","Compiler_compileModuleSync__POST_R3__","Compiler_compileModuleSync","Compiler_compileModuleAsync","Compiler_compileModuleAndAllComponentsSync__POST_R3__","declaration","Compiler_compileModuleAndAllComponentsSync","Compiler_compileModuleAndAllComponentsAsync","Compiler","compileModuleSync","compileModuleAsync","compileModuleAndAllComponentsSync","compileModuleAndAllComponentsAsync","COMPILER_OPTIONS","scheduleMicroTask","Zone","NgZone","zone","maybeDelayChangeDetection","enableLongStackTrace","shouldCoalesceEventChangeDetection","hasPendingMacrotasks","hasPendingMicrotasks","isStable","onUnstable","onMicrotaskEmpty","onStable","onError","assertZonePatched","_nesting","_outer","_inner","fork","lastRequestAnimationFrameId","nativeRequestAnimationFrame","nativeCancelAnimationFrame","unpatchedRequestAnimationFrame","__symbol__","unpatchedCancelAnimationFrame","updateMicroTaskStatus","checkStable","onInvokeTask","delegate","task","applyThis","applyArgs","onEnter","invokeTask","onLeave","onInvoke","onHasTask","hasTaskState","hasTask","change","_hasPendingMicrotasks","microTask","macroTask","onHandleError","runOutsideAngular","run","scheduleEventTask","EMPTY_PAYLOAD","noop$1","runTask","cancelTask","runGuarded","isInAngularZone","_platform","NoopNgZone","Testability","_ngZone","_pendingCount","_isZoneStable","_didWork","_callbacks","taskTrackingZone","_watchAngularEvents","assertNotInAngularZone","_runCallbacksIfReady","cb","timeoutId","doneCb","pending","getPendingTasks","updateCb","macroTasks","creationLocation","addCallback","using","exactMatch","TestabilityRegistry","_applications","_testabilityGetter","addToWindow","findInAncestors","testability","elem","findTestabilityInTree","_NoopGetTestability","compileNgModuleFactory","moduleFactory","compilerProviders","part","compiler","globalNg","ɵcompilerFacade","resourceLoader","ResourceLoader","resourceResolver","componentResolved","urlMap","cachedResourceResolve","resp","promises","templateUrl","styleUrls","styleOffset","styleUrl","fullyResolved","ALLOW_MULTIPLE_PLATFORMS","NgProbeToken","createPlatformFactory","parentPlatformFactory","extraProviders","getPlatform","injectedProviders","PlatformRef","inits","requiredToken","_injector","_modules","_destroyListeners","ngZoneOption","ngZoneEventCoalescing","ngZone","ngZoneInjector","moduleRef","exceptionHandler","initStatus","runInitializers","_moduleDoBootstrap","compilerOptions","optionsReducer","bootstrapModuleFactory","ngDoBootstrap","objs","ApplicationRef","_zone","_exceptionHandler","_componentFactoryResolver","_initStatus","_bootstrapListeners","_views","_runningTick","_enforceNoNewChanges","_stable","componentTypes","tick","isCurrentlyStable","stableSub","unstableSub","assertInAngularZone","componentOrFactory","resolveComponentFactory","compRef","_unloadComponent","registerApplication","_loadComponent","detectChanges","checkNoChanges","attachToAppRef","detachFromAppRef","attachView","NgModuleFactoryLoader","SystemJsNgModuleLoaderConfig","DEFAULT_CONFIG","factoryPathPrefix","factoryPathSuffix","SystemJsNgModuleLoader","_compiler","config","_config","loadAndCompile","checkNotEmpty","factoryClassSuffix","modulePath","platformCore","APPLICATION_MODULE_PROVIDERS","queue","$localize","ApplicationModule","environment","_DOM","getDOM","PlatformLocation","useBrowserPlatformLocation","BrowserPlatformLocation","LOCATION_INITIALIZED","_doc","_init","getLocation","_history","getHistory","getBaseHref","getGlobalEventTarget","href","protocol","hostname","port","pathname","newPath","title","supportsState","pushState","replaceState","forward","back","createBrowserPlatformLocation","history","joinWithSlash","slashes","stripTrailingSlash","pathEndIdx","normalizeQueryParams","params","LocationStrategy","provideLocationStrategy","platformLocation","Location","HashLocationStrategy","PathLocationStrategy","APP_BASE_HREF","_platformLocation","getBaseHrefFromDOM","_baseHref","onPopState","onHashChange","internal","includeHash","queryParams","externalUrl","prepareExternalUrl","platformStrategy","_urlChangeListeners","_platformStrategy","browserBaseHref","_stripIndexHtml","onReturn","getState","query","baseHref","_notifyUrlChangeListeners","onNext","onThrow","createLocation","NumberFormatStyle","Decimal","Percent","Currency","Scientific","Plural","Zero","One","Two","Few","Many","Other","FormStyle","Format","Standalone","TranslationWidth","Narrow","Abbreviated","Wide","Short","FormatWidth","Medium","Long","Full","NumberSymbol","Group","List","PercentSign","PlusSign","MinusSign","Exponential","SuperscriptingExponent","PerMille","NaN","TimeSeparator","CurrencyDecimal","CurrencyGroup","getLocaleDateFormat","getLastDefinedValue","getLocaleTimeFormat","getLocaleDateTimeFormat","getLocaleNumberSymbol","getLocaleNumberFormat","checkFullData","extractTime","hours","minutes","ISO8601_DATE_REGEX","NAMED_FORMATS","DATE_FORMATS_SPLIT","ZoneWidth","ShortGMT","Extended","DateType","FullYear","Month","Hours","Minutes","Seconds","FractionalSeconds","Day","TranslationType","DayPeriods","Days","Months","formatDate","timezone","date","parsedNb","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","h","ms","getNamedFormat","shortTime","shortDate","formatDateTime","mediumTime","mediumDate","longTime","longDate","fullTime","fullDate","dateTimezoneOffset","getTimezoneOffset","timezoneToOffset","getTime","setMinutes","dateFormatter","DATE_FORMATS","formatter","dateStrGetter","dateGetter","weekGetter","timeZoneGetter","opt_values","padNumber","num","digits","negWrap","minusSign","neg","strNum","getFullYear","getMilliseconds","getDay","localeMinus","form","extended","formStyle","days","currentHours","currentMinutes","rules","rule","dayPeriods","hoursFrom","minutesFrom","hoursTo","minutesTo","amPm","monthBased","year","firstDayOfYear","datetime","nbDaysBefore1stDayOfMonth","today","firstThurs","THURSDAY","diff","fallback","requestedTimezoneOffset","NUMBER_FORMAT_REGEXP","formatNumberToLocaleString","groupSymbol","decimalSymbol","digitsInfo","isPercent","formattedText","isZero","parsedNumber","integerLen","zeros","numStr","exponent","MAX_DIGITS","fractionLen","minInt","minFraction","minFrac","maxFraction","maxFrac","minIntPart","minFractionPart","maxFractionPart","parseIntAutoRadix","fractionSize","roundAt","digit","dropTrailingZeros","minLen","carry","decimals","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","parseNumberFormat","patternParts","positive","negative","positiveParts","integer","fraction","trunkLen","pos","NgLocaleLocalization","NgLocalization","parseCookieValue","cookieStr","encodeURIComponent","cookie","eqIndex","cookieName","cookieValue","decodeURIComponent","NgClass","NgForOf","NgIf","_iterableDiffers","_keyValueDiffers","_ngEl","_renderer","_iterableDiffer","_keyValueDiffer","_initialClasses","_rawClass","klass","_removeClasses","_applyClasses","iterableChanges","_applyIterableChanges","keyValueChanges","_applyKeyValueChanges","forEachAddedItem","_toggleClass","forEachChangedItem","forEachRemovedItem","rawClassVal","enabled","ngClass","NgForOfContext","$implicit","ngForOf","even","_viewContainer","_template","_differs","_ngForOf","_ngForOfDirty","_differ","ngForTrackBy","_applyChanges","insertTuples","forEachOperation","adjustedPreviousIndex","tuple","RecordViewTuple","move","_perViewChange","ilen","forEachIdentityChange","ngForTemplate","NgIfContext","_thenTemplateRef","_elseTemplateRef","_thenViewRef","_elseViewRef","condition","ngIf","_updateView","assertTemplate","ngIfThen","ngIfElse","NgTemplateOutlet","NgStyle","NgSwitchDefault","NgSwitchCase","NgSwitch","SwitchView","_templateRef","_created","created","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","useDefault","_ngSwitch","_updateDefaultCases","_defaultViews","matched","enforceState","ngSwitch","viewContainer","_addCase","ngSwitchCase","_matchCase","_addDefault","_ngStyle","nameAndUnit","unit","_setStyle","ngStyle","_viewRef","ngTemplateOutletContext","ngTemplateOutlet","_shouldRecreateView","viewContainerRef","_updateExistingContext","ctxChange","_hasContextShapeChanged","prevCtxKeys","currCtxKeys","invalidPipeArgumentError","PercentPipe","DecimalPipe","DatePipe","_locale","strToNumber","CommonModule","isPlatformBrowser","platformId","ViewportScroller","urlParsingNode","EventManager","DomSharedStylesHost","SharedStylesHost","BrowserViewportScroller","supportScrollRestoration","scrollX","scrollY","scrollTo","elSelectedById","scrollToElement","elSelectedByName","scrollRestoration","rect","getBoundingClientRect","pageXOffset","top","pageYOffset","groupEnd","evt","getDefaultDocument","DocumentFragment","baseElement","getAttribute","performance","adapter","TRANSITION_ID","SERVER_TRANSITION_PROVIDERS","transitionId","dom","querySelectorAll","getAllTestabilities","getAllRootElements","testabilities","didWork","decrement","didWork_","whenStable","getTestability","isShadowRoot","parentElement","getter","EVENT_MANAGER_PLUGINS","plugins","_eventNameToPlugin","_plugins","_findPluginFor","addGlobalEventListener","plugin","_stylesSet","additions","onStylesAdded","_hostNodes","_styleNodes","styleNode","styleEl","hostNode","_addStylesToHost","NAMESPACE_URIS","COMPONENT_REGEX","flattenStyles","compId","decoratePreventDefault","eventHandler","DomRendererFactory2","DomEventsPlugin","DomSanitizerImpl","DomSanitizer","KeyEventsPlugin","BrowserModule","eventManager","sharedStylesHost","appId","rendererByCompId","defaultRenderer","EmulatedEncapsulationDomRenderer2","applyToHost","addStyles","newChild","refChild","oldChild","selectorOrNode","preserveContent","namespaceUri","removeAttributeNS","nodeValue","componentShortId","contentAttr","hostAttr","hostEl","shadowRoot","attachShadow","createShadowRoot","addHost","removeHost","nodeOrShadowRoot","MODIFIER_KEYS","_keyMap","_chromeNumKeyPadMap","MODIFIER_KEY_GETTERS","altKey","ctrlKey","metaKey","shiftKey","keyName","parseEventName","parsedEvent","outsideHandler","eventCallback","getZone","onAndCancel","domEventName","_normalizeKey","fullKey","modifierName","keyIdentifier","getEventFullKey","platformBrowser","makeCurrent","BROWSER_MODULE_PROVIDERS","parentModule","of","FilterOperator","HttpHandler","HttpBackend","HttpHeaders","headers","normalizedNames","lazyUpdate","lazyInit","maybeSetNormalizedName","op","lcName","copyFrom","applyUpdate","toDelete","HttpUrlEncodingCodec","standardEncoding","HttpParams","rawParams","codec","updates","cloneFrom","encoder","fromString","fromObject","param","eqIdx","decodeKey","decodeValue","eKey","encodeKey","encodeValue","isBlob","Blob","isFormData","FormData","HttpRequest","third","fourth","reportProgress","withCredentials","urlWithParams","qIdx","setHeaders","setParams","HttpEventType","Sent","UploadProgress","ResponseHeader","DownloadProgress","Response","User","HttpResponseBase","defaultStatus","defaultStatusText","status","statusText","ok","HttpHeaderResponse","HttpResponse","HttpErrorResponse","addBody","observe","HttpClient","NoopInterceptor","HttpXhrBackend","BrowserXhr","HttpClientModule","HttpClientXsrfModule","HttpInterceptingHandler","HttpXsrfInterceptor","HttpXsrfCookieExtractor","req","events$","handle","res$","request","callbackParam","append","HttpInterceptorHandler","intercept","HTTP_INTERCEPTORS","XSSI_PREFIX","XhrFactory","xhrFactory","abort","build","setRequestHeader","detectedType","detectContentTypeHeader","reqBody","serializeBody","headerResponse","partialFromXhr","getAllResponseHeaders","responseURL","getResponseHeader","onLoad","responseText","originalBody","sentHeaders","onDownProgress","progressEvent","loaded","lengthComputable","total","partialText","onUpProgress","progress","upload","XSRF_COOKIE_NAME","XSRF_HEADER_NAME","HttpXsrfTokenExtractor","lastCookieString","lastToken","parseCount","cookieString","tokenService","headerName","lcUrl","getToken","backend","interceptors","withOptions","ComponentLookupRegistry","extendStatics","setPrototypeOf","__proto__","__extends","__","__assign","__decorate","decorators","Reflect","decorate","__awaiter","_arguments","P","generator","fulfilled","rejected","__generator","g","label","sent","trys","ops","verb","DashboardMetricParams","DashboardMetricParamOrders","SGMMetricParams","AMBParams","ApiMapping","params_to_include","apiOverride","metric_id","months3","FilterChoicesService","AuthenticationService","RefreshHandlerService","ParamLogicService","SelectedManagerService","NavbarBuilderService","PreferenceSelectionService","PersonaService","SelectedTabService","DetailChoicesService","PersonaTypes","CuaManager","TSS","GEO","Customer","CtCustomer","CtAccount","ProductLine","SN","ManagerAmb","CuaAmb","CuaAmbManager","AccountRep","AbbottIdAmb","Amb","ManagerOverview","ManagersSpecifcAmb","Account","ParamSource","ParamMapping","appid","DefaultParams","sourceKey","apiParamName","appversion","loggedinuserisambmanager","AuthUserInfo","loggedinuserisambmanager_false","issuperuser","issuperuser_false","isSuperUser_false","issuperuser_true","abbottid","Persona","abbottid_amb","abbottid_chandsn","abbottid_auth","managerid","manageridHack","ParamLogic","managerid_amb","managerid_chandsn","managerid_auth","managerid_empty","orgname","orgname_empty","sgm_orgname","customersearch","FilterChoices","accountsearch","cuacustomersearch","cua_search_record_limit","productlinesearch","search_persona_menu_customerid","default","search_persona_menu_productlineid","customerid","customerid_all","customerdetail_id","ApiCallInstance","servicecontract_entitlementid","ordernumber","productlineid","productlineid_all","sn","isAMB","isAMBfalse","flagshipfalse","flagship","istrackfalse","openstar","openstartrue","istrack","metricid","months12","months6","culture","primary","Preferences","tertiary","isreagent","isfieldservicecontract","isother","isservice","iscapital","accountid","accountid_all","diseasestateid","assaysid","ln","detail_ln","band","isamb","abbottid_amb_filters","managerid_amb_filters","metricid_call","detail_customerid","detail_customerid_accountid","detail_productlineid","detail_accountid","DetailChoices","detail_assayid","detail_diseasestate","detail_iscapital","detail_isservice","detail_isreagent","detail_isfieldservicecontract","detail_isother","predictive_detail_sn","predictive_detail_customerid","predictive_detail_orgname","product_set_number","ct_persona_type","ct_persona_value","cua_persona_type","cua_persona_value","cua_uniqueCustomerKey","cua_primary","cua_secondary","cua_tertiary","cua_product_family_set","ct_customer_id","ct_primary","ct_secondary","ct_tertiary","startingrow","alerttype","isloadall","subscribe_endpoint","subscribe_expirationTime","subscribe_auth","subscribe_p256dh","requestTime","customerIdHack","br_tests","br_testo","br_testc","br_periods_to_show","BrParams","br_months","br_cust_bs","br_sg","br_org","br_location","br_locallevel","br_uck","br_pl","br_acct_cust_search","br_template_name","br_template_string","br_template_id","br_presentation_name","trigger_list_user_presentations_update","trigger_list_user_templates_update","force_call_via_unique_param","acct_pres_name","br_presentation_settings","br_presentation_id","br_period","br_show_sql","false","true","emptystring","orgnameAMT","cuasearchrecordlimit","testsearch","testorg","testcountry","keyIndex","apiRefreshCallbacks","apiChangeTriggers","apiRoutesForDebugging","refreshTreeConfig","changeTriggers","route","triggers","trigger","triggerCallbacks","checkIfChangeTriggerApplies","paramMappingKeys","paramMappingKey","changeTriggerKey","http","refreshHandlerService","devuser","isAuthActive","callbacks","callbackRefs","callbackPreReqs","pausedCallbacks","isAuthorized","pingAuth","formData","userInfoTemp","authorizedInfo","isAMBManager","isSuperUser","userInfo","callCallbacks","runPreReqsFor","ref","playCallback","preReq","filterSelections","PersonaLevels","level1Service","apiCalls","mappingKey","level2ServiceCustomers","level2ServiceInstruments","level1Amb","ToolSelectionOptions","DashboardOptions","displayCallbacks","holdUpdate","callDisplayCallbacks","getKeys","setFilter","callUpdateListenerByKey","keyI","selectedDashboard","auth","detailChoices","selectedTabService","serviceVsAmbState","authAbbottId","authUPI","authName","personaType","persona","personaLabel","customer","customerLabel","customerOverride","account","accountLabel","accountOverride","instrumentPersonaType","instrumentPersona","instrumentPersonaLabel","ambPersonaType","ambPersona","ambPersonaLabel","accountPersona","accountPersonaLabel","lastPersonaSave","lastPersonaAmbSave","onAuth","getUserInfo","upi","firstname","lastname","tmpServiceVsAmbState","setServiceVsAmbState","personatype","setPersonaOption","personaName","ambpersonatype","ambpersona","ambpersonaName","refreshDetailChoices","getLastSelectedTabInfo","controltower","instruments","ambassador","savePersona","savePersonaAmb","triggerPersonaChoiceUpdates","personaCall","personanameCall","personatypeCall","personaSaveKey","pn","pt","sendPut","loginid","personaname","httpHeaders","preferences","arePreferencesLoaded","isVisible","isVisibleSubject","navbarChoiceSubject","navFilterSelectionSubject","navbarChoice","navFilterSelection","tickNavFilterSelectionSubject","managerUpi","manager511","managerName","authService","personaService","preferenceSelectionService","navbarBuilderService","selectedManagerService","authUserInfo","lastSelectedTab","getNavbarChoice","getFilter","level2PersonaChoice","getLevel2Choice","customerSet","dashboard","getPersonaOption","getLevel1Choice","customerId","getManagerUpi","getPreference","isAuth","md5","RotateLeft","lValue","iShiftBits","AddUnsigned","lX","lY","lX4","lY4","lX8","lY8","lResult","FF","ac","GG","HH","II","WordToHex","lCount","WordToHexValue","WordToHexValue_temp","AA","BB","CC","DD","lWordCount","lMessageLength","lNumberOfWords_temp1","lNumberOfWords","lWordArray","lBytePosition","lByteCount","utftext","_value","getValue","EmptyError","EmptyErrorImpl","outerValue","outerIndex","innerIndex","innerSub","subscribeToResult","outerSubscriber","combineLatest","CombineLatestOperator","toRespond","unused","_outerValue","_tryResultSelector","observableFactory","concatAll","ArgumentOutOfRangeError","ArgumentOutOfRangeErrorImpl","takeLast","ring","throwIfEmpty","defaultErrorFactory","errorFactory","ThrowIfEmptyOperator","hasValue","defaultIfEmpty","DefaultIfEmptyOperator","hasDefaultValue","catchError","CatchOperator","caught","err2","_unsubscribeAndRecycle","EveryOperator","everyValueMatch","switchMap","SwitchMapOperator","scan","seed","hasSeed","ScanOperator","_seed","DoOperator","ɵEmptyOutletComponent","_tapNext","_tapError","_tapComplete","FinallyOperator","RouterEvent","NavigationStart","navigationTrigger","restoredState","NavigationEnd","urlAfterRedirects","NavigationCancel","reason","NavigationError","RoutesRecognized","GuardsCheckStart","GuardsCheckEnd","shouldActivate","ResolveStart","ResolveEnd","RouteConfigLoadStart","RouteConfigLoadEnd","ChildActivationStart","snapshot","routeConfig","ChildActivationEnd","ActivationStart","ActivationEnd","Scroll","routerEvent","ParamsAsMap","convertToParamMap","navigationCancelingError","defaultUrlMatcher","segments","segmentGroup","pathMatch","hasChildren","posParams","consumed","LoadedRouterConfig","routes","validateConfig","parentPath","getFullPath","fullPath","loadChildren","outlet","redirectTo","matcher","currentRoute","standardizeConfig","shallowEqual","k1","k2","equalArraysOrString","aItem","wrapIntoObservable","containsTree","containee","exact","equalSegmentGroups","equalPath","numberOfChildren","containsSegmentGroup","containsSegmentGroupHelper","containeePaths","UrlTree","fragment","_queryParamMap","DEFAULT_SERIALIZER","serialize","UrlSegmentGroup","serializePaths","UrlSegment","_parameterMap","serializePath","as","bs","mapChildrenIntoArray","childOutlet","UrlSerializer","DefaultUrlSerializer","UrlParser","parseRootSegment","parseQueryParams","parseFragment","tree","serializeSegment","strParams","encodeUriQuery","encodeUriString","encodeUriSegment","decode","decodeQuery","SEGMENT_RE","matchSegments","QUERY_PARAM_RE","QUERY_PARAM_VALUE_RE","consumeOptional","peekStartsWith","parseChildren","parseQueryParam","parseSegment","capture","parseParens","parseMatrixParams","parseParam","valueMatch","decodedKey","decodedVal","currentVal","allowPrimary","outletName","Tree","_root","pathFromRoot","findNode","findPath","cc","TreeNode","nodeChildrenAsMap","RouterState","setRouterState","createEmptyState","urlTree","activated","ActivatedRouteSnapshot","RouterStateSnapshot","emptyUrl","emptyParams","emptyData","emptyQueryParams","futureSnapshot","_futureSnapshot","_routerState","_paramMap","inheritedParamsDataResolve","paramsInheritanceStrategy","inheritingStartingFrom","curr","_resolvedData","urlSegment","lastPathIndex","_urlSegment","_lastPathIndex","_resolve","serializeNode","advanceActivatedRoute","currentSnapshot","nextSnapshot","equalParamsAndUrlSegments","isMatrixParams","command","outlets","segmentPath","oldSegmentGroup","newSegmentGroup","qp","replaceSegment","oldSegment","newSegment","Navigation","numberOfDoubleDots","commands","cmdWithOutlet","Position","processChildren","getPath","updateSegmentGroup","updateSegmentGroupChildren","currentCommandIndex","currentPathIndex","noMatch","pathIndex","commandIndex","compare","slicedCommands","createNewSegmentGroup","createNewSegmentChildren","ActivateRoutes","routeReuseStrategy","futureState","currState","forwardEvent","parentContexts","futureRoot","currRoot","deactivateChildRoutes","activateChildRoutes","futureNode","currNode","contexts","futureChild","childOutletName","deactivateRoutes","childName","deactivateRouteAndItsChildren","parentContext","future","getContext","shouldDetach","detachAndStoreRouteSubtree","deactivateRouteAndOutlet","onOutletDeactivated","deactivate","activateRoutes","getOrCreateContext","shouldAttach","stored","retrieve","onOutletReAttached","attachRef","attach","advanceActivatedRouteNodeAndItsChildren","_loadedConfig","cmpFactoryResolver","activateWith","isUrlTree","NoMatch","AbsoluteRedirect","absoluteRedirect","newTree","namedOutletsRedirect","configLoader","urlSerializer","allowRedirects","redirectToUrlSegment","expandSegmentGroup","rootSegmentGroup","createUrlTree","noMatchError","rootCandidate","expandChildren","expandSegment","waitHead","waitTail","expandSegmentAgainstRoute","noLeftoversInUrl","getOutlet","matchSegmentAgainstRoute","expandSegmentAgainstRouteUsingRedirect","expandWildCardWithParamsAgainstRouteUsingRedirect","expandRegularSegmentAgainstRouteUsingRedirect","applyRedirectCommands","lineralizeSegments","newSegments","consumedSegments","lastChild","positionalParamSegments","rawSegmentGroup","cfg","rawSlicedSegments","getChildConfig","routerConfig","childModule","childConfig","slicedSegments","isEmptyPathRedirect","mergeTrivialChildren","primarySegmentGroup","canLoad","injectionToken","guardVal","shouldLoad","applyRedirectCreatreUrlTree","newRoot","createSegmentGroup","createQueryParams","redirectToParams","actualParams","sourceName","updatedSegments","createSegments","redirectToSegments","actualSegments","findPosParam","findOrReturn","CanActivate","CanDeactivate","checks","canDeactivateChecks","isActivated","INITIAL_VALUE","prioritizedGuardValue","acc","isPending","innerAcc","fireActivationStart","fireChildActivationStart","runCanActivate","futureRSS","futureARS","canActivate","runCanActivateChild","canActivateChildGuardsMapped","canActivateChild","guards","NoMatch$1","rootComponentType","relativeLinkResolution","split$1","processSegmentGroup","freeze","rootNode","routeState","inheritParamsAndData","routeNode","processSegment","names","routeWithSameOutletName","localeCompare","processSegmentAgainstRoute","rawSegment","getSourceSegmentGroup","getPathIndexShift","getResolve","_sourceSegment","_segmentIndexShift","emptyPathMatch","getOutlet$1","primarySegment","getResolver","switchTap","nextResult","DefaultRouteReuseStrategy","detachedTree","ROUTES","loader","onLoadStartListener","onLoadEndListener","loadModuleFactory","DefaultUrlHandlingStrategy","newUrlPart","wholeUrl","defaultErrorHandler","defaultMalformedUriErrorHandler","defaultRouterHook","runExtras","RouterLinkWithHref","RouterLink","Router","rootContexts","lastSuccessfulNavigation","currentNavigation","navigationId","isNgZoneEnabled","malformedUriErrorHandler","navigated","lastSuccessfulId","beforePreactivation","afterPreactivation","urlHandlingStrategy","onSameUrlNavigation","urlUpdateStrategy","resetConfig","currentUrlTree","rawUrlTree","browserUrlTree","triggerEvent","routerState","transitions","currentRawUrl","extractedUrl","extract","rawUrl","extras","targetSnapshot","currentRouterState","targetRouterState","canActivateChecks","guardsResult","navigations","setupNavigations","processNavigations","eventsSubject","completed","errored","initialUrl","previousNavigation","urlTransition","shouldProcessUrl","transition","serializeUrl","finalUrl","serializer","skipLocationChange","setBrowserUrl","replaceUrl","routesRecognized","navStart","appliedUrlTree","guardsStart","getChildRouteGuards","futurePath","prevChildren","shouldRun","runGuardsAndResolvers","currRSS","currARS","canDeactivate","guardsEnd","resetUrlToCurrentUrlTree","navCancel","resolveStart","resolvedData","resolveEnd","prevState","createNode","shouldReuseRoute","detachedRouteHandle","setFutureSnapshotsOfActivatedRoutes","activate","redirecting","resetStateAndUrl","mergedTree","scheduleNavigation","navError","ee","getTransition","setUpLocationChangeListener","navigateByUrl","locationSubscription","parseUrl","dispose","navigationExtras","relativeTo","preserveQueryParams","queryParamsHandling","preserveFragment","q","removeEmptyProps","nav","cmd","cmdIdx","urlPart","partIndex","toRoot","startingPosition","modifier","ci","dd","priorPromise","lastNavigation","setTransition","isCurrentPathEqualTo","go","storedState","storedUrl","router","tabIndex","preserve","attrBoolValue","onClick","routerLink","locationStrategy","updateTargetUrlAndHref","$event","RouterOutlet","RouterScroller","RouterPreloader","OutletContext","ChildrenOutletContexts","changeDetector","_activatedRoute","activateEvents","deactivateEvents","onChildOutletCreated","onChildOutletDestroyed","cmp","activatedRoute","childContexts","OutletInjector","createComponent","markForCheck","PreloadingStrategy","moduleLoader","preloadingStrategy","preload","processRoutes","preloadConfig","viewportScroller","lastId","lastSource","restoredId","scrollPositionRestoration","anchorScrolling","setHistoryScrollRestoration","routerEventsSubscription","createScrollEvents","scrollEventsSubscription","consumeScrollEvents","getScrollPosition","scheduleScrollEvent","scrollToPosition","scrollToAnchor","ROUTER_CONFIGURATION","ROUTER_FORROOT_GUARD","ROUTER_PROVIDERS","enableTracing","logGroup","logGroupEnd","routerNgProbeToken","RouterModule","provideRoutes","provideForRootGuard","createRouterScroller","getAppInitializer","ROUTER_INITIALIZER","getBootstrapListener","scrollOffset","setOffset","platformLocationStrategy","useHash","RouterInitializer","initNavigation","resultOfPreactivationDone","initialNavigation","isLegacyDisabled","isLegacyEnabled","bootstrappedComponentRef","preloader","routerScroller","setUpPreloading","resetRootComponentType","appInitializer","bootstrapListener","ParameterResolverService","BrParamsService","paramChanged","savedParams","org","locallevel","location_description","uck","product_description","sg","sg_description","cust_bs","cust_bs_description","acct_customer_query","list_user_presentations_update","list_user_templates_update","products_data","location_data","presentedName","presentationId","acct_cust_data","br_history_range_dashboard","br_history_range_detail","detailperiod","br_selected_template_name","br_selected_template_string","br_selected_template_id","dashboardState","dashboardUck","dashboardPresentedName","showSql","uuid","show_sql","brParamsDump","sourceParamKey","newSettings","filterChoices","paramLogic","brParamsService","paramsToInclude","paramKey","isFilterSet","isParamReady","isPreferenceKeyValid","parameter","finalParams","paramValue","getParameter","dispatch","StackRequestService","CachedResponseRepoService","TileComponent","BaseTileComponent","NodatacheckService","DetailQueryParamsService","PresentationSelectService","PresentationToggleHandlerService","BrHistoryRange","PreferenceApiConnectorService","ApiService","activeRequest","stacks","requestUniqueParams","paramsCopy","ruParams","routeY","requestUniqueParamsY","stackKey","RequestState","apiUrl","mockMode","Inactive","stateChangeCallbacks","cancelSubscribeCallsCount","cacheKey","stackRequest","clearActiveRequest","paramKeysToInclude","paramSourceKeyIndex","getSourceKeyForParamKey","callApi","filtersReady","finalRoute","getParametersForRoute","formatKey","isCached","responseData","getResponse","apiData","changeState","Complete","isActiveRequest","getActiveRequest","calcRoute","cancelSubscription","cacheResponse","Loading","cacheActiveRequest","NotCallable","Waiting","requestHandlers","apiService","parameterResolverService","loadComplete","requestHandler","sendRequest","onStateChange","setPreferences","getPreferences","triggerUpdates","onRefreshEvent","getRelativeParams","localcurrency","fahrenheit","celsius","displayorder","ambDisplayOrder","formData2","historyRange","toggleChanged","newState","getPresentationSource","requestHandler2","callApiSource","refreshHandleKey","getUserPresentation","apiSource","apiDataIndex","brHistoryRange","presentationToggleHandlerService","presentationSelectService","buildComplete","returnPathReady","returnUrl","returnParams","d2","completeUrl","getUUID","localStorage","setItem","uuidForReturnPath","getCompleteUrl","currentUrl","returnPathDetails","getItem","returnUrlKey","sessionKey","brParamsData","ckey","period","preferenceApiConnectorService","detailQueryParamsService","nodatacheckService","showTitle","defaultPreferences","tileReference","prefKey","getQueryParams","setupPreferences","setApiCallResponse","cancelRefreshEvent","translateApiDataForChart","rangeData","apiObjectKey","dataexists","atLeastOneValueNotNull","num1","divisibleBy","StateHandlerComponent","noDataCheck","work","recycleAsyncId","requestAsyncId","setInterval","clearInterval","_execute","errorValue","Scheduler","SchedulerAction","scheduled","execute","AuditOperator","durationSelector","clearThrottle","throttled","duration","isNumeric","auditTime","dueTime","periodOrScheduler","due","ARC","BLACK","BOTTOM","CENTER","CIRCLE","DATE","FORMAT_REGEX","LEFT","MAX_VALUE","MIN_VALUE","RIGHT","TOP","VALUE","WHITE","X","Y","classArray","SPACE_REGEX","_observers","_suspended","field","removeObserver","addObserver","defined","member","_wrap","_set","optionsChange","composite","parentObj","fieldName","_clear","setAccessor","geometryChange","getAccessor","TBase","fields","capitalized","power","pow","DEG_TO_RAD","MAX_NUM","MIN_NUM","rad","degrees","Matrix","matrix","det","cos","sin","scaleX","scaleY","IDENTITY","toMatrix","transformation","originPoint","ZERO","rotate","point","translate","doRound","arg0","arg1","minX","minY","maxX","maxY","height","setOrigin","setSize","bottom","equals","_observerField","tl","topLeft","transformCopy","tr","topRight","br","bottomRight","bl","bottomLeft","fromPoints","rectOuter","expandCopy","rectInner","containsPoint","rect1","rect2","_matrix","multiplyCopy","_optionsChange","defId","definitionId","valueOrDefault","isTransparent","color","_initOptions","clip","parentMatrix","parentTransform","combinedMatrix","elementMatrix","bbox","_clippedBBox","intersect","visible","currentTransform","transformedPoint","_hasFill","_containsPoint","_isOnPath","_hasStroke","stroke","ellipseExtremeAngles","rx","ry","extremeX","extremeY","PI_DIV_2","radius","setCenter","setRadius","_pointAt","extremeAngles","minPoint","maxPoint","currentPointX","currentPointY","currentPoint","pointDistance","distanceTo","opacity","newFill","IDENTITY_MATRIX_HASH","matrixHash","_bboxCache","_matrixHash","_bbox","strokeWidth","geometryAccessor","geometry","_geometry","deg","radians","tolerance","closeOrLess","calculateAngle","cx","cy","bboxStartAngle","startAngle","radiusX","radiusY","endAngle","anticlockwise","xRotation","swipe","radian","curvePoints","pointAt","_arcInterval","intervalAngle","subIntervalsCount","subIntervalAngle","currentAngle","nextAngle","points","_intervalCurvePoints","cp1","cp2","endPoint","currentAngleX","currentAngleY","oldStart","p1Derivative","_derivativeAt","p2Derivative","angleRad","pointRadius","startPoint","p0","p3","s1x","s2x","s1y","s2y","nx","ny","inAngleRange","largeArc","arcParameters","x1","y1","x2","y2","cosine","sine","xT","yT","sign","xt2","yt2","rx2","ry2","constT","cxT","cyT","uX","uY","vX","vY","acos","angleCosine","signEndAngle","_splice","_change","elements","_add","howMany","_clearObserver","_setObserver","isOutOfEndPoint","controlPoint","calculateCurveAt","t1","toCubicPolynomial","real","img","cNumber","nthR","numberSign","solveCubicEquation","squareRoot","y3","z1","z2","Q","b3a","nthRoot","multiplyConstant","isReal","hasRootsInRange","rootField","polynomial","roots","lineIntersectionsCount","intersects","pointAccessor","arrayLimits","controlIn","controlOut","isOnPath","toSegment","segmentAnchor","toSegmentAnchor","_curveBoundingBox","_lineBoundingBox","extremesX","_curveExtremesFor","extremesY","xLimits","yLimits","extremes","_curveExtremes","x3","x4","t2","rayIntersection","bboxTo","endSegment","p4","rotatedPoints","_isOnCurveTo","_isOnLineTo","toLineParamaters","isVertical","insertPosition","reflectionPoint","scaleCopy","quadraticToCubicControlPoints","scaledPoint","translateWith","isRelative","lineTo","curveTo","arcTo","lastControlIn","previousCommand","cubicControlPoints","SEGMENT_REGEX","SPLIT_REGEX","pathInstance","closePath","moveTo","elementsBoundingBox","applyTransform","boundingBox","elementBoundingBox","rawBBox","elementsClippedBoundingBox","clippedBBox","lineJoin","suspend","resume","lastSegment","arc","_addArcSegments","intersectionsCount","_intersectionsTo","pathWidth","_isOnPathTo","segmentBox","_size","_length","_map","newer","older","REPLACE_REGEX","normalizeText","objectKey","hashKey","defaultMeasureBox","DEFAULT_OPTIONS","baselineMarkerSize","TextMetrics","_cache","baseline","cachedResult","measureBox","box","baselineMarker","_baselineMarker","cloneNode","textStr","offsetWidth","offsetHeight","offsetTop","measureText","measure","font","_rect","childrenField","traverse","second","newParent","_reparent","childrenChange","translateToPoint","transofrm","align","axis","sizeField","alignStartReverse","alignContent","justifyContent","alignItems","spacing","orientation","lineSpacing","revers","forEachReverse","_fieldMap","fieldMap","groupsSizeField","groupAxis","groupsAxis","justifyAlign","_initMap","groupBox","_initGroups","groupsSize","groupOrigin","elementOrigin","groupStart","arrangeElements","groupIdx","lineSize","bboxes","scaledStart","newStart","_newGroup","addGroup","_addToGroup","alignElements","alignment","stackElements","stackAxis","otherAxis","previousBBox","createStackElements","vStack","wrapElements","maxSize","stackSize","addElementToStack","elementIdx","vWrap","elementSize","rectSize","optionsAccessor","stops","_createStops","_userSpace","userSpace","_radius","_fallbackFill","fallbackFill","swing","linear","easeOutElastic","asin","limitValue","animationFrameProxy","wnd","animationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","_items","_options","easing","finish","loop","_stopped","wallTime","easingPosition","multiPath","srcElement","childNodes","removeSelf","invalidate","getArray","_defaultPrevented","getComputedStyle","stylesArray","getPixels","eventElement","initialTouch","elementPadding","paddingLeft","paddingTop","documentElement","scrollTop","clientTop","scrollLeft","clientLeft","eventCoordinates","pageX","pageY","matrixRegexp","transformMatrix","matrixString","members","elementScale","_kendoExportVisual","exportVisual","_click","_handler","_mouseenter","_mouseleave","_mousemove","_visual","_enableTracking","unbind","domNode","_kendoNode","currentSize","_resize","getSize","_suspendedTracking","eventTarget","originalEvent","padding","_elementOffset","coord","inverseTransform","_events","one","eventNames","handlersIsFunction","original","sender","isDefaultPrevented","logToConsole","renderAttr","renderAllAttr","renderStyle","SVG_NS","renderSVG","svg","testContainer","hasParser","chartDoc","importedDoc","adoptNode","browser","browserRxs","edge","webkit","safari","opera","msie","mozilla","agent","version","DefinitionMap","isDefinition","definitions","clearDefinitions","insertAt","createDefinitions","attachTo","domElement","render","setElement","nodes","renderChildren","css","updateDefinition","attr","removeAttr","mapTransform","allAttr","mapStyle","hasDefinitions","definitionChange","refUrl","mapDefinitions","skipBaseHref","baseUrl","getElementsByTagName","hashIndex","renderOffset","loadStops","stopNode","mapCoordinates","renderCoordinates","mapSpace","definitionMap","addDefinitions","removeDefinitions","addDefinition","mapItem","createDefinition","removeDefinition","firstElementChild","bindEvents","unbindEvents","DASH_ARRAYS","dash","longdash","dashdot","longdashdot","longdashdotdot","ATTRIBUTE_MAP","renderData","mapFill","mapStroke","transformChange","printPath","currentType","segmentType","printPoints","segmentStart","segmentEnd","renderLinecap","dashType","renderDashType","dashArray","lineCap","renderId","renderOpacity","renderStroke","renderFill","renderDefinitions","renderTransform","ampRegExp","ltRegExp","quoteRegExp","aposRegExp","gtRegExp","htmlEncode","mapPosition","mapSource","encode","renderPosition","renderSource","ENTITY_REGEX","decodeEntities","_element","innerText","setY","rtl","renderTextAnchor","renderContent","Arc","Circle","Image","MultiPath","Path","Rect","Text","_rootElement","ctm","getScreenCTM","click","mouseover","mouseout","resize","viewBox","_offset","visual","createPromise","resolveFn","rejectFn","_state","promiseAll","renderPath","prevOut","bezierCurveTo","initClip","clearClip","beginPath","cors","loadElements","globalAlpha","opactity","restore","save","setTransform","setClip","setOpacity","renderTo","lastExecTime","elapsed","canvas","invalidateHandler","_invalidate","devicePixelRatio","fixedScale","_devicePixelRatio","_rescale","clearRect","shapes","shape","_quadNode","halfHeight","nodeRect","nodeBottomRight","pointShapes","inserted","inBounds","_initChildren","halfWidth","zIndexComparer","_zIndex","initRoots","rootMap","rootElements","sectorRoot","assignZindex","zIndex","levelWeight","bboxChange","_insertShape","elementsArray","_insert","sectors","getSectors","inRoot","bottomX","bottomY","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","matchNamedColor","colorNames","toBytes","toHex","rgb","toFixed","toCss","toCssRgba","parseColor","c1","c2","Bytes","RGB","HSV","HSL","toRGB","toHSV","toHSL","hex","hue2rgb","safe","renderPoints","setLineDash","setLineCap","setLineJoin","setFill","setStroke","hasFill","setGradientFill","fillStyle","gradient","createLinearGradient","createRadialGradient","addColorStop","strokeStyle","lineWidth","mozDash","webkitLineDash","loading","crossOrigin","onload","onerror","drawImage","textAlign","fillText","strokeText","_mouseTrackHandler","_trackMouse","_searchTree","_cursor","_surfacePoint","pointShape","rootElement","loadingStates","resolveDataURL","toDataURL","surface","_resetCursor","_shapeCursor","_current","_defaultCursor","_getCursor","_setCursor","currentShape","_currentShape","hasDocument","preferred","hasFeature","support","exportGroup","rootGroup","getOrigin","exportRoot","1","10","100","20","200","30","300","40","400","50","500","6","60","600","7","70","700","8","80","800","9","90","900","1000","arabicToRoman","roman","KEY_STR","encodeBase64","utfInput","code","hi","chr1","chr2","chr3","enc1","enc2","enc3","enc4","mergeSort","exportImage","surfaceOptions","display","suspendTracking","draw","image","exportSVG","raw","alignPathToPixel","clockwise","angle1","angle2","convertableToNumber","deepExtendOne","propInit","propValue","propType","destProp","deepExtend","styleValue","SIZE_STYLES_REGEX","isSizeField","getSpacing","defaultSpacing","parseDate","firstDay","userImplementation","FORMAT_REPLACE_REGEX","chart","_intlService","intlService","formatString","intl","placeholderFormat","Boolean","pannable","lock","compile","getTemplate","FIELD_REGEX","getterCache","indexAccessor","grep","hasClasses","classNames","HashMap","_key","handlerMap","callObserver","fnName","requiresHandlers","mousewheelDelta","wheelDelta","detail","elementOffset","fonts","fetchFonts","loadFonts","setDefaultOptions","sparseArrayLimits","autoMajorUnit","DEFAULT_PRECISION","relativeValue","theta","cosT","sinT","rotatePoint","targetBox","arrayPoint","targetCenter","dw","dh","shrink","r1","r2","r3","r4","sizeFunc","numericComparer","ShapeBuilder","innerRadius","newRadius","radianAngle","ax","ay","sector","midAndle","midPoint","hw","hh","sa","ca","vector","startVector","endVector","dist","angles","allAngles","startAngleIndex","endAngleIndex","wrapPoint","Point","fromArc","innerEnd","initUserOptions","currentChild","reflow","getRoot","getService","chartService","childrenCount","createVisual","addVisual","createAnimation","renderComplete","chartElement","appendVisual","renderVisual","Animation","childVisual","noclip","clipRoot","stackRoot","stackVisual","isStackRoot","visuals","highlight","createHighlight","show","customVisual","_highlight","highlightOptions","highlightVisualArgs","getSender","series","dataItem","category","percentage","runningTotal","gradientOptions","overlay","createGradient","margin","shrinkToFit","hasSetSize","borderWidth","border","reflowPaddingBox","vAlign","paddingBox","unpad","contentBox","translateChildren","background","hasBox","fromRect","toRect","visualStyle","pointData","visualOptions","getElement","glass","sharpBevel","roundedBevel","roundedGlass","supportVML","sharpGlass","bubbleShadow","boxDiff","boxes","rootOptions","gradients","currentBox","createBackground","drawingGradient","hashCode","LinearGradient","usedSpace","currentStops","currentStop","RadialGradient","_initDirection","vertical","elementAxis","groupSizeField","elementSizeField","groupSpacing","elementSpacing","vSpacing","reflowChildren","groupOptions","maxGroupElementsSize","groupsCount","groupsStart","alignStart","groupElements","groupElementsCount","groupElementStart","groupSize","elementBox","groupElementsSize","DrawingText","rectToBox","ROWS_SPLIT_REGEX","_initContainer","_autoReflow","rows","floatElement","textOptions","rowIdx","visualFn","_boxReflow","visualBox","hasSize","visualContext","normalBox","rotatedBox","rotationTransform","getDefaultVisual","boxCenter","snapTo","defaultOptions","titleOptions","widget","alignRotation","alignEnd","rotationMatrix","rotationOrigin","alignAxis","distanceAxis","axisAnchor","distanceLeft","distanceRight","alignCenter","icon","childAlias","noteTemplate","auto","aliasFor","wrapperBox","lineStart","alignTo","linePoints","createLine","defaultVisual","eventArgs","createAxisTick","tickOptions","tickX","tickY","createAxisGridLine","gridLine","lineEnd","labels","majorTickSize","minorTickSize","minorTicks","minorTickType","majorTicks","majorTickType","initFields","_deferLabels","createLabels","createTitle","createNotes","labelsCount","labelOptions","clearLabels","normalizeLabelRotation","autoRotateLabels","labelsRange","createAxisLabel","clearTitle","mirror","axisX","axisY","visualSize","notes","parseNoteValue","note","createPlotBands","gridLines","_gridLines","lineGroup","lineBox","majorUnit","tickLineOptions","tickPositions","skipUnit","getMajorTickPositions","getMinorTickPositions","minorUnit","_alignLines","_lineGroup","createTicks","tickSize","_backgroundPath","plotBands","plotArea","_plotbandGroup","altAxis","pane","axes","slotX","slotY","getSlot","createPlotBandLabel","bandRect","textbox","labelTemplate","minorGridLines","majorGridLines","axisLineVisible","linePos","lineOptions","gridLinesVisual","sizeFn","titleSize","space","getActualTickSize","boxSize","maxLabelSize","labelSize","arrangeTitle","arrangeLabels","arrangeNotes","labelsBetweenTicks","getLabelsTickPositions","tickIx","labelTickIndex","firstTickPosition","nextTickPosition","positionStart","positionEnd","positionLabel","labelBox","labelOffset","labelX","labelY","slotWidth","autoRotateLabelAngle","slot","shouldRenderNote","hide","noteSlot","secondAxis","tmpl","defaultText","localeAuto","isPannable","maxLabelOffset","lastLabel","offsetField","startPosition","endPosition","maxStartOffset","maxEndOffset","startTick","endTick","rangeSize","minValue","maxValue","seriesMin","seriesMax","justified","axisCrossingValue","DAYS","YEARS","TIME_PER_UNIT","absoluteDateDiff","addTicks","ticks","adjustDST","addDuration","dateValue","weekStartDay","daysToSubtract","day","roundedDate","tzDiff","setSeconds","setMilliseconds","floorDate","ceilDate","dateComparer","dateDiff","toTime","dateEquals","timeIndex","baseUnit","dateIndex","baseUnitStep","startDate","parseDates","dates","_ticks","categories","srcCategories","definedMin","definedMax","totalRange","_seriesMax","rangeIndices","hideOutOfRangeLabels","valueAxis","firstLabel","getTicks","labelTicks","stepSize","indices","scaleOptions","tickIndices","positions","getHash","_hash","hasMinor","getTickPositions","filterOutOfRangePositions","slotBox","singleSlot","limittedSlot","categoryIndex","pointCategoryIndex","totalIndex","rate","totalRangeIndices","totalMin","totalMax","labelContext","dataItems","axisLabelText","hideOutOfRangeNotes","limitRange","rangeMin","rangeMax","_categoriesMap","totalCount","DateLabelFormats","milliseconds","seconds","weeks","years","BASE_UNITS","categoryRange","_range","EmptyDateRange","roundToBaseUnit","lowerEnd","roundToTotalStep","expandEnd","justifyEnd","valueStart","displayStart","displayEnd","_indices","minIdx","maxIdx","valueIndex","_values","valueRange","roundedStep","autoBaseUnit","startUnit","startStep","categoryLimits","unitSteps","nextStep","span","autoBaseUnitSteps","maxDateGroups","autoUnit","autoUnitIx","units","totalUnits","displayRange","dataRange","_parsed","panning","userSetBaseUnit","userSetBaseUnitStep","maxDivisions","lastCategory","minDiff","categoryIx","TIME_PER_MONTH","divisionOptions","dataRangeOptions","divisionRange","rangeLabels","valuesCount","dateAt","rounds","totalLimits","panRange","pointsRange","datesRange","indicesRange","displayIndices","fit","autoBaseUnitStep","maxDiff","rangeDiff","baseUnitIndex","stepIndex","createRangeLabels","arrangeRangeLabels","autoRotateRangeLabels","hideOverlappingLabels","firstRangeLabel","lastRangeLabel","rangeLabel","overlaps","dateFormats","createLabel","rotateLabel","dateRange","limitCoordinate","MIN_VALUE_RANGE","autoOptions","narrowRange","autoMin","narrow","axisMin","autoMax","axisMax","roundToMajorUnit","remainderClose","totalOptions","userOptions","userSetMin","userSetMax","userSetLimits","totalMajorUnit","stepValue","divisions","getDivisions","skipStep","valueOffset","translateRange","startValue","endValue","isValidRange","newRange","scaleRange","ratio","axisOptions","baseUnitTime","actualUnits","unitsToAdd","axisCrossingValues","timeRange","limittedRange","logMaxRemainder","throwNegativeValuesError","logMin","logMax","startEdge","floorMax","traverseMajorTicksPositions","tickPosition","traverseMinorTicksPositions","_lineOptions","minorOptions","_minorIntervalOptions","minorStep","acceptOptionsRange","acceptNewRange","createGridLines","majorAngles","minorAngles","skipMajor","majorGridLineAngles","renderMajorGridLines","minorGridLineAngles","renderMinorGridLines","renderGridLines","radiusCallback","circle","gridLineAngles","skipAngles","divs","intervals","altAxisVisible","alpha","reflowLabels","adjacentBox","skipOption","stepOption","divCount","divAngle","majorIntervals","minorAngle","minorRadius","plotBandSlot","createRing","totalDivs","slotAngle","fromValue","slotStart","instanceOptions","angularDistance","polarAxis","bandStyle","plotBandPoints","innerPoints","outerPoints","innerCircle","outerCircle","radarMajorGridLinePositions","radarMinorGridLinePositions","tickRadius","angleIx","midAngle","gamma","axisType","minorSkipStep","dataPoints","removeDuplicates","initialControlPoint","lastControlPoint","Segment","tangent","firstControlPoint","secondControlPoint","controlPoints","cp0","invertAxis","lineFunction","calculateFunction","xField","yField","restrict","switchOrientation","isLine","monotonic","isMonotonicByField","oldXField","restrictControlPoint","cp","xValue","yValue","_axis","getCategory","findAxisByName","prepareUserOptions","chartsVisual","chartContainer","_pane","_plotArea","backgroundVisual","_bgVisual","countNumbers","Aggregates","sumOrNull","avg","getField","row","SeriesBinder","_valueFields","_otherFields","_nullValue","_undefinedValue","sourceFields","seriesTypes","valueFields","otherFields","_makeValue","pointIx","fieldData","_bindFromArray","srcValueFields","srcPointFields","_bindFromObject","initialValue","srcFields","srcFieldName","canonicalFields","sourceFieldName","percentRegex","standardDeviationRegex","initGlobalRanges","deviationMatch","valueGetter","createValueGetter","average","getAverage","deviation","getStandardDeviation","multiple","errorRange","globalRange","standardError","getStandardError","binder","pointValue","percentValue","isSample","squareDifferenceSum","START_SCALE","BAR","COLUMN","LINE","PIE","VERTICAL_LINE","EQUALLY_SPACED_SERIES","MOUSEWHEEL","endCaps","valueBox","getAxis","centerBox","capsWidth","getCapsWidth","capValue","capStart","capEnd","createDefaultVisual","seriesValueAxis","evalOptions","dryRun","needsEval","excluded","categoriesCount","seriesCount","categoryAxis","seriesCategoryAxis","valueAxisRanges","categoryPoints","seriesPoints","seriesOptions","_evalSeries","traverseDataPoints","addValue","seriesIx","pointType","invertAxes","isStacked100","otherValues","categorySum","otherStack","isStacked","plotValue","prevValue","isStackedBar","otherValue","categoryAxisCrossingValue","axisName","stackName","pIx","plotRange","chartSeries","limitsCache","limits","stackLimits","errorTotals","errorBars","lowValue","highValue","seriesErrorRanges","getErrorRange","addPointErrorBar","stackedErrorRange","updateRange","errorBar","createPoint","owner","noteText","addErrorBar","_defaults","doEval","pointOptions","axisRange","namedValueAxes","categorySlots","chartPoints","currentSeries","categorySlot","valueSlot","pointSlot","aboveAxis","stackValue","reflowPoint","reflowCategories","limitPoints","limitPoint","limitSlot","axisIndex","_outOfRangeCallback","currentCategory","categoryAt","_bindPoint","outOfRangePoint","_bindCache","bindCache","bindPoint","Color","formats","resolvedColor","resolveColor","processor","channels","normalizeByte","padDigit","namedColors","percBrightness","hover","out","createNote","tooltipTracking","markers","_rendered","createMarker","labelText","brightness","markerBorder","_childBox","childBox","reflowLabel","noteTargetBox","markerBox","defaultColor","shadow","halfSize","clipBox","verticalAlign","horizontal","formatPointValue","toGeometryPoints","segmentVisual","coords","getNearestPoint","toGeometryPoint","lintPoint","stepAxis","stepDir","calculateStepPoints","previousPoint","stepPoint","curve","renderSegments","_segments","sortedPoints","sortPoints","pointCount","seriesMissingValues","createSegment","_addSegment","missingValues","nearestPoint","allPoints","nearestPointDistance","_setEnd","setX","AnimationFactory","register","anyHasZIndex","LineChart","clipPath","_setChildrenAnimation","animationPoints","updateStackRange","evalPointOptions","prevSegment","stackPoints","createFill","createStroke","_strokeSegments","createStrokeSegments","segmentsFromPoints","createStackSegments","strokeSegments","fillSegments","hasStackSegments","hasStackSegment","stackSegments","fillToAxes","fillPath","crossingValue","endSlot","firstPoint","lastPoint","curveProcessor","previousSegment","_gapStackPoints","_stackPoints","stackPoint","startIdx","endIdx","pointOffset","_outOfRangeMinPoint","currentSeriesIx","_previousSegmentPoint","gapStackPoint","_createGapStackPoint","segmentIx","seriesIdx","axisRanges","chartAxisRanges","chartRange","textBox","parentBox","hasGradientOverlay","rectVisual","createRect","strokeOpacity","getBorderColor","createGradientOverlay","baseColor","_brightness","borderColor","horizontalAlign","slotSize","gap","slots","positionAxis","negativeColor","cluster","clusterType","getStackWrap","stackWrap","stackGroup","wraps","_stackGroup","stackType","zeroSlot","childrenLength","_setAnimationOptions","pointVisual","ocSlot","lhSlot","realBody","lines","reflowNote","_mainVisual","mainVisual","createOverlay","createBody","createLines","drawLines","lineStyle","normalColor","tooltip","areNumbers","splitValue","downColor","whiskerSlot","boxSlot","q1","q3","reflowBoxSlot","reflowWhiskerSlot","medianSlot","median","meanSlot","meanPoints","calcMeanPoints","whiskerPoints","calcWhiskerPoints","medianPoints","calcMedianPoints","outliers","outerFence","outlierValue","markersBorder","reflowOutliers","renderOutliers","whiskers","filterOutliers","seriesAxes","_initFields","xAxisRanges","yAxisRanges","valueErrorField","lowField","highField","createMissingValue","xAxisName","xAxis","yAxisName","yAxis","xAxisRange","yAxisRange","namedXAxes","namedYAxes","highlightGroup","_maxSize","negativeValues","updateBubblesSize","animationOptions","minR","minSize","maxR","minArea","areaRatio","area","targetValueSlot","targetSlotX","targetSlotY","targetSlot","bodyVisual","tooltipAnchor","seriesItem","bulletOptions","bullet","pointColor","backgroundColor","paddingBottom","paddingRight","tooltipOptions","getStyle","notify","crosshair","formatService","initAxisName","stickyMode","formattedValue","getAnchor","moveLine","showAt","getBox","dim","axisLineBox","currentAxis","chartsBox","shouldClip","clipRect","_clipBox","unclipLabels","charts","overlapsBox","unclipElements","alignToClipBox","ID","buildTitle","removeAxis","removeChart","allAxes","vGridLines","hGridLines","notifyRender","axisValueField","paneIndex","appendIfNotNull","segmentVisible","pointVisibility","bindSegments","equalsIgnoreCase","filterSeriesByType","getDateField","isDateAxis","sampleCategory","dateCategory","singleItemOrArray","AREA_REGEX","findNext","pointHasValue","outPoint","hasItem","createOutOfRangePoints","hasMinPoint","hasMaxPoint","_outOfRangeMaxPoint","initSeries","legend","crosshairs","originalOptions","createPanes","createCrosshairs","labelAxis","paneDefaults","paneOptions","panes","panesLength","currentPane","currentCrosshair","matchingPane","findPane","appendAxis","axisToRemove","filteredAxes","appendChart","chartToRemove","filteredCharts","inactiveItems","inactiveItemsLabels","seriesVisible","visibleInLegend","itemLabelOptions","markerColor","xAxes","yAxes","paneIx","paneAxes","axisIx","any","seriesByPane","seriesPaneName","reflowPanes","detachLabels","reflowAxes","reflowCharts","panesArray","cleanGradients","removeCrosshairs","refresh","crossingAxes","crossingValues","valuesToAdd","targetAxis","targetCrossingValue","slotEdge","targetEdge","axisBox","xAnchor","yAnchor","xAnchorCrossings","yAnchorCrossings","leftAnchors","rightAnchors","topAnchors","bottomAnchors","paneId","paneAnchor","anchorCrossings","alignAxisTo","_overlap","_mirrored","groupAxes","axisGroupBox","overflowX","shrinked","overflowY","offsetX","paneBox","offsetY","reflowPaneAxes","alignAxes","shrinkAxisWidth","autoRotateAxisLabels","shrinkAxisHeight","fitAxes","groupedAxes","rotated","allPaneAxes","chartPane","remainingHeight","autoHeightPanes","percents","axesCount","axisA","axisB","multipath","chartsBoxes","bg","addBackgroundPaths","seriesIndex","filterPoints","detachAxisGroupLabels","labelAxisCount","createLabelAxis","appendAxisAt","isSingleAxis","_dispatchEvent","DefaultAggregates","defaultAggregates","seriesFields","_seriesFields","rootAggregate","aggregate","_series","_binder","fieldAggregate","canonicalName","srcPoints","_bindPoints","firstDataItem","srcValues","_bindField","seriesType","aggregates","fromOptions","toOptions","labelFrom","_createLabel","labelTo","plotLimits","initLabelsFormat","fromPoint","toPoint","copyFields","fromBox","toBox","positionLabels","fromLabelPosition","toLabelPosition","toPoints","fromSegments","fromPath","createCurveSegments","RangeAreaChart","fromSlot","toSlot","oPoints","cPoints","lhPoints","oSlot","cSlot","totalCategories","summary","prevPoint","AREA_SERIES","OUT_OF_RANGE_SERIES","namedCategoryAxes","valueAxisRangeTracker","stack100","createCategoryAxes","aggregateCategories","createCategoryAxesLabels","createCharts","createValueAxes","groupSeriesByPane","paneSeries","addToLegend","visibleSeries","filterVisibleSeries","groupSeriesByCategoryAxis","groupIx","createChartGroup","createAreaChart","createRangeAreaChart","createBarChart","createRangeBarChart","createBulletChart","createCandlestickChart","createBoxPlotChart","createOHLCChart","createWaterfallChart","createLineChart","srcSeries","processedSeries","_currentPointsCache","_seriesPointsCache","axisPane","categoryField","aggregateSeries","filterSeries","dataLength","currentRangeIndices","outOfRangePoints","categoriesHash","dateAxis","srcData","getFn","mapCategories","seriesSourcePoints","aggregator","categoryItem","categoryIdx","aggregatePoints","categoriesToAdd","firstSeries","categoryAxes","unique","axisSeries","groupSeries","barChart","stackableChartOptions","rangeColumnChart","bulletChart","lineChart","areaChart","rangeAreaChart","waterfallChart","categoryAxisName","categoryAxisIndex","centeredSeries","seriesAxis","isJustified","axisRequiresRounding","primaryAxis","tracker","defaultRange","baseOptions","defaultAxisRange","_eventCoordinates","pointPane","updateAxisOptions","targetOptions","_points","arrayPoints","toggleHighlight","hasHighlight","togglePointHighlight","toggleHandler","toggle","highlightVisual","acceptKey","mouseKey","toChartAxisRanges","ranges","updatedAxes","_active","_panAxes","redraw","pan","marquee","_marquee","marqueeColor","zoomPane","_zoomPane","paneByPoint","_zoomPaneClipBox","setStyles","_selectionPosition","selectionPosition","_updateAxisRanges","removeElement","startLocation","zoomRange","Layout","legendItem","createContainer","markerOptions","eventSink","_itemOverlay","_legendItemHover","pointIndex","_unsetActivePoint","createContainers","createLegendTitle","createItems","itemsContainer","userAlign","hasTitle","innerElement","legendBox","hasItems","containerCustomReflow","containerReflow","alignTarget","containerBox","createTitleLayout","appendTitleLayoutContent","layout","PlotAreaFactory","_registry","createDiv","closestHandle","_dateAxis","initOptions","createElements","_index","selection","leftMask","rightMask","leftHandle","rightHandle","selectionStyles","leftHandleHeight","rightHandleHeight","borderLeftWidth","borderRightWidth","mousewheel","_mousewheelHandler","_mousewheel","_domEvents","stopPropagation","_start","_move","_end","_tap","press","_press","gesturestart","_gesturestart","gesturechange","_gesturechange","gestureend","_gestureend","_mwTimeout","moveTarget","_rangeEventArgs","oldRange","rightClick","_toModelCoordinates","_slot","leftMaskWidth","rightMaskWidth","toValue","zDir","zoom","tooltipPoints","_slotAnchor","_defaultAnchor","shared","categoryText","categoryFormat","slotCenter","fromScale","fadeTo","missingValue","xAxisRangeTracker","yAxisRangeTracker","filteredSeries","createScatterChart","createScatterLineChart","createBubbleChart","createAxes","inferredDate","namedAxes","isLog","typeSamples","seriesAxisName","firstPointValue","xAxesOptions","yAxesOptions","createXYAxis","xValues","yValues","brightnessValue","themeLabels","theme","seriesDefaults","animationDelay","labelsOptions","labelsDistance","lp","labelHeight","labelWidth","createSegmentVisual","borderOptions","singleSegment","RAD_60","RAD_30","createLegendItem","legendOptions","pointVisible","legendItems","seriesColors","colorsCount","anglePerValue","constantAngle","explode","segmentOptions","evalSegmentOptions","seriesConfigs","minWidth","halfMinWidth","defaultPadding","newBox","newBoxCenter","leftSideLabels","rightSideLabels","seriesConfig","labelComparator","leftLabelsReflow","rightLabelsReflow","distances","distanceBetweenLabels","distributeLabels","lr","firstBox","_takeDistance","amount","available","boxX","labelDistance","boxY","hAlignLabel","connectors","_connectorLines","connectorsColor","connectorLine","centerPoint","sr","crossing","pointInCircle","autoFit","pieCenter","bboxBottom","reverseValue","originalX","a1","a2","b1","b2","ub","ua","createPieChart","pieChart","holeSize","totalSize","seriesWithoutSize","createPolarAxis","createValueAxis","axisDefaultRange","valueAxisOptions","valueAxisBox","heightDiff","onCircle","_polarAxisCenter","centerSegment","xComparer","_hasMissingValuesGap","scatterChart","valueRadius","seriesSegments","isLastDataPoint","slotSector","childSector","RadarPlotArea","_hasBarCharts","_isStacked100","chartOptions","chartBox","createPath","totalHeight","firstSegment","maxSegment","lastUpperSide","previousOffset","previousHeight","nextSegment","nextPercentage","segmentSpacing","decreasingWidth","neckRatio","finalNarrow","labelPadding","dynamicSlope","dynamicSlopeReflow","constantSlopeReflow","dynamicHeight","COLOR","FIRST","MAX","createDonutChart","donutChart","createFunnelChart","funnelChart","errorLow","errorHigh","AXIS_NAMES","themeOptions","_initElement","_originalOptions","_theme","_initTheme","_initHandlers","_initSurface","bindCategories","preloadFonts","fontLoaded","_redraw","_attachEvents","_mousewheelZoom","_setElementClass","seriesCopies","aliases","alias","applyDefaults","applySeriesColors","chartArea","_selections","_destroySelections","_setupSelection","_noTransitionsRedraw","paneName","_model","seriesName","categoryName","pointByCategoryName","pointsBySeriesName","togglePointsHighlight","_sharedTooltip","_tooltip","findPoint","pointsByCategoryIndex","_surfaceWrap","renderAs","_destroySurface","Surface","_surfaceMouseenterHandler","_surfaceMouseleaveHandler","model","_getModel","_destroyView","setup","play","_createTooltip","_createPannable","_createZoomSelection","_createMousewheelZoom","triggerPaneRender","_navState","_cancelDomEvents","exportOptions","currentOptions","clearMissingValues","_pannable","zoomable","_zoomSelection","allowDrag","allowZoom","_dragZoomEnabled","_touchAction","_toggleDomEvents","drag","toggleDrag","toggleZoom","_createSharedTooltip","axisDefaults","themeAxisDefaults","mapAxisOptions","axisColor","seriesLength","commonDefaults","themeSeriesDefaults","commonThemeDefaults","cleanupNestedSeriesDefaults","seriesColor","_createPlotArea","_modelOptions","skipSeries","selections","select","_clickHandler","_mouseleaveHandler","_mouseover","_mouseout","_toDocumentCoordinates","_shouldAttachMouseMove","_toggleDragZoomEvents","_hoveredPoint","hovered","_stopChartHandlers","_gestureDistance","_zooming","resumeTracking","mousewheelZoom","scaleDelta","updateRanges","_drawingChartElement","leave","backgroundContainsPoint","_startNavigation","_suppressHover","_endNavigation","onPane","totalDelta","chartEvent","findPointPane","closest","coordinates","_padding","_elementPadding","drawingElement","sharedTooltip","_startHover","_trackSharedTooltip","_propagateClick","handlingTap","_getChartElement","activePoint","_activePoint","multipleSeries","hasInactiveOpacity","_hasInactiveOpacity","_updateHoveredPoint","_displayTooltip","_displayInactiveOpacity","_activeChartInstance","_updateSeriesOpacity","_applySeriesOpacity","highlightPoints","chartInstance","_chartInstanceFromPoint","inactivePoints","supportsPointInactiveOpacity","_getInactivePoints","_getInactiveOpacityForSeries","_getAllPointsOfType","hoveredPoint","resetOpacity","currSeries","defaultOpacity","_getDefaultOpacityForSeries","inactiveOpacity","activeSeries","hasDefaultInactiveOpacity","_mouseMoveTrackHandler","_mouseMoveTracking","seriesPoint","_trackCrosshairs","overPlotArea","_tooltipCategoryIx","_sharedHighlight","pointArgs","hoverArgs","hideCrosshairs","keepTooltipOpen","_redrawTimeout","autoBind","bindCategoryAxisFromSeries","uniqueCategories","bindable","onAxis","dataIx","dataRow","srcDates","rowCount","rowIx","colCount","colIx","transitionsState","pointsBySeriesIndex","applyOptions","updateMouseMoveHandler","_clearRedrawTimeout","bar","column","rangeColumn","verticalLine","pie","donut","verticalArea","scatter","scatterLine","bubble","candlestick","ohlc","boxPlot","verticalBullet","polarArea","polarLine","radarArea","radarLine","waterfall","DATA_FIELDS","fieldValue","originalValue","nullValue","NO_CROSSHAIR","wrapNumber","_initialWidth","stage","displayState","_autoWidth","inline","_calculateWidth","currentChart","pointsCount","pointWidth","_initialOpacity","div","chartPadding","scroll","scrollWidth","minPos","clearHideTimeout","_visible","visibility","tooltipStyle","marginTop","borderTopWidth","_hideTimeout","_hideAnimation","hideDelay","ClonedObject","hint","chartObserver","autoBindElements","_redrawSelf","initSelection","mainAxis","roundedRange","axisClone","selectStart","selectEnd","filterAxes","silent","slavePanes","clearSeriesPointsCache","navigatorAxis","naviRange","inNavigator","liveDrag","redrawSlaves","showHint","fromIx","toIx","readSelection","_dragEnd","backgroundBox","_selectStart","_select","_selectEnd","__navi","naviOptions","attachAxes","attachSeries","valueAxes","justifyAxis","_collapse","user","NAVIGATOR_AXIS","navigatorSeries","dateField","stockDefaults","destroyNavigator","_fullRedraw","noTransitionsRedraw","_dirty","partialRedraw","_seriesCount","setRange","copyNavigatorCategories","DEGREE","buildLabelElement","styleGeometry","styleBox","getRange","contextService","surfaceElement","pointerValue","pointer","_setValueOptions","_visuals","allValues","arrayValues","_toggleTransitions","_surfaceSize","gaugeArea","_createGaugeArea","_createModel","_gaugeAreaMargin","currentTheme","areaGeometry","_surfaceElement","_getSize","defaultSize","_defaultSize","renderAxisTick","tickRenderOptions","renderTicks","tickGroup","renderLabels","scaleLine","renderLine","scaleTicks","renderRanges","linePath","repaint","_oldValue","pointerBox","pointerRangeBox","trackBox","trackSize","pointerHalfSize","translateY","toScale","translateX","_margin","elementOptions","getElementOptions","pointerShape","newPoints","oldPoints","speed","minSlot","sizeAxis","pointerPath","oldShape","renderTrack","trackOptions","bboxX","bboxY","_shrinkScaleWidth","_getBox","_alignElements","_shrinkElements","_buildVisual","_draw","scaleElements","plotAreaBox","scaleBox","overflow","drawTicks","tickAngles","getRadiusX","tickStart","tickEnd","rangeSegment","yDiff","renderArc","labelElements","repositionRanges","labelsGroup","rangeDistance","isInside","hasLabelElements","ticksSize","hasRanges","setRadiusX","setRadiusY","paddingWidth","paddingHeight","labelAngle","labelPos","labelElement","prevLabelPos","labelTransform","rangeRadius","getRangeRadius","rangeSegments","segmentsCount","rangeGeom","rangePlaceholderColor","tickArc","majorTickAngles","allTicks","_tickDifference","minorTickAngles","normalizeTickAngles","tickCount","repositionTicks","newPoint","xDiff","newAngle","oldAngle","capColor","setAngle","_renderNeedle","_renderCap","capSize","cap","needleColor","needlePath","arrow","_initialPlotArea","fitScale","alignScale","_buildPointers","midDiff","oldDiff","getDiff","staleFlag","getPlotBox","scaleArc","plotBbox","plotBox","plotBoxCenter","paddingX","paddingY","pointersArr","setEndAngle","setStartAngle","rangeLineCap","startColor","currentColor","placeholderRangeAngle","addRange","rangeColor","SANS","SANS12","SANS16","rangeArea","verticalRangeArea","outliersField","meanField","funnel","horizontalWaterfall","rangeBar","verticalBoxPlot","baseTheme","touchRegExp","normalizeEvent","Draggable","release","mouseOnly","_pressHandler","_dragHandler","_releaseHandler","_ignoreMouse","_mouseOnly","_touchstart","_touchmove","_touchend","_restoreMouse","_mousedown","_mouseup","_pointerdown","isPrimary","_pointermove","_pointerup","_unbindFromCurrent","_bindToCurrent","_usePointers","supportPointerEvent","fromEvent","setupSubscription","sourceObj","addListener","removeListener","EventsModule","EventsOutsideAngularDirective","DraggableModule","DraggableDirective","ResizeSensorModule","ResizeSensorComponent","ResizeBatchService","isDocumentAvailable","isChanged","propertyName","skipFirstChange","isFirstChange","anyChanged","propertyNames","hasObservers","emitter","guid","enableDrag","kendoPress","kendoDrag","kendoRelease","toggleDraggable","destroyDraggable","draggable","bindTo","resizeBatchService","acceptedSize","lastWidth","lastHeight","WRAP_STYLE","checkSize","isScheduled","expandChild","getPropertyValue","initSize","shrinkChild","EXPAND_CHILD_STYLE","HAS_OBSERVER","ResizeObserver","ResizeObserverService","resizeObserver","disconnect","resolvedPromise","rateLimit","serviceType","supported","resizeService","checkChanges","acceptSize","KendoInput","Keys","cachedWidth","scrollbarWidth","windowViewport","win","innerHeight","innerWidth","scrollHeight","clientHeight","offsetParent","until","scrollPosition","offsetParentElement","elementStyles","parentOffset","parentStyles","positionScale","viewPortSize","anchorSize","anchorAlignPoint","elementAlignPoint","marginToAdd","isBeforeAnchor","sibling","nextElementSibling","AnimationBuilder","timings","sequence","steps","stateChangeExpr","expr","NoopAnimationPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_started","_finished","parentPlayer","totalTime","hasStarted","_onStart","triggerMicrotask","_onFinish","phaseName","methods","AnimationGroupPlayer","_players","players","doneCount","destroyCount","startCount","player","onDone","_onDestroy","onStart","pause","restart","timeAtPosition","setPosition","getPosition","beforeDestroy","PopupComponent_ng_template_3_Template","_c1","eitherRect","offset$$1","isWindowAvailable","OVERFLOW_REGEXP","overflowStyle","DOMService","ScrollableService","ResizeService","PositionService","AlignService","AnimationService","PopupComponent","PopupModule","PopupService","hasRelativeStackingContext","fun","called","isDifferent","scaleRect","STYLES","addition","anchorRect","anchorAlign","elementRect","elementAlign","anchorHorizontal","anchorVertical","elementHorizontal","elementVertical","horizontalMargin","verticalMargin","viewport","getWindow","computedStyles","currentLocation","currentOffset","popup","collisions","viewPort","elementTop","elementLeft","elementHeight","elementWidth","viewPortHeight","viewPortWidth","isHorizontalFlip","isVerticalFlip","flippedHorizontal","flippedVertical","flipped","parentElements","hasAttribute","relativeContextElement","getRelativeContextElement","siblingElements","containerElement","siblings","zIndexStyle","clientWidth","zoomLevel","SCALE","_dom","positionMode","hasOffsetParent","relativeRect","absoluteRect","scrollPos","elementScrollPosition","stackScale","stackScroll","stackingElementScroll","stackOffset","stackingElementOffset","removeScroll","addScroll","stackingOffset","offsetAtPoint","anchorOffset","windowViewPort","restrictToView","addOffset","parents$$1","scrollableParents","isDocument","isWindow","elemRect","boundingOffset","containerRect","animationTypes","transformOrigin","animationBuilder","statesFn","states","playStates","stopPlayer","DEFAULT_OFFSET","_alignService","domService","_positionService","_resizeService","_scrollableService","animationService","animate","collision","popupAlign","copyAnchorStyles","anchorViewportLeave","positionChange","initialCheck","updateFixedClass","reposition","animationSubscriptions","onAnimationStart","onAnimationEnd","forElement","onScroll","setZIndex","copyFontStyles","unsubscribeReposition","repositionSubscription","_currentOffset","setContainerStyle","oldOffset","newOffset","oldLeft","oldTop","newLeft","newTop","contentContainer","resizeSensor","alignedOffset","alignElement","positionElement","isInViewPort","hasLeaveObservers","getFontStyles","_t","popupClass","onResize","POPUP_CONTAINER","applicationRef","rootComponents","getComponentRootNode","rootViewContainer","contentFrom","popupComponentRef","appendPopup","appendTo","popupInstance","projectComponentInputs","popupElement","popupAnchorViewportLeave","popupClose","popupOpen","popupPositionChange","rootViewContainerNode","componentClass","getComponentFactory","SkipOperator","ComponentMessages","MessageService","LocalizationService","notifyChanges","override","L10N_PREFIX","messageService","_rtl","dictionary","alt","shortKey","IntlError","flattenValues","formattedMessage","formatMessage","cldr","en","_number","_cldrVersion","language","territory","numbers","symbols","decimal","percentSign","plusSign","exponential","superscriptingExponent","perMille","infinity","nan","timeSeparator","patterns","scientific","percent","currency","currencies","BGN","displayName","EUR","USD","localeCurrency","accounting","calendar","gmtFormat","gmtZeroFormat","D","M","F","G","T","dateTimeFormats","long","medium","short","availableFormats","Bh","Bhm","Bhms","E","EBhm","EBhms","Ed","Ehm","EHm","Ehms","EHms","Gy","GyMMM","GyMMMd","GyMMMEd","H","hm","Hm","hms","Hms","hmsv","Hmsv","hmv","Hmv","Md","MEd","MMM","MMMd","MMMEd","MMMMd","yM","yMd","yMEd","yMMM","yMMMd","yMMMEd","yMMMM","yQQQ","yQQQQ","timeFormats","abbreviated","wide","quarters","midnight","am","noon","pm","morning1","afternoon1","evening1","night1","eras","dateFields","era","quarter","month","week","weekday","dayperiod","hour","minute","millisecond","supplemental","likelySubtags","currencyData","region","US","_from","weekData","weekendStart","weekendEnd","getLocaleInfo","suffixes","fullName","info","script","NoLocale","localeTerritory","likelyName","variant","dateFormatNames","nameType","standAlone","lowerNameType","formatNames","parseRangeDate","NoCurrency","NoCurrencyDisplay","NoSupplementalCurrency","NoCurrencyRegion","NoValidCurrency","GLOBAL_CURRENCIES","getCurrencyInfo","throwIfNoValid","currencyDisplayInfo","lengthComparer","regionCurrencies","latestValidUntil","latestValidUntilRange","latestStillValid","latestStillValidDate","_tender","_to","validFrom","validTo","stillValidDate","DAYS_OF_WEEK","NoWeekData","NoFirstDay","isNegativeZero","formatCurrencySymbol","currencyDisplay","currencyInfo","SYMBOL","groupInteger","decimalIndex","groupSizes","integerEnd","integerLength","newGroupSize","isCurrencyStyle","padString","trailingZeroRegex","literalRegExp","setStyleOptions","formatOptions","setFormatLiterals","literals","quoteChar","literal","trailingZerosRegExp","trailingPointRegExp","commaRegExp","placeholderIndex","index1","index2","standardFormatRegExp","formatAndPrecision","minimumFractionDigits","maximumFractionDigits","isCurrency","toExponential","currencyFractions","fractions","_digits","negativeZero","minimumIntegerDigits","useGrouping","hasNegativeFormat","zeroFormat","hasGroup","lastZero","trimRegex","zeroIndex","sharpIndex","hasZero","hasSharp","trailingZeros","lastZeroIndex","replacement","exponentRegExp","nonBreakingSpaceRegExp","cleanNegativePattern","LENGHT_DELTA","PENALTIES","VALUE_FORMAT_LENGTH","TIME_SPECIFIERS_REGEX","DATE_OPTIONS_MAP","specifier","getSpecifier","hour12","STAND_ALONE_SPECIFIERS","specifiersRegex","resolvedFormats","getSpecifierRegex","skeletonSpecifiers","skeleton","character","findBestMatch","specifiers","bestMatches","specifiersLength","maxScore","currentFormat","score","bestMatch","matchSpecifier","datePattern","option","spcifier","timeStartIndex","dateSkeleton","timeSkeleton","dateNameType","formatLength","DATE_FIELD_MAP","dateFormatRegExp","formatMonth","formatQuarter","formatTimeZone","shortHours","optionalMinutes","localizedName","zZeroOffset","hoursMinutes","formatDayOfWeek","firstDayIndex","formatters","convertTimeZone","fromOffset","toOffset","fromLocalOffset","offsetDate","toLocalOffset","timeZoneOffsetRegExp","dateRegExp","offsetRegExp","numberRegExp","numberRegex","leadingSpacesRegex","trailingSpacesRegex","standardDateFormats","FORMATS_SEQUENCE","lookAhead","getNumber","regex","valueIdx","getIndexByName","nameLength","matchLength","checkLiteral","parseTimeZoneOffset","noSeparator","zLiteral","UTC","NoGMTInfo","hoursMatch","minutesMatch","hoursOffset","minutesOffset","parseMonth","parseDayOfWeek","dayOfWeek","currentYear","periodFormats","pmHour","shortFormat","invalid","addFormatSpaces","parseExact","hasTime","NAME_TYPES","minLength","addLiteral","lastPart","isHour12","DOCS_URL","errorSolutions","intlMethod","errorSolution","dateFormatNames$1","dateFieldName$1","NoDateFieldNames","fieldNameInfo","firstDay$1","format$1","formatDate$1","formatNumber$1","numberSymbols$1","parseDate$1","parseValue","tzoffset","parseFormats","parseNumber$1","displays","cleanNumber","negativeCurrency","currencyNumber","negativeSignIndex","isNegative","splitDateFormat$1","patternLength","toString$1","weekendRange$1","weekendRange","LOCALE_REGEX","cldrServiceFactory","IntlModule","CldrIntlService","IntlService","format$$1","TooltipPopupComponent_ng_template_0_1_ng_template_0_Template","TooltipPopupComponent_ng_template_0_1_Template","ctx_r299","seriesTooltipTemplateRef","seriesTooltipContext","TooltipPopupComponent_ng_template_0_2_ng_template_0_Template","TooltipPopupComponent_ng_template_0_2_Template","ctx_r300","seriesSharedTooltipTemplateRef","seriesSharedTooltipContext","TooltipPopupComponent_ng_template_0_Template","ctx_r296","popupClasses","TooltipPopupComponent_ng_template_2_Template","TooltipPopupComponent_ng_template_3_tr_4_td_1_Template","point_r310","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_1_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_ng_container_2_Template","TooltipPopupComponent_ng_template_3_tr_4_td_2_Template","TooltipPopupComponent_ng_template_3_tr_4_ng_template_4_Template","TooltipPopupComponent_ng_template_3_tr_4_Template","ctx_r319","colorMarker_r307","colorMarker","nameColumn_r308","nameColumn","TooltipPopupComponent_ng_template_3_Template","points_r304","categoryText_r305","colspan_r306","colspan","CrosshairTooltipComponent_ng_template_0_Template","ctx_r321","CrosshairTooltipsContainerComponent_kendo_chart_crosshair_tooltip_0_Template","key_r323","ctx_r322","popupSettings","ChartComponent_div_5_ng_template_1_Template","ChartComponent_div_5_Template","ctx_r325","donutCenterStyle","donutCenterTemplate","ChartComponentGenerated","ConfigurationService","DonutCenterTemplateDirective","InstanceEventService","CollectionService","configurationService","axisLabelClick","dragEnd","dragStart","legendItemHover","legendItemLeave","noteClick","noteHover","noteLeave","paneRender","plotAreaClick","plotAreaHover","plotAreaLeave","seriesClick","seriesHover","seriesOver","seriesLeave","zoomEnd","zoomStart","Change","initSource","onFastChange$","asObservable","onChange$","BaseEvent","PreventableEvent","LegendEvent","LegendItemClickEvent","NoteEvent","RenderEvent","_e","SeriesEvent","EVENT_MAP","ItemChange","onItemChange$","copyChanges","toSimpleChanges","SeriesTooltipComponent","SeriesTooltipComponentGenerated","SettingsComponent","SeriesItemComponentGenerated","CollectionItemComponent","SeriesItemComponent","ThemeService","SharedTooltipTemplateDirective","SeriesTooltipTemplateDirective","TooltipTemplateService","BaseTooltip","collectionService","closeField","colorField","currentField","downColorField","errorHighField","errorLowField","explodeField","fromField","lowerField","medianField","noteTextField","openField","q1Field","q3Field","summaryField","toField","upperField","visibleInLegendField","xErrorHighField","xErrorLowField","yErrorHighField","yErrorLowField","configKey","markAsVisible","seriesTooltipTemplate","flag","pv","seriesTooltip","fontSize","fontFamily","varName","readTheme","readDefaultTheme","queryColor","setColors","setFonts","setSeriesColors","destroyElement","mapColor","queryStyle","defaultFont","titleFont","labelFont","hideTooltip","legendItemClick","showTooltip","sharedTemplate","seriesTemplates","TooltipTemplatePoint","xLow","xHigh","yLow","yHigh","COLLISION","popupService","localizationService","popupRef","bodyFactory","TooltipPopupComponent","CrosshairTooltipComponent","CrosshairTooltipsContainerComponent","templateService","wrapperClass","getSharedTemplate","defaultSharedTooltipTemplate","sharedTemplateContext","pointTemplateRef","wrapPoints","defaultSeriesTooltipTemplate","mouseleaveSubscription","AXES","tooltipKeys","tooltipsMap","tooltipComponents","crossahirTooltipComponents","newMap","mapTooltips","removeTooltip","tooltips","axesCrosshairTooltipOptions","tooltipIdx","getTouch","domEvent","shouldBindGroup","groupNames","eventGroups","DomEvents","hammerInstance","eventHandlers","panstart","panmove","panend","pinchstart","pinchmove","pinchend","previousArgs","xLocation","yLocation","pointer1","pointer2","initialDelta","eventGroup","nameIdx","dateValueAxisFormats","HAMMER","YAxisComponent","YAxisComponentGenerated","YAxisItemComponent","YAxisItemComponentGenerated","ValueAxisComponent","ValueAxisComponentGenerated","ValueAxisItemComponent","ValueAxisItemComponentGenerated","TitleComponent","TitleComponentGenerated","SeriesHighlightComponent","SeriesHighlightComponentGenerated","SeriesComponent","SeriesComponentGenerated","LegendComponent","LegendComponentGenerated","ChartAreaComponent","ChartAreaComponentGenerated","CategoryAxisLabelsComponent","CategoryAxisLabelsComponentGenerated","CategoryAxisComponent","CategoryAxisComponentGenerated","CategoryAxisItemComponent","CategoryAxisItemComponentGenerated","CollectionComponent","ChartComponent","StockInstanceEventService","RootConfigurationService","themeService","instanceEventService","resizeRateLimit","suppressTransitions","hostClasses","loadTheme","refreshWait","canRender","chartMouseleave","domSubscriptions","setDirection","intlChange","rtlChange","autoResize","resizeTimeout","redrawTimeout","findPaneByIndex","findPaneByName","instanceObserver","createInstance","_event","seriesComponents","toggleVisibility","togglePointVisibility","getDonutCenterStyle","crossahirTooltips","tooltipInstance","activeEmitter","updateDirection","createCrosshairTooltips","setChartAreaSize","updateOptions","setOptions","relatedTarget","hideElements","containsElement","inZone","deferredRedraw","isRTL","tooltipMouseleave","processChanges","readItems","tooltipTemplateService","templates","readTooltipTemplates","setSeriesTemplates","ɵRootConfigurationService_BaseFactory","EVENT_MAP$1","navigatorFilter","ɵStockInstanceEventService_BaseFactory","ChartsModule","SparklineModule","StockChartModule","ChartModule","StackedBarLineChartComponent","axis1LabelSegments","axis2LabelSegments","valueAxis1Label","valueAxis2Label","chartStackSeries","stackPosition","stackcolors","chartBarColor","chartStackGoalSeries","stackGoalPosition","stackgoalcolors","chartLineColor","chartDataItemKey","chartCategories","axis1Max","yleftmax","axis1MaxOption2","nextHighestNumberDivisibleBy","periodsToShow","chartDataColumn","xlabel","intValue","stackgoals","valueAxis1","axis2Source","yrightmax","axis2Max","valueAxis2","yaxisleftlabel","yaxisleftlabelcolor","yaxisrightlabel","yaxisrightlabelcolor","TextIndicatorsComponent","isDataFound","instrTotalQty","calculateTotalFromData","Quantity","totalQuantity","lowerTitleColor","displayvalue","biggestCharCount","maxWidth","StackedBarChartByProductComponent","chartDataColumnKey","chartDataColumnColor","valueColor","TopStatsListComponent","MultiAPITileComponent","refreshHandleKeys","apiMappingLinks","apiMappingLink","VerticalSplitTextIndicatorsComponent","detailLinks","ShapeIndicatorsComponent","newOrder","orderByLabel","findItemByKey","charCount","Class","HasObservers","superclass","staticAccessors","arguments$1","defineProperties","Size","PieChartComponent","visualHandler","legendItemVisual","pieDataTemp","bar_values","pieItem","pieData","showGoal","circleGeometry","goalPercent","AreaLineChartComponent","onUpdate","buildChartOptions","isLocal","getIsLocalCurrency","seriesColorsList","linecolors","chartData","currencyDivideVal","currencyFormat","loop1","chartDataObj","dataItemKey","floatValue","roundVal","MultiLineChartComponent","rowColorOverrides","colorsByIndex","categoryList","seriesList","excludeLines","getLineColor","_has","shrinkBuf","subarray","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","chunks","Buf8","Buf16","Uint16Array","Buf32","Int32Array","fnUntyped","typedOK","strApplyOK","strApplyUintOK","utf8len","table","string2buf","m_pos","str_len","buf_len","_buf2binstring","buf2string","c_len","utf16buf","utf8border","adler32","adler","s1","s2","crcTable","crc32","crc","inflate_fast","strm","_in","_out","dmax","wsize","whave","wnext","s_window","hold","bits","lcode","dcode","lmask","dmask","here","from_source","next_in","avail_in","next_out","avail_out","lencode","distcode","lenbits","distbits","dolen","dodist","sane","lbase","lext","dbase","dext","inflate_table","lens","lens_index","codes","table_index","here_bits","here_op","here_val","sym","used","huff","base_index","MAXBITS","offs","extra","extra_index","zswap32","InflateState","havedict","wbits","ncode","nlen","ndist","have","lendyn","distdyn","was","lenfix","distfix","virgin","fixedtables","updatewindow","inflate","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","os","extra_len","hcrc","total_out","total_in","data_type","inflateSetDictionary","dictLength","0","ZStream","GZheader","Inflate","chunkSize","windowBits","opt","ended","header","_mode","next_out_utf8","utf8str","dict","allowBufError","onEnd","onData","zero","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","extra_lbits","extra_dbits","extra_blbits","bl_order","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","w","pending_buf","send_bits","bi_valid","bi_buf","send_code","bi_reverse","gen_codes","bl_count","next_code","MAX_BITS","init_block","LITERALS","dyn_ltree","dyn_dtree","bl_tree","END_BLOCK","opt_len","static_len","last_lit","bi_windup","smaller","_n2","_m2","pqdownheap","heap","heap_len","compress_block","ltree","dtree","lc","lx","d_buf","l_buf","build_tree","stree","heap_max","xbits","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","_tr_stored_block","stored_len","_tr_tally","lit_bufsize","errorCode","rank","zero$1","flush_pending","pending_out","flush_block_only","opt_lenb","static_lenb","max_blindex","black_mask","l_desc","d_desc","bl_desc","BL_CODES","strategy","lcodes","dcodes","blcodes","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_stored","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","max_lazy_match","MIN_MATCH$1","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","configurationTable","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","HEAP_SIZE$1","MAX_BITS$1","deflate","old_flush","bstate","STATIC_TREES","Deflate","memLevel","gzip","D_CODES","MAX_MATCH","LENGTH_CODES","L_CODES","avail","tmpDict","_dict_set","Element","kendo","diffOptions","GaugeAreaComponent","GaugeComponent","SharedModule","CollectionChangesService","LabelsComponent","RangeComponent","ScaleComponent","LinearGaugeModule","LinearRangesComponent","LinearRangeComponent","LinearLabelsComponent","LinearScaleComponent","LinearGaugeAreaComponent","LinearGaugeComponent","hasChanges","valueChange","optionContext","pointerColor","getColor","rangePlaceholder","textColor","collectionChangesService","updateMethod","setValues","updateCall","updateSize","readValues","ɵGaugeAreaComponent_BaseFactory","ɵLabelsComponent_BaseFactory","ɵRangeComponent_BaseFactory","ɵScaleComponent_BaseFactory","ComplianceChartComponent","NpsComponent","complianceArea","extraSpace","majorUnitCount","minorUnitCount","gaugeData1","gaugeData2","compliance12Month","goal","getGaugeData","calcMax","compliantScaleFrom","compliantScaleTo","notCompliantScaleFrom","notCompliantScaleTo","UtilizationTpdComponent","PlaceholderComponent","isPresent","isBlank","isCompositeFilterDescriptor","filters","ifElse","compose","normalizeFilters","descriptor","normalizeOperator","equal","equalto","ge","greater","greaterthan","greaterthanequal","isempty","isequalto","isgreaterthan","isgreaterthanorequalto","islessthan","islessthanorequalto","isnotempty","isnotequalto","isnull","le","less","lessthan","lessthanequal","ne","notequal","notequals","notequalto","notsubstringof","logic","pairwise","accessor","isNotEmpty","runOrEmpty","formatDescriptors","sanitizeDateLiterals","directionFormatter","formatSort","formatGroup","formatAggregates","formatDateValue","transformSkip","transformTake","transformGroup","transformSort","transformAggregates","filterFormatter","ignoreCase","g1","mapper","translateAggregate","translateAggregates","translateGroup","hasSubgroups","Member","HasSubgroups","Items","Key","compareDesc","descriptorAsFunc","_b","isTransformerResult","__value","operatorsMap","contains","doesnotcontain","doesnotendwith","doesnotstartwith","endswith","isnotnull","neq","startswith","compileFilter","transformCompositeFilter","combiner","itemProp","filterBy","normalizeGroups","descriptors","transformers","originalData","agg","groupValue","__position","aggregateResult","filteredData","fieldAccessor","aggregateName","aggregateAccessor","fieldAggregates","aggregateFunction","calc","NEGATIVE_INFINITY","cursor1","cursor2","skipCount","filterDescriptor","sortDescriptors","hasFilters","hasGroups","counter","reduced","faBookmark","iconName","faBorderAll","faChartBar","faCheck","faChevronDown","faChevronLeft","faChevronUp","faClinicMedical","faCog","faDesktop","faFilter","faFlag","faGlobeAmericas","faGripHorizontal","faHandHoldingMedical","faICursor","faInfoCircle","faLaptopMedical","faList","faListAlt","faMicroscope","faMortarPestle","faPlus","faSearch","faSquare","faStar","faSyringe","faTachometerAlt","faUser","faUserTag","faUserTie","faUsers","faVial","faWindowClose","forkJoinInternal","emitted","CheckboxControlValueAccessor","ControlContainer","AbstractControlDirective","DefaultValueAccessor","NG_VALUE_ACCESSOR","CHECKBOX_VALUE_ACCESSOR","_elementRef","onChange","onTouched","isDisabled","checked","DEFAULT_VALUE_ACCESSOR","COMPOSITION_BUFFER_MODE","_compositionMode","_composing","getUserAgent","_handleInput","_compositionStart","_compositionEnd","control","valid","disabled","pristine","touched","untouched","statusChanges","valueChanges","getError","ɵControlContainer_BaseFactory","unimplemented","NgControlStatusGroup","NgControlStatus","NgControl","valueAccessor","_rawValidators","_rawAsyncValidators","AbstractControlStatus","cd","_cd","ngClassUntouched","ngClassTouched","ngClassPristine","ngClassDirty","ngClassValid","ngClassInvalid","ngClassPending","isEmptyInputValue","NG_VALIDATORS","NG_ASYNC_VALIDATORS","EMAIL_REGEXP","_mergeErrors","regexStr","nullValidator","validators","presentValidators","toObservable","arrayOfErrors","normalizeValidator","validator","validate","normalizeAsyncValidator","NumberValueAccessor","RadioControlValueAccessor","RadioControlRegistry","RangeValueAccessor","NUMBER_VALUE_ACCESSOR","RADIO_VALUE_ACCESSOR","_accessors","_isSameGroup","fireUncheck","controlPair","_control","_checkName","_fn","writeValue","formControlName","_throwNameError","RANGE_VALUE_ACCESSOR","FormErrorExamples","ReactiveErrors","directiveName","SELECT_VALUE_ACCESSOR","_buildValueString","NgSelectOption","SelectControlValueAccessor","_optionMap","_idCounter","_compareWith","valueString","_getOptionId","_getOptionValue","compareWith","_registerOption","_setElementValue","ngValue","SELECT_MULTIPLE_VALUE_ACCESSOR","_buildValueString$1","ɵNgSelectMultipleOption","SelectMultipleControlValueAccessor","optionSelectedStateSetter","ids","_setSelected","selected","selectedOptions","controlPath","setUpControl","asyncValidator","composeAsync","registerOnChange","_pendingValue","_pendingChange","_pendingDirty","updateOn","updateControl","emitModelEvent","viewToModelUpdate","registerOnTouched","_pendingTouched","markAsTouched","setDisabledState","registerOnDisabledChange","registerOnValidatorChange","updateValueAndValidity","markAsDirty","emitModelToViewChange","messageEnd","composeValidators","composeAsyncValidators","isPropertyUpdated","viewModel","BUILTIN_ACCESSORS","selectValueAccessor","valueAccessors","defaultAccessor","builtinAccessor","customAccessor","coerceToValidator","validatorOrOpts","isOptionsObj","coerceToAsyncValidator","origAsyncValidator","asyncValidators","AbstractFormGroupDirective","NgForm","NgModelGroup","ɵNgNoValidate","NgModel","ReactiveFormsModule","FormsModule","FormBuilder","ɵInternalFormsSharedModule","FormControlDirective","_onCollectionChange","_onDisabledChange","_anyControlsDirty","_updateOn","newValidator","onlySelf","_forEachChild","markAllAsTouched","markAsUntouched","_updateTouched","markAsPristine","_updatePristine","emitEvent","markAsPending","skipPristineCheck","_parentMarkedDirty","disable","_updateValue","_updateAncestors","changeFn","_setInitialStatus","_cancelExistingSubscription","_runValidator","_calculateStatus","_runAsyncValidator","ctrl","_updateTreeValidity","_allControlsDisabled","_asyncValidationSubscription","setErrors","_updateControlsErrors","controlToFind","FormGroup","controls","FormArray","_anyControlsHaveStatus","_anyControls","_anyControlsTouched","formState","FormControl","_onChange","_applyFormState","_setUpdateStrategy","_initObservables","emitViewToModelChange","_isBoxedValue","_setUpControls","setParent","_registerOnCollectionChange","registerControl","controlName","_checkAllValuesPresent","_throwIfControlMissing","patchValue","_reduceChildren","getRawValue","subtreeUpdated","updated","_syncPendingControls","_reduceValue","initValue","_registerControl","formDirectiveProvider","submitted","_directives","ngSubmit","_findContainer","removeControl","resetForm","onSubmit","onReset","_checkParentType","addFormGroup","formDirective","removeFormGroup","getFormGroup","_validators","_asyncValidators","ɵAbstractFormGroupDirective_BaseFactory","TemplateDrivenErrors","modelGroupProvider","modelGroupParentException","formControlBinding","resolvedPromise$1","_registered","_checkForErrors","_setUpControl","_updateDisabled","_isStandalone","_setUpStandalone","addControl","standalone","formGroupNameException","modelParentException","missingNameException","disabledValue","NG_MODEL_WITH_FORM_CONTROL_WARNING","formControlBinding$1","_ngModelWarningConfig","_ngModelWarningSent","disabledAttrWarning","warningConfig","_isControlChanged","_ngModelWarningSentOnce","ngModelWarning","controlConfig","controlsConfig","_reduceControls","_createControl","warnOnNgModelWithFormControl","takeUntil","notifier","takeUntilSubscriber","notifierSubscription","seenValue","debounceTime","DebounceTimeOperator","debouncedSubscription","lastValue","clearDebounce","dispatchNext","debouncedNext","agentRxs","wp","fire","android","iphone","ipad","meego","webos","blackberry","playbook","windows","tizen","sailfish","ffos","osRxs","ios","flat","desktopBrowserRxs","mobileBrowserRxs","omini","omobile","firefox","mobilesafari","ie","chrome","testRx","rxs","dflt","browserInfo","mobileOS","minorVersion","majorVersion","flatVersion","cordova","PhoneGap","appMode","_c23","_c28","_c29","a0","a3","keydown","focus","blur","_c31","_c32","_c37","_c38","mouseleave","_c39","NumericTextBoxComponent_span_6_Template","ctx_r21","releaseArrow","arrowDirection","ArrowDirection","Up","increasePress","incrementTitle","Down","decreasePress","decrementTitle","_c40","DOMMouseScroll","_c41","a4","a5","a6","dragenter","paste","_c42","_c43","dragstart","_c48","TextBoxComponent_3_ng_template_0_Template","TextBoxComponent_3_Template","ctx_r32","prefixTemplate","TextBoxComponent_span_7_Template","errorIconClasses","TextBoxComponent_span_8_Template","successIconClasses","TextBoxComponent_span_9_Template","_r40","clearValue","ctx_r36","clearButtonClasses","TextBoxComponent_10_ng_template_0_Template","TextBoxComponent_10_Template","ctx_r37","suffixTemplate","_c49","areSame","requiresZoneOnBlur","ngControl","limitPrecision","fractionLength","toFixedPrecision","maxPrecision","invokeElementMethod","TextBoxDirective","SwitchComponent","focusableId","readonly","tabindex","onFocus","onBlur","ngChange","ngTouched","handleFocus","focused","handleBlur","keyDownHandler","clickHandler","onLabel","offLabel","localizationChangeSubscription","keyCode","isEnabled","Space","Enter","changeValue","isFocused","ariaDisabled","ariaReadonly","ieClass","switchOnClass","switchOffClass","disabledClass","onLabelMessage","offLabelMessage","inputElement","hostClass","onValueChange","autoFillStart","autoFillEnd","listeners","animationName","EXPONENT_REGEX","decimalPart","NumericTextBoxMessages","NumericTextBoxComponent","NumericTextBoxCustomMessagesComponent","MaskingService","Messages","RangeSliderModule","SliderModule","SlidersCommonModule","MaskedTextBoxComponent","TextBoxMessages","TextBoxComponent","TextBoxPrefixTemplateDirective","TextBoxSuffixTemplateDirective","MaskedTextBoxModule","NumericTextBoxModule","LocalizedNumericTextBoxMessagesDirective","SwitchModule","LocalizedSwitchMessagesDirective","InputsModule","FormFieldModule","RadioButtonModule","CheckBoxModule","ColorPickerModule","TextBoxModule","LocalizedTextBoxMessagesDirective","PARSABLE_OPTIONS","PARSABLE_DEFAULTS","autoCorrect","spinners","rangeValidation","selectOnFocus","inputValue","minValidateFn","maxValidateFn","_format","isPasted","mouseDown","ngValidatorChange","arrowPress","spinTimeout","handlePaste","handleInput","numericInput","selectionStart","selectionEnd","pressedKey","NumpadDecimal","replaceNumpadDotValue","formatInputValue","parseNumber","setSelection","parsedValue","restrictDecimals","limited","limitInputValue","hasTrailingZeros","setInputValue","updateValue","previousSelection","handleDragEnter","handleMouseDown","shouldSelectAll","selectAll","selectCaret","elementValue","handleKeyDown","ArrowDown","ArrowUp","addStep","handleWheel","significantChars","parseOptions","verifySettings","minError","maxError","numericRegex","verifyValue","restrictModelValue","restrictedValue","numberSymbols","numericWrap","spin","decimalSeparator","numberPattern","isInRange","enteredValue","limitedValue","selectToEnd","lengthChange","padLimit","replaceNext","hasMax","hasMin","correctedValue","paddedValue","tryPadValue","limitLength","zeroPadded","zeroPaddedNext","hasDecimals","stringValue","exponentMatch","formatNumber","parsed","formattedString","significantCharacters","partialValue","significantCharsInFormattedValue","adjustedSignificantChars","adjustSignificantChars","separatorIndex","matchedLeadingZeroes","lengthOfLeadingZeroesMatch","leadingZeroes","numberOfLeadingZeroes","widgetClasses","ɵNumericTextBoxMessages_BaseFactory","increment","ResultType","Result","Undefined","vs","Stream","inputCursor","controlCursor","char","Parser","Literal","stream","creator","rawMask","prompt","promptPlaceholder","rawLiteral","includeLiterals","parser","greedy","eof","maskTokens","unmaskTokens","rawTokens","validationTokens","mask$$1","tokenize","maskedValue","fold","rawValue","masked","splitPoint","maskRemoved","maskInserted","pasted","beforeChange","afterChange","unchanged","adjustPosition","caretChar","isLiteral","_token","peek","eat","Mask","eat_input","unliteral","unmask","maskTokenCreator","unmaskTokenCreator","rawTokenCreator","validationTokenCreator","maskOnFocus","maskValidation","focusClick","defaultRules","emptyMask","updateInput","maskRaw","handleClick","setFocusSelection","updateService","_rules","maskInRange","maskInput","normalizeValue","extractChanges","validationValue","patternError","present","pasteHandler","hostDisabledClass","handleDragDrop","ɵMessages_BaseFactory","showSuccessIcon","showErrorIcon","clearButton","inputFocus","inputBlur","_isFocused","focusChangedProgrammatically","handleInputFocus","clearButtonClicked","handleInputBlur","checkClearButton","cursorInsideWrapper","tabbing","Tab","isFocusedElement","showClearButton","successIcon","errorIcon","clearButtonIcon","showErrorsInitial","showSuccessInitial","hasErrors","isSuccessful","ɵTextBoxMessages_BaseFactory","defaultThrottleConfig","ThrottleTimeOperator","_hasTrailingValue","_trailingValue","skipWhile","SkipWhileOperator","skipping","tryCallPredicate","ListComponent_div_0_1_ng_template_0_Template","ListComponent_div_0_1_Template","ctx_r25","fixedGroupTemplate","currentGroup","ListComponent_div_0_ng_template_2_Template","ctx_r26","ListComponent_div_0_Template","ctx_r19","virtual","itemHeight","ListComponent_5_ng_template_0_1_ng_template_0_Template","ListComponent_5_ng_template_0_1_Template","dataItem_r29","ctx_r31","ListComponent_5_ng_template_0_ng_template_2_Template","getText","_c7","ListComponent_5_ng_template_0_Template","itemIndex_r30","ctx_r28","startFrom","multipleSelection","optionPrefix","ListComponent_5_Template","ListComponent_6_ng_template_0_li_0_1_ng_template_0_Template","ListComponent_6_ng_template_0_li_0_1_Template","dataItem_r37","ctx_r41","groupTemplate","ListComponent_6_ng_template_0_li_0_ng_template_2_Template","ListComponent_6_ng_template_0_li_0_Template","ctx_r39","ListComponent_6_ng_template_0_li_1_1_ng_template_0_Template","ListComponent_6_ng_template_0_li_1_1_Template","ctx_r47","ListComponent_6_ng_template_0_li_1_ng_template_2_Template","ListComponent_6_ng_template_0_li_1_Template","ctx_r40","offsetIndex","ListComponent_6_ng_template_0_Template","ListComponent_6_Template","ListComponent_div_7_Template","ctx_r24","_c8","_c9","_c10","_c11","_c12","_c17","AutoCompleteComponent_span_4_Template","_r61","AutoCompleteComponent_span_5_Template","AutoCompleteComponent_ng_template_6_0_ng_template_0_Template","_c18","AutoCompleteComponent_ng_template_6_0_Template","ctx_r63","headerTemplate","AutoCompleteComponent_ng_template_6_div_3_ng_template_1_Template","AutoCompleteComponent_ng_template_6_div_3_ng_template_2_Template","ctx_r69","noDataText","AutoCompleteComponent_ng_template_6_div_3_Template","ctx_r65","noDataTemplate","AutoCompleteComponent_ng_template_6_4_ng_template_0_Template","AutoCompleteComponent_ng_template_6_4_Template","ctx_r66","footerTemplate","AutoCompleteComponent_ng_template_6_Template","_r72","pageChange","ctx_r57","listBoxId","valueField","listHeight","isOpen","AutoCompleteComponent_ng_template_8_Template","_r74","_c19","DropDownListComponent_5_ng_template_0_Template","DropDownListComponent_5_Template","ctx_r98","valueTemplate","DropDownListComponent_ng_template_6_Template","DropDownListComponent_ng_template_9_ng_template_0_Template","_r113","stopImmediatePropagation","filterText","handleFilter","onFilterFocus","blurFilterInput","ctx_r105","touchEnabled","ariaOwns","ariaActivedescendant","noDataLabel","DropDownListComponent_ng_template_9_ng_template_1_Template","ctx_r106","isDisabledDefaultItem","getDefaultItemText","DropDownListComponent_ng_template_9_ng_template_2_ng_template_1_Template","DropDownListComponent_ng_template_9_ng_template_2_Template","ctx_r107","itemTemplate","defaultItem","DropDownListComponent_ng_template_9_3_ng_template_0_Template","DropDownListComponent_ng_template_9_3_Template","ctx_r108","DropDownListComponent_ng_template_9_div_6_ng_template_1_Template","DropDownListComponent_ng_template_9_div_6_ng_template_2_Template","ctx_r122","DropDownListComponent_ng_template_9_div_6_Template","ctx_r110","DropDownListComponent_ng_template_9_7_ng_template_0_Template","DropDownListComponent_ng_template_9_7_Template","ctx_r111","DropDownListComponent_ng_template_9_Template","_r125","ctx_r101","filterable","textField","DropDownListComponent_ng_template_11_Template","_r127","_c35","MultiSelectComponent_span_7_Template","_r137","clearAll","MultiSelectComponent_span_8_Template","MultiSelectComponent_ng_template_9_0_ng_template_0_Template","MultiSelectComponent_ng_template_9_0_Template","ctx_r138","MultiSelectComponent_ng_template_9_div_1_2_ng_template_0_Template","MultiSelectComponent_ng_template_9_div_1_2_Template","ctx_r144","customItemTemplate","MultiSelectComponent_ng_template_9_div_1_ng_template_3_Template","MultiSelectComponent_ng_template_9_div_1_Template","_r145","ctx_r139","MultiSelectComponent_ng_template_9_div_4_ng_template_1_Template","MultiSelectComponent_ng_template_9_div_4_ng_template_2_Template","ctx_r149","MultiSelectComponent_ng_template_9_div_4_Template","ctx_r141","MultiSelectComponent_ng_template_9_5_ng_template_0_Template","MultiSelectComponent_ng_template_9_5_Template","ctx_r142","MultiSelectComponent_ng_template_9_Template","_r152","ctx_r133","allowCustom","MultiSelectComponent_ng_template_11_Template","_r154","TagListComponent_li_1_1_ng_template_0_Template","TagListComponent_li_1_1_Template","TagListComponent_li_1_ng_template_2_1_ng_template_0_Template","TagListComponent_li_1_ng_template_2_1_Template","tag_r156","ctx_r164","TagListComponent_li_1_ng_template_2_ng_template_2_Template","TagListComponent_li_1_ng_template_2_Template","ctx_r160","TagListComponent_li_1_ng_template_4_1_ng_template_0_Template","TagListComponent_li_1_ng_template_4_1_Template","ctx_r169","TagListComponent_li_1_ng_template_4_ng_template_2_Template","ctx_r170","tagProp","TagListComponent_li_1_ng_template_4_Template","ctx_r162","_c36","TagListComponent_li_1_Template","_r175","deleteTag","i_r157","_r159","_r161","ctx_r155","itemId","isGroupTag","SelectionService","FixedGroupTemplateDirective","GroupTemplateDirective","FooterTemplateDirective","HeaderTemplateDirective","ItemTemplateDirective","SearchBarComponent","DisabledItemsService","DataService","NoDataTemplateDirective","NavigationService","ListComponent","ListItemDirective","AutoCompleteComponent","ValueTemplateDirective","GroupTagTemplateDirective","TagTemplateDirective","CustomItemTemplateDirective","DropDownListComponent","SelectableDirective","TemplateContextDirective","TagListComponent","MultiSelectComponent","AutoCompleteModule","SharedDirectivesModule","LocalizedMessagesDirective","DropDownListModule","FilterInputDirective","ComboBoxModule","DropDownsModule","MultiSelectModule","isObjectArray","selectedIndices","extractedValues","usePrimitive","matchText","localization","onNavigate","searchBarClass","_userInput","_previousValue","_placeholder","userInput","setInputSize","previousUserInput","suggestedText","caretIndex","caretAtEnd","writeInputValue","setInputSelection","activeElement","setSelectionRange","ArrowLeft","ArrowRight","Escape","Delete","Backspace","Home","End","lengthOf","placeholderLength","textLength","listId","tagListId","activeDescendant","role","handleKeydown","onSelect","isSelected","newSelection","added","removed","focusedIndex","NavigationAction","grouped","groupIndices","_flatData","_data","isGrouped","getGroupIndices","itemIndex","itemAt","itemsCount","groupField","groupIndex","dataService","itemDisabled","NavigationEvent","disabledItemsService","selectionService","enter","tab","esc","up","down","backspace","home","Open","Close","Esc","Left","Right","nextIndex","clampIndex","firstFocusableIndex","isIndexDisabled","FilterableDropDownComponentBase","cdr","lastLoaded","lastScrollTop","scrollToFocused","selectSubscription","scrollToItem","pageSize","scrollSubscription","prefetchData","findCurrentGroup","positionItems","elementFromPoint","firstVisibleItem","groupAt","itemGroup","visibleItems","trunc","prevPage","changePage","flatIndex","firstGroupHeaderInTargetedPage","scrollToIndex","contentScrollTop","itemOffsetTop","contentOffsetHeight","bottomDistance","DEFAULTS","normalizeVirtualizationSettings","AUTOCOMPLETE_VALUE_ACCESSOR","navigationService","highlightFirst","filterChange","onChangeCallback","onTouchedCallback","popupMouseDownHandler","_popupSettings","_open","valueChangeSubject","subscribeEvents","resetSelection","wrapperOffsetWidth","popupHeight","containerClasses","hasMatch","suggest","backspacePressed","shouldOpen","_toggle","triggerPopupEvents","_virtualSettings","setMessages","destroyPopup","unsubscribeEvents","messagesTimeout","searchbar","popupWrapper","findIndexPredicate","togglePopup","currentTextLength","insensitiveMatch","valueHasChanged","valueChangeSubscription","hasChange","emitChange","changeSubscription","handleItemChange","focusSubscription","handleItemFocus","navigationSubscription","navigate","closeSubscription","enterSubscription","handleEnter","escSubscription","handleEscape","popupTemplate","listContainerClasses","optionsList","createPopup","maxIndex","itemText","handleNavigate","searchBarChange","suggestion","TOUCH_ENABLED","DROPDOWNLIST_VALUE_ACCESSOR","touchEnabled$$1","selectionChange","filterFocused","filterBlurred","wrapperFocused","wrapperBlurred","selectionSubscription","onMouseDown","wrapperWidth","providedTabIndex","setState","_previousDataItem","_valuePrimitive","firstIndex","hasSelected","focusedItemNotSelected","onKeyPress","localizationChangesSubscription","assignAriaDescribedBy","iconClass","isItemDisabled","confirm","valuePrimitive","updateState","itemFromEvent","onSelectionChange","shouldUsePrevious","shouldUseNewValue","clearFilter","openSubscription","filterBlurredSubscription","componentBlurredSubscription","componentBlur","currentOrDefault","valueFrom","charCode","typingTimeout","selectNext","isInLoop","splitIndex","loopMatch","nextMatch","findDataItem","ofSameType","clearState","trimmed","valueLabelId","keypress","focusComponent","blurComponent","widgetTabIndex","ariaExpanded","buttonClasses","RemoveTagEvent","MULTISELECT_VALUE_ACCESSOR","differs","tagPrefix","focusedTagIndex","autoClose","tagMapper","valueNormalizer","removeTag","selectedDataItems","customValueSubject","observableSubscriptions","closePopup","differ","valueChangeDetected","focusedListIndex","newItem","emitValueChange","addCustomValue","customValues","resolveDataItemFromTags","openPopup","searchTextAndFocus","navigateInput","selectValue","handleBackspace","tagData","removeGroupTag","removeSingleTag","createCustomValueStream","isClosed","isTagFocused","handleClose","handleUp","handleHome","handleEnd","handleDelete","handleRightKey","handleLeftKey","handleDownKey","customValueSubscription","dataItemValues","unselect","nextTick","normalizedValue","customItem","handleRemoveTag","startsFrom","tagTemplate","groupTagTemplate","wrapperMousedown","onSearchBarBlur","onSearchBarFocus","insertedViewRef","templateContext","focusedClassName","selectedClassName","PagerNumericButtonsComponent_option_1_Template","ctx_r182","pageLabel","PagerNumericButtonsComponent_option_2_Template","num_r188","ctx_r183","currentPage","PagerNumericButtonsComponent_option_3_Template","ctx_r184","PagerNumericButtonsComponent_li_5_Template","_r190","ctx_r189","ctx_r185","PagerNumericButtonsComponent_li_6_Template","_r193","num_r191","ctx_r186","PagerNumericButtonsComponent_li_7_Template","_r195","ctx_r194","ctx_r187","focusout","PagerComponent_ng_container_2_Template","ctx_r196","PagerComponent_ng_container_3_kendo_datapager_prev_buttons_1_Template","PagerComponent_ng_container_3_kendo_datapager_numeric_buttons_2_Template","buttonCount","PagerComponent_ng_container_3_kendo_datapager_input_3_Template","PagerComponent_ng_container_3_kendo_datapager_next_buttons_4_Template","PagerComponent_ng_container_3_kendo_datapager_info_5_Template","PagerComponent_ng_container_3_kendo_datapager_page_sizes_6_Template","pageSizeValues","PagerComponent_ng_container_3_Template","ctx_r197","previousNext","PagerInfoComponent","PagerInputComponent","PagerNextButtonsComponent","PagerNumericButtonsComponent","PagerTemplateDirective","PagerPageSizesComponent","PagerPrevButtonsComponent","PagerElementComponent","PagerContextService","PagerComponent","PagerModule","PageSizeChangeEvent","newPageSize","firstPage","lastPage","previousPage","nextPage","page","pageNumberInputTitle","itemsPerPage","pageSizeChange","pagerContext","textFor","_pageSizes","pageSizes","normalizedItems","dropDownList","dropdownlist","changePageSize","_r181","_r180","numbersWrapClass","totalPages","reminder","pageText","valueAsNumber","onSelectChange","buttons","incomingValue","hasPages","currentPageText","maxItems","DEFAULT_PAGE_SIZE_VALUES","pagerWrapClass","pagerClass","widgetClass","widgetRole","_templateContext","_pageSizeValues","resizeHandler","importedModules","ListViewComponent_0_ng_template_0_Template","ListViewComponent_0_Template","ListViewComponent_div_1_ng_template_1_Template","ListViewComponent_div_1_Template","ctx_r228","ListViewComponent_div_4_ng_template_1_Template","isLast","ListViewComponent_div_4_Template","dataItem_r239","index_r240","first_r241","last_r242","ctx_r230","itemClass","itemStyle","listItemRole","ListViewComponent_div_5_Template","ListViewComponent_6_ng_template_0_Template","ListViewComponent_6_Template","loaderTemplate","ListViewComponent_div_7_ng_template_1_Template","ListViewComponent_div_7_Template","ctx_r233","ListViewComponent_8_ng_template_0_Template","ListViewComponent_8_Template","ListViewComponent_ng_template_9_kendo_datapager_0_Template","_r250","handlePageChange","pagerClass_r247","ctx_r248","pagerSettings","ListViewComponent_ng_template_9_Template","pageable","LoaderTemplateDirective","ListViewNavigableItemDirective","ListViewModule","ListViewComponent","msMatchesSelector","webkitMatchesSelector","isListViewItem","getListItemIndex","activeIndex","totalItemsCount","navigateToPrevious","navigateToNext","navigateTo","targetIndex","closestListViewItem","setActiveIndex","contender","updateNavigationState","updateTabIndex","updateFocusedState","isActive","DEFAULT_PAGER_SETTINGS","containerRole","scrollBottom","_navigable","handleContentScroll","removeFocusOutListener","navigable","removeNavigationListeners","addNavigationListeners","_pageable","focusIndex","listViewItems","scrollToContainerTop","removeKeydownListener","removeFocusInListener","handleFocusIn","handleFocusOut","containerStyle","containerClass","containerLabel","_typeof","_defineProperty","_objectSpread","ownKeys","_slicedToArray","_arr","_n","_d","_s","_i","_WINDOW","_DOCUMENT","MutationObserver","_ref$userAgent","WINDOW","IS_DOM","oneToTen","oneToTwenty","DUOTONE_CLASSES","GROUP","SWAP_OPACITY","PRIMARY","SECONDARY","FontAwesomeConfig","_ref","_ref2","familyPrefix","replacementClass","autoReplaceSvg","autoAddCss","autoA11y","searchPseudoElements","observeMutations","mutateApproach","keepOriginalSource","measurePerformance","showMissingIcons","shims","doScroll","readyState","asyncTimer","isNode","asyncSetTimer","setImmediate","asyncQueue","asyncFlush","asyncCall","invokeCallback","settled","handleThenable","fulfill","publishFulfillment","publishRejection","publish","_then","_handled","notifyRejectionHandled","rejectPromise","onFulfillment","onRejection","catch","race","meaninglessTransform","flipX","flipY","nextUniqueId","htmlEscape","joinStyles","styleName","transformIsMeaningful","transformForSvg","iconWidth","containerWidth","innerTranslate","innerScale","innerRotate","inner","ALL_SPACE","fillBlack","abstract","makeInlineSvgAbstract","_params$icons","icons","main","maskId","titleId","_params$watchable","watchable","found","isUploadedIcon","widthClass","attrClass","uploadedIconWidthStyle","explicitMaskId","mainPath","maskPath","trans","maskRect","maskInnerGroupChildrenMixin","maskInnerGroup","maskOuterGroup","clipId","maskTag","maskUnits","maskContentUnits","styleString","thisContext","defineIcons","_params$skipHooks","skipHooks","normalized","addPack","lookup","reducer","ligatures","ligature","hasRegular","shim","iconFromMapping","mapping","abstractNodes","_abstractNodes$attrib","_abstractNodes$childr","attributeName","MissingIcon","FILL","ANIMATION_BASE","attributeType","repeatCount","dur","OPACITY_ANIMATE","asFoundIcon","vectorData","class","ensureCss","_cssInserted","headChildren","beforeChild","drc","fp","rc","dPatt","customPropPatt","rPatt","apiObject","abstractCreator","findIconDefinition","iconLookup","_iconLookup$prefix","library","FaIconLibrary","FaConfig","FontAwesomeModule","FaIconComponent","FaStackItemSizeDirective","Library","Constructor","protoProps","_this","_len","_pullDefinitions","_normalized$key","iconDefinition","_params$transform","_params$symbol","_params$mask","_params$maskId","_params$title","_params$titleId","_params$classes","_params$attributes","_params$styles","maybeIconDefinition","defaultPrefix","fallbackIcon","globalLibrary","packs","pack","addIcons","stackItemSize","iconLibrary","stackItem","iconToBeRendered","buildParams","renderIcon","iconSpec","getIconDefinition","globalDefinition","transformString","classOpts","pulse","inverse","fixedWidth","parsedTransform","a11yRole","renderedIcon","renderedIconHTML","bypassSecurityTrustHtml","ToggleSwitches","DetailAssayFilterComponent","DetailAccountFilterComponent","AutoselectListComponent","hasSearch","useCheckIcon","itemSelect","updateResults","loadMore","selectedOption","selectedItems","keyField","detailChoicesService","refreshHandler","apiState","buildData","accountdetails","accountname","selectedItem","productLine","clearUpdateListener","setSelectedItem","rawList","metricId","assaysDetails","assay","assays","diseaseState","diseasestate","updateListener","selectedValues","DetailCapitalServiceAssaySwitchesFilterComponent","DetailCategorySwitchesFilterComponent","BrPlaceholderComponent","DetailProductLineFilterComponent","DetailDiseaseStateFilterComponent","DetailCustomerFilterComponent","rawCustomers","customers","addedCustomerIds","productlines","diseaseStateDetails","rawProductLines","productline","productname","addedProductLines","BrStackedBarLineChartComponent","yAxisLabel","markUnits","valueSize","roundSizeStr","roundSize","roundUp","chartTopLimit","chartBottomLimit","yAxisMajorUnit","markUnitsPointCount","toTheNearest","dataFound","setHasData","BrMultiLineChartComponent","names2","axisassigments","tickCountRight","yrighttickcount","BrMultiBarChartComponent","periods","name1","name2","BrLineChartComponent","strYAxis","strYAxis2","strChartTitle","yAxisLabel2","BrPieChartComponent","BrStackedBarChartByProductComponent","BrTextIndicatorComponent","strScore","strColor","strSubTitle","subtitle","BrTopItemsComponent","overallColor","fieldColor","techColor","overallScore","fieldScore","techScore","BrExamplePieChartComponent","ApiTestComponent","PersonaOptionsService","Notification","students","apiCallIncrement","refreshCall","loadPersonaOptions","configType","apiCall","loadPersonaOptionList","NEVER","kind","undefinedValueNotification","completeNotification","delayFor","DelayOperator","SwUpdate","SwPush","notification","DelayMessage","_schedule","scheduleNotification","createNext","createComplete","ERR_SW_NOT_SUPPORTED","serviceWorker","controllerChanges","controller","controllerWithChanges","worker","registration","getRegistration","payload","sw","postMessage","toPromise","nonce","waitForStatus","eventsOfType","subscriptionChanges","messages","notificationClicks","pushManager","workerDrivenSubscriptions","getSubscription","pushOptions","userVisibleOnly","decodeBase64","serverPublicKey","applicationServerKey","success","atob","statusNonce","generateNonce","postMessageWithStatus","SwRegistrationOptions","ngswAppInitializer","readyToRegister$","registrationStrategy","stable","ngswCommChannelFactory","PushNotificationService","ServiceWorkerModule","ServerHashParamKeys","TemporaryCacheKeys","PersistentCacheKeys","ErrorCacheKeys","SSOTypes","subscribeRoute","sendRoute","CryptoUtils","createNewGuid","cryptoObj","crypto","getRandomValues","decimalToHex","guidHolder","guidResponse","isGuid","base64Encode","btoa","base64Decode","encodedString","deserialize","Constants","_popUpWidth","_popUpHeight","openidScope","profileScope","AuthorityType","BlacklistedEQParams","SID","LOGIN_HINT","PromptState","LOGIN","SELECT_ACCOUNT","CONSENT","AuthError","errorMessage","createUnexpectedError","errDesc","AuthErrorMessage","createNoWindowObjectError","StringUtils","validateAndParseJsonCacheKey","parsedKey","ClientAuthErrorMessage","ClientAuthError","createEndpointResolutionError","errDetail","createPopupWindowError","createTokenRenewalTimeoutError","createInvalidIdTokenError","idToken","createInvalidStateError","invalidState","actualState","createNonceMismatchError","invalidNonce","actualNonce","createLoginInProgressError","createAcquireTokenInProgressError","createUserCancelledError","createErrorInCallbackFunction","errorDesc","createUserLoginRequiredError","createUserDoesNotExistError","createClientInfoDecodingError","caughtError","createClientInfoNotPopulatedError","createIdTokenNullOrEmptyError","invalidRawTokenString","createIdTokenParsingError","caughtParsingError","createTokenEncodingError","incorrectlyEncodedToken","createInvalidInteractionTypeError","createCacheParseError","createBlockTokenRequestsInHiddenIframeError","ClientConfigurationErrorMessage","ClientConfigurationError","createNoSetConfigurationError","createStorageNotSupportedError","givenCacheLocation","createRedirectCallbacksNotSetError","createInvalidCallbackObjectError","callbackObject","createEmptyScopesArrayError","scopesValue","createScopesNonArrayError","createScopesRequiredError","createInvalidPromptError","promptValue","createClaimsRequestParsingError","claimsRequestParseError","createEmptyRequestError","createInvalidCorrelationIdError","createKnownAuthoritiesNotSetError","createInvalidAuthorityTypeError","createUntrustedAuthorityError","createTelemetryConfigError","requiredKeys","applicationName","applicationVersion","telemetryEmitter","createSsoSilentError","createInvalidAuthorityMetadataError","ScopeSet","isIntersectingScopes","cachedScopes","scopes","convertedCachedScopes","trimAndConvertArrayToLowerCase","requestScopes","containsScope","trimAndConvertToLowerCase","trimScopes","scopeVal","parseScope","scopeList","validateInputScope","scopesRequired","getScopeFromState","resourceDelimiter","appendScopes","reqScopes","reqExtraScopesToConsent","convertedExtraScopes","convertedReqScopes","onlyContainsOidcScopes","scopesCount","oidcScopesFound","containsAnyOidcScopes","containsOpenIdScope","containsProfileScope","onlyContainsClientId","clientId","appendDefaultScopes","extendedScopes","removeDefaultScopes","translateClientIdIfSingleScope","oidcScopes","UrlUtils","createNavigateUrl","serverRequestParams","createNavigationUrlString","authEndpoint","authorityInstance","AuthorizationEndpoint","redirectUri","xClientSku","xClientVer","claimsValue","queryParameters","extraQueryParameters","correlationId","getCurrentUrl","removeHashFromUrl","replaceTenantPath","tenantId","lowerCaseUrl","urlObject","GetUrlComponents","pathArray","PathSegments","ORGANIZATIONS","CONSUMERS","constructAuthorityUriFromObject","CanonicalizeUri","Protocol","HostNameAndPort","isCommonAuthority","authority","isOrganizationsAuthority","isConsumersAuthority","regEx","urlComponents","AbsolutePath","pathSegments","Search","urlRemoveQueryStringParameter","getHashFromUrl","urlStringOrFragment","hashIndex1","hashIndex2","urlContainsHash","urlString","deserializeHash","ERROR_DESCRIPTION","ERROR","ACCESS_TOKEN","ID_TOKEN","urlFragment","getHostFromUri","uri","utid","homeAccountIdentifier","AccessTokenValue","accessToken","expiresIn","ServerRequestParameters","CanonicalAuthority","populateQueryParams","adalIdTokenObject","silentCall","claimsRequest","isSSOParam","constructUnifiedCacheQueryParameter","addHintParameters","eQParams","generateQueryParametersString","idTokenObject","ssoType","ssoData","sid","userName","loginHint","upn","addSSOParameter","qParams","ssoParam","paramsString","domain_hint","determineResponseType","accountsMatch","responseTypeForMatchingAccounts","XhrClient","sendRequestAsync","enableCaching","jsonResponse","statusCode","TrustedAuthority","setTrustedAuthoritiesFromConfig","validateAuthority","knownAuthorities","getTrustedHostList","TrustedHostList","getAliases","authorityToVerify","telemetryManager","client","instanceDiscoveryEndpoint","httpEvent","createAndStartHttpEvent","DEFAULT_AUTHORITY","httpResponseStatus","stopEvent","serverErrorCode","setTrustedAuthoritiesFromNetwork","IsInTrustedHostList","LogLevel","Authority","authorityMetadata","IsValidationEnabled","validateAsUri","tenantDiscoveryResponse","isAdfs","authorityUrl","ADFS","canonicalAuthority","Adfs","CanonicalAuthorityUrlComponents","validateResolved","Tenant","EndSessionEndpoint","Issuer","hasCachedMetadata","canonicalAuthorityUrlComponents","DiscoverEndpoints","openIdConfigurationEndpoint","resolveEndpointsAsync","openIdConfigurationEndpointResponse","GetOpenIdConfigurationEndpoint","DefaultOpenIdConfigurationEndpoint","ClientInfo","rawClientInfo","decodedClientInfo","clientInfo","stripPolicyFromUid","_uid","_utid","createClientInfoFromIdToken","uidSegments","urlSegments","policy","encodeClientInfo","TimeUtils","parseExpiresIn","relativeNowMs","TokenUtils","decodeJwt","jwtToken","JWSPayload","JWSSig","validateExpirationIsWithinOffset","expiration","tokenRenewalOffsetSeconds","extractIdToken","encodedIdToken","decodedToken","base64Decoded","rawIdToken","claims","issuer","objectId","preferredName","homeObjectId","cloudInstance","AccessTokenCacheItem","BrowserStorage","cacheLocation","enableCookieStorage","setItemCookie","getItemCookie","removeItem","cName","cValue","expires","getCookieExpirationTime","clearItemCookie","cookieLifeDays","RequestUtils","validateRequest","isLoginCall","interactionType","extraScopesToConsent","validatePromptParameter","validateEQParameters","validateClaimsRequest","validateAndGenerateState","validateAndGenerateCorrelationId","userState","generateLibraryState","stateObject","ts","stateString","parseLibraryState","libraryState","interactionTypeRedirect","createRequestSignature","AuthCache","storeAuthStateInCookie","rollbackEnabled","migrateCacheEntries","clientInfoKey","cachePrefix","CLIENT_INFO","errorKey","errorDescKey","ERROR_DESC","idTokenValue","IDTOKEN","aud","values_1","duplicateCacheEntry","generateCacheKey","addInstanceId","adalIdToken","matchKeyForType","tokenType","accountMatches","tokenTypeMatches","resetCacheItems","storage","resetTempCacheItems","stateId","isTokenRenewalInProgress","tokenRenewalInProgress","INTERACTION_STATUS","REDIRECT_REQUEST","getAllTokensByType","matchedTokenKey","newAccessTokenCacheItem","getAllAccessTokens","getAllIdTokens","getAllTokens","accessTokens","idTokens","stateValue","renewStatus","generateTemporaryCacheKey","RENEW_STATUS","inProgress","clearMsalCookie","NONCE_IDTOKEN","STATE_LOGIN","LOGIN_REQUEST","STATE_ACQ_TOKEN","generateAcquireTokenAccountKey","accountId","ACQUIRE_TOKEN_ACCOUNT","generateAuthorityKey","AUTHORITY","tempCacheKey","accountIdentifier","idTokenClaims","createAccount","compareAccounts","WindowUtils","isInIframe","isInPopup","opener","generateFrameName","requestSignature","monitorIframeForHash","contentWindow","urlNavigate","logger","timeoutMark","verbose","intervalId","errorPii","POLLING_INTERVAL_MS","monitorPopupForHash","maxTicks","clearUrlFragment","loadFrame","frameName","timeoutMs","infoPii","frameHandle","loadFrameSync","addHiddenIFrame","iframeId","adalFrame","getElementById","ifr","insertAdjacentHTML","frames","removeHiddenIframe","iframe","getIframeWithHash","iframes","getPopups","openedWindows","getPopUpWithHash","trackPopup","closePopups","blockReloadInHiddenIframes","checkIfBackButtonIsPressed","cacheStorage","redirectCache","splitCache","ResponseUtils","setResponseIdToken","originalResponse","idTokenObj","expiresOn","buildAuthResponse","authResponse","serverAuthenticationRequest","accountState","AuthorityFactory","saveMetadataFromNetwork","metadataMap","getMetadata","saveMetadataFromConfig","authorityMetadataJson","parsedMetadata","authorization_endpoint","end_session_endpoint","CreateInstance","Logger","localCallback","Info","_c","piiLoggingEnabled","logMessage","logLevel","containsPii","executeCallback","warning","Warning","warningPii","Verbose","verbosePii","isPiiLoggingEnabled","DEFAULT_AUTH_OPTIONS","postLogoutRedirectUri","navigateToLoginRequestUrl","DEFAULT_CACHE_OPTIONS","DEFAULT_SYSTEM_OPTIONS","loadFrameTimeout","navigateFrameWait","DEFAULT_FRAMEWORK_OPTIONS","isAngular","unprotectedResources","protectedResourceMap","ServerError","createServerUnavailableError","createUnknownServerError","InteractionRequiredAuthErrorMessage","InteractionRequiredAuthError","isInteractionRequiredError","errorString","createLoginRequiredAuthError","createInteractionRequiredAuthError","createConsentRequiredAuthError","buildResponseStateOnly","fromCache","API_CODE","API_EVENT_IDENTIFIER","scrubTenantFromUri","pathParams","tenantPosition","hashPersonalIdentifier","valueToHash","prependEventNamePrefix","supportsBrowserPerformance","mark","TelemetryEvent","eventLabel","eventId","setElapsedTime","measureName","startMark","endMark","startTimestamp","perfStartMark","perfEndMark","clearMeasures","clearMarks","telemetryCorrelationId","DefaultEvent","eventCount","sdk","sdkVersion","networkInformation","connectionSpeed","getEventCount","EVENT_KEYS","BroadcastService","MsalGuard","MsalService","MsalModule_1","MsalModule","mapEventIdentiferToCode","AcquireTokenSilent","AcquireTokenPopup","AcquireTokenRedirect","LoginPopup","LoginRedirect","Logout","ApiEvent","piiEnabled","apiEventIdentifier","apiCode","wasSuccessful","authorityType","promptType","HttpEvent","scrubbedUri","httpPath","apiVersion","httpMethod","requestIdHeader","speInfo","subErrorCode","TelemetryManager","completedEvents","inProgressEvents","eventCountByCorrelationId","onlySendFailureTelemetry","telemetryPlatform","libraryName","effectiveType","getTelemetrymanagerStub","startEvent","incrementEventCount","orphanedEvents","getOrphanedEvents","eventsToFlush","eventCountsToFlush","defaultEvent","eventsWithDefaultEvent","createAndStartApiEvent","apiEvent","stopAndFlushApiEvent","apiErrorCode","correlation","memo","eventKey","event_1","AuthCacheUtils","filterTokenCacheItemsByScope","tokenCacheItems","cacheItem","searchScopes","filterTokenCacheItemsByAuthority","filterTokenCacheItemsByDomain","requestDomain","UserAgentApplication","configuration","system","framework","authResponseCallback","tokenReceivedCallback","errorReceivedCallback","inCookie","getTelemetryManagerFromConfig","telemetry","activeRenewals","renewStates","callbackMappedToRenewStates","promiseMappedToRenewStates","msal","urlHash","getResponseState","handleRedirectAuthenticationResponse","getAuthorityInstance","handleRedirectCallback","authOrTokenCallback","redirectError","authErrorHandler","redirectResponse","authResponseHandler","interactionTypePopup","authErr","loginRedirect","userRequest","acquireTokenInteractive","acquireTokenRedirect","loginPopup","acquireTokenPopup","interactionProgress","stateOnlyResponse","getAccountState","getAccount","acquireTokenHelper","extractADALIdToken","tokenRequest","buildIDTokenRequest","silentLogin","acquireTokenSilent","acquireTokenAuthority","popUpWindow","loginStartPage","error_1","err_1","getTokenType","redirectStartPage","getRedirectUri","updateCacheEntries","response_mode_fragment","requestType","login","renewToken","registerCallback","popUpWidth","popUpHeight","handleAuthenticationResponse","broadcast","onRedirectNavigate","navigateWindow","ssoSilent","interactionTypeSilent","userContainedClaims","cacheResultResponse","err_2","forceRefresh","getCachedToken","renewIdToken","winLeft","screenLeft","screenX","winTop","screenTop","screenY","popupWindow","loadIframeTimeout","expectedState","error_2","logout","logoutAsync","requestCorrelationId","correlationIdParam","postLogoutQueryParam","error_3","clearCache","getPostLogoutRedirectUri","clearCacheForScope","accessTokenItems","isCallback","processCallBack","stateInfo","parentCallback","saveTokenFromHash","locationHash","tokenResponseCallback","loginRequestUrl","finalRedirectUrl","loginRequestUrlComponents","stateResponse","STATE","parsedState","unknown","stateMatch","silentAuthenticationState","statesInParentContext","getCachedIdToken","getCachedAccessToken","getTokenCacheItemByAuthority","filteredAuthorityItems","accessTokenCacheItem","idTokenCacheItems","idTokenCacheItem","evaluateTokenExpiration","scopeFilteredTokenCacheItems","aState","tokenCacheItem","prompt_none","saveToken","accessTokenKey","accessTokenValue","saveIdToken","idTokenResponse","saveAccessToken","accessTokenResponse","SCOPE","consentedScopes","accessTokenCacheItems","EXPIRES_IN","hashParams","authorityKey","acquireTokenAccountKey","LOGIN_ERROR","no_account","hashErrDesc","SESSION_STATE","populateAuthority","accountKey","acquireTokenAccountKey_noaccount","cachedAccount","acquireTokenAccount","cachedNonce","cachedAuthority","getAllAccounts","accounts","getUniqueAccounts","uniqueAccounts","CustomEvent","getCachedTokenInternal","accountObject","newAuthority","getScopesForEndpoint","endpoint","getLoginInProgress","setInteractionInProgress","setloginInProgress","loginInProgress","getAcquireTokenInProgress","setAcquireTokenInProgress","acquireTokenInProgress","getLogger","setLogger","reqRedirectUri","getCurrentConfiguration","setAccountCache","getAccountId","setAuthorityCache","_msalSubject","msalItem$","MSALError","_errorDesc","_scopes","MSAL_CONFIG","MSAL_CONFIG_ANGULAR","msalConfig","msalAngularConfig","broadcastService","errorParts","msalError","authError","frameworkProtectedResourceMap","keyMatchesEndpointArray","keyForEndpoint","baseElements","pathUrl","popUp","consentScopes","getDestinationUrl","loginInteractively","defaultMsalAngularConfiguration","angularConfig","TooltipContentComponent_div_3_ng_template_1_Template","TooltipContentComponent_div_3_Template","ctx_r253","titleTemplate","TooltipContentComponent_ng_template_4_Template","TooltipContentComponent_ng_template_5_Template","templateString","TooltipContentComponent_div_6_Template","_r260","onCloseClick","ctx_r256","closeButtonTitle","TooltipContentComponent_div_7_Template","calloutPositionClass","TooltipSettings","TOOLTIP_SETTINGS","isDocumentNode","sel","getCenterOffset","containsItem","TooltipDirective","TooltipContentComponent","ToolSelectorComponent","TooltipModule","ButtonDirective","KendoButtonService","ButtonsModule","ChipModule","DropDownButtonModule","SplitButtonModule","ListModule","ButtonGroupModule","ButtonModule","ButtonGroupComponent","tooltipWidth","tooltipHeight","callout","calloutStyles","calloutSize","closable","dynamicRTLSubscription","closeTitle","offsetProperty","anchorCenter","contentCenter","cssClasses","cssPosition","tooltipWrapper","legacySettings","showAfter","validPositions","validShowOptions","anchorTitleSubscription","filterElement","hideElementTitle","mouseOverSubscription","onMouseOver","mouseOutSubscription","onMouseOut","showOn","showTimeout","showContent","popupMouseOutSubscription","closeClickSubscription","previousAnchor","verifyProperties","subscribeClick","mouseClickSubscription","popupPositionChangeSubscription","anchorRef","bindContent","contentComponent","inputcollision","alignSettings","popupMargin","tooltipClass","updateCalloutPosition","onMouseClick","tooltipTemplate","COMPONENT_MODULES","mycrl","toolOptions","ct","alerts","gsalerts","businessreview","toolOption","getToolOption","buttonLookChange","buttonClicked","buttonClicked$","look","toggleable","selectedChange","isIcon","isIconClass","_focused","_selected","iconSetter","addIcon","updateIconNode","iconClassName","imageUrl","addImgIcon","removeImageNode","toggleClass","isSpan","buttonLookChangeSubscription","togglable","toggleAriaPressed","_onButtonClick","setIconTextClasses","imageNode","iconNode","deferTimeout","unbindHandler","attribute","shouldSet","prependChild","insertIcon","removeIconNode","hasIcon","hasText","setSelected","roleSetter","classDisabled","classButton","classPrimary","isBare","isOutline","isClear","classActive","_tabIndex","currentTabIndex","isSelectionSingle","navigateFocus","defocus","setButtonLook","newSelectionValue","getRole","wrapperTabIndex","stretchedClass","BookmarksComponent","bkMenuViable","apiRoute","links","globallink","sortBookmarks","iValue","displayname","jValue","onToggle","screenWidth","LabelModule","FloatingLabelModule","LabelDirective","labelClass","getFocusableComponent","fileSelect","HTMLInputElement","hidden","setAriaLabelledby","clickListener","labelTarget","labelFor","for","PreferencesComponent","AccountRepComponent","ManagerAmbSelectorComponent","GeoLocationSelectorComponent","CuaManagerSelectorComponent","ManagerSelectorComponent","TssAmbassadorSelectorComponent","primaryDisabled","secondaryDisabled","tertiaryDisabled","getNavFilterSelectionSubject","requireOne","savePreferences","prefCurrencyChoices","countChecked","Personas","authSet","dataHasExtras","users","customizeData","user511","userUPI","onPersonaChoiceUpdate","getLabel","firstName","lastName","mgr511","mgrUpi","setManager","selectedTab","areaData","countryData","molecularOrgData","regionData","serviceManagerData","apiConfig","areas","countries","molecularorgs","regions","servicemanagers","getTypeOfSelectedItem","onSelectedChange","getDataItemByKeyField","acctRep511","acctRepUpi","StateHandlerSearchComponent","noResultsMessage","CtCustomerSelectorComponent","CustomerSelectListComponent","displayField","totalRecordsFound","totalRecordsReturned","customerName","customerNum","uniqueCustomerKey","setCustomerOverride","CtAccountSelectorComponent","AccountSelectListComponent","acctEntityName","acctEntityId","ToggleSwitchComponent","PersonaSelectorComponent","cdRef","menuViable","isService","lastSelectedDashboardTabInfo","selectedType","selectedValue","selectedLabel","menuText1","menuText2","updateSelections","onTabChange","getServiceVsAmbState","level1Choice","textPieces","buildPhrase","personaOptions","menuTabs","TssAmbassador","AmbManager","GeoLocation","personas","selectedPersona","stateOn","filterKey","CustomerToggleComponent","InstrumentToggleComponent","TrackToggleComponent","FlagshipToggleComponent","AccountComponent","SnSelectorComponent","InstrumentSelectorComponent","CustomerSelectorComponent","ParameterSwitchesComponent","customersrno","sub_label","city","country","PersonaSelector2Component","level2Choice","DialogActionsComponent_0_Template","DialogActionsComponent_ng_container_1_button_1_Template","_r122","action_r120","onButtonClick","buttonClass","DialogActionsComponent_ng_container_1_Template","ctx_r117","DialogActionsComponent_2_ng_template_0_Template","DialogActionsComponent_2_Template","DialogComponent_kendo_dialog_titlebar_4_Template","ctx_r124","DialogComponent_5_Template","DialogComponent_7_Template","DialogComponent_8_ng_template_0_Template","DialogComponent_8_Template","contentTemplate","DialogComponent_9_Template","DialogComponent_kendo_dialog_actions_10_Template","ctx_r129","actionsLayout","WindowTitleBarComponent_0_Template","WindowTitleBarComponent_1_ng_template_0_Template","WindowTitleBarComponent_1_Template","ctx_r132","WindowComponent_kendo_window_titlebar_3_Template","ctx_r134","titleBarTemplate","minimizeButtonTitle","maximizeButtonTitle","restoreButtonTitle","WindowComponent_4_Template","WindowComponent_div_5_1_Template","WindowComponent_div_5_2_ng_template_0_Template","WindowComponent_div_5_2_Template","WindowComponent_div_5_Template","ctx_r136","keepContent","WindowComponent_ng_template_6_div_0_Template","WindowComponent_ng_template_6_Template","resizeDirections","DialogActionsComponent","DialogTitleBarComponent","DialogContainerService","DialogContentBase","DialogComponent","DialogService","WindowRestoreActionDirective","WindowCloseActionDirective","WindowMinimizeActionDirective","WindowMaximizeActionDirective","WindowComponent","WindowTitleBarComponent","ResizeHandleDirective","DragResizeService","WindowContainerService","WindowService","DialogsModule","WindowModule","DialogModule","buttonGroupClassName","actionTemplate","focusableRegex","namesList","isFocusable","checkVisibility","validTabIndex","focusableSelector","RESIZE_DIRECTIONS","OFFSET_STYLES","createValueWithUnit","DialogCloseResult","DIALOG_LOCALIZATION_SERVICE","_elRef","generateTitleId","handleActionButtonFocus","keepFocusWithinComponent","titlebarContent","handleInitialFocus","titlebarView","actionsView","primaryButton","autoFocusedElement","initiallyFocusedElement","shouldFocusPrimary","focusableActionButtons","getAllFocusableChildren","firstFocusable","lastFocusable","getLastFocusableElement","tabBeforeFirstFocusable","tabAfterLastFocusable","tabWithNoFocusable","minHeight","maxHeight","onComponentKeydown","dialog","dialogTitleBar","dialogActions","DialogInjector","getDialogRef","containerService","actionNodes","initializeDialog","dialogRef","apiClose","preventAction","dialogRefParameter","hasContentTitle","hasContentActions","multipleTitles","multipleActions","titleNodes","newZIndex","resizable","createMoveStream","originalY","stateChange","resizeStart","resizeEnd","lastAction","dragSubscription","state$$1","restoreOptions","dragStarted","currentPosition","ensureWidth","handleDrag","startOffsetAndPosition","resizeStarted","currentOffsetAndPosition","handleResize","old","newWidth","newHeight","style$$1","defaultState","maximizeState","storeOptions","minimizeState","clearHeight","windowOffset","setDisplay","dragDirective","isDraggable","subscribeDrag","subscribeStateChange","unsubscribeDrag","unsubscribeState","titleBar","onDrag","stateSubscription","maximizeAction","restoreAction","minimizeAction","handleArrow","handleStateChange","closeAction","navigation","widthChange","heightChange","topChange","leftChange","draged","resized","windowSubscription","setOption","restoreTitle","maximizeTitle","minimizeTitle","setNextZIndex","setInitialOffset","titleBarContent","titleBarView","applyManualState","updateAllOffset","dimension","currentZIndex","nextPossibleZIndex","nextZIndex","setRestoreOption","resizeHandles","onComponentFocus","onComponentBlur","styleMinWidth","styleMinHeight","stylePosition","wrapperMaximizedClass","wrapperMinimizedClass","showDefaultTitleBar","_service","buttonType","WindowCloseResult","WindowInjector","getWindowRef","windowRef","SearchPopupComponent","searchValue","searchQuery","snlist","selectedKey","submit","getCurrentSelectedItems","selectTab","DashboardNavbarComponent","isAmbTabVisible","dashboardOption","closeSidebar","DetailPersonaSelectorComponent","onDisplayCallbacks","titles","detailAccountFilter","detailAssayFilter","detailCustomerIdFilter","detailDiseaseStateFilter","detailIsCapitalFilter","detailIsFieldServiceContractFilter","detailIsOtherFilter","detailIsReagentFilter","detailIsServiceFilter","detailProductLineFilter","getFilterSelections","applyFilters","clearFilters","CtServiceService","MetricDetailNavbarComponent","navigateBackwardsLink","getNavigateBackwardsLink","customerScopeChangeCallbacks","callbackScopeIndex","callbackIndex","customerSelectionChangeCallbacks","hasSetCustomerId","returnCustomer","customerScope","callCustomerScopeChangeCallbacks","callbackKey","callCustomerSelectionChangeCallbacks","returnCustomerParam","CtProductSetSelectorComponent","filterService","menuVisible","prdFamilySetDisplayVal","prdFamilySetId","prdFamilySetDefault","GsAlertsNavbarComponent","AlertsNavbarComponent","CtNavbarComponent","ctService","setCustomerScope","clickEvent","MetricDetailNoFilterComponent","PresentationToggleSwitchComponent","updateToggleState","BrNavbarComponent","getNavbarIsVisibleSubject","AppComponent","personaOptionsService","swPush","pushNotificationService","msalAuthService","isIframe","loggedIn","isAuthenticating","VAPID_PUBLIC_KEY","acquireTokenSuccessSubscription","id_token","initialLoad","loadPreferences","acquireTokenFailureSubscription","getNavbarChoiceSubject","navbar","getMSALSubject","loginSuccessSubscription","loginFailureSubscription","requestSubscription","addPushSubscriber","SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT","componentName","detailLink","axis2VisibleLabels","goalPercentageSlideLabel","useDataArray","preSpacing","renderForServiceContracts","TileInsertComponent","factoryResolver","loadDynamicComponent","dynamicComponentRef","DashboardComponent","RowParserService","arrangement","managerDataLoaded","preferencesLoaded","updateManagerIdHackLoadManagerListAndPreferences","setNavbarChoice","setNavFilterSelection","personaSelector","dashboardSelector","toolSelection","legacyCustomersFlag","myVsAllInstrumentsFlag","customerWTrackSystemsFlag","flagshipProductLinesFlag","bookmarksFlag","navigateBackwards","navigateBackwardsLabel","viewTitle","viewTitleText","viewSubtitle","viewSubtitleText","filtered","prefRequestHandler","updateManagerIdHackFixPersona","managerApiData","level1PersonaChoice","Style1Pages","serviceVsAmb","pageTitle","apiRequestHandler","exportFileName","level2DetailLink","dataCols","dataParse","stackIndex","stackGoalsIndex","dataRows","rowColors","description","dataValues","percentInstalled","numberInstalled","percentNotInstalled","numberNotInstalled","goalpercentage","valueColors","colorRowDescriptions","customStyle","percentHold","numberHold","quantity","percentOpen","numberOpen","percentClosed","numberClosed","percentGuaranteeAchieved","numberGuaranteeAchieved","percentGuaranteeNotAchieved","numberGuaranteeNotAchieved","percentNotEligible","numberNotEligible","subTitle","customValueIfBlank","currencyStyleForAMB","dataColsLocal","percentReagent","reagentUSD","amtdollar","percentCapital","capatalUSD","percentService","serviceUSD","percentOther","otherUSD","dataValuesLocal","reagentLocal","amtlocal","capitalLocal","serviceLocal","otherLocal","filterOnChildProperty","gridState","exportState","allData","updateGrid","gridData","inFilter","updateFiltersToHandleChildProperty","loadData","userWindowHeight","screen","availHeight","userWindowWidth","availWidth","detectMob","RowParsers","stackKeys","sourceData","stackValues","rowData","stackTotals","sourceItem","totals","devideBy","percentGoals","pointValues","rowParsers","ZipOperator","iterators","StaticIterator","stillUnsubscribed","shouldComplete","_tryresultSelector","isComplete","notifyInactive","checkIterators","switchMapTo","innerObservable","DistinctUntilChangedOperator","keySelector","hasKey","BufferCountOperator","bufferSize","startBufferEvery","subscriberClass","buffers","cloneDate","newDate","addDays","setDate","candidate","lastDayOfMonth","addMonths","expectedMonth","setMonth","setYear","addYears","addDecades","addCenturies","normalizeYear","firstDecadeOfCentury","lastDecadeOfCentury","firstYearOfDecade","durationInCenturies","lastYearOfDecade","durationInDecades","addWeeks","firstDayOfMonth","Direction","weekDay","Forward","newDay","durationInMonths","firstMonthOfYear","lastMonthOfYear","durationInYears","calcWeekInYear","firstWeekInYear","diffInMS","Monday","Backward","weekInYear","prevWeekDate","nextWeekDate","weekNumber","ObserveOnMessage","scheduleMessage","createError","windowTime","_infiniteTimeWindow","_bufferSize","_windowTime","nextInfiniteTimeWindow","nextTimeWindow","ReplayEvent","_getNow","_trimBufferThenGetEvents","eventsCount","spliceCount","cancelAnimationFrame","animationFrameScheduler","TakeWhileOperator","inclusive","nextOrComplete","predicateResult","NavigationComponent_li_4_ng_template_2_Template","date_r104","navigationTitle","NavigationComponent_li_4_ng_template_3_Template","activeView","NavigationComponent_li_4_Template","index_r105","ctx_r103","isRangeStart","activeViewValue","ViewListComponent_table_1_th_3_Template","name_r114","colWidth","ViewListComponent_table_1_Template","ctx_r109","weekNames","ViewListComponent_col_6_Template","ViewListComponent_tbody_7_Template","_r118","handleDateChange","date_r116","ctx_r112","cellUID","focusedDate","cellTemplateRef","weekNumberTemplateRef","CalendarComponent_kendo_calendar_navigation_2_Template","_r121","handleNavigation","onPageChange","ctx_r119","activeViewEnum","navigationItemTemplate","DateInputComponent_span_6_Template","ctx_r128","handleButtonClick","ctx_r125","DatePickerComponent_ng_template_10_ng_template_3_Template","DatePickerComponent_ng_template_10_Template","_r142","handleChange","mergeTime","bottomView","topView","cellTemplate","monthCellTemplate","yearCellTemplate","decadeCellTemplate","centuryCellTemplate","weekNumberTemplate","headerTitleTemplate","disabledDates","HeaderComponent_ng_template_1_Template","HeaderComponent_ng_template_2_Template","_c80","ViewComponent_ng_template_0_Template","ViewComponent_tr_2_Template","ctx_r175","colSpan","ViewComponent_tr_3_th_1_Template","name_r179","ViewComponent_tr_3_Template","ctx_r176","ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template","row_r180","getWeekNumber","firstDate","ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template","_c81","cellContext","ViewComponent_tr_4_ng_template_1_td_0_Template","getWeekNumberContext","ViewComponent_tr_4_ng_template_1_Template","_r173","ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template","ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template","ViewComponent_tr_4_ng_container_2_td_1_3_Template","cell_r190","ViewComponent_tr_4_ng_container_2_td_1_Template","ctx_r198","cellIndex_r191","rowIndex_r181","ctx_r192","getStyles","tableCellIndex","isRangeMid","isRangeEnd","ViewComponent_tr_4_ng_container_2_Template","ViewComponent_tr_4_Template","ctx_r177","Action","CenturyViewService","DecadeViewService","MonthViewService","YearViewService","BusViewService","navElement","CalendarDOMService","EMPTY_SELECTIONRANGE","MIN_DATE","MAX_DATE","setTime","dateInRange","getToday","shiftWeekNames","domContainerFactory","hasExistingValue","isInSelectionRange","selectionRange","EMPTY_DATA","ACTIONS","PrevView","NextView","FirstInView","LastInView","cellDate","isActiveView","selectedDate","viewDate","cells","lastDate","isSelectedDateInRange","rowOffset","baseDate","cellOffset","isWeekend","isRangeSplitEnd","isRangeSplitStart","isToday","cellTitle","aboveMin","belowMax","firstYear","viewsCount","viewsInRange","EMPTY_DATA$1","ACTIONS$1","EMPTY_DATA$2","ACTIONS$2","isDateDisabled","firstMonthDate","firstMonthDay","lastMonthDate","lastMonthDay","cellDay","lowerBound","beginningOfPeriod","upperBound","abbrMonthNames","wideMonthNames","prependCell","EMPTY_DATA$3","ACTIONS$3","changedYear","candidateValue","CalendarViewEnum","services","decade","century","viewChanged","ul","li","td","th","tbody","thead","scrollable","navigationList","viewFactory","renderWeekHeader","viewElement","contentElement","getScrollable","monthView","yearView","decadeView","getBody","hostClone","calendarHeight","calculateHeights","hostContainer","batch","monthViewHeight","headerHeight","scrollableContentHeight","calendarWidth","monthViewWidth","scrollableContentWidth","yearViewHeight","scrollableYearContentHeight","yearViewWidth","decadeViewHeight","centuryViewHeight","decadeViewWidth","centuryViewWidth","navigationItemHeight","viewType","viewDimension","viewProp","RowHeightService","detailRowHeight","rowHeight","offsets","heights","rowIndex","updateRowHeight","ScrollAction","PageAction","scrollObservable","firstLoaded","bottomOffset","topOffset","rowHeightService","lastScroll","offsetBufferRows","rowsForHeight","skipWithOffset","offsetSize","firstItemIndex","lastItemIndex","nonVisibleBuffer","SCROLLER_FACTORY_TOKEN","DEFAULT_SCROLLER_FACTORY","VirtualizationComponent","ViewListComponent","NavigationComponent","PickerService","NavigationItemTemplateDirective","HeaderTitleTemplateDirective","WeekNumberCellTemplateDirective","CenturyCellTemplateDirective","DecadeCellTemplateDirective","YearCellTemplateDirective","MonthCellTemplateDirective","CellTemplateDirective","ScrollSyncService","DisabledDatesService","CalendarComponent","DateInputComponent","DatePickerComponent","CalendarMessages","TemplatesModule","CalendarCommonModule","ViewComponent","WeekNamesService","HeaderComponent","KForOf","DateInputMessages","CalendarModule","VirtualizationModule","CalendarCustomMessagesComponent","CalendarLocalizedMessagesDirective","DatePickerMessages","DateInputModule","DateInputLocalizedMessagesDirective","DatePickerCustomMessagesComponent","DatePickerLocalizedMessagesDirective","DatePickerModule","ScrollDirection","scrollModifiers","scrollNormalizers","scrollValidators","scrollerFactory","itemWidth","maxScrollDifference","scrollOffsetSize","scrollDuration","activeIndexChange","scrollChange","dispatcher","scroller","getContainerProperty","initServices","createRowHeightService","containerScrollSubscription","scroll$","emitActiveIndex","animationSubscription","containerScrollPosition","containerTop","containerBottom","containerOffsetSize","indexOffset","getContainerScrollDirection","scrollRange","scrollStep","modifyScroll","normalizeScroll","isScrollValid","containerScroll","maxScroll","containerMaxScroll","lastActiveIndex","containerScrollSize","wrapperClasses","horizontalClass","totalVertexLength","closestInScope","bus","indexToScroll","ensureHeights","maxViewHeight","intlSubscription","totalChanged","isInArray","datesList","getTake","virtualization","addToDate","getComponentClass","activeDateChange","cols","animateToIndex","minViewsToRender","showWeekNumbers","isMonthView","getWeekNames","getBottomOffset","viewHeight","rowLength","date1","date2","activeViewChanged","generateDates","activeDate","updateIndex","isIndexVisible","isListScrolled","getScrollableHeight","getComponentMonthClass","getComponentYearClass","getComponentDecadeClass","getComponentCenturyClass","headerTitleTemplateRef","setActiveDate","KEY_TO_ACTION","UpperView","LowerView","canMoveUp","moveUp","canMoveDown","moveDown","magnitude","divideByMagnitude","powerByMagnitude","navScrolled","monthScrolled","navSubscription","scrollSiblingOf","viewSubscription","scrolledElement","siblingComponent","calculateScroll","scrollableElement","sameDateSelected","dateCompletenessChange","minValidator","maxValidator","disabledWeekDays","normalizedDisabledDates","notifyInvalidInput","notifyServiceChange","virtualizationProp","CALENDAR_VALUE_ACCESSOR","CALENDAR_RANGE_VALIDATORS","KENDO_INPUT_PROVIDER","scrollSyncService","disabledDatesService","pickerService","activeViewChange","activeViewDateChange","_min","_max","_focusedDate","onControlChange","onControlTouched","onValidatorChange","syncNavigation","setClasses","focusedCellId","setAriaActivedescendant","initialize","bottomViewEnum","configure","viewChangeSubscription","verifyChanges","topViewEnum","sync","navigationView","unbindCallback","pageChangeSubscription","focusTarget","canNavigateDown","isSameDate","emitSameDate","emitBlur","emitFocus","isScrolled","arrowKeyPressed","widgetId","calendarTabIndex","monthCellTemplateRef","yearCellTemplateRef","decadeCellTemplateRef","centuryCellTemplateRef","navigationItemTemplateRef","tmp_3_0","currVal_3","activeCellTemplate","incompleteDateValidator","incomplete","incompleteDate","Arrow","DATE_PART_REGEXP","TIME_PART_REGEXP","SHORT_PATTERN_LENGTH_REGEXP","unpadZero","formatPlaceholder","leadingZero","monthNames","typedMonthPart","knownParts","allFormatedMonths","allDayPeriods","sampleFormat","dateFormatString","setExisting","splitDateFormat","getExisting","currentChar","resetSegmentValue","resetLeadingZero","switchToNext","dateParts","baseFormat","replaced","currentMaxLength","parsedDate","matchMonth","dayPeriod","matchDayPeriod","isZeroCurrentChar","isAbbrMonth","partMap","incrementLeadingZero","middleNumber","monthNumber","patternValue","partPattern","peekDate","patternSatisfied","hasLeadingZero","setLeadingZero","peekValue","typedChar","monthAsNum","lowerChart","dateFormatParts","partLength","resultText","resultFormat","currentSymbol","dateFieldName","ariaReadOnly","incompleteDateValidation","isPopupOpen","hasPopup","valueUpdate","formatSections","hasMousedown","focusedPriorToMousedown","isDateIncomplete","incompleteValidator","kendoDate","symbolsMap","dateSymbolMap","updateFormatSections","dateInput","verifyRange","isEqualToKendoDate","getDateObject","getKendoDate","updateElementValue","selectDateSegment","modifyDateSegmentValue","caret","modifyPart","putDateInRange","triggerChange","updateIncompleteValidationStatus","selectNearestSegment","previousFormatSymbol","selectionPresent","placeholderToggled","map$$1","texts","getTextAndFormat","showPlaceholder","isPosition","currentDate","mousewheelHandler","handleMouseWheel","switchDateSegment","updateOnPaste","oldTextOrigin","oldFormat","newTextOrigin","oldTextSeparator","oldText","newText","deletedSymbol","navigationOnly","switchPart","parsePart","handleMousedown","handleDragAndDrop","readOnlyInput","disabledDatesValidation","popupUID","_show","disabledDatesValidateFn","pickerSubscriptions","handleSameSelection","handleDateCompletenessChange","_disabledDates","disabledDate","windowBlurSubscription","focusInput","toggleFocus","handleWindowBlur","currentTarget","handleInputChange","inputRole","handleIconClick","KForOfContext","kForOf","kForTrackBy","viewContainerLength","tuples","kForTemplate","todayAvailable","l10nChange","setTodayAvailability","todayMessage","getTitle","moveToBottom","nextDate","isTodayInRange","handleTodayClick","includeWeekNumber","weekService","cellEnter","cellLeave","disabledDatesChange","cellIndex","isHorizontal","updateData","currentCellIndex","unsubscribeCallback","rowCtx","firstWeekDateContext","activeRangeEnd","cellMouseoverHandler","mouseLeaveHandler","cell","closestCell","cellByIndex","emitCellLeave","ɵCalendarMessages_BaseFactory","ɵDateInputMessages_BaseFactory","ɵDatePickerMessages_BaseFactory","saveAsBlob","fileName","blob","contentType","base64","msSaveBlob","saveAsDataURI","dataURI","createObjectURL","fileSaver","download","initMouseEvent","revokeObjectURL","postToProxy","proxyURL","proxyTarget","proxyData","defaultGroupHeaderTemplate","createArray","defaultItemId","external","nodebuffer","nodestream","_keyStr","stringToArrayLike","stringifyByChunk","fromCharCodeSupportsTypedArrays","uint8array","arrayLikeToString","getTypeOf","canUseApply","resultStr","applyFromCharCode","arrayLikeToArrayLike","arrayFrom","arrayTo","transformTo","outputType","checkSupport","inputType","arraybuffer","pretty","prepareContent","isOptimizedBinaryString","isBase64","FileReader","reader","readAsArrayBuffer","dataType","resultIndex","totalLength","GenericWorker","streamInfo","generatedError","extraStreamInfo","isPaused","isFinished","isLocked","_listeners","me","cleanUp","registerPrevious","mergeStreamInfo","processChunk","withError","_utf8len","utf8encode","utf8decode","Utf8DecodeWorker","leftOver","previousData","nextBoundary","usableData","Utf8EncodeWorker","ConvertWorker","destType","StreamHelper","mimeType","internalType","_internalType","_outputType","_mimeType","_worker","helper","updateCallback","dataArray","chunkType","resultType","remainingBytes","binary","createFolders","compression","compressionOptions","unixPermissions","dosPermissions","DataWorker","dataP","dataIsReady","_tickScheduled","_tickAndRepeat","_tick","DataLengthProbe","withStreamInfo","crc32wrapper","Crc32Probe","CompressedObject","compressedSize","uncompressedSize","compressedContent","uncompressWorker","that","uncompressedWorker","compressWorker","ZipObject","_dataBinary","askUnicodeString","_decompressWorker","isUnicodeString","internalStream","accumulate","magic","getCompressedWorker","createWorkerFrom","getContentWorker","arrayType","Uint32Array","_pako","_pakoAction","_pakoOptions","_createPako","compressions","STORE","DEFLATE","decToHex","dec","bytes","generateZipParts","streamedContent","streamingEnded","encodeFileName","dosTime","dosDate","useCustomEncoding","encodedFileName","utfEncodedFileName","encodedComment","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","dataInfo","bitflag","extFileAttr","versionMadeBy","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","fileRecord","dirRecord","CENTRAL_FILE_HEADER","generateDataDescriptors","ZipFileWorker","streamFiles","bytesWritten","zipComment","zipPlatform","contentBuffer","dirRecords","currentSourceOffset","entriesCount","currentFile","_sources","currentFilePercent","remainingFiles","localDirLength","dirEnd","centralDirLength","CENTRAL_DIRECTORY_END","openedSource","closedSource","prepareNextSource","DataReader","checkIndex","setIndex","checkOffset","byteAt","readData","sig","dostime","readInt","ArrayReader","sig0","sig1","sig2","sig3","StringReader","Uint8ArrayReader","readerFor","ZipEntry","loadOptions","bitFlag","localExtraFieldsLength","fileNameLength","compressionMethod","decompressed","readString","readDate","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","localHeaderOffset","isEncrypted","readExtraFields","parseZIP64ExtraField","fileComment","madeBy","fileNameStr","extraReader","extraFieldId","extraFieldLength","extraFieldValue","decodeParamType","useUTF8","fileCommentStr","upath","findExtraFieldUnicodePath","fileNameByteArray","decodeFileName","ucomment","findExtraFieldUnicodeComment","commentByteArray","upathField","ucommentField","ZipEntries","files","readLocalFiles","expectedSignature","readAndCheckSignature","signature","askedIndex","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","decodeContent","zip64EndOfCentralSize","zip64ExtensibleData","extraDataSize","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","checkSignature","readLocalPart","handleUTF8","processAttributes","zip64","readCentralPart","lastIndexOfSignature","isSignature","endOfCentralDirOffset","readBlockEndOfCentral","readBlockZip64EndOfCentralLocator","readBlockZip64EndOfCentral","expectedEndOfCentralDirOffset","extraBytes","prepareReader","readEndOfCentral","readCentralDir","nodejsUtils","checkEntryCRC32","zipEntry","checkCRC32","optimizedBinaryString","isStream","zipEntries","fileAdd","zipObjectContent","forceTrailingSlash","parentFolder","folderAdd","lastSlash","createFolders$1","JSZip","newObj","relativePath","newFolder","kids","zipFileWorker","fileCompression","zipCompression","compressionName","_compressWorker","generateInternalStream","loadAsync","dateToJulianDays","BASE_DATE","MIME_TYPE","DATA_URL_PREFIX","DATA_URL_OPTIONS","BLOB_OPTIONS","ARRAYBUFFER_OPTIONS","toDataURI","thing","parseJSON","ESC","foreach","XMLHEAD","DRAWINGS_RELS_XML","rels","rel","rId","numChar","colIndex","letter","$ref","filterRowIndex","frozenRows","freezePane","rowSplit","toWidth","px","sharedStrings","borders","_strings","_styles","_borders","_validations","_comments","_drawings","drawings","_hyperlinks","hyperlinks","link","comments","sheetIndex","mergeCells","mergedCells","rowsByIndex","_source","sorted","sortByIndex","fillCells","_readCells","autoFilter","columns","validations","defaultCellStyleId","defaultCellStyle","_lookupStyle","lastRow","_getLastRow","lastCol","_getLastCol","frozenColumns","showGridLines","legacyDrawing","drawing","skipCustomHeight","columnWidth","columnIndex","autoWidth","ri","formula","spreadsheetFilters","sqref","showErrorMessage","allowBlank","showDropDown","errorTitle","formula1","formula2","colSplit","images","drw","parseRef","topLeftCell","col","colOffset","pixelsToExcel","imageId","uniqueCount","json","cellData","_cell","EMPTY_CELL","borderLeft","borderRight","borderTop","borderBottom","_lookupBorder","defStyle","borderId","serial","displayValue","_lookupString","cellName","validation","_addValidation","MAP_EXCEL_TYPE","MAP_EXCEL_OPERATOR","comparerType","allowNulls","showButton","messageTemplate","countData","greaterThanOrEqualTo","lessThanOrEqualTo","convertColor","$0","_images","_imgId","_sheets","sheets","lastModifiedBy","modified","docProps","folder","sheetCount","sheet","xl","media","imageFilename","sheetIds","filterNames","userNames","localSheetId","sheetName","localName","worksheets","drawingsRels","sheetRels","commentFiles","drawingFiles","sheetXML","toXML","relsXML","relsToXML","commentsXML","drawingsXML","hasFont","underline","bold","italic","fontInPx","fontInPt","fills","borderTemplate","fontId","fillId","numFmtId","indent","toZIP","generateAsync","generate","borderSideTemplate","getSpan","rowSpan","upperStr","insertCell","topLeftRef","spanCell","nextRow","insertCellAt","SPREADSHEET_CUSTOM_FILTER","customOperator","customValue","SPREADSHEET_DYNAMIC_FILTER","dynamicFilterType","SPREADSHEET_TOP_FILTER","SPREADSHEET_VALUE_FILTER","blanks","generators","custom","dynamic","doesnotmatch","quarter1","quarter2","quarter3","quarter4","january","february","march","april","may","june","july","august","september","october","november","december","updateContext","rootNodes","updateGroupHeaderContext","updateGroupFooterContext","updateFooterContext","destroyColumns","ExporterColumn","locked","headerCellOptions","cellOptions","groupHeaderCellOptions","groupFooterCellOptions","footerCellOptions","groupFooterTemplate","groupHeaderTemplate","groupHeaderColumnTemplate","ExcelExportModule","ColumnComponent","GroupFooterTemplateDirective","GroupHeaderColumnTemplateDirective","GroupHeaderTemplateDirective","ColumnBase","_c116","GridComponent_kendo_grid_toolbar_2_Template","GridComponent_kendo_grid_group_panel_3_Template","_r151","groupChange","groupableEmptyText","GridComponent_ng_template_6_div_0_div_1_Template","ctx_r154","lockedWidth","lockedLeafColumns","detailTemplate","lockedColumns","totalColumnLevels","showGroupPanel","reorderable","sortable","columnMenuOptions","columnMenuTemplate","leafColumns","GridComponent_ng_template_6_div_0_div_7_Template","ctx_r156","columnsContainer","unlockedWidth","_c117","GridComponent_ng_template_6_div_0_Template","ctx_r152","headerPadding","nonLockedWidth","virtualColumns","headerLeafColumns","headerColumns","GridComponent_ng_template_6_div_2_div_1_Template","ctx_r158","ariaRowCount","GridComponent_ng_template_6_div_2_Template","ctx_r153","nonLockedLeafColumns","GridComponent_ng_template_6_Template","notifyPageChange","notifyScrollBottom","contentScroll","ctx_r146","hideHeader","groupable","trackBy","selectable","noRecordsTemplate","rowClass","isVirtual","marqueeSelection","showFooter","GridComponent_ng_template_7_thead_2_Template","visibleColumns","GridComponent_ng_template_7_tfoot_4_Template","ctx_r165","GridComponent_ng_template_7_div_5_Template","GridComponent_ng_template_7_Template","ctx_r147","showGroupFooters","GridComponent_kendo_pager_8_Template","_r168","ctx_r148","pagerTemplate","GridComponent_kendo_grid_toolbar_9_Template","_c118","_c119","_c120","_c121","_c122","lockedKeydown","lockedScroll","lockedMousewheel","ListComponent_kendo_resize_sensor_8_Template","ListComponent_kendo_resize_sensor_9_Template","ListComponent_div_12_Template","ctx_r174","totalWidth","ListComponent_div_13_Template","_c123","FilterRowComponent_td_0_Template","FilterRowComponent_td_1_Template","FilterRowComponent_td_2_Template","column_r182","columnIndex_r183","ctx_r180","logicalRowIndex","lockedColumnsCount","filterLabel","_c124","FilterCellComponent_ng_template_0_ng_container_1_Template","FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template","FilterCellComponent_ng_template_0_ng_container_2_1_Template","filterCellTemplateRef","FilterCellComponent_ng_template_0_ng_container_2_Template","FilterCellComponent_ng_template_0_Template","hasTemplate","_c125","_c126","_c127","FilterCellOperatorsComponent_kendo_dropdownlist_0_Template","_r192","dropdownKeydown","operators","_c128","_c129","ColGroupComponent_ng_template_0_col_0_Template","ColGroupComponent_ng_template_0_col_1_Template","ColGroupComponent_ng_template_0_col_2_Template","ColGroupComponent_ng_template_0_Template","columnsToRender","_c130","PagerComponent_ng_container_0_Template","ctx_r200","PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template","PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template","PagerComponent_ng_container_1_kendo_pager_input_3_Template","PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template","PagerComponent_ng_container_1_kendo_pager_info_5_Template","PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template","PagerComponent_ng_container_1_Template","ctx_r201","_c131","_c132","_c133","_c134","_c135","_c136","_c137","PagerNumericButtonsComponent_li_1_Template","_r212","ctx_r211","ctx_r208","_c138","PagerNumericButtonsComponent_li_2_Template","_r215","num_r213","ctx_r209","PagerNumericButtonsComponent_li_3_Template","_r217","ctx_r216","ctx_r210","_c139","_c140","_c141","PagerPageSizesComponent_option_2_Template","ctx_r219","PagerPageSizesComponent_option_3_Template","page_r221","ctx_r220","getSelectedState","_c142","GroupHeaderComponent_ng_template_0_td_0_Template","GroupHeaderComponent_ng_template_0_Template","ctx_r223","prefixGroupCell","GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template","ctx_r229","groupTitle","formatForGroup","GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template","_c143","_c144","a7","expanded","GroupHeaderComponent_td_1_ng_template_2_Template","_r232","ctx_r231","toggleGroup","isExpanded","exp8","GroupHeaderComponent_td_1_Template","ctx_r224","skipGroupDecoration","logicalColSpan","groupSpan","ariaRole","_c145","GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template","column_r234","ctx_r236","groupHeaderColumnTemplateRef","GroupHeaderComponent_ng_container_2_td_1_Template","index_r235","GroupHeaderComponent_ng_container_2_Template","ctx_r225","groupHeaderColumns","_c146","lastTarget","GroupPanelComponent_ng_template_0_Template","ctx_r238","_c147","_c148","GroupPanelComponent_div_1_Template","_r244","directionChange","group_r241","index_r242","ctx_r239","groupTitles","GroupPanelComponent_div_2_Template","_c149","_c150","HeaderComponent_ng_template_0_tr_0_th_1_Template","HeaderComponent_ng_template_0_tr_0_th_2_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template","column_r256","ctx_r261","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template","ctx_r262","columnMenu","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template","displayTitle","_c151","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template","headerTemplateRef","leafIndex","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template","ctx_r276","sortOrder","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template","_r281","_r273","onSortClick","ctx_r264","sortIcon","sortableLabel","showSortNumbering","sortStatus","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template","ctx_r265","selectAllCheckboxId","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template","ctx_r266","_c152","lastColumn","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template","_r286","onHeaderKeydown","ctx_r287","columnIndex_r257","last_r258","levelIndex_r250","ctx_r259","showFilterMenu","isFilterable","showColumnMenu","isFirstOnRow","logicalColumnIndex","rowspan","headerClass","headerStyle","sortState","isSortable","isCheckboxColumn","showSelectAll","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template","ctx_r289","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template","ctx_r292","_c153","HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template","ctx_r260","HeaderComponent_ng_template_0_tr_0_ng_template_3_Template","isColumnGroupComponent","HeaderComponent_ng_template_0_tr_0_Template","ctx_r247","unlockedColumnsCount","columnsForLevel","trackByIndex","HeaderComponent_ng_template_0_tr_1_Template","HeaderComponent_ng_template_0_Template","ctx_r246","columnLevels","showFilterRow","FilterMenuComponent_ng_template_3_Template","_r302","_c154","FilterMenuContainerComponent_ng_container_3_Template","ctx_r304","childService","childFilter","FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template","FilterMenuContainerComponent_ng_container_4_1_Template","ctx_r306","filterMenuTemplateRef","FilterMenuContainerComponent_ng_container_4_Template","ctx_r305","StringFilterMenuComponent_kendo_dropdownlist_1_Template","_r311","logicChange","ctx_r308","logicOperators","StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template","ctx_r309","secondFilter","NumericFilterMenuComponent_kendo_dropdownlist_1_Template","_r315","ctx_r312","NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template","ctx_r313","DateFilterMenuComponent_kendo_dropdownlist_1_Template","_r319","ctx_r316","DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template","ctx_r317","BooleanFilterMenuComponent_li_1_Template","_r323","item_r321","ctx_r320","idPrefix","radioId","ColumnListComponent_label_1_Template","column_r328","index_r329","ctx_r326","ColumnListComponent_div_2_Template","_r331","cancelChanges","applyChanges","ctx_r327","actionsClass","resetText","applyText","ColumnChooserComponent_ng_template_3_Template","_r337","onApply","ctx_r335","autoSync","allowHideAll","ColumnMenuChooserComponent_ng_template_1_Template","_r342","ctx_r340","ColumnMenuFilterComponent_ng_template_1_Template","_r345","ctx_r343","ColumnMenuItemComponent_span_1_Template","ColumnMenuItemComponent_div_3_Template","ctx_r347","contentState","_c155","ColumnMenuComponent_ng_template_3_Template","ctx_r350","_r351","columnMenuTemplateRef","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template","_r358","onColumnsExpand","ctx_r355","expandedColumns","ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template","_r360","onFilterExpand","ctx_r356","expandedFilter","ColumnMenuComponent_ng_template_5_Template","ctx_r352","hasSort","hasLock","hasColumnChooser","hasFilter","_c156","_c157","TableBodyComponent_ng_template_0_ng_template_1_td_0_Template","TableBodyComponent_ng_template_0_ng_template_1_Template","TableBodyComponent_ng_template_0_td_2_Template","addRowLogicalIndex","TableBodyComponent_ng_template_0_td_3_Template","column_r370","columnIndex_r371","ctx_r367","newDataItem","cssClass","logicalColIndex","TableBodyComponent_ng_template_0_Template","ctx_r362","trackByColumns","TableBodyComponent_tr_1_ng_template_2_Template","TableBodyComponent_tr_1_ng_container_3_Template","ctx_r373","noRecordsText","_c158","TableBodyComponent_tr_1_Template","ctx_r363","TableBodyComponent_ng_template_2_tr_0_Template","ctx_r380","item_r374","rowIndex_r375","ctx_r376","hasGroupHeaderColumn","totalColumnsCount","groupHeaderSlaveCellsCount","TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template","TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template","TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template","_r389","toggleRow","ctx_r386","detailButtonStyles","detailButtonTitle","TableBodyComponent_ng_template_2_tr_1_td_2_Template","ctx_r391","ctx_r382","showIf","TableBodyComponent_ng_template_2_tr_1_td_3_Template","column_r392","columnIndex_r393","ctx_r394","ctx_r383","isSelectable","isEditingCell","cellSelectionService","isCellSelected","isAriaSelected","_c159","TableBodyComponent_ng_template_2_tr_1_Template","ctx_r395","ctx_r377","isOdd","isEditingRow","isRowSelected","TableBodyComponent_ng_template_2_tr_2_td_1_Template","TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template","_c160","TableBodyComponent_ng_template_2_tr_2_Template","ctx_r399","ctx_r378","allColumnsSpan","columnsSpan","TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template","TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template","TableBodyComponent_ng_template_2_tr_3_td_2_Template","TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template","_c161","TableBodyComponent_ng_template_2_tr_3_td_3_Template","column_r406","ctx_r409","ctx_r402","groupFooterTemplateRef","TableBodyComponent_ng_template_2_tr_3_Template","ctx_r379","footerColumns","TableBodyComponent_ng_template_2_Template","ctx_r364","isGroup","isParentGroupExpanded","showGroupHeader","isDataItem","isInExpandedGroup","isFooter","hideFooter","_c162","CellComponent_ng_container_1_ng_template_1_Template","CellComponent_ng_container_1_ng_template_2_ng_template_0_Template","childColumn_r418","CellComponent_ng_container_1_ng_template_2_Template","childColumns","CellComponent_ng_container_1_ng_template_3_Template","ctx_r415","CellComponent_ng_container_1_ng_template_4_Template","ctx_r416","selectionCheckboxId","CellComponent_ng_container_1_Template","ctx_r411","isSpanColumn","isBoundColumn","CellComponent_ng_container_2_1_ng_template_0_Template","CellComponent_ng_container_2_1_Template","ctx_r419","editTemplateRef","editTemplateContext","CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template","ctx_r422","formGroup","CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template","ctx_r423","CellComponent_ng_container_2_ng_container_2_input_3_Template","ctx_r424","CellComponent_ng_container_2_ng_container_2_input_4_Template","ctx_r425","CellComponent_ng_container_2_ng_container_2_Template","editor","CellComponent_ng_container_2_Template","ctx_r412","_c163","FooterComponent_ng_template_0_td_1_Template","FooterComponent_ng_template_0_td_2_Template","FooterComponent_ng_template_0_td_3_ng_template_1_Template","FooterComponent_ng_template_0_td_3_Template","column_r431","columnIndex_r432","ctx_r429","footerClass","footerStyle","footerTemplateRef","FooterComponent_ng_template_0_Template","ctx_r426","ToolbarComponent_0_ng_template_0_Template","ToolbarComponent_0_Template","ctx_r434","toolbarTemplateRef","DomEventsService","cellClick","cellMousedown","cellMouseup","focusIn","focusOut","windowBlur","EMPTY_REGEX","isUniversal","extractFormat","or","conditions","Skip","getIterator","FocusRoot","LocalDataChangesService","FocusableDirective","EditService","GroupsService","ScrollRequestService","DetailsService","CellSelectionService","GridMarqueeDirective","ColumnMenuTemplateDirective","EditTemplateDirective","FilterMenuTemplateDirective","FilterCellTemplateDirective","ColumnBase$1","msCancelRequestAnimationFrame","alive","NODE_NAME_PREDICATES","matchesClasses","matchesNodeName","hasTabIndex","isFocusableWithTabKey","findElement","matchSelf","isInputTag","navigableRegex","DefaultFocusableElement","focusable","canFocus","CELL_CONTEXT","focusGroup","registerElement","unregisterElement","isNavigable","hasFocus","GridFocusableElement","focusCell","activeRow","activeCol","virtualCol","virtualRow","findRow","findCell","dataRowIndex","isActiveRange","prevColIndex","prevRowIndex","cellRange","rowRange","offsetRow","offsetCol","leafColumnsToRender","hasDetailTemplate","groupItem","prevRow","lastCellIndex","nextColIndex","nextRowIndex","nextCell","maxLogicalRowIndex","ItemMap","NavigationModel","modelCell","detailExpandCell","modelRow","rowCell","firstCell","CellCloseEvent","isNewRow","editedIndices","keepEditCell","closingCell","changedSource","onChanged","newItemGroup","editable","editTemplate","preventCellClose","closeCell","editRow","isEditing","hasNewItem","cancelCell","keepCellTimeout","findByIndex","removeLast","isCollapsed","skipSelf","rowState","isInitiallyCollapsed","DetailCollapseEvent","DetailExpandEvent","userCallback","collapseRow","expandRow","eventArg","requests","isInSameGrid","gridElement","matchHeaderCell","matchDataCell","matchFooterCell","matchCell","targetCell","isNavigationKey","PageUp","PageDown","isInput","NavigationViewport","pagerContextService","scrollRequestService","groupsService","detailsService","focusRoot","editService","focusableParent","cellKeydown","activeRowIndex","headerRows","onStableSubscriber","subs","onCursorChanges","onFocusOut","onWindowBlur","leaveCell","onKeydown","onTabout","deactivateElements","pendingRowIndex","registerCell","virtualCell","activateVirtualCell","unregisterCell","registerRow","updateRow","unregisterRow","isCellFocusable","oldMode","focusInCell","focusInActiveRowContent","activateRow","alreadyActive","activateElements","enterCell","activeDataRow","behind","columnViewport","activeCell","focusAdjacentCell","announce","fwd","moveCursorFwd","moveCursorBwd","colIdx","moveLeft","moveRight","onCellKeydown","nextItemIndex","hasPager","firstRow","lastRowIndex","F2","defaultPrevented","onCursorKeydown","containsRow","onContentKeydown","localDataChangesService","lastSelectionStartIndex","currentSelection","selectAllChecked","dragging","addSubscriptions","checkboxOnly","selectableSettings","dragAndMultiple","iterator$$1","_selectAllState","rowArgs","rowSelected","addAllTo","selectedRows","deselectedRows","itemToToggle","removedItem","removeSubscriptions","mouseDownEventArgs","cellClickSubscription","mousedownSubscription","focusCellByElement","dataChangedSubscription","deselect","mouseUpEvent","dragSelectDeselect","lastSelectionItem","itemKey","columnKey","lastSelectionItemRowIndex","lastSelectionItemColIndex","selectedCellArgs","cellSelected","startRowIndex","startColIndex","endRowIndex","endColIndex","selectRange","selectedCells","deselectedCells","cellsToRemove","selectionStartRow","selectionStartCol","selectionEndRow","selectionEndCol","isInSelectionRect","cellSelection","selectionStarted","enableMarquee","moveMarquee","pressArgs","pressTarget","dragEndSubscription","endSelection","initMarquee","marqueeElement","marqueeQuadrant","getMarqueeQuadrant","pointerX","pointerY","startX","startY","leftHalf","rightHalf","topHalf","bottomHalf","userSelection","matchesMedia","orderIndex","isColumnGroup","minResizableWidth","lockable","includeInChooser","headerTemplates","columnMenuTemplates","_width","autoSize","isColumnComponent","filterCellTemplate","filterMenuTemplate","isSpanColumnComponent","SpanColumnComponent","_editable","_locked","expandColumns","childrenArray","expandColumnsWithSpan","sumProp","sumColumnWidths","validField","someLeafColumn","sortColumns","isInSpanColumn","DetailTemplateDirective","ColumnGroupComponent","cachedPixelRatio","BrowserSupportService","Selection","NoRecordsTemplateDirective","ChangeNotificationService","GroupInfoService","PDFService","FilterService","SuspendService","ToolbarTemplateDirective","ExcelService","ResponsiveService","ColumnResizingService","SinglePopupService","DragAndDropService","ColumnReorderService","DropCueService","DragHintService","SortService","ColumnInfoService","IdService","_condition","canCreateElement","cachedScrollbarWidth","cachedRtlScrollLeft","rtlScrollLeft","isGroupItem","getIterator$1","footers","dataIndex","parentGroupIndex","skipHeader","GroupIterator","ItemIterator","ArrayIterator","Iterator","resultMap","_innerIterator","outputFooters","currentGroupIndex","_iterator","innerIterator","nextDataItem","footerItem","nextGroupItem","DataResultIterator","groupFooters","isGridDataResult","DataCollection","flattenGroups","grid","selectedKeys","selectedKeysChange","getItemKey","getSelectionItem","selectionChangeSubscription","selectionKey","itemIdentifiers","getCellSelectionItemIndex","allColumns","nonLockedColumns","totalLevels","lockedColumnsToRender","nonLockedColumnsToRender","hasGroupFooter","hasFooter","currentLevels","leafColumns$$1","containerLeafColumns","containerColumns","toRenderContainer","leaf","lists","forEachColumn","filterHierarchy","children$$1","forEachLevel","_columnList","columnForGroup","groupHeaderTemplateRef","syncRowsHeight","table1","table2","arr1","arr2","offsetHeight2","savePDF","drawPDF","exportClick","dataChanged","PDFExportEvent","browserMatchMedia","matchMedia","saveToExcel","_position","headerSubscription","bodySubscription","sourceType","unregister","resizeSubscription","resizes","resizeArgs","tables","trackColumns","deltaPercent","resizedColumns","tableMetadata","autoFitBatch","autoFitStart","onComplete","widths","hasFilterRow","PopupCloseEvent","onClose","attachClose","detachClose","removeClick","skipElement","appended","isTargetBefore","contains$2","targetRect","mouseEvent","targetFor","updateClass","updateLock","santizer","initCoords","targetStyles","safeTitle","initialTop","initialLeft","ColumnReorderEvent","NavigationMetadata","visibilityChange","lockedChange","columnRangeChange","filterSort","rootColumns","ColumnVisibilityChangeEvent","ColumnLockedChangeEvent","defaultTrackBy","GridComponent","handleExpandCollapseService","expandEmitter","collapseEmitter","isInEditedCell","supportService","groupInfoService","changeNotification","pdfService","responsiveService","excelService","columnResizingService","columnReorderService","columnInfoService","sortService","sortChange","dataStateChange","groupExpand","groupCollapse","detailExpand","detailCollapse","edit","cellClose","pdfExport","excelExport","columnResize","columnReorder","columnVisibilityChange","columnLockedChange","selectionDirective","columnList","hasGroupFooters","shouldGenerateColumns","_sort","_group","_skip","cachedWindowWidth","_rowSelected","_cellSelected","_rowClass","localizationSubscription","registerColumnsContainer","columnVisibilityChangeSubscription","columnLockedChangeSubscription","groupExpandCollapseSubscription","detailsServiceSubscription","filterSubscription","sortSubscription","attachStateChangesEmitter","attachEditHandlers","attachDomEventHandlers","pdfSubscription","emitPDFExportEvent","excelSubscription","saveAsExcel","columnsContainerChange","handleColumnResize","columnReorderSubscription","columnRangeChangeSubscription","onColumnRangeChange","toolbarTemplate","emptyText","_customDetailTemplate","detailTemplateChildren","_customNoRecordsTemplate","noRecordsTemplateChildren","customNoRecordsTemplate","_customPagerTemplate","pagerTemplateChildren","customPagerTemplate","_customToolbarTemplate","toolbarTemplateChildren","customToolbarTemplate","exporting","viewportColumns","leafViewportColumns","groupCellsWidth","toggleDetailRowLegacy","autoGenerateColumns","defaultSelection","initSelectionService","updateNavigationMetadata","onDataChange","syncHeaderHeight","isScrollable","attachScrollSync","shouldResetSelection","attachElementEventHandlers","applyAutoSize","columnsChangeSubscription","navigationMetadata","stateChangeSubscription","editServiceSubscription","columnsContainerChangeSubscription","detachElementEventHandlers","footerChangeSubscription","columnResizingSubscription","focusElementSubscription","registerEmitter","skipFocus","focusEditElement","addRow","columnInstance","editCell","containerSelector","setEditFocus","assertNavigable","focusNextCell","focusPrevCell","destIndex","changeContainer","updateColumnIndices","sourceColumnIndex","nextSourceIndex","toSkip","updateIndicesForLevel","colsForParentLevel","colsForLevel","cellSelectionMode","activeService","inactiveService","tryFocus","filter$$1","emitCRUDEvent","ariaRoot","resizeCheck","orientationSubscription","documentClickSubscription","shouldCloseCell","clickSubscription","keydownSubscription","focusInSubscription","focusOutSubscription","saveAsPDF","lockedHeader","notifyResize","oldWidth","addRowOffset","filterRowOffset","showPager","autoFitColumns","toAdd","lastFromGroup","offsetColumn","hasCallback","isDetailExpanded","selectableChanges","lockedClasses","virtualClasses","noScrollbarClass","navigatable","showTopToolbar","ariaColCount","showBottomToolbar","take$$1","ScrollBottomAction","firstItemOffset","nextTake","elementAt","rowAt","EMPTY_OBJECT","FilterRowComponent","FilterCellComponent","FilterOperatorBase","BaseFilterCellComponent","NumericFilterCellComponent","NumericFilterComponent","FilterInputWrapperComponent","FilterCellWrapperComponent","FilterCellOperatorsComponent","StringFilterCellComponent","StringFilterComponent","BooleanFilterCellComponent","BooleanFilterComponent","AutoCompleteFilterCellComponent","LogicalRowDirective","LogicalCellDirective","FocusGroup","ResizableContainerDirective","LoadingComponent","ColGroupComponent","DateFilterCellComponent","DateFilterComponent","FieldAccessorPipe","TableDirective","BeforeFilterOperatorComponent","BeforeEqFilterOperatorComponent","AfterEqFilterOperatorComponent","AfterFilterOperatorComponent","LessOrEqualToFilterOperatorComponent","LessFilterOperatorComponent","GreaterOrEqualToFilterOperatorComponent","GreaterFilterOperatorComponent","StartsWithFilterOperatorComponent","NotEqualFilterOperatorComponent","IsNullFilterOperatorComponent","IsNotNullFilterOperatorComponent","IsNotEmptyFilterOperatorComponent","IsEmptyFilterOperatorComponent","EqualFilterOperatorComponent","EndsWithFilterOperatorComponent","DoesNotContainFilterOperatorComponent","ContainsFilterOperatorComponent","RowFilterModule","FilterCellHostDirective","FilterHostDirective","SharedFilterModule","DropTargetDirective","GroupHeaderComponent","GroupIndicatorComponent","GroupPanelComponent","GroupModule","DragAndDropModule","DraggableColumnDirective","FilterMenuComponent","SelectAllCheckboxDirective","ColumnHandleDirective","ColumnMenuModule","ColumnMenuLockComponent","ColumnMenuComponent","ColumnMenuSortComponent","ColumnMenuItemComponent","ColumnMenuItemContentTemplateDirective","ColumnMenuFilterComponent","ColumnMenuChooserComponent","ColumnMenuItemBase","ColumnMenuService","ColumnChooserComponent","ColumnListComponent","FilterMenuModule","DateFilterMenuInputComponent","FilterMenuHostDirective","BooleanFilterMenuComponent","DateFilterMenuComponent","NumericFilterMenuInputComponent","NumericFilterMenuComponent","StringFilterMenuComponent","StringFilterMenuInputComponent","FilterMenuInputWrapperComponent","FilterMenuContainerComponent","AddCommandDirective","RemoveCommandDirective","SaveCommandDirective","CancelCommandDirective","EditCommandDirective","CellComponent","TableBodyComponent","SelectionCheckboxDirective","CheckboxColumnComponent","CommandColumnComponent","HeaderModule","FooterComponent","BodyModule","GridModule","ToolbarComponent","FooterModule","AbbottBigNumberFormatterPipe","ExcelModule","ExcelCommandDirective","ExcelComponent","wheelDeltaY","VERTICAL_AXIS","maybeNativeElement","suspendService","columnInfo","columnsStartIdx","resizeSensors","containerScrollTop","offsetLeft","handleRowSync","handleRowNavigationLocked","updateViewportColumns","handleInitialScrollToSkip","rebind","skipScroll","viewportWidthChange","resetNavigationViewport","attachContainerScroll","initResizeService","hasLockedContainer","lockedContainer","lockedTable","cleanupScroller","createScroller","lockedScrollTop","scrollDelta","expandDetail","collapseDetail","onContainerScroll","handleColumnScroll","rowViewport","startRow","endRow","startColumn","endColumn","scrollerSubscription","syncContainerHeight","sensor","scrollToVirtualRow","normalizeScrollLeft","elementScrollLeft","needsViewport","lastItemOffset","viewportStart","viewportEnd","lastItemDetailOverflows","setViewport","calculateViewportColumns","currentColumns","viewportColumnsWidth","columnsEndIdx","updateColumnViewport","columnUpdateFrame","lockedCount","setColumnViewport","normalizedScrollLeft","hostRole","groupPanelEmpty","noRecords","pagerFirstPage","pagerLastPage","pagerPreviousPage","pagerNextPage","pagerPage","pagerItemsPerPage","pagerOf","pagerItems","pagerPageNumberInputTitle","filterEqOperator","filterNotEqOperator","filterIsNullOperator","filterIsNotNullOperator","filterIsEmptyOperator","filterIsNotEmptyOperator","filterStartsWithOperator","filterContainsOperator","filterNotContainsOperator","filterEndsWithOperator","filterGteOperator","filterGtOperator","filterLteOperator","filterLtOperator","filterIsTrue","filterIsFalse","filterBooleanAll","filterAfterOrEqualOperator","filterAfterOperator","filterBeforeOperator","filterBeforeOrEqualOperator","filterFilterButton","filterClearButton","filterAndLogic","filterOrLogic","unlock","sortAscending","sortDescending","sortedAscending","sortedDescending","sortedDefault","columnsApply","columnsReset","filterDateToday","filterDateToggle","filterNumericDecrement","filterNumericIncrement","filterRowClass","cloneFilters","_filter","operatorTexts","_text","refreshText","defaultOperator","rootFilter","filtersByField","removeFilter","trimFilterByField","localizeOperators$1","operatorList","_operators","defaultOperators","operationListSubscription","currentFilter","numericOperators","columnFormat","filterByField","localizationChange","filterDelay","showOperators","messageFor","composing","changeRequests","unsubscribeStart","unsubscribeEnd","subscribeChanges","unsubscribeChanges","changeRequestsSubscription","EMPTY_VALUE_OPERATORS","isEmptyValueOperator","currentOperator","_operator","emptyValueOperator","filterInputDisabled","applyNoValueFilter","_defaultOperator","updateFilter","EMPTY_FILTER_OPERATORS","applyFilter","overrideBaseClasses","onClear","stringOperators","clearText","dropdown","clearClick","clearKeydown","stringOperators$1","_valueField","dateOperators","_item","loadingText","_lockedWidth","attachResize","kendoGridResizableContainer","removeView","registerGroup","unregisterGroup","focusableChildren","toggleState","idService","logicalSlaveCell","cellId","navigationChange","onNavigationChange","registerNoChanges","indexChange","rowIndexChange","registerChanges","updateElement","autoFocusCell","microtask","registerCellOnCurrentRow","isCellFocused","ariaColIndex","id$1","logicalSlaveRow","logicalSlaveCellsCount","logicalCellsCount","ariaRowIndex","_match","columnsToResize","firstResize","initState","autoFitSubscription","registerTable","autoFitObservable","originalWidth","deltas","measureColumn","headerIndex","isParentSpan","isLastInSpan","FILTER_OPERATORS","initComponent","normalizeSettings","gridPagerClass","_r222","_r218","showInitialPageSize","importedModules$1","hasDetails","groupCount","detailOffset","columnCount","groupItemClass","withoutField","alreadyGrouped","indicatorRules","cue","dropTargets","attachTargets","currentTitles","targetSubscription","isGroupable","enterStream","leaveStream","dropStream","removeLock","canDrop","groupHeaderClass","groupIndicatorClass","toggleDirection","removeDescriptor","isDeleteButton","isSortIcon","skipButtons","elementUnderCursor","updateTouchAction","performDrag","upEvent","notifyDrop","cursorElement","notifyDrag","cont","allowUnsort","showIndexes","initialDirection","normalize$1","columnChooser","mergeObjects","inSameParent","reorderService","sortedFields","toggleSort","sortColumn","sortDescriptor","_leafColumns","isTailing","canReorder","targetLocked","draggableLocked","toggleLock","trackMove","calculateBefore","normalizeTarget","firstSpan","levelColumns","targetElement","headerWidth","allLeafColumns","isInSpanColumn$1","allLeafs","currentLeafs","ignore","isParentSpanColumn","measureColumns","shouldUpdate","initColumnWidth","resizeColumns","resizeStartWidth","sizeToFit","resizedColumn","tableDelta","updateWidth","resizeTable","leftStyle","rightStyle","selectAllChange","stateSet","destroyClick","isChecked","trident","detectIE","selectAllState","updateAll","stateToBool","_r303","_r298","_r299","validFilters","findParent","parentLogicOfDefault","parentService","_childFilter","_currentFilter","operatorChange","firstFilter","radioValue","picker","_r325","_r324","columnChange","unlockedCount","_columns","updateColumnState","hasFiltered","hasVisibleLocked","hasUnlockedFiltered","updateDisabled","forEachCheckBox","checkboxes","getElementsByClassName","hasLocked","checkedItems","checkbox","checkedUnlocked","filteredColumns","leafNamedColumns","closeClick","changeVisibility","_r339","_r333","_r334","closeMenu","collapse","itemClick","updateContentState","sortedAsc","sortedDesc","_r361","_r348","_r349","unlockedRootCount","toggleHierarchy","allChanged","changeLocked","toggleColumn","importedModules$2","destroyKeyDown","onKeyDown","setCheckedState","toggleByIndex","cellKeydownSubscription","cellKeydownHandler","trackByWrapper","viewItem","messageKey","hasEdited","absoluteRowIndex","mouseupSubscription","contextmenuSubscription","touchstartSubscription","touchendSubscription","touchSubscription","originalNoRecordText","clickTimeout","isEditedColumn","cellClickArgs","emitCellClick","isEdited","isEditedRow","_editTemplateContext","isCommand","_rowIndex","updateCellContext","isColumnEditable","editContext","columnContext","isFieldEditable","_changes","updateTemplateContext","commandCellClass","commandClass","beginEdit","endEdit","beginAdd","importedModules$3","importedModules$4","ExcelExportEvent","workbook","fetchComponentData","componentColumns","toExcelColumns","excelColumn","saveSubscription","dataSubscription","fetchData","exportData","sourceColumns","exporterColumns","addColumns","exporterColumn","_trimColumns","_prepareColumn","_visibleColumns","hierarchy","collapsible","_hierarchyRows","_rows","_freezePane","_depth","paddingCellOptions","_createPaddingCells","_groupHeaderCells","_dataRows","_footer","dataCells","cellIdx","_dataRow","previousItemId","itemLevel","_hasFooterTemplate","previousLevel","_hierarchyFooterRows","_hierarchyFooter","parentId","_prependHeaderRows","currentLevel","templateData","exportable","excel","headerPaddingCellOptions","_prepareHeaderRows","_headerRow","parentCell","parentRow","childRow","totalColSpan","_isColumnVisible","_headerDepth","workbookOptions","saveFile","dataURL","forceProxy","excelClass","EmptyValueMaskPipe","Style1GridComponent","rowParserRegistry","rowFormatting","style1Pages","rowParserData","currentRouterLocation","buildGridData","dataColsConfig","rowParser","calculateInject","parseConfig","parserAttributes","dataRowKey","dataRowCheck","rowCol","numberType","injectArray","colRef","valueIfBlank","SetValuesGridComponent","cellFormatting","CustomGridComponent","lowestRange","secondLowestRange","instrument","lowRangeNumberOfTests","lowRangeInstrumentsCount","secondLowestInstrumentCount","CustomComplianceGridComponent","FilterInsertComponent","Style1Component","ready","detailFilters","detailMetricId","CustomerComponent","InstrumentsComponent","Instrument","AmbassadorComponent","_0x456c2b","_0x328245","_0x3282","_0x97df7c","_0x5a5c","_0x5a5cad","_0x4f259a","_0x1b5199","_0xf176a0","_0x42848b","_0x544e1d","_0xc2d087","_0x4465a8","_0x56daec","_0x2bb26d","_0x10f781","_0x2b1641","_0x36436a","_0x49ba15","_0x15d2db","ProgressBarComponent_span_1_Template","ctx_r0","formattedLabelValue","ProgressBarComponent_span_6_Template","ctx_r3","ProgressBarComponent","ProgressBarBase","ProgressBarModule","packageMetadata","productName","productCodes","publishDate","licensingDocsUrl","adjustValueToRange","calculateRatio","extractValueFromChanges","roleAttribute","indeterminate","_0x4a1050","_0x493c49","_0x2bf099","_0x3b8354","_0x5f3536","_0x28c95f","_0x354beb","_0x236cba","_0x1e1a8d","KendoLicensing","_0x232f89","_0x3be8d0","_0x22e53b","_0x2de868","_0x1c39ae","_0xf8b567","_0x3e1208","_0x11fad5","_0x40a89d","_progressRatio","dirAttribute","ariaMinAttribute","ariaMaxAttribute","ariaValueAttribute","reverseClass","indeterminateClass","animationEnd","labelPosition","defaultFormattedValue","numberParts","onePercent","isAnimationInProgress","isAnimationChanged","cancelCurrentAnimation","startAnimation","progressStatusElement","wrapperElement","progressStatusWrapperElement","getAnimationOptions","startTime","startSize","deltaSize","renderValueChange","resetProgress","stopAnimation","previousRatio","previousStatusWidth","previousStatusHeight","statusWidth","statusHeight","animationDuration","wrapperSize","progressCssStyle","progressCssClass","emptyCssStyle","emptyCssClass","isPositionStart","isPositionCenter","isPositionEnd","showLabel","isCompleted","statusWrapperWidth","statusWrapperHeight","MODULES","TabStripComponent_ng_container_0_ng_container_1_Template","TabStripComponent_ng_container_0_ng_container_2_Template","TabStripComponent_ng_container_0_Template","_r41","_r43","TabStripComponent_ng_container_1_ng_container_1_Template","TabStripComponent_ng_container_1_ng_container_2_Template","TabStripComponent_ng_container_1_Template","TabStripComponent_ng_template_2_li_2_ng_template_4_Template","TabStripComponent_ng_template_2_li_2_Template","_r56","i_r52","onTabClick","tab_r51","ctx_r50","tabId","tabPanelId","tabTitle","TabStripComponent_ng_template_2_Template","_r58","ctx_r42","tabsAlignment","tabs","TabStripComponent_ng_template_4_ng_template_0_div_0_ng_template_1_Template","TabStripComponent_ng_template_4_ng_template_0_div_0_Template","ctx_r64","tab_r60","i_r61","ctx_r62","_animate","contentClass","tabContent","TabStripComponent_ng_template_4_ng_template_0_Template","ctx_r59","keepTabContent","TabStripComponent_ng_template_4_Template","StepperComponent_kendo_progressbar_3_Template","ctx_r76","progressAnimation","currentStep","progressBarStyling","CardActionsComponent_0_Template","CardActionsComponent_ng_container_1_button_1_Template","_r87","action_r85","CardActionsComponent_ng_container_1_Template","ctx_r82","CardActionsComponent_2_ng_template_0_Template","CardActionsComponent_2_Template","StepperStepComponent_2_ng_template_0_Template","StepperStepComponent_2_Template","stepTemplate","StepperStepComponent_ng_container_3_span_1_1_ng_template_0_Template","StepperStepComponent_ng_container_3_span_1_1_Template","indicatorTemplate","StepperStepComponent_ng_container_3_span_1_ng_container_2_span_1_Template","indicatorIconClasses","StepperStepComponent_ng_container_3_span_1_ng_container_2_span_2_Template","indicatorText","StepperStepComponent_ng_container_3_span_1_ng_container_2_Template","showIndicatorIcon","StepperStepComponent_ng_container_3_span_1_Template","transitionDuration","StepperStepComponent_ng_container_3_span_2_1_ng_template_0_Template","StepperStepComponent_ng_container_3_span_2_1_Template","ctx_r113","StepperStepComponent_ng_container_3_span_2_ng_container_2_span_1_Template","ctx_r116","StepperStepComponent_ng_container_3_span_2_ng_container_2_span_2_Template","validationIconClasses","StepperStepComponent_ng_container_3_span_2_ng_container_2_span_3_Template","ctx_r118","optionalText","StepperStepComponent_ng_container_3_span_2_ng_container_2_Template","ctx_r114","showLabelText","showLabelIcon","optional","StepperStepComponent_ng_container_3_span_2_Template","StepperStepComponent_ng_container_3_Template","ctx_r104","showIndicator","StepperListComponent_ng_container_0_Template","step_r120","idx_r121","maxStepWidth","maxStepHeight","stepType","cssStyle","TabStripTabComponent","TabTitleDirective","TabContentDirective","StepperIndicatorTemplateDirective","StepperLabelTemplateDirective","StepperStepTemplateDirective","TabStripComponent","hasItemIndex","indexAttr","_tabContent","tabPosition","tabSelect","keyBindings","computedKeys","_height","invertKeys","prevNavigatableIndex","nextNavigatableIndex","firstNavigatableIndex","lastNavigatableIndex","justify","tabAlignment","inverted","tablist","isArrowUp","isArrowDown","isArrowLeft","isArrowRight","getTabIndex","tabHeadingContainers","skipTab","selectArgs","deactivateAll","tabsAtTop","tabsAtRight","tabsAtBottom","tabsAtLeft","StepperActivateEvent","handlersRTL","StepperListComponent","StepperStepComponent","SplitterModule","PanelBarModule","DrawerModule","CardModule","AvatarModule","CardTitleDirective","CardSeparatorDirective","CardActionsComponent","CardBodyComponent","CardHeaderComponent","CardComponent","StepperComponent","StepperService","LayoutModule","TabStripModule","StepperModule","triggerValidation","focusedStepChange","stepper","currentIdx","focusedStep","focusPrevStep","focusNextStep","isStepDisabled","isPrevOrNextStep","onActivate","focusedIdx","stepperService","displayStyle","currentStepChange","_steps","applyHostStyling","validateSteps","linearClass","stepsListStyling","widthStyle","startClass","endClass","centerClass","verticalClass","isStepValid","shouldCheckValidity","onFocusedStepChange","handleValidityChecks","updateStepValidity","stepLink","_shouldCheckValidity","errorStepClass","successStepClass","tabIndexAttr","initDomEvents","domSubs","maxStepDimension","stepIdx","getStepIndex","targetAttr","CustomerHealthAlertsGridComponent","alertHelp","opened","refreshIndexes","showContextMenu","gsrUrl","export","onCellClick","stateChangeHandler","apiDataRow","dataColConfig","bgColorStyle","alertStyle","bgcolor","updateCustomerIdSelection","removeStateListener","setCustomerId","changeTo","type1","selectedPl","selectedSn","toggleTooltip","CustomerHealthGridComponent","colorLegend","npsLegend","columnSets","ia_cc","alinity_architect","overAllHealthScore","tnpsRawScore","snCountIA","snCountCC","testVolumeIA","testVolumeCC","testCompletionPercent","hardStopCount","qcFailPercent","retestPercent","openTicketCount","helpWindowTitle","helpActions","showOnlySingleCustomer","legends","apiLegendItem","textcolor","minVal","maxVal","pct","legendTitle","getCustomerScope","keeps","hideCols","removeItemFromArray","showCols","colsToHide","colKey","colsToShow","updateTooltipTitle","currentTooltip","activeTooltipLocation","CustomerProfileInfoComponent","selectedCustomerData","customerMyCRLLinkReady","myCRLCustomerId","customerChangeEventIndex","buildLegendInfo","getCustomerId","dataCol","clearCustomerSelectionChangeEvent","onCustomerSelectionChange","aohCustomerId","aohCustomerIdParts","customer_id","state2","response2","countryRequestHandler","countryState","countryResponse","countryIdsByName","aohCustomerLabel","getPersonaLabel","countryName","setReturnCustomer","DataTrendChartComponent","dataSetYMax","labelFormat","xaxisData","series1length","yaxisData","dataSet","legendColor","legendLabel","seriesArray","valueAxisArray","yaxisLabel","yleftmax2","yaxis2Data","dataSet2","axis2Max2","tickCount2","seriesLabel","yaxis2Label","chartComponent","axisMax2","DataTrendTableComponent","CustomerDataTrendsComponent","customerIsSelected","chartKeys","noData","gridKeys","openTooltip","CtDashboardComponent","refreshIndex","selectedCustomerName","showLoadingAccountMessage","showAccountNotFoundMessage","accountNumber","clearCustomer","getCustomerName","tabstrip","isReturnCustomerSet","getReturnCustomer","paramMap","accountUrlParam","accountRequestHandler","alertsCount","determineTab","customersCount","AlertsDashboardComponent","AlertsGridComponent","CustomDateFormatterPipe","apolloAlertCount","davinciAlertCount","pomAlertCount","renderAlertTypeStyle","renderDetailsStyle","dataRecord","alertType","dialog_title","customerAddr","streetIndex","Style2Pages","backPageLabel","backPageLink","dataArrayKey","needEntireApiDataRecord","refLink","customDateFormat","inputFormat","outputFormat","renderAgedYNStyle","dataArraySplitColKey","renderCustomerNameNumStyle","dataArraySplitCols","arrayMappingKey","arrayMappingValue","drillDownCols","drillDownDetailsColName","drillDownDetailsLabel","drillDownDetailsLink","renderHitMissStyle","dateFormat","renderALC12MAStyle","renderCustomerStyleForAmbMetrics","Style2GridComponent","style2Pages","colData","splitColData","arrayObjToSplit","rowKey","columnInfoExport","getColumnInfo","colName","drillDownLink","Style2Component","Style3Pages","contextMenuFieldName","renderRefStyle","contextMenuItems","iconUrl","renderALStyle","alKey","alConnectableCompareKey","renderALConnectableStyle","renderMaintenanceScoreStyle","renderHCIHSIStyle","renderTSBDueStyle","Style3GridComponent","style3Pages","menuItems","alConnected","contextMenuItemArr","Style3Component","Style4Pages","groupItemsKey","groupFieldId","groupCountField","customerDetailsLink","groupHeaderColumn","addCustomerDetailsLink","groupFieldsToAppend","Style4Component","style4Pages","customername","titleText","objectToParse","groupRow","aggregateVal","ServiceContractStylePages","parentPageRequestHandler","entitlementLink","entitlementTermsLink","ServiceContractsLevel2Component","stylePages","parentState","parentApiData","subTitleText","contractexpNdays","getNavFilterSelection","ServiceContractsLevel3Component","apiDataRecord","customerNumber","serialNumber","contractnumber","currentRec","ServiceContractsLevel4Component","entitlementdesc","entitlementid","UptimeCustomerDetailsComponent","SurveyCommentPages","SurveyCommentDetailsComponent","interviewDate","CustomerOrderDetailsComponent","orderstatus","SGMDetailsComponent","PredictiveAlertsLevel2Component","PredictiveAlertsLevel3Component","countryCode","customerID","RnpsSurveyCommentDetailsComponent","rnpsScore","rnpsCategory","SalesSummaryComponent","reccount","totalrecords","disableLoadAll","isLocalCurrency","localCurrencyCode","loadDataForRows","updateNavFilterSelection","currencyCode","startingRow","createGrid","refKey","SafeHtmlPipe","SalesDetailsComponent","sanitized","GsAlertsDashboardComponent","BrTemplateSelectionService","docElement","DASHBOARD_ARRANGEMENT","templateChanged","templateDetails","templateId","PresentationSelectComponent","savePresentationSource","listPresentationsSource","listPresentationsData","selectPresentation","BrBusinessSegmentSelectorComponent","BrLocationSelectorComponent","data2","locationColumn","localLevelColumn","selectedOrg","buildLocationMenu","selectedLocation","buildLocalLevelMenu","selectedLocalLevel","getParamChangedListener","brParamKey","orgId","org_names","orgItem","locationId","locationItem","localLevelId","relationships","localLevelItem","forOrgId","getOrgItem","forLocationId","getLocationItem","locallevelId","getLocalLevelItem","display_name","buildLocationDescription","RequestStateComplete","presistedValue","Selected","UiMultiColumnListSelectComponent","bringSelectedToTop","valueChangeColumnSelected","valueChangeData","bringSelectedValuesToTop","selectedSortPriority","mockData","column_list","columnItem","post_selected","getSelectedItemsInColumn","columnSummery","postSelected","itemClickSelect","getSelectedValues","getColumnSelectedValues","exceptions","itemColumnId","descendantColumnId","descendantItemId","columnId","relationshipItem","selectedState","getColumnById","getColumnItemById","relationship","getItemRelationshipConfig","childItem","recursiveSetSelectedState","extra_items","reverseTree","reverseTreeItem","ancestors","getReverseColumnItemsForChild","ancestor","Partial","validSelectedTypes","returnItems","focusedInputItem","ss","single_select","refreshSelectionsAndExtraItems","removeExtraItems","finalChildLayerSelected","columnChildItem","getSelectedType","finalChildren","isColumnFinalChildColumn","getRecursiveFinalChildrenForColumnItem","filteredChildren","filteredItem","finalChildLayerSelectedItems","allSelected","partialSelected","fcItem","inFilteredChildren","finalChildForColumn","isItemASelectedChild","unselectColumnItems","AccountCustomerSelectorComponent","recommendedText","noSelections","firstCall","persistedChoices","getArrayOfPropertyFromObject","arrayOfObjects","glue","rmCustomerNumber","colL25","colL1","colL0","objectPropertyJoin","searchChange","presentedNameChange","BrServicingGroupSelectorComponent","BrProductSelectorComponent","BrHistoryRangeSelectorComponent","brHistoryRangeService","periodOptions","setHistoryRange","setMonths","valueChanged","lookForPersistedValue","tempItem","lookForPersistedValue2","presistedValue2","BrTemplateViewerComponent","stdKpiListData","stdKpiListSource","templateStringOrder","newListOrder","buildListOrder","orderItem","getStdKpiListItem","BrTemplateEditorComponent","faUp","faDown","defaultDashboard","saveUserTemplateSource","saveEditUserTemplateSource","recommended","saveEvent","cancelEvent","idSet","setIsVisible","selectedIds","isRecommended","nameChange","saveAs","setRecommended","BrTemplateSelectorComponent","brTemplateSelectionService","operation","userTemplatesData","template_string","listUserTemplatesSource","selectedTemplateString","stdKpiData","template_id","template_name","persistedId","persistedName","persistedString","persistedValue","updateSelectedTemplate","getSelectedTemplate","getOrderFromStdKpiList","FilterPresentationHeaderComponent","rangeLiteral","includePeriodRange","thumbnailMonths","singlePeriodHistory","minDaysInMonthToIncludePartialMonth","getStartDate","endDate","getEndDate","conditionallyIncludePartialMonth","addPartialMonth","BrTileInsertComponent","FilterPresentationFooterComponent","locationDescription","productDescription","businessSegment","servicingGroup","BrDashboardComponent","defaultOrder","stdKpiOrder","savedPresentations","presenetationState","slideTileReference","newPresentationStep","devApiTools","apiName","validationErrors","testComponentOptions","testComponentSelectedOption","showValidationMessages","noDataRegistryPrep","noDataRegistry","presentationToggleSubscription","getToggleChange","arranagementItem","findArrangementItemByApiSource","initial_route","metric_group_name","metric_name","templateSelectionSubscription","getTemplateSelectionChange","updateKpiOrder","nodatacheckSubscription","getChangedEvent","findArrangementItemById","validateSelections","withValidate","hasData","ExpandedViewPages","BrExpandedChartViewComponent","expandedViewPages","getCleanLocation","getBuildCompleteEvent","buildPersistedValuesFromQueryParams","getReturnLink","pathDetails","returnLink","processReturnLink","prepReturnParams","prepReturnLink","ListViewPages","apiTitle","apiFolder","apiChartType","apiDrillDown","BrListViewComponent","listViewPages","detailQueryCompleteSubscription","kpiConfig","routeUrl","apiDisplayTitle","CustomerName","returnLinkSubscription","queryParamsSubscription","buildPersistedValuesFromParams","routeUrlSubscription","BrSystemComparisonListViewComponent","multiDataRows","multiChartData","chartRowCount","chartLabels","multiChartCategories","multiChartSeries","colColor","included_in_chart","highestValue","ParentCustomer","colorCalc","chartMajorUnit","multiChartSeriesArray","customer_num","BrTimelineViewComponent","sCustomerName","multiChartSeriesTitle","DDTConfig","DynamicDataTableComponent","ddtConfig","dataTable","bg_color","DdtLoaderComponent","isLink","text_color","BrDetailComponentViewerComponent","AppRoutingModule","forRoot","optimizeGroupPlayer","normalizeKeyframes","driver","normalizer","keyframes","preStyles","postStyles","normalizedKeyframes","previousKeyframe","kf","isSameOffset","normalizedKeyframe","normalizedProp","normalizePropertyName","normalizeStyleValue","LINE_START","listenOnPlayer","copyAnimationEvent","makeAnimationEvent","triggerName","fromState","toState","getOrSetAsInMap","parseTimelineCommand","separatorPos","_contains","elm1","elm2","_matches","_query","_isNode","matchesSelector","mozMatchesSelector","oMatchesSelector","elm","_CACHED_BODY","_IS_WEBKIT","validateStyleProperty","matchesElement","invokeQuery","hypenatePropsObject","newProp","NoopAnimationDriver","AnimationDriver","NOOP","resolveTimingValue","_convertTimeValueToMS","resolveTiming","allowNegativeValues","delayMatch","easingVal","containsErrors","copyObj","copyStyles","readPrototype","getStyleAttributeString","writeStyleAttribute","styleAttrValue","formerStyles","eraseStyles","normalizeAnimationEntry","PARAM_REGEX","extractStyleParams","interpolateParams","localVal","iteratorToArray","allowPreviousPlayerStylesMerge","balancePreviousStylesIntoKeyframes","previousStyles","previousStyleProps","startingKeyframe","missingStyleProps","computeStyle","visitDslNode","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","parseTransitionExpr","transitionValue","expressions","eventStr","makeLambdaFromStates","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","lhs","rhs","LHS_MATCH_BOOLEAN","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","SELF_TOKEN_REGEX","buildAnimationAst","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","queryCount","depCount","stateDef","styleAst","astParams","containsDynamicStyles","missingSubs","stylesObj","missingSubsArr","matchers","normalizeAnimationOptions","furthestTime","innerAst","timingAst","makeTimingAst","ast","currentAnimateTimings","styleMetadata","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","styleTuple","collectedEasing","styleData","styleMap","endTime","collectedEntry","updateCollectedStyle","totalKeyframesWithOffsets","offsetsOutOfOrder","keyframesOutOfRange","offsetVal","generatedOffset","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","hasAmpersand","NG_TRIGGER_SELECTOR","includeSelf","originalSelector","currentTransition","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","ElementInstructionMap","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","buildAnimationTimelines","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","AnimationTimelineContext","currentTimeline","timelines","timeline","containsAnimation","allowOnlyTimelineStyles","elementInstructions","consume","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","instructionTimings","appendInstructionToTimeline","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate","oldParams","newTime","_copyOptions","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","allStyles","allProperties","_updateStyle","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","roundOffset","decimalPoints","mult","AnimationStyleNormalizer","WebAnimationsStyleNormalizer","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","queriedElements","AnimationTransitionFactory","_triggerName","_stateStyles","currentState","nextState","matchFns","stateName","backupStateStyler","stateStyler","backupStyles","buildStyles","nextOptions","skipAstBuild","transitionAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj","AnimationTrigger","transitionFactories","balanceProperties","fallbackTransition","EMPTY_INSTRUCTION_MAP","bodyNode","_normalizer","_animations","_playersById","autoStylesMap","inst","_buildPlayer","_getPlayer","baseEvent","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","namespaceId","setForRemoval","setForMove","hasAnimation","removedBeforeQueried","NULL_REMOVED_QUERIED_STATE","StateValue","isObj","DEFAULT_STATE_VALUE","AnimationTransitionNamespace","_engine","_triggers","_queue","_elementListeners","_hostClassName","containsData","phase","triggersWithStates","statesByElement","NG_TRIGGER_CLASSNAME","afterFlush","defaultToFallback","_getTrigger","absorbOptions","playersOnElement","playersByElement","queued","matchTransition","isFallbackTransition","totalQueuedPlayers","matchStyles","reportError","stateMap","elementPlayers","namespaces","fetchNamespacesByElement","ns","triggerLeaveAnimation","clearElementCache","afterFlushAnimationsDone","destroyAfterComplete","triggerStates","markElementAsRemoved","processLeaveNode","visitedTriggers","engine","childElementCount","_signalRemovalForInnerTriggers","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","prepareLeaveAnimationListeners","removalFlag","destroyInnerAnimations","_onRemovalComplete","microtaskId","markedForDestroy","d0","d1","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","onRemovalComplete","_balanceNamespaceList","collectEnterElement","createNamespace","_fetchNamespace","elementStates","nsId","isElementNode","insertNode","removeNode","hostNS","subTimelines","skipBuildAst","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","markElementAsDisabled","cleanupFns","_flushAnimations","quietFns","skippedPlayers","skippedPlayersMap","queuedInstructions","allPreStyleElements","allPostStyleElements","disabledElementsSet","nodesThatAreDisabled","allTriggerElements","enterNodeMap","buildRootMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","drainQueuedTransitions","nodeIsOrphaned","_buildInstruction","stringMap","setVal","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","replacePostStylesAsPre","postStylesMap","cloakAndComputeStyles","preStylesMap","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","overrideTotalTime","parentWithAnimation","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","playersForElement","syncPlayerEvents","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","removeNodesAfterAnimationDone","elementContainsData","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation","targetNameSpaceId","targetTriggerName","realPlayer","getRealPlayer","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","timelineInstruction","finalPlayers","previousPlayers","_flattenGroupPlayersRecur","wrappedPlayer","currentValues","_player","_containsRealPlayer","_queuedCallbacks","triggerCallback","_queueEvent","cloakElement","valuesMap","elementPropsMap","defaultStyle","cloakVals","failedElements","nodeSet","localRootMap","postEntry","preEntry","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","whenRenderingDone","componentId","registerTrigger","eventPhase","packageNonAnimatableStyles","startStyles","endStyles","filterNonAnimatableStyles","SpecialCasedStyles","_startStyles","_endStyles","initialStyles","initialStylesByElement","_initialStyles","isNonAnimatableStyle","ElementAnimationStyleHandler","_name","_duration","_delay","_easing","_fillMode","_onDoneFn","_startTime","_eventFn","_handleCallback","anim","getAnimationStyle","setAnimationStyle","addRemoveAnimationEvent","playPauseAnimation","findIndexForAnimation","_ngTestManualTimestamp","elapsedTime","findMatchingTokenIndex","searchToken","doRemove","CssKeyframesPlayer","_finalStyles","_specialStyles","_buildStyler","_styler","_flushStartFns","_flushDoneFns","finished","_startingStyles","__initialized","CssKeyframesDriver","_count","_warningIssued","keyframeStr","kfElm","scrubberAccessRequested","_notifyFaultyScrubber","previousCssKeyframePlayers","flatKeyframes","buildKeyframeElement","specialStyles","WebAnimationsPlayer","_initialized","_preparePlayerBeforeStart","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","WebAnimationsDriver","_isNativeImpl","getElementAnimateFn","_cssKeyframesDriver","playerOptions","previousWebAnimationPlayers","BrowserAnimationBuilder","rootRenderer","_nextAnimationId","issueAnimationCommand","_id","RendererAnimationPlayer","_command","_listen","AnimationRendererFactory","InjectableAnimationEngine","BrowserAnimationsModule","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","BaseAnimationRenderer","AnimationRenderer","_scheduleCountTask","onInsert","onRemove","disableAnimations","dotIndex","scheduleListenerCallback","BROWSER_ANIMATIONS_PROVIDERS","AppModule","isIE","bootstrapModule","webpackEmptyAsyncContext"],"mappings":"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H,KACA,KACA,KACA,KACA,KACA,KACA,MAEJ2C,KAAM,CACF,SACA,SACA,UACA,YACA,WACA,SACA,cAIZ/kO,OAAQ,CACJpkC,OAAQ,CACJkpQ,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ1zD,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ2zD,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,aAGR,cAAe,CACXD,YAAa,CACT,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAEJ1zD,OAAQ,CACJ,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAEJ2zD,KAAM,CACF,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,cAIZC,SAAU,CACNppQ,OAAQ,CACJkpQ,YAAa,CACT,KACA,KACA,KACA,MAEJ1zD,OAAQ,CACJ,IACA,IACA,IACA,KAEJ2zD,KAAM,CACF,cACA,cACA,cACA,gBAGR,cAAe,CACXD,YAAa,CACT,KACA,KACA,KACA,MAEJ1zD,OAAQ,CACJ,IACA,IACA,IACA,KAEJ2zD,KAAM,CACF,cACA,cACA,cACA,iBAIZhxJ,WAAY,CACRn4G,OAAQ,CACJkpQ,YAAa,CACTG,SAAU,WACVC,GAAI,KACJ,iBAAkB,KAClBC,KAAM,OACNC,GAAI,KACJ,iBAAkB,KAClBC,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,YAEZp0D,OAAQ,CACJ6zD,SAAU,KACVC,GAAI,IACJ,iBAAkB,KAClBC,KAAM,IACNC,GAAI,IACJ,iBAAkB,KAClBC,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,YAEZT,KAAM,CACFE,SAAU,WACVC,GAAI,KACJ,iBAAkB,KAClBC,KAAM,OACNC,GAAI,KACJ,iBAAkB,KAClBC,SAAU,iBACVC,WAAY,mBACZC,SAAU,iBACVC,OAAQ,a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","sourceRoot":"webpack:///","sourcesContent":["module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","module.exports = minimatch\nminimatch.Minimatch = Minimatch\n\nvar path = { sep: '/' }\ntry {\n path = require('path')\n} catch (er) {}\n\nvar GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {}\nvar expand = require('brace-expansion')\n\nvar plTypes = {\n '!': { open: '(?:(?!(?:', close: '))[^/]*?)'},\n '?': { open: '(?:', close: ')?' },\n '+': { open: '(?:', close: ')+' },\n '*': { open: '(?:', close: ')*' },\n '@': { open: '(?:', close: ')' }\n}\n\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nvar qmark = '[^/]'\n\n// * => any number of characters\nvar star = qmark + '*?'\n\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nvar twoStarDot = '(?:(?!(?:\\\\\\/|^)(?:\\\\.{1,2})($|\\\\\\/)).)*?'\n\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nvar twoStarNoDot = '(?:(?!(?:\\\\\\/|^)\\\\.).)*?'\n\n// characters that need to be escaped in RegExp.\nvar reSpecials = charSet('().*{}+?[]^$\\\\!')\n\n// \"abc\" -> { a:true, b:true, c:true }\nfunction charSet (s) {\n return s.split('').reduce(function (set, c) {\n set[c] = true\n return set\n }, {})\n}\n\n// normalizes slashes.\nvar slashSplit = /\\/+/\n\nminimatch.filter = filter\nfunction filter (pattern, options) {\n options = options || {}\n return function (p, i, list) {\n return minimatch(p, pattern, options)\n }\n}\n\nfunction ext (a, b) {\n a = a || {}\n b = b || {}\n var t = {}\n Object.keys(b).forEach(function (k) {\n t[k] = b[k]\n })\n Object.keys(a).forEach(function (k) {\n t[k] = a[k]\n })\n return t\n}\n\nminimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return minimatch\n\n var orig = minimatch\n\n var m = function minimatch (p, pattern, options) {\n return orig.minimatch(p, pattern, ext(def, options))\n }\n\n m.Minimatch = function Minimatch (pattern, options) {\n return new orig.Minimatch(pattern, ext(def, options))\n }\n\n return m\n}\n\nMinimatch.defaults = function (def) {\n if (!def || !Object.keys(def).length) return Minimatch\n return minimatch.defaults(def).Minimatch\n}\n\nfunction minimatch (p, pattern, options) {\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false\n }\n\n // \"\" only matches \"\"\n if (pattern.trim() === '') return p === ''\n\n return new Minimatch(pattern, options).match(p)\n}\n\nfunction Minimatch (pattern, options) {\n if (!(this instanceof Minimatch)) {\n return new Minimatch(pattern, options)\n }\n\n if (typeof pattern !== 'string') {\n throw new TypeError('glob pattern string required')\n }\n\n if (!options) options = {}\n pattern = pattern.trim()\n\n // windows support: need to use /, not \\\n if (path.sep !== '/') {\n pattern = pattern.split(path.sep).join('/')\n }\n\n this.options = options\n this.set = []\n this.pattern = pattern\n this.regexp = null\n this.negate = false\n this.comment = false\n this.empty = false\n\n // make the set of regexps etc.\n this.make()\n}\n\nMinimatch.prototype.debug = function () {}\n\nMinimatch.prototype.make = make\nfunction make () {\n // don't do it more than once.\n if (this._made) return\n\n var pattern = this.pattern\n var options = this.options\n\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true\n return\n }\n if (!pattern) {\n this.empty = true\n return\n }\n\n // step 1: figure out negation, etc.\n this.parseNegate()\n\n // step 2: expand braces\n var set = this.globSet = this.braceExpand()\n\n if (options.debug) this.debug = console.error\n\n this.debug(this.pattern, set)\n\n // step 3: now we have a set, so turn each one into a series of path-portion\n // matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n set = this.globParts = set.map(function (s) {\n return s.split(slashSplit)\n })\n\n this.debug(this.pattern, set)\n\n // glob --> regexps\n set = set.map(function (s, si, set) {\n return s.map(this.parse, this)\n }, this)\n\n this.debug(this.pattern, set)\n\n // filter out everything that didn't compile properly.\n set = set.filter(function (s) {\n return s.indexOf(false) === -1\n })\n\n this.debug(this.pattern, set)\n\n this.set = set\n}\n\nMinimatch.prototype.parseNegate = parseNegate\nfunction parseNegate () {\n var pattern = this.pattern\n var negate = false\n var options = this.options\n var negateOffset = 0\n\n if (options.nonegate) return\n\n for (var i = 0, l = pattern.length\n ; i < l && pattern.charAt(i) === '!'\n ; i++) {\n negate = !negate\n negateOffset++\n }\n\n if (negateOffset) this.pattern = pattern.substr(negateOffset)\n this.negate = negate\n}\n\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nminimatch.braceExpand = function (pattern, options) {\n return braceExpand(pattern, options)\n}\n\nMinimatch.prototype.braceExpand = braceExpand\n\nfunction braceExpand (pattern, options) {\n if (!options) {\n if (this instanceof Minimatch) {\n options = this.options\n } else {\n options = {}\n }\n }\n\n pattern = typeof pattern === 'undefined'\n ? this.pattern : pattern\n\n if (typeof pattern === 'undefined') {\n throw new TypeError('undefined pattern')\n }\n\n if (options.nobrace ||\n !pattern.match(/\\{.*\\}/)) {\n // shortcut. no need to expand.\n return [pattern]\n }\n\n return expand(pattern)\n}\n\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nMinimatch.prototype.parse = parse\nvar SUBPARSE = {}\nfunction parse (pattern, isSub) {\n if (pattern.length > 1024 * 64) {\n throw new TypeError('pattern is too long')\n }\n\n var options = this.options\n\n // shortcuts\n if (!options.noglobstar && pattern === '**') return GLOBSTAR\n if (pattern === '') return ''\n\n var re = ''\n var hasMagic = !!options.nocase\n var escaping = false\n // ? => one single character\n var patternListStack = []\n var negativeLists = []\n var stateChar\n var inClass = false\n var reClassStart = -1\n var classStart = -1\n // . and .. never match anything that doesn't start with .,\n // even when options.dot is set.\n var patternStart = pattern.charAt(0) === '.' ? '' // anything\n // not (start or / followed by . or .. followed by / or end)\n : options.dot ? '(?!(?:^|\\\\\\/)\\\\.{1,2}(?:$|\\\\\\/))'\n : '(?!\\\\.)'\n var self = this\n\n function clearStateChar () {\n if (stateChar) {\n // we had some state-tracking character\n // that wasn't consumed by this pass.\n switch (stateChar) {\n case '*':\n re += star\n hasMagic = true\n break\n case '?':\n re += qmark\n hasMagic = true\n break\n default:\n re += '\\\\' + stateChar\n break\n }\n self.debug('clearStateChar %j %j', stateChar, re)\n stateChar = false\n }\n }\n\n for (var i = 0, len = pattern.length, c\n ; (i < len) && (c = pattern.charAt(i))\n ; i++) {\n this.debug('%s\\t%s %s %j', pattern, i, re, c)\n\n // skip over any that are escaped.\n if (escaping && reSpecials[c]) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n switch (c) {\n case '/':\n // completely not allowed, even escaped.\n // Should already be path-split by now.\n return false\n\n case '\\\\':\n clearStateChar()\n escaping = true\n continue\n\n // the various stateChar values\n // for the \"extglob\" stuff.\n case '?':\n case '*':\n case '+':\n case '@':\n case '!':\n this.debug('%s\\t%s %s %j <-- stateChar', pattern, i, re, c)\n\n // all of those are literals inside a class, except that\n // the glob [!a] means [^a] in regexp\n if (inClass) {\n this.debug(' in class')\n if (c === '!' && i === classStart + 1) c = '^'\n re += c\n continue\n }\n\n // if we already have a stateChar, then it means\n // that there was something like ** or +? in there.\n // Handle the stateChar, then proceed with this one.\n self.debug('call clearStateChar %j', stateChar)\n clearStateChar()\n stateChar = c\n // if extglob is disabled, then +(asdf|foo) isn't a thing.\n // just clear the statechar *now*, rather than even diving into\n // the patternList stuff.\n if (options.noext) clearStateChar()\n continue\n\n case '(':\n if (inClass) {\n re += '('\n continue\n }\n\n if (!stateChar) {\n re += '\\\\('\n continue\n }\n\n patternListStack.push({\n type: stateChar,\n start: i - 1,\n reStart: re.length,\n open: plTypes[stateChar].open,\n close: plTypes[stateChar].close\n })\n // negation is (?:(?!js)[^/]*)\n re += stateChar === '!' ? '(?:(?!(?:' : '(?:'\n this.debug('plType %j %j', stateChar, re)\n stateChar = false\n continue\n\n case ')':\n if (inClass || !patternListStack.length) {\n re += '\\\\)'\n continue\n }\n\n clearStateChar()\n hasMagic = true\n var pl = patternListStack.pop()\n // negation is (?:(?!js)[^/]*)\n // The others are (?:)\n re += pl.close\n if (pl.type === '!') {\n negativeLists.push(pl)\n }\n pl.reEnd = re.length\n continue\n\n case '|':\n if (inClass || !patternListStack.length || escaping) {\n re += '\\\\|'\n escaping = false\n continue\n }\n\n clearStateChar()\n re += '|'\n continue\n\n // these are mostly the same in regexp and glob\n case '[':\n // swallow any state-tracking char before the [\n clearStateChar()\n\n if (inClass) {\n re += '\\\\' + c\n continue\n }\n\n inClass = true\n classStart = i\n reClassStart = re.length\n re += c\n continue\n\n case ']':\n // a right bracket shall lose its special\n // meaning and represent itself in\n // a bracket expression if it occurs\n // first in the list. -- POSIX.2 2.8.3.2\n if (i === classStart + 1 || !inClass) {\n re += '\\\\' + c\n escaping = false\n continue\n }\n\n // handle the case where we left a class open.\n // \"[z-a]\" is valid, equivalent to \"\\[z-a\\]\"\n if (inClass) {\n // split where the last [ was, make sure we don't have\n // an invalid re. if so, re-walk the contents of the\n // would-be class to re-translate any characters that\n // were passed through as-is\n // TODO: It would probably be faster to determine this\n // without a try/catch and a new RegExp, but it's tricky\n // to do safely. For now, this is safe and works.\n var cs = pattern.substring(classStart + 1, i)\n try {\n RegExp('[' + cs + ']')\n } catch (er) {\n // not a valid class!\n var sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0] + '\\\\]'\n hasMagic = hasMagic || sp[1]\n inClass = false\n continue\n }\n }\n\n // finish up the class.\n hasMagic = true\n inClass = false\n re += c\n continue\n\n default:\n // swallow any state char that wasn't consumed\n clearStateChar()\n\n if (escaping) {\n // no need\n escaping = false\n } else if (reSpecials[c]\n && !(c === '^' && inClass)) {\n re += '\\\\'\n }\n\n re += c\n\n } // switch\n } // for\n\n // handle the case where we left a class open.\n // \"[abc\" is valid, equivalent to \"\\[abc\"\n if (inClass) {\n // split where the last [ was, and escape it\n // this is a huge pita. We now have to re-walk\n // the contents of the would-be class to re-translate\n // any characters that were passed through as-is\n cs = pattern.substr(classStart + 1)\n sp = this.parse(cs, SUBPARSE)\n re = re.substr(0, reClassStart) + '\\\\[' + sp[0]\n hasMagic = hasMagic || sp[1]\n }\n\n // handle the case where we had a +( thing at the *end*\n // of the pattern.\n // each pattern list stack adds 3 chars, and we need to go through\n // and escape any | chars that were passed through as-is for the regexp.\n // Go through and escape them, taking care not to double-escape any\n // | chars that were already escaped.\n for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) {\n var tail = re.slice(pl.reStart + pl.open.length)\n this.debug('setting tail', re, pl)\n // maybe some even number of \\, then maybe 1 \\, followed by a |\n tail = tail.replace(/((?:\\\\{2}){0,64})(\\\\?)\\|/g, function (_, $1, $2) {\n if (!$2) {\n // the | isn't already escaped, so escape it.\n $2 = '\\\\'\n }\n\n // need to escape all those slashes *again*, without escaping the\n // one that we need for escaping the | character. As it works out,\n // escaping an even number of slashes can be done by simply repeating\n // it exactly after itself. That's why this trick works.\n //\n // I am sorry that you have to see this.\n return $1 + $1 + $2 + '|'\n })\n\n this.debug('tail=%j\\n %s', tail, tail, pl, re)\n var t = pl.type === '*' ? star\n : pl.type === '?' ? qmark\n : '\\\\' + pl.type\n\n hasMagic = true\n re = re.slice(0, pl.reStart) + t + '\\\\(' + tail\n }\n\n // handle trailing things that only matter at the very end.\n clearStateChar()\n if (escaping) {\n // trailing \\\\\n re += '\\\\\\\\'\n }\n\n // only need to apply the nodot start if the re starts with\n // something that could conceivably capture a dot\n var addPatternStart = false\n switch (re.charAt(0)) {\n case '.':\n case '[':\n case '(': addPatternStart = true\n }\n\n // Hack to work around lack of negative lookbehind in JS\n // A pattern like: *.!(x).!(y|z) needs to ensure that a name\n // like 'a.xyz.yz' doesn't match. So, the first negative\n // lookahead, has to look ALL the way ahead, to the end of\n // the pattern.\n for (var n = negativeLists.length - 1; n > -1; n--) {\n var nl = negativeLists[n]\n\n var nlBefore = re.slice(0, nl.reStart)\n var nlFirst = re.slice(nl.reStart, nl.reEnd - 8)\n var nlLast = re.slice(nl.reEnd - 8, nl.reEnd)\n var nlAfter = re.slice(nl.reEnd)\n\n nlLast += nlAfter\n\n // Handle nested stuff like *(*.js|!(*.json)), where open parens\n // mean that we should *not* include the ) in the bit that is considered\n // \"after\" the negated section.\n var openParensBefore = nlBefore.split('(').length - 1\n var cleanAfter = nlAfter\n for (i = 0; i < openParensBefore; i++) {\n cleanAfter = cleanAfter.replace(/\\)[+*?]?/, '')\n }\n nlAfter = cleanAfter\n\n var dollar = ''\n if (nlAfter === '' && isSub !== SUBPARSE) {\n dollar = '$'\n }\n var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast\n re = newRe\n }\n\n // if the re is not \"\" at this point, then we need to make sure\n // it doesn't match against an empty path part.\n // Otherwise a/* will match a/, which it should not.\n if (re !== '' && hasMagic) {\n re = '(?=.)' + re\n }\n\n if (addPatternStart) {\n re = patternStart + re\n }\n\n // parsing just a piece of a larger pattern.\n if (isSub === SUBPARSE) {\n return [re, hasMagic]\n }\n\n // skip the regexp for non-magical patterns\n // unescape anything in it, though, so that it'll be\n // an exact match against a file etc.\n if (!hasMagic) {\n return globUnescape(pattern)\n }\n\n var flags = options.nocase ? 'i' : ''\n try {\n var regExp = new RegExp('^' + re + '$', flags)\n } catch (er) {\n // If it was an invalid regular expression, then it can't match\n // anything. This trick looks for a character after the end of\n // the string, which is of course impossible, except in multi-line\n // mode, but it's not a /m regex.\n return new RegExp('$.')\n }\n\n regExp._glob = pattern\n regExp._src = re\n\n return regExp\n}\n\nminimatch.makeRe = function (pattern, options) {\n return new Minimatch(pattern, options || {}).makeRe()\n}\n\nMinimatch.prototype.makeRe = makeRe\nfunction makeRe () {\n if (this.regexp || this.regexp === false) return this.regexp\n\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n var set = this.set\n\n if (!set.length) {\n this.regexp = false\n return this.regexp\n }\n var options = this.options\n\n var twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot\n var flags = options.nocase ? 'i' : ''\n\n var re = set.map(function (pattern) {\n return pattern.map(function (p) {\n return (p === GLOBSTAR) ? twoStar\n : (typeof p === 'string') ? regExpEscape(p)\n : p._src\n }).join('\\\\\\/')\n }).join('|')\n\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^(?:' + re + ')$'\n\n // can match anything, as long as it's not this.\n if (this.negate) re = '^(?!' + re + ').*$'\n\n try {\n this.regexp = new RegExp(re, flags)\n } catch (ex) {\n this.regexp = false\n }\n return this.regexp\n}\n\nminimatch.match = function (list, pattern, options) {\n options = options || {}\n var mm = new Minimatch(pattern, options)\n list = list.filter(function (f) {\n return mm.match(f)\n })\n if (mm.options.nonull && !list.length) {\n list.push(pattern)\n }\n return list\n}\n\nMinimatch.prototype.match = match\nfunction match (f, partial) {\n this.debug('match', f, this.pattern)\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) return false\n if (this.empty) return f === ''\n\n if (f === '/' && partial) return true\n\n var options = this.options\n\n // windows: need to use /, not \\\n if (path.sep !== '/') {\n f = f.split(path.sep).join('/')\n }\n\n // treat the test path as a set of pathparts.\n f = f.split(slashSplit)\n this.debug(this.pattern, 'split', f)\n\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n\n var set = this.set\n this.debug(this.pattern, 'set', set)\n\n // Find the basename of the path by looking for the last non-empty segment\n var filename\n var i\n for (i = f.length - 1; i >= 0; i--) {\n filename = f[i]\n if (filename) break\n }\n\n for (i = 0; i < set.length; i++) {\n var pattern = set[i]\n var file = f\n if (options.matchBase && pattern.length === 1) {\n file = [filename]\n }\n var hit = this.matchOne(file, pattern, partial)\n if (hit) {\n if (options.flipNegate) return true\n return !this.negate\n }\n }\n\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) return false\n return this.negate\n}\n\n// set partial to true to test if, for example,\n// \"/a/b\" matches the start of \"/*/b/*/d\"\n// Partial means, if you run out of file before you run\n// out of pattern, then that's fine, as long as all\n// the parts match.\nMinimatch.prototype.matchOne = function (file, pattern, partial) {\n var options = this.options\n\n this.debug('matchOne',\n { 'this': this, file: file, pattern: pattern })\n\n this.debug('matchOne', file.length, pattern.length)\n\n for (var fi = 0,\n pi = 0,\n fl = file.length,\n pl = pattern.length\n ; (fi < fl) && (pi < pl)\n ; fi++, pi++) {\n this.debug('matchOne loop')\n var p = pattern[pi]\n var f = file[fi]\n\n this.debug(pattern, p, f)\n\n // should be impossible.\n // some invalid regexp stuff in the set.\n if (p === false) return false\n\n if (p === GLOBSTAR) {\n this.debug('GLOBSTAR', [pattern, p, f])\n\n // \"**\"\n // a/**/b/**/c would match the following:\n // a/b/x/y/z/c\n // a/x/y/z/b/c\n // a/b/x/b/x/c\n // a/b/c\n // To do this, take the rest of the pattern after\n // the **, and see if it would match the file remainder.\n // If so, return success.\n // If not, the ** \"swallows\" a segment, and try again.\n // This is recursively awful.\n //\n // a/**/b/**/c matching a/b/x/y/z/c\n // - a matches a\n // - doublestar\n // - matchOne(b/x/y/z/c, b/**/c)\n // - b matches b\n // - doublestar\n // - matchOne(x/y/z/c, c) -> no\n // - matchOne(y/z/c, c) -> no\n // - matchOne(z/c, c) -> no\n // - matchOne(c, c) yes, hit\n var fr = fi\n var pr = pi + 1\n if (pr === pl) {\n this.debug('** at the end')\n // a ** at the end will just swallow the rest.\n // We have found a match.\n // however, it will not swallow /.x, unless\n // options.dot is set.\n // . and .. are *never* matched by **, for explosively\n // exponential reasons.\n for (; fi < fl; fi++) {\n if (file[fi] === '.' || file[fi] === '..' ||\n (!options.dot && file[fi].charAt(0) === '.')) return false\n }\n return true\n }\n\n // ok, let's see if we can swallow whatever we can.\n while (fr < fl) {\n var swallowee = file[fr]\n\n this.debug('\\nglobstar while', file, fr, pattern, pr, swallowee)\n\n // XXX remove this slice. Just pass the start index.\n if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {\n this.debug('globstar found match!', fr, fl, swallowee)\n // found a match.\n return true\n } else {\n // can't swallow \".\" or \"..\" ever.\n // can only swallow \".foo\" when explicitly asked.\n if (swallowee === '.' || swallowee === '..' ||\n (!options.dot && swallowee.charAt(0) === '.')) {\n this.debug('dot detected!', file, fr, pattern, pr)\n break\n }\n\n // ** swallows a segment, and continue.\n this.debug('globstar swallow a segment, and continue')\n fr++\n }\n }\n\n // no match was found.\n // However, in partial mode, we can't say this is necessarily over.\n // If there's more *pattern* left, then\n if (partial) {\n // ran out of file\n this.debug('\\n>>> no match, partial?', file, fr, pattern, pr)\n if (fr === fl) return true\n }\n return false\n }\n\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n var hit\n if (typeof p === 'string') {\n if (options.nocase) {\n hit = f.toLowerCase() === p.toLowerCase()\n } else {\n hit = f === p\n }\n this.debug('string match', p, f, hit)\n } else {\n hit = f.match(p)\n this.debug('pattern match', p, f, hit)\n }\n\n if (!hit) return false\n }\n\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true\n } else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial\n } else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n var emptyFileEnd = (fi === fl - 1) && (file[fi] === '')\n return emptyFileEnd\n }\n\n // should be unreachable.\n throw new Error('wtf?')\n}\n\n// replace stuff like \\* with *\nfunction globUnescape (s) {\n return s.replace(/\\\\(.)/g, '$1')\n}\n\nfunction regExpEscape (s) {\n return s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n","// Copyright Joyent, Inc. and other Node contributors.\r\n//\r\n// Permission is hereby granted, free of charge, to any person obtaining a\r\n// copy of this software and associated documentation files (the\r\n// \"Software\"), to deal in the Software without restriction, including\r\n// without limitation the rights to use, copy, modify, merge, publish,\r\n// distribute, sublicense, and/or sell copies of the Software, and to permit\r\n// persons to whom the Software is furnished to do so, subject to the\r\n// following conditions:\r\n//\r\n// The above copyright notice and this permission notice shall be included\r\n// in all copies or substantial portions of the Software.\r\n//\r\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\r\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\r\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\r\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\n'use strict';\r\n\r\n\r\nvar isWindows = process.platform === 'win32';\r\nvar util = require('util');\r\n\r\n\r\n// resolves . and .. elements in a path array with directory names there\r\n// must be no slashes or device names (c:\\) in the array\r\n// (so also no leading and trailing slashes - it does not distinguish\r\n// relative and absolute paths)\r\nfunction normalizeArray(parts, allowAboveRoot) {\r\n var res = [];\r\n for (var i = 0; i < parts.length; i++) {\r\n var p = parts[i];\r\n\r\n // ignore empty parts\r\n if (!p || p === '.')\r\n continue;\r\n\r\n if (p === '..') {\r\n if (res.length && res[res.length - 1] !== '..') {\r\n res.pop();\r\n } else if (allowAboveRoot) {\r\n res.push('..');\r\n }\r\n } else {\r\n res.push(p);\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\n// returns an array with empty elements removed from either end of the input\r\n// array or the original array if no elements need to be removed\r\nfunction trimArray(arr) {\r\n var lastIndex = arr.length - 1;\r\n var start = 0;\r\n for (; start <= lastIndex; start++) {\r\n if (arr[start])\r\n break;\r\n }\r\n\r\n var end = lastIndex;\r\n for (; end >= 0; end--) {\r\n if (arr[end])\r\n break;\r\n }\r\n\r\n if (start === 0 && end === lastIndex)\r\n return arr;\r\n if (start > end)\r\n return [];\r\n return arr.slice(start, end + 1);\r\n}\r\n\r\n// Regex to split a windows path into three parts: [*, device, slash,\r\n// tail] windows-only\r\nvar splitDeviceRe =\r\n /^([a-zA-Z]:|[\\\\\\/]{2}[^\\\\\\/]+[\\\\\\/]+[^\\\\\\/]+)?([\\\\\\/])?([\\s\\S]*?)$/;\r\n\r\n// Regex to split the tail part of the above into [*, dir, basename, ext]\r\nvar splitTailRe =\r\n /^([\\s\\S]*?)((?:\\.{1,2}|[^\\\\\\/]+?|)(\\.[^.\\/\\\\]*|))(?:[\\\\\\/]*)$/;\r\n\r\nvar win32 = {};\r\n\r\n// Function to split a filename into [root, dir, basename, ext]\r\nfunction win32SplitPath(filename) {\r\n // Separate device+slash from tail\r\n var result = splitDeviceRe.exec(filename),\r\n device = (result[1] || '') + (result[2] || ''),\r\n tail = result[3] || '';\r\n // Split the tail into dir, basename and extension\r\n var result2 = splitTailRe.exec(tail),\r\n dir = result2[1],\r\n basename = result2[2],\r\n ext = result2[3];\r\n return [device, dir, basename, ext];\r\n}\r\n\r\nfunction win32StatPath(path) {\r\n var result = splitDeviceRe.exec(path),\r\n device = result[1] || '',\r\n isUnc = !!device && device[1] !== ':';\r\n return {\r\n device: device,\r\n isUnc: isUnc,\r\n isAbsolute: isUnc || !!result[2], // UNC paths are always absolute\r\n tail: result[3]\r\n };\r\n}\r\n\r\nfunction normalizeUNCRoot(device) {\r\n return '\\\\\\\\' + device.replace(/^[\\\\\\/]+/, '').replace(/[\\\\\\/]+/g, '\\\\');\r\n}\r\n\r\n// path.resolve([from ...], to)\r\nwin32.resolve = function() {\r\n var resolvedDevice = '',\r\n resolvedTail = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1; i--) {\r\n var path;\r\n if (i >= 0) {\r\n path = arguments[i];\r\n } else if (!resolvedDevice) {\r\n path = process.cwd();\r\n } else {\r\n // Windows has the concept of drive-specific current working\r\n // directories. If we've resolved a drive letter but not yet an\r\n // absolute path, get cwd for that drive. We're sure the device is not\r\n // an unc path at this points, because unc paths are always absolute.\r\n path = process.env['=' + resolvedDevice];\r\n // Verify that a drive-local cwd was found and that it actually points\r\n // to our drive. If not, default to the drive's root.\r\n if (!path || path.substr(0, 3).toLowerCase() !==\r\n resolvedDevice.toLowerCase() + '\\\\') {\r\n path = resolvedDevice + '\\\\';\r\n }\r\n }\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail;\r\n\r\n if (device &&\r\n resolvedDevice &&\r\n device.toLowerCase() !== resolvedDevice.toLowerCase()) {\r\n // This path points to another device so it is not applicable\r\n continue;\r\n }\r\n\r\n if (!resolvedDevice) {\r\n resolvedDevice = device;\r\n }\r\n if (!resolvedAbsolute) {\r\n resolvedTail = tail + '\\\\' + resolvedTail;\r\n resolvedAbsolute = isAbsolute;\r\n }\r\n\r\n if (resolvedDevice && resolvedAbsolute) {\r\n break;\r\n }\r\n }\r\n\r\n // Convert slashes to backslashes when `resolvedDevice` points to an UNC\r\n // root. Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n resolvedDevice = normalizeUNCRoot(resolvedDevice);\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path,\r\n // but handle relative paths to be safe (might happen when process.cwd()\r\n // fails)\r\n\r\n // Normalize the tail path\r\n resolvedTail = normalizeArray(resolvedTail.split(/[\\\\\\/]+/),\r\n !resolvedAbsolute).join('\\\\');\r\n\r\n return (resolvedDevice + (resolvedAbsolute ? '\\\\' : '') + resolvedTail) ||\r\n '.';\r\n};\r\n\r\n\r\nwin32.normalize = function(path) {\r\n var result = win32StatPath(path),\r\n device = result.device,\r\n isUnc = result.isUnc,\r\n isAbsolute = result.isAbsolute,\r\n tail = result.tail,\r\n trailingSlash = /[\\\\\\/]$/.test(tail);\r\n\r\n // Normalize the tail path\r\n tail = normalizeArray(tail.split(/[\\\\\\/]+/), !isAbsolute).join('\\\\');\r\n\r\n if (!tail && !isAbsolute) {\r\n tail = '.';\r\n }\r\n if (tail && trailingSlash) {\r\n tail += '\\\\';\r\n }\r\n\r\n // Convert slashes to backslashes when `device` points to an UNC root.\r\n // Also squash multiple slashes into a single one where appropriate.\r\n if (isUnc) {\r\n device = normalizeUNCRoot(device);\r\n }\r\n\r\n return device + (isAbsolute ? '\\\\' : '') + tail;\r\n};\r\n\r\n\r\nwin32.isAbsolute = function(path) {\r\n return win32StatPath(path).isAbsolute;\r\n};\r\n\r\nwin32.join = function() {\r\n var paths = [];\r\n for (var i = 0; i < arguments.length; i++) {\r\n var arg = arguments[i];\r\n if (!util.isString(arg)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (arg) {\r\n paths.push(arg);\r\n }\r\n }\r\n\r\n var joined = paths.join('\\\\');\r\n\r\n // Make sure that the joined path doesn't start with two slashes, because\r\n // normalize() will mistake it for an UNC path then.\r\n //\r\n // This step is skipped when it is very clear that the user actually\r\n // intended to point at an UNC path. This is assumed when the first\r\n // non-empty string arguments starts with exactly two slashes followed by\r\n // at least one more non-slash character.\r\n //\r\n // Note that for normalize() to treat a path as an UNC path it needs to\r\n // have at least 2 components, so we don't filter for that here.\r\n // This means that the user can use join to construct UNC paths from\r\n // a server name and a share name; for example:\r\n // path.join('//server', 'share') -> '\\\\\\\\server\\\\share\\')\r\n if (!/^[\\\\\\/]{2}[^\\\\\\/]/.test(paths[0])) {\r\n joined = joined.replace(/^[\\\\\\/]{2,}/, '\\\\');\r\n }\r\n\r\n return win32.normalize(joined);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// it will solve the relative path from 'from' to 'to', for instance:\r\n// from = 'C:\\\\orandea\\\\test\\\\aaa'\r\n// to = 'C:\\\\orandea\\\\impl\\\\bbb'\r\n// The output of the function should be: '..\\\\..\\\\impl\\\\bbb'\r\nwin32.relative = function(from, to) {\r\n from = win32.resolve(from);\r\n to = win32.resolve(to);\r\n\r\n // windows is not case sensitive\r\n var lowerFrom = from.toLowerCase();\r\n var lowerTo = to.toLowerCase();\r\n\r\n var toParts = trimArray(to.split('\\\\'));\r\n\r\n var lowerFromParts = trimArray(lowerFrom.split('\\\\'));\r\n var lowerToParts = trimArray(lowerTo.split('\\\\'));\r\n\r\n var length = Math.min(lowerFromParts.length, lowerToParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (lowerFromParts[i] !== lowerToParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n if (samePartsLength == 0) {\r\n return to;\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < lowerFromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('\\\\');\r\n};\r\n\r\n\r\nwin32._makeLong = function(path) {\r\n // Note: this will *probably* throw somewhere.\r\n if (!util.isString(path))\r\n return path;\r\n\r\n if (!path) {\r\n return '';\r\n }\r\n\r\n var resolvedPath = win32.resolve(path);\r\n\r\n if (/^[a-zA-Z]\\:\\\\/.test(resolvedPath)) {\r\n // path is local filesystem path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\' + resolvedPath;\r\n } else if (/^\\\\\\\\[^?.]/.test(resolvedPath)) {\r\n // path is network UNC path, which needs to be converted\r\n // to long UNC path.\r\n return '\\\\\\\\?\\\\UNC\\\\' + resolvedPath.substring(2);\r\n }\r\n\r\n return path;\r\n};\r\n\r\n\r\nwin32.dirname = function(path) {\r\n var result = win32SplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nwin32.basename = function(path, ext) {\r\n var f = win32SplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nwin32.extname = function(path) {\r\n return win32SplitPath(path)[3];\r\n};\r\n\r\n\r\nwin32.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir;\r\n var base = pathObject.base || '';\r\n if (!dir) {\r\n return base;\r\n }\r\n if (dir[dir.length - 1] === win32.sep) {\r\n return dir + base;\r\n }\r\n return dir + win32.sep + base;\r\n};\r\n\r\n\r\nwin32.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = win32SplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nwin32.sep = '\\\\';\r\nwin32.delimiter = ';';\r\n\r\n\r\n// Split a filename into [root, dir, basename, ext], unix version\r\n// 'root' is just a slash, or nothing.\r\nvar splitPathRe =\r\n /^(\\/?|)([\\s\\S]*?)((?:\\.{1,2}|[^\\/]+?|)(\\.[^.\\/]*|))(?:[\\/]*)$/;\r\nvar posix = {};\r\n\r\n\r\nfunction posixSplitPath(filename) {\r\n return splitPathRe.exec(filename).slice(1);\r\n}\r\n\r\n\r\n// path.resolve([from ...], to)\r\n// posix version\r\nposix.resolve = function() {\r\n var resolvedPath = '',\r\n resolvedAbsolute = false;\r\n\r\n for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\r\n var path = (i >= 0) ? arguments[i] : process.cwd();\r\n\r\n // Skip empty and invalid entries\r\n if (!util.isString(path)) {\r\n throw new TypeError('Arguments to path.resolve must be strings');\r\n } else if (!path) {\r\n continue;\r\n }\r\n\r\n resolvedPath = path + '/' + resolvedPath;\r\n resolvedAbsolute = path[0] === '/';\r\n }\r\n\r\n // At this point the path should be resolved to a full absolute path, but\r\n // handle relative paths to be safe (might happen when process.cwd() fails)\r\n\r\n // Normalize the path\r\n resolvedPath = normalizeArray(resolvedPath.split('/'),\r\n !resolvedAbsolute).join('/');\r\n\r\n return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\r\n};\r\n\r\n// path.normalize(path)\r\n// posix version\r\nposix.normalize = function(path) {\r\n var isAbsolute = posix.isAbsolute(path),\r\n trailingSlash = path && path[path.length - 1] === '/';\r\n\r\n // Normalize the path\r\n path = normalizeArray(path.split('/'), !isAbsolute).join('/');\r\n\r\n if (!path && !isAbsolute) {\r\n path = '.';\r\n }\r\n if (path && trailingSlash) {\r\n path += '/';\r\n }\r\n\r\n return (isAbsolute ? '/' : '') + path;\r\n};\r\n\r\n// posix version\r\nposix.isAbsolute = function(path) {\r\n return path.charAt(0) === '/';\r\n};\r\n\r\n// posix version\r\nposix.join = function() {\r\n var path = '';\r\n for (var i = 0; i < arguments.length; i++) {\r\n var segment = arguments[i];\r\n if (!util.isString(segment)) {\r\n throw new TypeError('Arguments to path.join must be strings');\r\n }\r\n if (segment) {\r\n if (!path) {\r\n path += segment;\r\n } else {\r\n path += '/' + segment;\r\n }\r\n }\r\n }\r\n return posix.normalize(path);\r\n};\r\n\r\n\r\n// path.relative(from, to)\r\n// posix version\r\nposix.relative = function(from, to) {\r\n from = posix.resolve(from).substr(1);\r\n to = posix.resolve(to).substr(1);\r\n\r\n var fromParts = trimArray(from.split('/'));\r\n var toParts = trimArray(to.split('/'));\r\n\r\n var length = Math.min(fromParts.length, toParts.length);\r\n var samePartsLength = length;\r\n for (var i = 0; i < length; i++) {\r\n if (fromParts[i] !== toParts[i]) {\r\n samePartsLength = i;\r\n break;\r\n }\r\n }\r\n\r\n var outputParts = [];\r\n for (var i = samePartsLength; i < fromParts.length; i++) {\r\n outputParts.push('..');\r\n }\r\n\r\n outputParts = outputParts.concat(toParts.slice(samePartsLength));\r\n\r\n return outputParts.join('/');\r\n};\r\n\r\n\r\nposix._makeLong = function(path) {\r\n return path;\r\n};\r\n\r\n\r\nposix.dirname = function(path) {\r\n var result = posixSplitPath(path),\r\n root = result[0],\r\n dir = result[1];\r\n\r\n if (!root && !dir) {\r\n // No dirname whatsoever\r\n return '.';\r\n }\r\n\r\n if (dir) {\r\n // It has a dirname, strip trailing slash\r\n dir = dir.substr(0, dir.length - 1);\r\n }\r\n\r\n return root + dir;\r\n};\r\n\r\n\r\nposix.basename = function(path, ext) {\r\n var f = posixSplitPath(path)[2];\r\n // TODO: make this comparison case-insensitive on windows?\r\n if (ext && f.substr(-1 * ext.length) === ext) {\r\n f = f.substr(0, f.length - ext.length);\r\n }\r\n return f;\r\n};\r\n\r\n\r\nposix.extname = function(path) {\r\n return posixSplitPath(path)[3];\r\n};\r\n\r\n\r\nposix.format = function(pathObject) {\r\n if (!util.isObject(pathObject)) {\r\n throw new TypeError(\r\n \"Parameter 'pathObject' must be an object, not \" + typeof pathObject\r\n );\r\n }\r\n\r\n var root = pathObject.root || '';\r\n\r\n if (!util.isString(root)) {\r\n throw new TypeError(\r\n \"'pathObject.root' must be a string or undefined, not \" +\r\n typeof pathObject.root\r\n );\r\n }\r\n\r\n var dir = pathObject.dir ? pathObject.dir + posix.sep : '';\r\n var base = pathObject.base || '';\r\n return dir + base;\r\n};\r\n\r\n\r\nposix.parse = function(pathString) {\r\n if (!util.isString(pathString)) {\r\n throw new TypeError(\r\n \"Parameter 'pathString' must be a string, not \" + typeof pathString\r\n );\r\n }\r\n var allParts = posixSplitPath(pathString);\r\n if (!allParts || allParts.length !== 4) {\r\n throw new TypeError(\"Invalid path '\" + pathString + \"'\");\r\n }\r\n allParts[1] = allParts[1] || '';\r\n allParts[2] = allParts[2] || '';\r\n allParts[3] = allParts[3] || '';\r\n\r\n return {\r\n root: allParts[0],\r\n dir: allParts[0] + allParts[1].slice(0, -1),\r\n base: allParts[2],\r\n ext: allParts[3],\r\n name: allParts[2].slice(0, allParts[2].length - allParts[3].length)\r\n };\r\n};\r\n\r\n\r\nposix.sep = '/';\r\nposix.delimiter = ':';\r\n\r\n\r\nif (isWindows)\r\n module.exports = win32;\r\nelse /* posix */\r\n module.exports = posix;\r\n\r\nmodule.exports.posix = posix;\r\nmodule.exports.win32 = win32;\r\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","/**\n * @license\n * Lodash \n * Copyright OpenJS Foundation and other contributors \n * Released under MIT license \n * Based on Underscore.js 1.8.3 \n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.21';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function',\n INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading whitespace. */\n var reTrimStart = /^\\s+/;\n\n /** Used to match a single whitespace character. */\n var reWhitespace = /\\s/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /**\n * Used to validate the `validate` option in `_.template` variable.\n *\n * Forbids characters which could potentially change the meaning of the function argument definition:\n * - \"(),\" (modification of function parameters)\n * - \"=\" (default value)\n * - \"[]{}\" (destructuring of function parameters)\n * - \"/\" (beginning of a comment)\n * - whitespace\n */\n var reForbiddenIdentifierChars = /[()=,{}\\[\\]\\/\\s]/;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\n function baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\n function trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n var low = 0,\n high = array == null ? 0 : array.length;\n if (high === 0) {\n return 0;\n }\n\n value = iteratee(value);\n var valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n *\n * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 30 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '

' + func(text) + '

';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '

fred, barney, & pebbles

'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<%- value %>');\n * compiled({ 'value': '\n if (val === '') return true;\n if (val === 'false') return false;\n if (val === 'true') return true;\n return val;\n}\n\nif (DOCUMENT && typeof DOCUMENT.querySelector === 'function') {\n var attrs = [['data-family-prefix', 'familyPrefix'], ['data-replacement-class', 'replacementClass'], ['data-auto-replace-svg', 'autoReplaceSvg'], ['data-auto-add-css', 'autoAddCss'], ['data-auto-a11y', 'autoA11y'], ['data-search-pseudo-elements', 'searchPseudoElements'], ['data-observe-mutations', 'observeMutations'], ['data-mutate-approach', 'mutateApproach'], ['data-keep-original-source', 'keepOriginalSource'], ['data-measure-performance', 'measurePerformance'], ['data-show-missing-icons', 'showMissingIcons']];\n attrs.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n attr = _ref2[0],\n key = _ref2[1];\n\n var val = coerce(getAttrConfig(attr));\n\n if (val !== undefined && val !== null) {\n initial[key] = val;\n }\n });\n}\n\nvar _default = {\n familyPrefix: DEFAULT_FAMILY_PREFIX,\n replacementClass: DEFAULT_REPLACEMENT_CLASS,\n autoReplaceSvg: true,\n autoAddCss: true,\n autoA11y: true,\n searchPseudoElements: false,\n observeMutations: true,\n mutateApproach: 'async',\n keepOriginalSource: true,\n measurePerformance: false,\n showMissingIcons: true\n};\n\nvar _config = _objectSpread({}, _default, initial);\n\nif (!_config.autoReplaceSvg) _config.observeMutations = false;\n\nvar config = _objectSpread({}, _config);\n\nWINDOW.FontAwesomeConfig = config;\n\nvar w = WINDOW || {};\nif (!w[NAMESPACE_IDENTIFIER]) w[NAMESPACE_IDENTIFIER] = {};\nif (!w[NAMESPACE_IDENTIFIER].styles) w[NAMESPACE_IDENTIFIER].styles = {};\nif (!w[NAMESPACE_IDENTIFIER].hooks) w[NAMESPACE_IDENTIFIER].hooks = {};\nif (!w[NAMESPACE_IDENTIFIER].shims) w[NAMESPACE_IDENTIFIER].shims = [];\nvar namespace = w[NAMESPACE_IDENTIFIER];\n\nvar functions = [];\n\nvar listener = function listener() {\n DOCUMENT.removeEventListener('DOMContentLoaded', listener);\n loaded = 1;\n functions.map(function (fn) {\n return fn();\n });\n};\n\nvar loaded = false;\n\nif (IS_DOM) {\n loaded = (DOCUMENT.documentElement.doScroll ? /^loaded|^c/ : /^loaded|^i|^c/).test(DOCUMENT.readyState);\n if (!loaded) DOCUMENT.addEventListener('DOMContentLoaded', listener);\n}\n\nfunction domready (fn) {\n if (!IS_DOM) return;\n loaded ? setTimeout(fn, 0) : functions.push(fn);\n}\n\nvar PENDING = 'pending';\nvar SETTLED = 'settled';\nvar FULFILLED = 'fulfilled';\nvar REJECTED = 'rejected';\n\nvar NOOP = function NOOP() {};\n\nvar isNode = typeof global !== 'undefined' && typeof global.process !== 'undefined' && typeof global.process.emit === 'function';\nvar asyncSetTimer = typeof setImmediate === 'undefined' ? setTimeout : setImmediate;\nvar asyncQueue = [];\nvar asyncTimer;\n\nfunction asyncFlush() {\n // run promise callbacks\n for (var i = 0; i < asyncQueue.length; i++) {\n asyncQueue[i][0](asyncQueue[i][1]);\n } // reset async asyncQueue\n\n\n asyncQueue = [];\n asyncTimer = false;\n}\n\nfunction asyncCall(callback, arg) {\n asyncQueue.push([callback, arg]);\n\n if (!asyncTimer) {\n asyncTimer = true;\n asyncSetTimer(asyncFlush, 0);\n }\n}\n\nfunction invokeResolver(resolver, promise) {\n function resolvePromise(value) {\n resolve(promise, value);\n }\n\n function rejectPromise(reason) {\n reject(promise, reason);\n }\n\n try {\n resolver(resolvePromise, rejectPromise);\n } catch (e) {\n rejectPromise(e);\n }\n}\n\nfunction invokeCallback(subscriber) {\n var owner = subscriber.owner;\n var settled = owner._state;\n var value = owner._data;\n var callback = subscriber[settled];\n var promise = subscriber.then;\n\n if (typeof callback === 'function') {\n settled = FULFILLED;\n\n try {\n value = callback(value);\n } catch (e) {\n reject(promise, e);\n }\n }\n\n if (!handleThenable(promise, value)) {\n if (settled === FULFILLED) {\n resolve(promise, value);\n }\n\n if (settled === REJECTED) {\n reject(promise, value);\n }\n }\n}\n\nfunction handleThenable(promise, value) {\n var resolved;\n\n try {\n if (promise === value) {\n throw new TypeError('A promises callback cannot return that same promise.');\n }\n\n if (value && (typeof value === 'function' || _typeof(value) === 'object')) {\n // then should be retrieved only once\n var then = value.then;\n\n if (typeof then === 'function') {\n then.call(value, function (val) {\n if (!resolved) {\n resolved = true;\n\n if (value === val) {\n fulfill(promise, val);\n } else {\n resolve(promise, val);\n }\n }\n }, function (reason) {\n if (!resolved) {\n resolved = true;\n reject(promise, reason);\n }\n });\n return true;\n }\n }\n } catch (e) {\n if (!resolved) {\n reject(promise, e);\n }\n\n return true;\n }\n\n return false;\n}\n\nfunction resolve(promise, value) {\n if (promise === value || !handleThenable(promise, value)) {\n fulfill(promise, value);\n }\n}\n\nfunction fulfill(promise, value) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = value;\n asyncCall(publishFulfillment, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state === PENDING) {\n promise._state = SETTLED;\n promise._data = reason;\n asyncCall(publishRejection, promise);\n }\n}\n\nfunction publish(promise) {\n promise._then = promise._then.forEach(invokeCallback);\n}\n\nfunction publishFulfillment(promise) {\n promise._state = FULFILLED;\n publish(promise);\n}\n\nfunction publishRejection(promise) {\n promise._state = REJECTED;\n publish(promise);\n\n if (!promise._handled && isNode) {\n global.process.emit('unhandledRejection', promise._data, promise);\n }\n}\n\nfunction notifyRejectionHandled(promise) {\n global.process.emit('rejectionHandled', promise);\n}\n/**\n * @class\n */\n\n\nfunction P(resolver) {\n if (typeof resolver !== 'function') {\n throw new TypeError('Promise resolver ' + resolver + ' is not a function');\n }\n\n if (this instanceof P === false) {\n throw new TypeError('Failed to construct \\'Promise\\': Please use the \\'new\\' operator, this object constructor cannot be called as a function.');\n }\n\n this._then = [];\n invokeResolver(resolver, this);\n}\n\nP.prototype = {\n constructor: P,\n _state: PENDING,\n _then: null,\n _data: undefined,\n _handled: false,\n then: function then(onFulfillment, onRejection) {\n var subscriber = {\n owner: this,\n then: new this.constructor(NOOP),\n fulfilled: onFulfillment,\n rejected: onRejection\n };\n\n if ((onRejection || onFulfillment) && !this._handled) {\n this._handled = true;\n\n if (this._state === REJECTED && isNode) {\n asyncCall(notifyRejectionHandled, this);\n }\n }\n\n if (this._state === FULFILLED || this._state === REJECTED) {\n // already resolved, call callback async\n asyncCall(invokeCallback, subscriber);\n } else {\n // subscribe\n this._then.push(subscriber);\n }\n\n return subscriber.then;\n },\n catch: function _catch(onRejection) {\n return this.then(null, onRejection);\n }\n};\n\nP.all = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.all().');\n }\n\n return new P(function (resolve, reject) {\n var results = [];\n var remaining = 0;\n\n function resolver(index) {\n remaining++;\n return function (value) {\n results[index] = value;\n\n if (! --remaining) {\n resolve(results);\n }\n };\n }\n\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolver(i), reject);\n } else {\n results[i] = promise;\n }\n }\n\n if (!remaining) {\n resolve(results);\n }\n });\n};\n\nP.race = function (promises) {\n if (!Array.isArray(promises)) {\n throw new TypeError('You must pass an array to Promise.race().');\n }\n\n return new P(function (resolve, reject) {\n for (var i = 0, promise; i < promises.length; i++) {\n promise = promises[i];\n\n if (promise && typeof promise.then === 'function') {\n promise.then(resolve, reject);\n } else {\n resolve(promise);\n }\n }\n });\n};\n\nP.resolve = function (value) {\n if (value && _typeof(value) === 'object' && value.constructor === P) {\n return value;\n }\n\n return new P(function (resolve) {\n resolve(value);\n });\n};\n\nP.reject = function (reason) {\n return new P(function (resolve, reject) {\n reject(reason);\n });\n};\n\nvar picked = typeof Promise === 'function' ? Promise : P;\n\nvar d = UNITS_IN_GRID;\nvar meaninglessTransform = {\n size: 16,\n x: 0,\n y: 0,\n rotate: 0,\n flipX: false,\n flipY: false\n};\n\nfunction isReserved(name) {\n return ~RESERVED_CLASSES.indexOf(name);\n}\nfunction insertCss(css) {\n if (!css || !IS_DOM) {\n return;\n }\n\n var style = DOCUMENT.createElement('style');\n style.setAttribute('type', 'text/css');\n style.innerHTML = css;\n var headChildren = DOCUMENT.head.childNodes;\n var beforeChild = null;\n\n for (var i = headChildren.length - 1; i > -1; i--) {\n var child = headChildren[i];\n var tagName = (child.tagName || '').toUpperCase();\n\n if (['STYLE', 'LINK'].indexOf(tagName) > -1) {\n beforeChild = child;\n }\n }\n\n DOCUMENT.head.insertBefore(style, beforeChild);\n return css;\n}\nvar idPool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\nfunction nextUniqueId() {\n var size = 12;\n var id = '';\n\n while (size-- > 0) {\n id += idPool[Math.random() * 62 | 0];\n }\n\n return id;\n}\nfunction toArray(obj) {\n var array = [];\n\n for (var i = (obj || []).length >>> 0; i--;) {\n array[i] = obj[i];\n }\n\n return array;\n}\nfunction classArray(node) {\n if (node.classList) {\n return toArray(node.classList);\n } else {\n return (node.getAttribute('class') || '').split(' ').filter(function (i) {\n return i;\n });\n }\n}\nfunction getIconName(familyPrefix, cls) {\n var parts = cls.split('-');\n var prefix = parts[0];\n var iconName = parts.slice(1).join('-');\n\n if (prefix === familyPrefix && iconName !== '' && !isReserved(iconName)) {\n return iconName;\n } else {\n return null;\n }\n}\nfunction htmlEscape(str) {\n return \"\".concat(str).replace(/&/g, '&').replace(/\"/g, '"').replace(/'/g, ''').replace(//g, '>');\n}\nfunction joinAttributes(attributes) {\n return Object.keys(attributes || {}).reduce(function (acc, attributeName) {\n return acc + \"\".concat(attributeName, \"=\\\"\").concat(htmlEscape(attributes[attributeName]), \"\\\" \");\n }, '').trim();\n}\nfunction joinStyles(styles) {\n return Object.keys(styles || {}).reduce(function (acc, styleName) {\n return acc + \"\".concat(styleName, \": \").concat(styles[styleName], \";\");\n }, '');\n}\nfunction transformIsMeaningful(transform) {\n return transform.size !== meaninglessTransform.size || transform.x !== meaninglessTransform.x || transform.y !== meaninglessTransform.y || transform.rotate !== meaninglessTransform.rotate || transform.flipX || transform.flipY;\n}\nfunction transformForSvg(_ref) {\n var transform = _ref.transform,\n containerWidth = _ref.containerWidth,\n iconWidth = _ref.iconWidth;\n var outer = {\n transform: \"translate(\".concat(containerWidth / 2, \" 256)\")\n };\n var innerTranslate = \"translate(\".concat(transform.x * 32, \", \").concat(transform.y * 32, \") \");\n var innerScale = \"scale(\".concat(transform.size / 16 * (transform.flipX ? -1 : 1), \", \").concat(transform.size / 16 * (transform.flipY ? -1 : 1), \") \");\n var innerRotate = \"rotate(\".concat(transform.rotate, \" 0 0)\");\n var inner = {\n transform: \"\".concat(innerTranslate, \" \").concat(innerScale, \" \").concat(innerRotate)\n };\n var path = {\n transform: \"translate(\".concat(iconWidth / 2 * -1, \" -256)\")\n };\n return {\n outer: outer,\n inner: inner,\n path: path\n };\n}\nfunction transformForCss(_ref2) {\n var transform = _ref2.transform,\n _ref2$width = _ref2.width,\n width = _ref2$width === void 0 ? UNITS_IN_GRID : _ref2$width,\n _ref2$height = _ref2.height,\n height = _ref2$height === void 0 ? UNITS_IN_GRID : _ref2$height,\n _ref2$startCentered = _ref2.startCentered,\n startCentered = _ref2$startCentered === void 0 ? false : _ref2$startCentered;\n var val = '';\n\n if (startCentered && IS_IE) {\n val += \"translate(\".concat(transform.x / d - width / 2, \"em, \").concat(transform.y / d - height / 2, \"em) \");\n } else if (startCentered) {\n val += \"translate(calc(-50% + \".concat(transform.x / d, \"em), calc(-50% + \").concat(transform.y / d, \"em)) \");\n } else {\n val += \"translate(\".concat(transform.x / d, \"em, \").concat(transform.y / d, \"em) \");\n }\n\n val += \"scale(\".concat(transform.size / d * (transform.flipX ? -1 : 1), \", \").concat(transform.size / d * (transform.flipY ? -1 : 1), \") \");\n val += \"rotate(\".concat(transform.rotate, \"deg) \");\n return val;\n}\n\nvar ALL_SPACE = {\n x: 0,\n y: 0,\n width: '100%',\n height: '100%'\n};\n\nfunction fillBlack(abstract) {\n var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n if (abstract.attributes && (abstract.attributes.fill || force)) {\n abstract.attributes.fill = 'black';\n }\n\n return abstract;\n}\n\nfunction deGroup(abstract) {\n if (abstract.tag === 'g') {\n return abstract.children;\n } else {\n return [abstract];\n }\n}\n\nfunction makeIconMasking (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n mask = _ref.mask,\n explicitMaskId = _ref.maskId,\n transform = _ref.transform;\n var mainWidth = main.width,\n mainPath = main.icon;\n var maskWidth = mask.width,\n maskPath = mask.icon;\n var trans = transformForSvg({\n transform: transform,\n containerWidth: maskWidth,\n iconWidth: mainWidth\n });\n var maskRect = {\n tag: 'rect',\n attributes: _objectSpread({}, ALL_SPACE, {\n fill: 'white'\n })\n };\n var maskInnerGroupChildrenMixin = mainPath.children ? {\n children: mainPath.children.map(fillBlack)\n } : {};\n var maskInnerGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [fillBlack(_objectSpread({\n tag: mainPath.tag,\n attributes: _objectSpread({}, mainPath.attributes, trans.path)\n }, maskInnerGroupChildrenMixin))]\n };\n var maskOuterGroup = {\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [maskInnerGroup]\n };\n var maskId = \"mask-\".concat(explicitMaskId || nextUniqueId());\n var clipId = \"clip-\".concat(explicitMaskId || nextUniqueId());\n var maskTag = {\n tag: 'mask',\n attributes: _objectSpread({}, ALL_SPACE, {\n id: maskId,\n maskUnits: 'userSpaceOnUse',\n maskContentUnits: 'userSpaceOnUse'\n }),\n children: [maskRect, maskOuterGroup]\n };\n var defs = {\n tag: 'defs',\n children: [{\n tag: 'clipPath',\n attributes: {\n id: clipId\n },\n children: deGroup(maskPath)\n }, maskTag]\n };\n children.push(defs, {\n tag: 'rect',\n attributes: _objectSpread({\n fill: 'currentColor',\n 'clip-path': \"url(#\".concat(clipId, \")\"),\n mask: \"url(#\".concat(maskId, \")\")\n }, ALL_SPACE)\n });\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction makeIconStandard (_ref) {\n var children = _ref.children,\n attributes = _ref.attributes,\n main = _ref.main,\n transform = _ref.transform,\n styles = _ref.styles;\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n if (transformIsMeaningful(transform)) {\n var trans = transformForSvg({\n transform: transform,\n containerWidth: main.width,\n iconWidth: main.width\n });\n children.push({\n tag: 'g',\n attributes: _objectSpread({}, trans.outer),\n children: [{\n tag: 'g',\n attributes: _objectSpread({}, trans.inner),\n children: [{\n tag: main.icon.tag,\n children: main.icon.children,\n attributes: _objectSpread({}, main.icon.attributes, trans.path)\n }]\n }]\n });\n } else {\n children.push(main.icon);\n }\n\n return {\n children: children,\n attributes: attributes\n };\n}\n\nfunction asIcon (_ref) {\n var children = _ref.children,\n main = _ref.main,\n mask = _ref.mask,\n attributes = _ref.attributes,\n styles = _ref.styles,\n transform = _ref.transform;\n\n if (transformIsMeaningful(transform) && main.found && !mask.found) {\n var width = main.width,\n height = main.height;\n var offset = {\n x: width / height / 2,\n y: 0.5\n };\n attributes['style'] = joinStyles(_objectSpread({}, styles, {\n 'transform-origin': \"\".concat(offset.x + transform.x / 16, \"em \").concat(offset.y + transform.y / 16, \"em\")\n }));\n }\n\n return [{\n tag: 'svg',\n attributes: attributes,\n children: children\n }];\n}\n\nfunction asSymbol (_ref) {\n var prefix = _ref.prefix,\n iconName = _ref.iconName,\n children = _ref.children,\n attributes = _ref.attributes,\n symbol = _ref.symbol;\n var id = symbol === true ? \"\".concat(prefix, \"-\").concat(config.familyPrefix, \"-\").concat(iconName) : symbol;\n return [{\n tag: 'svg',\n attributes: {\n style: 'display: none;'\n },\n children: [{\n tag: 'symbol',\n attributes: _objectSpread({}, attributes, {\n id: id\n }),\n children: children\n }]\n }];\n}\n\nfunction makeInlineSvgAbstract(params) {\n var _params$icons = params.icons,\n main = _params$icons.main,\n mask = _params$icons.mask,\n prefix = params.prefix,\n iconName = params.iconName,\n transform = params.transform,\n symbol = params.symbol,\n title = params.title,\n maskId = params.maskId,\n titleId = params.titleId,\n extra = params.extra,\n _params$watchable = params.watchable,\n watchable = _params$watchable === void 0 ? false : _params$watchable;\n\n var _ref = mask.found ? mask : main,\n width = _ref.width,\n height = _ref.height;\n\n var isUploadedIcon = prefix === 'fak';\n var widthClass = isUploadedIcon ? '' : \"fa-w-\".concat(Math.ceil(width / height * 16));\n var attrClass = [config.replacementClass, iconName ? \"\".concat(config.familyPrefix, \"-\").concat(iconName) : '', widthClass].filter(function (c) {\n return extra.classes.indexOf(c) === -1;\n }).filter(function (c) {\n return c !== '' || !!c;\n }).concat(extra.classes).join(' ');\n var content = {\n children: [],\n attributes: _objectSpread({}, extra.attributes, {\n 'data-prefix': prefix,\n 'data-icon': iconName,\n 'class': attrClass,\n 'role': extra.attributes.role || 'img',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'viewBox': \"0 0 \".concat(width, \" \").concat(height)\n })\n };\n var uploadedIconWidthStyle = isUploadedIcon && !~extra.classes.indexOf('fa-fw') ? {\n width: \"\".concat(width / height * 16 * 0.0625, \"em\")\n } : {};\n\n if (watchable) {\n content.attributes[DATA_FA_I2SVG] = '';\n }\n\n if (title) content.children.push({\n tag: 'title',\n attributes: {\n id: content.attributes['aria-labelledby'] || \"title-\".concat(titleId || nextUniqueId())\n },\n children: [title]\n });\n\n var args = _objectSpread({}, content, {\n prefix: prefix,\n iconName: iconName,\n main: main,\n mask: mask,\n maskId: maskId,\n transform: transform,\n symbol: symbol,\n styles: _objectSpread({}, uploadedIconWidthStyle, extra.styles)\n });\n\n var _ref2 = mask.found && main.found ? makeIconMasking(args) : makeIconStandard(args),\n children = _ref2.children,\n attributes = _ref2.attributes;\n\n args.children = children;\n args.attributes = attributes;\n\n if (symbol) {\n return asSymbol(args);\n } else {\n return asIcon(args);\n }\n}\nfunction makeLayersTextAbstract(params) {\n var content = params.content,\n width = params.width,\n height = params.height,\n transform = params.transform,\n title = params.title,\n extra = params.extra,\n _params$watchable2 = params.watchable,\n watchable = _params$watchable2 === void 0 ? false : _params$watchable2;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n if (watchable) {\n attributes[DATA_FA_I2SVG] = '';\n }\n\n var styles = _objectSpread({}, extra.styles);\n\n if (transformIsMeaningful(transform)) {\n styles['transform'] = transformForCss({\n transform: transform,\n startCentered: true,\n width: width,\n height: height\n });\n styles['-webkit-transform'] = styles['transform'];\n }\n\n var styleString = joinStyles(styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\nfunction makeLayersCounterAbstract(params) {\n var content = params.content,\n title = params.title,\n extra = params.extra;\n\n var attributes = _objectSpread({}, extra.attributes, title ? {\n 'title': title\n } : {}, {\n 'class': extra.classes.join(' ')\n });\n\n var styleString = joinStyles(extra.styles);\n\n if (styleString.length > 0) {\n attributes['style'] = styleString;\n }\n\n var val = [];\n val.push({\n tag: 'span',\n attributes: attributes,\n children: [content]\n });\n\n if (title) {\n val.push({\n tag: 'span',\n attributes: {\n class: 'sr-only'\n },\n children: [title]\n });\n }\n\n return val;\n}\n\nvar noop$1 = function noop() {};\n\nvar p = config.measurePerformance && PERFORMANCE && PERFORMANCE.mark && PERFORMANCE.measure ? PERFORMANCE : {\n mark: noop$1,\n measure: noop$1\n};\nvar preamble = \"FA \\\"5.15.3\\\"\";\n\nvar begin = function begin(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" begins\"));\n return function () {\n return end(name);\n };\n};\n\nvar end = function end(name) {\n p.mark(\"\".concat(preamble, \" \").concat(name, \" ends\"));\n p.measure(\"\".concat(preamble, \" \").concat(name), \"\".concat(preamble, \" \").concat(name, \" begins\"), \"\".concat(preamble, \" \").concat(name, \" ends\"));\n};\n\nvar perf = {\n begin: begin,\n end: end\n};\n\n/**\n * Internal helper to bind a function known to have 4 arguments\n * to a given context.\n */\n\nvar bindInternal4 = function bindInternal4(func, thisContext) {\n return function (a, b, c, d) {\n return func.call(thisContext, a, b, c, d);\n };\n};\n\n/**\n * # Reduce\n *\n * A fast object `.reduce()` implementation.\n *\n * @param {Object} subject The object to reduce over.\n * @param {Function} fn The reducer function.\n * @param {mixed} initialValue The initial value for the reducer, defaults to subject[0].\n * @param {Object} thisContext The context for the reducer.\n * @return {mixed} The final result.\n */\n\n\nvar reduce = function fastReduceObject(subject, fn, initialValue, thisContext) {\n var keys = Object.keys(subject),\n length = keys.length,\n iterator = thisContext !== undefined ? bindInternal4(fn, thisContext) : fn,\n i,\n key,\n result;\n\n if (initialValue === undefined) {\n i = 1;\n result = subject[keys[0]];\n } else {\n i = 0;\n result = initialValue;\n }\n\n for (; i < length; i++) {\n key = keys[i];\n result = iterator(result, subject[key], key, subject);\n }\n\n return result;\n};\n\nfunction toHex(unicode) {\n var result = '';\n\n for (var i = 0; i < unicode.length; i++) {\n var hex = unicode.charCodeAt(i).toString(16);\n result += ('000' + hex).slice(-4);\n }\n\n return result;\n}\n\nfunction defineIcons(prefix, icons) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var _params$skipHooks = params.skipHooks,\n skipHooks = _params$skipHooks === void 0 ? false : _params$skipHooks;\n var normalized = Object.keys(icons).reduce(function (acc, iconName) {\n var icon = icons[iconName];\n var expanded = !!icon.icon;\n\n if (expanded) {\n acc[icon.iconName] = icon.icon;\n } else {\n acc[iconName] = icon;\n }\n\n return acc;\n }, {});\n\n if (typeof namespace.hooks.addPack === 'function' && !skipHooks) {\n namespace.hooks.addPack(prefix, normalized);\n } else {\n namespace.styles[prefix] = _objectSpread({}, namespace.styles[prefix] || {}, normalized);\n }\n /**\n * Font Awesome 4 used the prefix of `fa` for all icons. With the introduction\n * of new styles we needed to differentiate between them. Prefix `fa` is now an alias\n * for `fas` so we'll easy the upgrade process for our users by automatically defining\n * this as well.\n */\n\n\n if (prefix === 'fas') {\n defineIcons('fa', icons);\n }\n}\n\nvar styles = namespace.styles,\n shims = namespace.shims;\nvar _byUnicode = {};\nvar _byLigature = {};\nvar _byOldName = {};\nvar build = function build() {\n var lookup = function lookup(reducer) {\n return reduce(styles, function (o, style, prefix) {\n o[prefix] = reduce(style, reducer, {});\n return o;\n }, {});\n };\n\n _byUnicode = lookup(function (acc, icon, iconName) {\n if (icon[3]) {\n acc[icon[3]] = iconName;\n }\n\n return acc;\n });\n _byLigature = lookup(function (acc, icon, iconName) {\n var ligatures = icon[2];\n acc[iconName] = iconName;\n ligatures.forEach(function (ligature) {\n acc[ligature] = iconName;\n });\n return acc;\n });\n var hasRegular = 'far' in styles;\n _byOldName = reduce(shims, function (acc, shim) {\n var oldName = shim[0];\n var prefix = shim[1];\n var iconName = shim[2];\n\n if (prefix === 'far' && !hasRegular) {\n prefix = 'fas';\n }\n\n acc[oldName] = {\n prefix: prefix,\n iconName: iconName\n };\n return acc;\n }, {});\n};\nbuild();\nfunction byUnicode(prefix, unicode) {\n return (_byUnicode[prefix] || {})[unicode];\n}\nfunction byLigature(prefix, ligature) {\n return (_byLigature[prefix] || {})[ligature];\n}\nfunction byOldName(name) {\n return _byOldName[name] || {\n prefix: null,\n iconName: null\n };\n}\n\nvar styles$1 = namespace.styles;\nvar emptyCanonicalIcon = function emptyCanonicalIcon() {\n return {\n prefix: null,\n iconName: null,\n rest: []\n };\n};\nfunction getCanonicalIcon(values) {\n return values.reduce(function (acc, cls) {\n var iconName = getIconName(config.familyPrefix, cls);\n\n if (styles$1[cls]) {\n acc.prefix = cls;\n } else if (config.autoFetchSvg && Object.keys(PREFIX_TO_STYLE).indexOf(cls) > -1) {\n acc.prefix = cls;\n } else if (iconName) {\n var shim = acc.prefix === 'fa' ? byOldName(iconName) : {};\n acc.iconName = shim.iconName || iconName;\n acc.prefix = shim.prefix || acc.prefix;\n } else if (cls !== config.replacementClass && cls.indexOf('fa-w-') !== 0) {\n acc.rest.push(cls);\n }\n\n return acc;\n }, emptyCanonicalIcon());\n}\nfunction iconFromMapping(mapping, prefix, iconName) {\n if (mapping && mapping[prefix] && mapping[prefix][iconName]) {\n return {\n prefix: prefix,\n iconName: iconName,\n icon: mapping[prefix][iconName]\n };\n }\n}\n\nfunction toHtml(abstractNodes) {\n var tag = abstractNodes.tag,\n _abstractNodes$attrib = abstractNodes.attributes,\n attributes = _abstractNodes$attrib === void 0 ? {} : _abstractNodes$attrib,\n _abstractNodes$childr = abstractNodes.children,\n children = _abstractNodes$childr === void 0 ? [] : _abstractNodes$childr;\n\n if (typeof abstractNodes === 'string') {\n return htmlEscape(abstractNodes);\n } else {\n return \"<\".concat(tag, \" \").concat(joinAttributes(attributes), \">\").concat(children.map(toHtml).join(''), \"\");\n }\n}\n\nvar noop$2 = function noop() {};\n\nfunction isWatched(node) {\n var i2svg = node.getAttribute ? node.getAttribute(DATA_FA_I2SVG) : null;\n return typeof i2svg === 'string';\n}\n\nfunction getMutator() {\n if (config.autoReplaceSvg === true) {\n return mutators.replace;\n }\n\n var mutator = mutators[config.autoReplaceSvg];\n return mutator || mutators.replace;\n}\n\nvar mutators = {\n replace: function replace(mutation) {\n var node = mutation[0];\n var abstract = mutation[1];\n var newOuterHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n\n if (node.parentNode && node.outerHTML) {\n node.outerHTML = newOuterHTML + (config.keepOriginalSource && node.tagName.toLowerCase() !== 'svg' ? \"\") : '');\n } else if (node.parentNode) {\n var newNode = document.createElement('span');\n node.parentNode.replaceChild(newNode, node);\n newNode.outerHTML = newOuterHTML;\n }\n },\n nest: function nest(mutation) {\n var node = mutation[0];\n var abstract = mutation[1]; // If we already have a replaced node we do not want to continue nesting within it.\n // Short-circuit to the standard replacement\n\n if (~classArray(node).indexOf(config.replacementClass)) {\n return mutators.replace(mutation);\n }\n\n var forSvg = new RegExp(\"\".concat(config.familyPrefix, \"-.*\"));\n delete abstract[0].attributes.style;\n delete abstract[0].attributes.id;\n var splitClasses = abstract[0].attributes.class.split(' ').reduce(function (acc, cls) {\n if (cls === config.replacementClass || cls.match(forSvg)) {\n acc.toSvg.push(cls);\n } else {\n acc.toNode.push(cls);\n }\n\n return acc;\n }, {\n toNode: [],\n toSvg: []\n });\n abstract[0].attributes.class = splitClasses.toSvg.join(' ');\n var newInnerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.setAttribute('class', splitClasses.toNode.join(' '));\n node.setAttribute(DATA_FA_I2SVG, '');\n node.innerHTML = newInnerHTML;\n }\n};\n\nfunction performOperationSync(op) {\n op();\n}\n\nfunction perform(mutations, callback) {\n var callbackFunction = typeof callback === 'function' ? callback : noop$2;\n\n if (mutations.length === 0) {\n callbackFunction();\n } else {\n var frame = performOperationSync;\n\n if (config.mutateApproach === MUTATION_APPROACH_ASYNC) {\n frame = WINDOW.requestAnimationFrame || performOperationSync;\n }\n\n frame(function () {\n var mutator = getMutator();\n var mark = perf.begin('mutate');\n mutations.map(mutator);\n mark();\n callbackFunction();\n });\n }\n}\nvar disabled = false;\nfunction disableObservation() {\n disabled = true;\n}\nfunction enableObservation() {\n disabled = false;\n}\nvar mo = null;\nfunction observe(options) {\n if (!MUTATION_OBSERVER) {\n return;\n }\n\n if (!config.observeMutations) {\n return;\n }\n\n var treeCallback = options.treeCallback,\n nodeCallback = options.nodeCallback,\n pseudoElementsCallback = options.pseudoElementsCallback,\n _options$observeMutat = options.observeMutationsRoot,\n observeMutationsRoot = _options$observeMutat === void 0 ? DOCUMENT : _options$observeMutat;\n mo = new MUTATION_OBSERVER(function (objects) {\n if (disabled) return;\n toArray(objects).forEach(function (mutationRecord) {\n if (mutationRecord.type === 'childList' && mutationRecord.addedNodes.length > 0 && !isWatched(mutationRecord.addedNodes[0])) {\n if (config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target);\n }\n\n treeCallback(mutationRecord.target);\n }\n\n if (mutationRecord.type === 'attributes' && mutationRecord.target.parentNode && config.searchPseudoElements) {\n pseudoElementsCallback(mutationRecord.target.parentNode);\n }\n\n if (mutationRecord.type === 'attributes' && isWatched(mutationRecord.target) && ~ATTRIBUTES_WATCHED_FOR_MUTATION.indexOf(mutationRecord.attributeName)) {\n if (mutationRecord.attributeName === 'class') {\n var _getCanonicalIcon = getCanonicalIcon(classArray(mutationRecord.target)),\n prefix = _getCanonicalIcon.prefix,\n iconName = _getCanonicalIcon.iconName;\n\n if (prefix) mutationRecord.target.setAttribute('data-prefix', prefix);\n if (iconName) mutationRecord.target.setAttribute('data-icon', iconName);\n } else {\n nodeCallback(mutationRecord.target);\n }\n }\n });\n });\n if (!IS_DOM) return;\n mo.observe(observeMutationsRoot, {\n childList: true,\n attributes: true,\n characterData: true,\n subtree: true\n });\n}\nfunction disconnect() {\n if (!mo) return;\n mo.disconnect();\n}\n\nfunction styleParser (node) {\n var style = node.getAttribute('style');\n var val = [];\n\n if (style) {\n val = style.split(';').reduce(function (acc, style) {\n var styles = style.split(':');\n var prop = styles[0];\n var value = styles.slice(1);\n\n if (prop && value.length > 0) {\n acc[prop] = value.join(':').trim();\n }\n\n return acc;\n }, {});\n }\n\n return val;\n}\n\nfunction classParser (node) {\n var existingPrefix = node.getAttribute('data-prefix');\n var existingIconName = node.getAttribute('data-icon');\n var innerText = node.innerText !== undefined ? node.innerText.trim() : '';\n var val = getCanonicalIcon(classArray(node));\n\n if (existingPrefix && existingIconName) {\n val.prefix = existingPrefix;\n val.iconName = existingIconName;\n }\n\n if (val.prefix && innerText.length > 1) {\n val.iconName = byLigature(val.prefix, node.innerText);\n } else if (val.prefix && innerText.length === 1) {\n val.iconName = byUnicode(val.prefix, toHex(node.innerText));\n }\n\n return val;\n}\n\nvar parseTransformString = function parseTransformString(transformString) {\n var transform = {\n size: 16,\n x: 0,\n y: 0,\n flipX: false,\n flipY: false,\n rotate: 0\n };\n\n if (!transformString) {\n return transform;\n } else {\n return transformString.toLowerCase().split(' ').reduce(function (acc, n) {\n var parts = n.toLowerCase().split('-');\n var first = parts[0];\n var rest = parts.slice(1).join('-');\n\n if (first && rest === 'h') {\n acc.flipX = true;\n return acc;\n }\n\n if (first && rest === 'v') {\n acc.flipY = true;\n return acc;\n }\n\n rest = parseFloat(rest);\n\n if (isNaN(rest)) {\n return acc;\n }\n\n switch (first) {\n case 'grow':\n acc.size = acc.size + rest;\n break;\n\n case 'shrink':\n acc.size = acc.size - rest;\n break;\n\n case 'left':\n acc.x = acc.x - rest;\n break;\n\n case 'right':\n acc.x = acc.x + rest;\n break;\n\n case 'up':\n acc.y = acc.y - rest;\n break;\n\n case 'down':\n acc.y = acc.y + rest;\n break;\n\n case 'rotate':\n acc.rotate = acc.rotate + rest;\n break;\n }\n\n return acc;\n }, transform);\n }\n};\nfunction transformParser (node) {\n return parseTransformString(node.getAttribute('data-fa-transform'));\n}\n\nfunction symbolParser (node) {\n var symbol = node.getAttribute('data-fa-symbol');\n return symbol === null ? false : symbol === '' ? true : symbol;\n}\n\nfunction attributesParser (node) {\n var extraAttributes = toArray(node.attributes).reduce(function (acc, attr) {\n if (acc.name !== 'class' && acc.name !== 'style') {\n acc[attr.name] = attr.value;\n }\n\n return acc;\n }, {});\n var title = node.getAttribute('title');\n var titleId = node.getAttribute('data-fa-title-id');\n\n if (config.autoA11y) {\n if (title) {\n extraAttributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n extraAttributes['aria-hidden'] = 'true';\n extraAttributes['focusable'] = 'false';\n }\n }\n\n return extraAttributes;\n}\n\nfunction maskParser (node) {\n var mask = node.getAttribute('data-fa-mask');\n\n if (!mask) {\n return emptyCanonicalIcon();\n } else {\n return getCanonicalIcon(mask.split(' ').map(function (i) {\n return i.trim();\n }));\n }\n}\n\nfunction blankMeta() {\n return {\n iconName: null,\n title: null,\n titleId: null,\n prefix: null,\n transform: meaninglessTransform,\n symbol: false,\n mask: null,\n maskId: null,\n extra: {\n classes: [],\n styles: {},\n attributes: {}\n }\n };\n}\nfunction parseMeta(node) {\n var _classParser = classParser(node),\n iconName = _classParser.iconName,\n prefix = _classParser.prefix,\n extraClasses = _classParser.rest;\n\n var extraStyles = styleParser(node);\n var transform = transformParser(node);\n var symbol = symbolParser(node);\n var extraAttributes = attributesParser(node);\n var mask = maskParser(node);\n return {\n iconName: iconName,\n title: node.getAttribute('title'),\n titleId: node.getAttribute('data-fa-title-id'),\n prefix: prefix,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: node.getAttribute('data-fa-mask-id'),\n extra: {\n classes: extraClasses,\n styles: extraStyles,\n attributes: extraAttributes\n }\n };\n}\n\nfunction MissingIcon(error) {\n this.name = 'MissingIcon';\n this.message = error || 'Icon unavailable';\n this.stack = new Error().stack;\n}\nMissingIcon.prototype = Object.create(Error.prototype);\nMissingIcon.prototype.constructor = MissingIcon;\n\nvar FILL = {\n fill: 'currentColor'\n};\nvar ANIMATION_BASE = {\n attributeType: 'XML',\n repeatCount: 'indefinite',\n dur: '2s'\n};\nvar RING = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n d: 'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'\n })\n};\n\nvar OPACITY_ANIMATE = _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'opacity'\n});\n\nvar DOT = {\n tag: 'circle',\n attributes: _objectSpread({}, FILL, {\n cx: '256',\n cy: '364',\n r: '28'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, ANIMATION_BASE, {\n attributeName: 'r',\n values: '28;14;28;28;14;28;'\n })\n }, {\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;1;1;0;1;'\n })\n }]\n};\nvar QUESTION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '1',\n d: 'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '1;0;0;0;0;1;'\n })\n }]\n};\nvar EXCLAMATION = {\n tag: 'path',\n attributes: _objectSpread({}, FILL, {\n opacity: '0',\n d: 'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'\n }),\n children: [{\n tag: 'animate',\n attributes: _objectSpread({}, OPACITY_ANIMATE, {\n values: '0;0;1;1;0;0;'\n })\n }]\n};\nvar missing = {\n tag: 'g',\n children: [RING, DOT, QUESTION, EXCLAMATION]\n};\n\nvar styles$2 = namespace.styles;\nfunction asFoundIcon(icon) {\n var width = icon[0];\n var height = icon[1];\n\n var _icon$slice = icon.slice(4),\n _icon$slice2 = _slicedToArray(_icon$slice, 1),\n vectorData = _icon$slice2[0];\n\n var element = null;\n\n if (Array.isArray(vectorData)) {\n element = {\n tag: 'g',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.GROUP)\n },\n children: [{\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.SECONDARY),\n fill: 'currentColor',\n d: vectorData[0]\n }\n }, {\n tag: 'path',\n attributes: {\n class: \"\".concat(config.familyPrefix, \"-\").concat(DUOTONE_CLASSES.PRIMARY),\n fill: 'currentColor',\n d: vectorData[1]\n }\n }]\n };\n } else {\n element = {\n tag: 'path',\n attributes: {\n fill: 'currentColor',\n d: vectorData\n }\n };\n }\n\n return {\n found: true,\n width: width,\n height: height,\n icon: element\n };\n}\nfunction findIcon(iconName, prefix) {\n return new picked(function (resolve, reject) {\n var val = {\n found: false,\n width: 512,\n height: 512,\n icon: missing\n };\n\n if (iconName && prefix && styles$2[prefix] && styles$2[prefix][iconName]) {\n var icon = styles$2[prefix][iconName];\n return resolve(asFoundIcon(icon));\n }\n\n if (iconName && prefix && !config.showMissingIcons) {\n reject(new MissingIcon(\"Icon is missing for prefix \".concat(prefix, \" with icon name \").concat(iconName)));\n } else {\n resolve(val);\n }\n });\n}\n\nvar styles$3 = namespace.styles;\n\nfunction generateSvgReplacementMutation(node, nodeMeta) {\n var iconName = nodeMeta.iconName,\n title = nodeMeta.title,\n titleId = nodeMeta.titleId,\n prefix = nodeMeta.prefix,\n transform = nodeMeta.transform,\n symbol = nodeMeta.symbol,\n mask = nodeMeta.mask,\n maskId = nodeMeta.maskId,\n extra = nodeMeta.extra;\n return new picked(function (resolve, reject) {\n picked.all([findIcon(iconName, prefix), findIcon(mask.iconName, mask.prefix)]).then(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n main = _ref2[0],\n mask = _ref2[1];\n\n resolve([node, makeInlineSvgAbstract({\n icons: {\n main: main,\n mask: mask\n },\n prefix: prefix,\n iconName: iconName,\n transform: transform,\n symbol: symbol,\n mask: mask,\n maskId: maskId,\n title: title,\n titleId: titleId,\n extra: extra,\n watchable: true\n })]);\n });\n });\n}\n\nfunction generateLayersText(node, nodeMeta) {\n var title = nodeMeta.title,\n transform = nodeMeta.transform,\n extra = nodeMeta.extra;\n var width = null;\n var height = null;\n\n if (IS_IE) {\n var computedFontSize = parseInt(getComputedStyle(node).fontSize, 10);\n var boundingClientRect = node.getBoundingClientRect();\n width = boundingClientRect.width / computedFontSize;\n height = boundingClientRect.height / computedFontSize;\n }\n\n if (config.autoA11y && !title) {\n extra.attributes['aria-hidden'] = 'true';\n }\n\n return picked.resolve([node, makeLayersTextAbstract({\n content: node.innerHTML,\n width: width,\n height: height,\n transform: transform,\n title: title,\n extra: extra,\n watchable: true\n })]);\n}\n\nfunction generateMutation(node) {\n var nodeMeta = parseMeta(node);\n\n if (~nodeMeta.extra.classes.indexOf(LAYERS_TEXT_CLASSNAME)) {\n return generateLayersText(node, nodeMeta);\n } else {\n return generateSvgReplacementMutation(node, nodeMeta);\n }\n}\n\nfunction onTree(root) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n if (!IS_DOM) return;\n var htmlClassList = DOCUMENT.documentElement.classList;\n\n var hclAdd = function hclAdd(suffix) {\n return htmlClassList.add(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var hclRemove = function hclRemove(suffix) {\n return htmlClassList.remove(\"\".concat(HTML_CLASS_I2SVG_BASE_CLASS, \"-\").concat(suffix));\n };\n\n var prefixes = config.autoFetchSvg ? Object.keys(PREFIX_TO_STYLE) : Object.keys(styles$3);\n var prefixesDomQuery = [\".\".concat(LAYERS_TEXT_CLASSNAME, \":not([\").concat(DATA_FA_I2SVG, \"])\")].concat(prefixes.map(function (p) {\n return \".\".concat(p, \":not([\").concat(DATA_FA_I2SVG, \"])\");\n })).join(', ');\n\n if (prefixesDomQuery.length === 0) {\n return;\n }\n\n var candidates = [];\n\n try {\n candidates = toArray(root.querySelectorAll(prefixesDomQuery));\n } catch (e) {// noop\n }\n\n if (candidates.length > 0) {\n hclAdd('pending');\n hclRemove('complete');\n } else {\n return;\n }\n\n var mark = perf.begin('onTree');\n var mutations = candidates.reduce(function (acc, node) {\n try {\n var mutation = generateMutation(node);\n\n if (mutation) {\n acc.push(mutation);\n }\n } catch (e) {\n if (!PRODUCTION) {\n if (e instanceof MissingIcon) {\n console.error(e);\n }\n }\n }\n\n return acc;\n }, []);\n return new picked(function (resolve, reject) {\n picked.all(mutations).then(function (resolvedMutations) {\n perform(resolvedMutations, function () {\n hclAdd('active');\n hclAdd('complete');\n hclRemove('pending');\n if (typeof callback === 'function') callback();\n mark();\n resolve();\n });\n }).catch(function () {\n mark();\n reject();\n });\n });\n}\nfunction onNode(node) {\n var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n generateMutation(node).then(function (mutation) {\n if (mutation) {\n perform([mutation], callback);\n }\n });\n}\n\nfunction replaceForPosition(node, position) {\n var pendingAttribute = \"\".concat(DATA_FA_PSEUDO_ELEMENT_PENDING).concat(position.replace(':', '-'));\n return new picked(function (resolve, reject) {\n if (node.getAttribute(pendingAttribute) !== null) {\n // This node is already being processed\n return resolve();\n }\n\n var children = toArray(node.children);\n var alreadyProcessedPseudoElement = children.filter(function (c) {\n return c.getAttribute(DATA_FA_PSEUDO_ELEMENT) === position;\n })[0];\n var styles = WINDOW.getComputedStyle(node, position);\n var fontFamily = styles.getPropertyValue('font-family').match(FONT_FAMILY_PATTERN);\n var fontWeight = styles.getPropertyValue('font-weight');\n var content = styles.getPropertyValue('content');\n\n if (alreadyProcessedPseudoElement && !fontFamily) {\n // If we've already processed it but the current computed style does not result in a font-family,\n // that probably means that a class name that was previously present to make the icon has been\n // removed. So we now should delete the icon.\n node.removeChild(alreadyProcessedPseudoElement);\n return resolve();\n } else if (fontFamily && content !== 'none' && content !== '') {\n var _content = styles.getPropertyValue('content');\n\n var prefix = ~['Solid', 'Regular', 'Light', 'Duotone', 'Brands', 'Kit'].indexOf(fontFamily[2]) ? STYLE_TO_PREFIX[fontFamily[2].toLowerCase()] : FONT_WEIGHT_TO_PREFIX[fontWeight];\n var hexValue = toHex(_content.length === 3 ? _content.substr(1, 1) : _content);\n var iconName = byUnicode(prefix, hexValue);\n var iconIdentifier = iconName; // Only convert the pseudo element in this :before/:after position into an icon if we haven't\n // already done so with the same prefix and iconName\n\n if (iconName && (!alreadyProcessedPseudoElement || alreadyProcessedPseudoElement.getAttribute(DATA_PREFIX) !== prefix || alreadyProcessedPseudoElement.getAttribute(DATA_ICON) !== iconIdentifier)) {\n node.setAttribute(pendingAttribute, iconIdentifier);\n\n if (alreadyProcessedPseudoElement) {\n // Delete the old one, since we're replacing it with a new one\n node.removeChild(alreadyProcessedPseudoElement);\n }\n\n var meta = blankMeta();\n var extra = meta.extra;\n extra.attributes[DATA_FA_PSEUDO_ELEMENT] = position;\n findIcon(iconName, prefix).then(function (main) {\n var abstract = makeInlineSvgAbstract(_objectSpread({}, meta, {\n icons: {\n main: main,\n mask: emptyCanonicalIcon()\n },\n prefix: prefix,\n iconName: iconIdentifier,\n extra: extra,\n watchable: true\n }));\n var element = DOCUMENT.createElement('svg');\n\n if (position === ':before') {\n node.insertBefore(element, node.firstChild);\n } else {\n node.appendChild(element);\n }\n\n element.outerHTML = abstract.map(function (a) {\n return toHtml(a);\n }).join('\\n');\n node.removeAttribute(pendingAttribute);\n resolve();\n }).catch(reject);\n } else {\n resolve();\n }\n } else {\n resolve();\n }\n });\n}\n\nfunction replace(node) {\n return picked.all([replaceForPosition(node, ':before'), replaceForPosition(node, ':after')]);\n}\n\nfunction processable(node) {\n return node.parentNode !== document.head && !~TAGNAMES_TO_SKIP_FOR_PSEUDOELEMENTS.indexOf(node.tagName.toUpperCase()) && !node.getAttribute(DATA_FA_PSEUDO_ELEMENT) && (!node.parentNode || node.parentNode.tagName !== 'svg');\n}\n\nfunction searchPseudoElements (root) {\n if (!IS_DOM) return;\n return new picked(function (resolve, reject) {\n var operations = toArray(root.querySelectorAll('*')).filter(processable).map(replace);\n var end = perf.begin('searchPseudoElements');\n disableObservation();\n picked.all(operations).then(function () {\n end();\n enableObservation();\n resolve();\n }).catch(function () {\n end();\n enableObservation();\n reject();\n });\n });\n}\n\nvar baseStyles = \"svg:not(:root).svg-inline--fa {\\n overflow: visible;\\n}\\n\\n.svg-inline--fa {\\n display: inline-block;\\n font-size: inherit;\\n height: 1em;\\n overflow: visible;\\n vertical-align: -0.125em;\\n}\\n.svg-inline--fa.fa-lg {\\n vertical-align: -0.225em;\\n}\\n.svg-inline--fa.fa-w-1 {\\n width: 0.0625em;\\n}\\n.svg-inline--fa.fa-w-2 {\\n width: 0.125em;\\n}\\n.svg-inline--fa.fa-w-3 {\\n width: 0.1875em;\\n}\\n.svg-inline--fa.fa-w-4 {\\n width: 0.25em;\\n}\\n.svg-inline--fa.fa-w-5 {\\n width: 0.3125em;\\n}\\n.svg-inline--fa.fa-w-6 {\\n width: 0.375em;\\n}\\n.svg-inline--fa.fa-w-7 {\\n width: 0.4375em;\\n}\\n.svg-inline--fa.fa-w-8 {\\n width: 0.5em;\\n}\\n.svg-inline--fa.fa-w-9 {\\n width: 0.5625em;\\n}\\n.svg-inline--fa.fa-w-10 {\\n width: 0.625em;\\n}\\n.svg-inline--fa.fa-w-11 {\\n width: 0.6875em;\\n}\\n.svg-inline--fa.fa-w-12 {\\n width: 0.75em;\\n}\\n.svg-inline--fa.fa-w-13 {\\n width: 0.8125em;\\n}\\n.svg-inline--fa.fa-w-14 {\\n width: 0.875em;\\n}\\n.svg-inline--fa.fa-w-15 {\\n width: 0.9375em;\\n}\\n.svg-inline--fa.fa-w-16 {\\n width: 1em;\\n}\\n.svg-inline--fa.fa-w-17 {\\n width: 1.0625em;\\n}\\n.svg-inline--fa.fa-w-18 {\\n width: 1.125em;\\n}\\n.svg-inline--fa.fa-w-19 {\\n width: 1.1875em;\\n}\\n.svg-inline--fa.fa-w-20 {\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-pull-left {\\n margin-right: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-pull-right {\\n margin-left: 0.3em;\\n width: auto;\\n}\\n.svg-inline--fa.fa-border {\\n height: 1.5em;\\n}\\n.svg-inline--fa.fa-li {\\n width: 2em;\\n}\\n.svg-inline--fa.fa-fw {\\n width: 1.25em;\\n}\\n\\n.fa-layers svg.svg-inline--fa {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.fa-layers {\\n display: inline-block;\\n height: 1em;\\n position: relative;\\n text-align: center;\\n vertical-align: -0.125em;\\n width: 1em;\\n}\\n.fa-layers svg.svg-inline--fa {\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter, .fa-layers-text {\\n display: inline-block;\\n position: absolute;\\n text-align: center;\\n}\\n\\n.fa-layers-text {\\n left: 50%;\\n top: 50%;\\n -webkit-transform: translate(-50%, -50%);\\n transform: translate(-50%, -50%);\\n -webkit-transform-origin: center center;\\n transform-origin: center center;\\n}\\n\\n.fa-layers-counter {\\n background-color: #ff253a;\\n border-radius: 1em;\\n -webkit-box-sizing: border-box;\\n box-sizing: border-box;\\n color: #fff;\\n height: 1.5em;\\n line-height: 1;\\n max-width: 5em;\\n min-width: 1.5em;\\n overflow: hidden;\\n padding: 0.25em;\\n right: 0;\\n text-overflow: ellipsis;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-bottom-right {\\n bottom: 0;\\n right: 0;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom right;\\n transform-origin: bottom right;\\n}\\n\\n.fa-layers-bottom-left {\\n bottom: 0;\\n left: 0;\\n right: auto;\\n top: auto;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: bottom left;\\n transform-origin: bottom left;\\n}\\n\\n.fa-layers-top-right {\\n right: 0;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top right;\\n transform-origin: top right;\\n}\\n\\n.fa-layers-top-left {\\n left: 0;\\n right: auto;\\n top: 0;\\n -webkit-transform: scale(0.25);\\n transform: scale(0.25);\\n -webkit-transform-origin: top left;\\n transform-origin: top left;\\n}\\n\\n.fa-lg {\\n font-size: 1.3333333333em;\\n line-height: 0.75em;\\n vertical-align: -0.0667em;\\n}\\n\\n.fa-xs {\\n font-size: 0.75em;\\n}\\n\\n.fa-sm {\\n font-size: 0.875em;\\n}\\n\\n.fa-1x {\\n font-size: 1em;\\n}\\n\\n.fa-2x {\\n font-size: 2em;\\n}\\n\\n.fa-3x {\\n font-size: 3em;\\n}\\n\\n.fa-4x {\\n font-size: 4em;\\n}\\n\\n.fa-5x {\\n font-size: 5em;\\n}\\n\\n.fa-6x {\\n font-size: 6em;\\n}\\n\\n.fa-7x {\\n font-size: 7em;\\n}\\n\\n.fa-8x {\\n font-size: 8em;\\n}\\n\\n.fa-9x {\\n font-size: 9em;\\n}\\n\\n.fa-10x {\\n font-size: 10em;\\n}\\n\\n.fa-fw {\\n text-align: center;\\n width: 1.25em;\\n}\\n\\n.fa-ul {\\n list-style-type: none;\\n margin-left: 2.5em;\\n padding-left: 0;\\n}\\n.fa-ul > li {\\n position: relative;\\n}\\n\\n.fa-li {\\n left: -2em;\\n position: absolute;\\n text-align: center;\\n width: 2em;\\n line-height: inherit;\\n}\\n\\n.fa-border {\\n border: solid 0.08em #eee;\\n border-radius: 0.1em;\\n padding: 0.2em 0.25em 0.15em;\\n}\\n\\n.fa-pull-left {\\n float: left;\\n}\\n\\n.fa-pull-right {\\n float: right;\\n}\\n\\n.fa.fa-pull-left,\\n.fas.fa-pull-left,\\n.far.fa-pull-left,\\n.fal.fa-pull-left,\\n.fab.fa-pull-left {\\n margin-right: 0.3em;\\n}\\n.fa.fa-pull-right,\\n.fas.fa-pull-right,\\n.far.fa-pull-right,\\n.fal.fa-pull-right,\\n.fab.fa-pull-right {\\n margin-left: 0.3em;\\n}\\n\\n.fa-spin {\\n -webkit-animation: fa-spin 2s infinite linear;\\n animation: fa-spin 2s infinite linear;\\n}\\n\\n.fa-pulse {\\n -webkit-animation: fa-spin 1s infinite steps(8);\\n animation: fa-spin 1s infinite steps(8);\\n}\\n\\n@-webkit-keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n\\n@keyframes fa-spin {\\n 0% {\\n -webkit-transform: rotate(0deg);\\n transform: rotate(0deg);\\n }\\n 100% {\\n -webkit-transform: rotate(360deg);\\n transform: rotate(360deg);\\n }\\n}\\n.fa-rotate-90 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)\\\";\\n -webkit-transform: rotate(90deg);\\n transform: rotate(90deg);\\n}\\n\\n.fa-rotate-180 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)\\\";\\n -webkit-transform: rotate(180deg);\\n transform: rotate(180deg);\\n}\\n\\n.fa-rotate-270 {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)\\\";\\n -webkit-transform: rotate(270deg);\\n transform: rotate(270deg);\\n}\\n\\n.fa-flip-horizontal {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)\\\";\\n -webkit-transform: scale(-1, 1);\\n transform: scale(-1, 1);\\n}\\n\\n.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(1, -1);\\n transform: scale(1, -1);\\n}\\n\\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\\n -ms-filter: \\\"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)\\\";\\n -webkit-transform: scale(-1, -1);\\n transform: scale(-1, -1);\\n}\\n\\n:root .fa-rotate-90,\\n:root .fa-rotate-180,\\n:root .fa-rotate-270,\\n:root .fa-flip-horizontal,\\n:root .fa-flip-vertical,\\n:root .fa-flip-both {\\n -webkit-filter: none;\\n filter: none;\\n}\\n\\n.fa-stack {\\n display: inline-block;\\n height: 2em;\\n position: relative;\\n width: 2.5em;\\n}\\n\\n.fa-stack-1x,\\n.fa-stack-2x {\\n bottom: 0;\\n left: 0;\\n margin: auto;\\n position: absolute;\\n right: 0;\\n top: 0;\\n}\\n\\n.svg-inline--fa.fa-stack-1x {\\n height: 1em;\\n width: 1.25em;\\n}\\n.svg-inline--fa.fa-stack-2x {\\n height: 2em;\\n width: 2.5em;\\n}\\n\\n.fa-inverse {\\n color: #fff;\\n}\\n\\n.sr-only {\\n border: 0;\\n clip: rect(0, 0, 0, 0);\\n height: 1px;\\n margin: -1px;\\n overflow: hidden;\\n padding: 0;\\n position: absolute;\\n width: 1px;\\n}\\n\\n.sr-only-focusable:active, .sr-only-focusable:focus {\\n clip: auto;\\n height: auto;\\n margin: 0;\\n overflow: visible;\\n position: static;\\n width: auto;\\n}\\n\\n.svg-inline--fa .fa-primary {\\n fill: var(--fa-primary-color, currentColor);\\n opacity: 1;\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa .fa-secondary {\\n fill: var(--fa-secondary-color, currentColor);\\n opacity: 0.4;\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-primary {\\n opacity: 0.4;\\n opacity: var(--fa-secondary-opacity, 0.4);\\n}\\n\\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\\n opacity: 1;\\n opacity: var(--fa-primary-opacity, 1);\\n}\\n\\n.svg-inline--fa mask .fa-primary,\\n.svg-inline--fa mask .fa-secondary {\\n fill: black;\\n}\\n\\n.fad.fa-inverse {\\n color: #fff;\\n}\";\n\nfunction css () {\n var dfp = DEFAULT_FAMILY_PREFIX;\n var drc = DEFAULT_REPLACEMENT_CLASS;\n var fp = config.familyPrefix;\n var rc = config.replacementClass;\n var s = baseStyles;\n\n if (fp !== dfp || rc !== drc) {\n var dPatt = new RegExp(\"\\\\.\".concat(dfp, \"\\\\-\"), 'g');\n var customPropPatt = new RegExp(\"\\\\--\".concat(dfp, \"\\\\-\"), 'g');\n var rPatt = new RegExp(\"\\\\.\".concat(drc), 'g');\n s = s.replace(dPatt, \".\".concat(fp, \"-\")).replace(customPropPatt, \"--\".concat(fp, \"-\")).replace(rPatt, \".\".concat(rc));\n }\n\n return s;\n}\n\nvar Library =\n/*#__PURE__*/\nfunction () {\n function Library() {\n _classCallCheck(this, Library);\n\n this.definitions = {};\n }\n\n _createClass(Library, [{\n key: \"add\",\n value: function add() {\n var _this = this;\n\n for (var _len = arguments.length, definitions = new Array(_len), _key = 0; _key < _len; _key++) {\n definitions[_key] = arguments[_key];\n }\n\n var additions = definitions.reduce(this._pullDefinitions, {});\n Object.keys(additions).forEach(function (key) {\n _this.definitions[key] = _objectSpread({}, _this.definitions[key] || {}, additions[key]);\n defineIcons(key, additions[key]);\n build();\n });\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this.definitions = {};\n }\n }, {\n key: \"_pullDefinitions\",\n value: function _pullDefinitions(additions, definition) {\n var normalized = definition.prefix && definition.iconName && definition.icon ? {\n 0: definition\n } : definition;\n Object.keys(normalized).map(function (key) {\n var _normalized$key = normalized[key],\n prefix = _normalized$key.prefix,\n iconName = _normalized$key.iconName,\n icon = _normalized$key.icon;\n if (!additions[prefix]) additions[prefix] = {};\n additions[prefix][iconName] = icon;\n });\n return additions;\n }\n }]);\n\n return Library;\n}();\n\nfunction ensureCss() {\n if (config.autoAddCss && !_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n}\n\nfunction apiObject(val, abstractCreator) {\n Object.defineProperty(val, 'abstract', {\n get: abstractCreator\n });\n Object.defineProperty(val, 'html', {\n get: function get() {\n return val.abstract.map(function (a) {\n return toHtml(a);\n });\n }\n });\n Object.defineProperty(val, 'node', {\n get: function get() {\n if (!IS_DOM) return;\n var container = DOCUMENT.createElement('div');\n container.innerHTML = val.html;\n return container.children;\n }\n });\n return val;\n}\n\nfunction findIconDefinition(iconLookup) {\n var _iconLookup$prefix = iconLookup.prefix,\n prefix = _iconLookup$prefix === void 0 ? 'fa' : _iconLookup$prefix,\n iconName = iconLookup.iconName;\n if (!iconName) return;\n return iconFromMapping(library.definitions, prefix, iconName) || iconFromMapping(namespace.styles, prefix, iconName);\n}\n\nfunction resolveIcons(next) {\n return function (maybeIconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var iconDefinition = (maybeIconDefinition || {}).icon ? maybeIconDefinition : findIconDefinition(maybeIconDefinition || {});\n var mask = params.mask;\n\n if (mask) {\n mask = (mask || {}).icon ? mask : findIconDefinition(mask || {});\n }\n\n return next(iconDefinition, _objectSpread({}, params, {\n mask: mask\n }));\n };\n}\n\nvar library = new Library();\nvar noAuto = function noAuto() {\n config.autoReplaceSvg = false;\n config.observeMutations = false;\n disconnect();\n};\nvar _cssInserted = false;\nvar dom = {\n i2svg: function i2svg() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (IS_DOM) {\n ensureCss();\n var _params$node = params.node,\n node = _params$node === void 0 ? DOCUMENT : _params$node,\n _params$callback = params.callback,\n callback = _params$callback === void 0 ? function () {} : _params$callback;\n\n if (config.searchPseudoElements) {\n searchPseudoElements(node);\n }\n\n return onTree(node, callback);\n } else {\n return picked.reject('Operation requires a DOM of some kind.');\n }\n },\n css: css,\n insertCss: function insertCss$$1() {\n if (!_cssInserted) {\n insertCss(css());\n\n _cssInserted = true;\n }\n },\n watch: function watch() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var autoReplaceSvgRoot = params.autoReplaceSvgRoot,\n observeMutationsRoot = params.observeMutationsRoot;\n\n if (config.autoReplaceSvg === false) {\n config.autoReplaceSvg = true;\n }\n\n config.observeMutations = true;\n domready(function () {\n autoReplace({\n autoReplaceSvgRoot: autoReplaceSvgRoot\n });\n observe({\n treeCallback: onTree,\n nodeCallback: onNode,\n pseudoElementsCallback: searchPseudoElements,\n observeMutationsRoot: observeMutationsRoot\n });\n });\n }\n};\nvar parse = {\n transform: function transform(transformString) {\n return parseTransformString(transformString);\n }\n};\nvar icon = resolveIcons(function (iconDefinition) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform = params.transform,\n transform = _params$transform === void 0 ? meaninglessTransform : _params$transform,\n _params$symbol = params.symbol,\n symbol = _params$symbol === void 0 ? false : _params$symbol,\n _params$mask = params.mask,\n mask = _params$mask === void 0 ? null : _params$mask,\n _params$maskId = params.maskId,\n maskId = _params$maskId === void 0 ? null : _params$maskId,\n _params$title = params.title,\n title = _params$title === void 0 ? null : _params$title,\n _params$titleId = params.titleId,\n titleId = _params$titleId === void 0 ? null : _params$titleId,\n _params$classes = params.classes,\n classes = _params$classes === void 0 ? [] : _params$classes,\n _params$attributes = params.attributes,\n attributes = _params$attributes === void 0 ? {} : _params$attributes,\n _params$styles = params.styles,\n styles = _params$styles === void 0 ? {} : _params$styles;\n if (!iconDefinition) return;\n var prefix = iconDefinition.prefix,\n iconName = iconDefinition.iconName,\n icon = iconDefinition.icon;\n return apiObject(_objectSpread({\n type: 'icon'\n }, iconDefinition), function () {\n ensureCss();\n\n if (config.autoA11y) {\n if (title) {\n attributes['aria-labelledby'] = \"\".concat(config.replacementClass, \"-title-\").concat(titleId || nextUniqueId());\n } else {\n attributes['aria-hidden'] = 'true';\n attributes['focusable'] = 'false';\n }\n }\n\n return makeInlineSvgAbstract({\n icons: {\n main: asFoundIcon(icon),\n mask: mask ? asFoundIcon(mask.icon) : {\n found: false,\n width: null,\n height: null,\n icon: {}\n }\n },\n prefix: prefix,\n iconName: iconName,\n transform: _objectSpread({}, meaninglessTransform, transform),\n symbol: symbol,\n title: title,\n maskId: maskId,\n titleId: titleId,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: classes\n }\n });\n });\n});\nvar text = function text(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$transform2 = params.transform,\n transform = _params$transform2 === void 0 ? meaninglessTransform : _params$transform2,\n _params$title2 = params.title,\n title = _params$title2 === void 0 ? null : _params$title2,\n _params$classes2 = params.classes,\n classes = _params$classes2 === void 0 ? [] : _params$classes2,\n _params$attributes2 = params.attributes,\n attributes = _params$attributes2 === void 0 ? {} : _params$attributes2,\n _params$styles2 = params.styles,\n styles = _params$styles2 === void 0 ? {} : _params$styles2;\n return apiObject({\n type: 'text',\n content: content\n }, function () {\n ensureCss();\n return makeLayersTextAbstract({\n content: content,\n transform: _objectSpread({}, meaninglessTransform, transform),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-text\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar counter = function counter(content) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$title3 = params.title,\n title = _params$title3 === void 0 ? null : _params$title3,\n _params$classes3 = params.classes,\n classes = _params$classes3 === void 0 ? [] : _params$classes3,\n _params$attributes3 = params.attributes,\n attributes = _params$attributes3 === void 0 ? {} : _params$attributes3,\n _params$styles3 = params.styles,\n styles = _params$styles3 === void 0 ? {} : _params$styles3;\n return apiObject({\n type: 'counter',\n content: content\n }, function () {\n ensureCss();\n return makeLayersCounterAbstract({\n content: content.toString(),\n title: title,\n extra: {\n attributes: attributes,\n styles: styles,\n classes: [\"\".concat(config.familyPrefix, \"-layers-counter\")].concat(_toConsumableArray(classes))\n }\n });\n });\n};\nvar layer = function layer(assembler) {\n var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n var _params$classes4 = params.classes,\n classes = _params$classes4 === void 0 ? [] : _params$classes4;\n return apiObject({\n type: 'layer'\n }, function () {\n ensureCss();\n var children = [];\n assembler(function (args) {\n Array.isArray(args) ? args.map(function (a) {\n children = children.concat(a.abstract);\n }) : children = children.concat(args.abstract);\n });\n return [{\n tag: 'span',\n attributes: {\n class: [\"\".concat(config.familyPrefix, \"-layers\")].concat(_toConsumableArray(classes)).join(' ')\n },\n children: children\n }];\n });\n};\nvar api = {\n noAuto: noAuto,\n config: config,\n dom: dom,\n library: library,\n parse: parse,\n findIconDefinition: findIconDefinition,\n icon: icon,\n text: text,\n counter: counter,\n layer: layer,\n toHtml: toHtml\n};\n\nvar autoReplace = function autoReplace() {\n var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n var _params$autoReplaceSv = params.autoReplaceSvgRoot,\n autoReplaceSvgRoot = _params$autoReplaceSv === void 0 ? DOCUMENT : _params$autoReplaceSv;\n if ((Object.keys(namespace.styles).length > 0 || config.autoFetchSvg) && IS_DOM && config.autoReplaceSvg) api.dom.i2svg({\n node: autoReplaceSvgRoot\n });\n};\n\nexport { icon, noAuto, config, toHtml, layer, text, counter, library, dom, parse, findIconDefinition };\n","import { __decorate, __param } from 'tslib';\nimport { ɵɵdefineInjectable, Injectable, Input, Directive, Optional, HostBinding, Component, Renderer2, ElementRef, NgModule } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { findIconDefinition, parse, icon, counter, text } from '@fortawesome/fontawesome-svg-core';\n\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/platform-browser';\n\nconst _c0 = [[[\"fa-icon\"], [\"fa-duotone-icon\"], [\"fa-layers-text\"], [\"fa-layers-counter\"]]];\nconst _c1 = [\"fa-icon, fa-duotone-icon, fa-layers-text, fa-layers-counter\"];\nconst _c2 = [[[\"fa-icon\", \"stackItemSize\", \"\"], [\"fa-duotone-icon\", \"stackItemSize\", \"\"]]];\nconst _c3 = [\"fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]\"];\nlet FaConfig = class FaConfig {\n constructor() {\n /**\n * Default prefix to use, when one is not provided with the icon name.\n *\n * @default 'fas'\n */\n this.defaultPrefix = 'fas';\n /**\n * Provides a fallback icon to use whilst main icon is being loaded asynchronously.\n * When value is null, then fa-icon component will throw an error if icon input is missing.\n * When value is not null, then the provided icon will be used as a fallback icon if icon input is missing.\n *\n * @default null\n */\n this.fallbackIcon = null;\n /**\n * Whether components should lookup icon definitions in the global icon\n * library (the one available from\n * `import { library } from '@fortawesome/fontawesome-svg-core')`.\n *\n * See https://github.com/FortAwesome/angular-fontawesome/blob/master/docs/usage/icon-library.md\n * for detailed description of library modes.\n *\n * - 'unset' - Components should lookup icon definitions in the global library\n * and emit warning if they find a definition there. This option is a default\n * to assist existing applications with a migration. Applications are expected\n * to switch to using {@link FaIconLibrary}.\n * - true - Components should lookup icon definitions in the global library.\n * Note that global icon library is deprecated and support for it will be\n * removed. This option can be used to temporarily suppress warnings.\n * - false - Components should not lookup icon definitions in the global\n * library. Library will throw an error if missing icon is found in the global\n * library.\n *\n * @deprecated This option is deprecated since 0.5.0. In 0.6.0 default will\n * be changed to false. In 0.7.0 the option will be removed together with the\n * support for the global icon library.\n *\n * @default false\n */\n this.globalLibrary = false;\n }\n};\nFaConfig.ɵfac = function FaConfig_Factory(t) { return new (t || FaConfig)(); };\nFaConfig.ɵprov = ɵɵdefineInjectable({ factory: function FaConfig_Factory() { return new FaConfig(); }, token: FaConfig, providedIn: \"root\" });\n\nlet FaIconLibrary = class FaIconLibrary {\n constructor() {\n this.definitions = {};\n }\n addIcons(...icons) {\n for (const icon of icons) {\n if (!(icon.prefix in this.definitions)) {\n this.definitions[icon.prefix] = {};\n }\n this.definitions[icon.prefix][icon.iconName] = icon;\n }\n }\n addIconPacks(...packs) {\n for (const pack of packs) {\n const icons = Object.keys(pack).map((key) => pack[key]);\n this.addIcons(...icons);\n }\n }\n getIconDefinition(prefix, name) {\n if (prefix in this.definitions && name in this.definitions[prefix]) {\n return this.definitions[prefix][name];\n }\n return null;\n }\n};\nFaIconLibrary.ɵfac = function FaIconLibrary_Factory(t) { return new (t || FaIconLibrary)(); };\nFaIconLibrary.ɵprov = ɵɵdefineInjectable({ factory: function FaIconLibrary_Factory() { return new FaIconLibrary(); }, token: FaIconLibrary, providedIn: \"root\" });\n\nconst faWarnIfIconDefinitionMissing = (iconSpec) => {\n throw new Error(`Could not find icon with iconName=${iconSpec.iconName} and prefix=${iconSpec.prefix} in the icon library.`);\n};\n\nconst faWarnIfIconSpecMissing = () => {\n throw new Error('Property `icon` is required for `fa-icon`/`fa-duotone-icon` components.');\n};\n\n/**\n * Fontawesome class list.\n * Returns classes array by props.\n */\nconst faClassList = (props) => {\n const classes = {\n 'fa-spin': props.spin,\n 'fa-pulse': props.pulse,\n 'fa-fw': props.fixedWidth,\n 'fa-border': props.border,\n 'fa-inverse': props.inverse,\n 'fa-layers-counter': props.counter,\n 'fa-flip-horizontal': props.flip === 'horizontal' || props.flip === 'both',\n 'fa-flip-vertical': props.flip === 'vertical' || props.flip === 'both',\n [`fa-${props.size}`]: props.size !== null,\n [`fa-rotate-${props.rotate}`]: props.rotate !== null,\n [`fa-pull-${props.pull}`]: props.pull !== null,\n [`fa-stack-${props.stackItemSize}`]: props.stackItemSize != null,\n };\n return Object.keys(classes)\n .map((key) => (classes[key] ? key : null))\n .filter((key) => key);\n};\n\n/**\n * Returns if is IconLookup or not.\n */\nconst isIconLookup = (i) => {\n return i.prefix !== undefined && i.iconName !== undefined;\n};\n\n/**\n * Normalizing icon spec.\n */\nconst faNormalizeIconSpec = (iconSpec, defaultPrefix) => {\n if (isIconLookup(iconSpec)) {\n return iconSpec;\n }\n if (Array.isArray(iconSpec) && iconSpec.length === 2) {\n return { prefix: iconSpec[0], iconName: iconSpec[1] };\n }\n if (typeof iconSpec === 'string') {\n return { prefix: defaultPrefix, iconName: iconSpec };\n }\n};\n\nlet FaStackItemSizeDirective = class FaStackItemSizeDirective {\n constructor() {\n /**\n * Specify whether icon inside {@link FaStackComponent} should be rendered in\n * regular size (1x) or as a larger icon (2x).\n */\n this.stackItemSize = '1x';\n }\n ngOnChanges(changes) {\n if ('size' in changes) {\n throw new Error('fa-icon is not allowed to customize size when used inside fa-stack. ' +\n 'Set size on the enclosing fa-stack instead: ....');\n }\n }\n};\nFaStackItemSizeDirective.ɵfac = function FaStackItemSizeDirective_Factory(t) { return new (t || FaStackItemSizeDirective)(); };\nFaStackItemSizeDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FaStackItemSizeDirective, selectors: [[\"fa-icon\", \"stackItemSize\", \"\"], [\"fa-duotone-icon\", \"stackItemSize\", \"\"]], inputs: { stackItemSize: \"stackItemSize\", size: \"size\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n Input()\n], FaStackItemSizeDirective.prototype, \"stackItemSize\", void 0);\n__decorate([\n Input()\n], FaStackItemSizeDirective.prototype, \"size\", void 0);\n\nlet FaIconComponent = class FaIconComponent {\n constructor(sanitizer, config, iconLibrary, stackItem) {\n this.sanitizer = sanitizer;\n this.config = config;\n this.iconLibrary = iconLibrary;\n this.stackItem = stackItem;\n this.classes = [];\n }\n ngOnChanges(changes) {\n if (this.icon == null && this.config.fallbackIcon == null) {\n return faWarnIfIconSpecMissing();\n }\n let iconToBeRendered = null;\n if (this.icon == null) {\n iconToBeRendered = this.config.fallbackIcon;\n }\n else {\n iconToBeRendered = this.icon;\n }\n if (changes) {\n const iconDefinition = this.findIconDefinition(iconToBeRendered);\n if (iconDefinition != null) {\n const params = this.buildParams();\n this.renderIcon(iconDefinition, params);\n }\n }\n }\n /**\n * Programmatically trigger rendering of the icon.\n *\n * This method is useful, when creating {@link FaIconComponent} dynamically or\n * changing its inputs programmatically as in these cases icon won't be\n * re-rendered automatically.\n */\n render() {\n this.ngOnChanges({});\n }\n findIconDefinition(i) {\n const lookup = faNormalizeIconSpec(i, this.config.defaultPrefix);\n if ('icon' in lookup) {\n return lookup;\n }\n const definition = this.iconLibrary.getIconDefinition(lookup.prefix, lookup.iconName);\n if (definition != null) {\n return definition;\n }\n const globalDefinition = findIconDefinition(lookup);\n if (globalDefinition != null) {\n const message = 'Global icon library is deprecated. ' +\n 'Consult https://github.com/FortAwesome/angular-fontawesome/blob/master/UPGRADING.md ' +\n 'for the migration instructions.';\n if (this.config.globalLibrary === 'unset') {\n console.error('FontAwesome: ' + message);\n }\n else if (!this.config.globalLibrary) {\n throw new Error(message);\n }\n return globalDefinition;\n }\n faWarnIfIconDefinitionMissing(lookup);\n return null;\n }\n buildParams() {\n const classOpts = {\n flip: this.flip,\n spin: this.spin,\n pulse: this.pulse,\n border: this.border,\n inverse: this.inverse,\n size: this.size || null,\n pull: this.pull || null,\n rotate: this.rotate || null,\n fixedWidth: typeof this.fixedWidth === 'boolean' ? this.fixedWidth : this.config.fixedWidth,\n stackItemSize: this.stackItem != null ? this.stackItem.stackItemSize : null,\n };\n const parsedTransform = typeof this.transform === 'string' ? parse.transform(this.transform) : this.transform;\n return {\n title: this.title,\n transform: parsedTransform,\n classes: [...faClassList(classOpts), ...this.classes],\n mask: this.mask != null ? this.findIconDefinition(this.mask) : null,\n styles: this.styles != null ? this.styles : {},\n symbol: this.symbol,\n attributes: {\n role: this.a11yRole,\n },\n };\n }\n renderIcon(definition, params) {\n const renderedIcon = icon(definition, params);\n this.renderedIconHTML = this.sanitizer.bypassSecurityTrustHtml(renderedIcon.html.join('\\n'));\n }\n};\nFaIconComponent.ɵfac = function FaIconComponent_Factory(t) { return new (t || FaIconComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DomSanitizer), ɵngcc0.ɵɵdirectiveInject(FaConfig), ɵngcc0.ɵɵdirectiveInject(FaIconLibrary), ɵngcc0.ɵɵdirectiveInject(FaStackItemSizeDirective, 8)); };\nFaIconComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaIconComponent, selectors: [[\"fa-icon\"]], hostAttrs: [1, \"ng-fa-icon\"], hostVars: 2, hostBindings: function FaIconComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"innerHTML\", ctx.renderedIconHTML, ɵngcc0.ɵɵsanitizeHtml);\n ɵngcc0.ɵɵattribute(\"title\", ctx.title);\n } }, inputs: { classes: \"classes\", icon: \"icon\", title: \"title\", spin: \"spin\", pulse: \"pulse\", mask: \"mask\", styles: \"styles\", flip: \"flip\", size: \"size\", pull: \"pull\", border: \"border\", inverse: \"inverse\", symbol: \"symbol\", rotate: \"rotate\", fixedWidth: \"fixedWidth\", transform: \"transform\", a11yRole: \"a11yRole\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function FaIconComponent_Template(rf, ctx) { }, encapsulation: 2 });\nFaIconComponent.ctorParameters = () => [\n { type: DomSanitizer },\n { type: FaConfig },\n { type: FaIconLibrary },\n { type: FaStackItemSizeDirective, decorators: [{ type: Optional }] }\n];\n__decorate([\n Input()\n], FaIconComponent.prototype, \"icon\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"title\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"spin\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"pulse\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"mask\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"styles\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"flip\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"size\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"pull\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"border\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"inverse\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"symbol\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"rotate\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"fixedWidth\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"classes\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"transform\", void 0);\n__decorate([\n Input()\n], FaIconComponent.prototype, \"a11yRole\", void 0);\n__decorate([\n HostBinding('innerHTML')\n], FaIconComponent.prototype, \"renderedIconHTML\", void 0);\nFaIconComponent = __decorate([ __param(3, Optional())\n], FaIconComponent);\n\nlet FaDuotoneIconComponent = class FaDuotoneIconComponent extends FaIconComponent {\n findIconDefinition(i) {\n const lookup = super.findIconDefinition(i);\n if (lookup != null && lookup.prefix !== 'fad') {\n throw new Error('The specified icon does not appear to be a Duotone icon. ' +\n 'Check that you specified the correct style: ' +\n ` ` +\n `or use: instead.`);\n }\n return lookup;\n }\n buildParams() {\n const params = super.buildParams();\n if (this.swapOpacity === true || this.swapOpacity === 'true') {\n params.classes.push('fa-swap-opacity');\n }\n if (this.primaryOpacity != null) {\n params.styles['--fa-primary-opacity'] = this.primaryOpacity.toString();\n }\n if (this.secondaryOpacity != null) {\n params.styles['--fa-secondary-opacity'] = this.secondaryOpacity.toString();\n }\n if (this.primaryColor != null) {\n params.styles['--fa-primary-color'] = this.primaryColor;\n }\n if (this.secondaryColor != null) {\n params.styles['--fa-secondary-color'] = this.secondaryColor;\n }\n return params;\n }\n};\nFaDuotoneIconComponent.ɵfac = function FaDuotoneIconComponent_Factory(t) { return ɵFaDuotoneIconComponent_BaseFactory(t || FaDuotoneIconComponent); };\nFaDuotoneIconComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaDuotoneIconComponent, selectors: [[\"fa-duotone-icon\"]], inputs: { swapOpacity: \"swapOpacity\", primaryOpacity: \"primaryOpacity\", secondaryOpacity: \"secondaryOpacity\", primaryColor: \"primaryColor\", secondaryColor: \"secondaryColor\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function FaDuotoneIconComponent_Template(rf, ctx) { }, encapsulation: 2 });\n__decorate([\n Input()\n], FaDuotoneIconComponent.prototype, \"swapOpacity\", void 0);\n__decorate([\n Input()\n], FaDuotoneIconComponent.prototype, \"primaryOpacity\", void 0);\n__decorate([\n Input()\n], FaDuotoneIconComponent.prototype, \"secondaryOpacity\", void 0);\n__decorate([\n Input()\n], FaDuotoneIconComponent.prototype, \"primaryColor\", void 0);\n__decorate([\n Input()\n], FaDuotoneIconComponent.prototype, \"secondaryColor\", void 0);\n\n/**\n * Warns if parent component not existing.\n */\nconst faWarnIfParentNotExist = (parent, parentName, childName) => {\n if (!parent) {\n throw new Error(`${childName} should be used as child of ${parentName} only.`);\n }\n};\n\n/**\n * Fontawesome layers.\n */\nlet FaLayersComponent = class FaLayersComponent {\n constructor(renderer, elementRef, config) {\n this.renderer = renderer;\n this.elementRef = elementRef;\n this.config = config;\n }\n ngOnInit() {\n this.renderer.addClass(this.elementRef.nativeElement, 'fa-layers');\n this.fixedWidth = typeof this.fixedWidth === 'boolean' ? this.fixedWidth : this.config.fixedWidth;\n }\n ngOnChanges(changes) {\n if ('size' in changes) {\n if (changes.size.currentValue != null) {\n this.renderer.addClass(this.elementRef.nativeElement, `fa-${changes.size.currentValue}`);\n }\n if (changes.size.previousValue != null) {\n this.renderer.removeClass(this.elementRef.nativeElement, `fa-${changes.size.previousValue}`);\n }\n }\n }\n};\nFaLayersComponent.ɵfac = function FaLayersComponent_Factory(t) { return new (t || FaLayersComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(FaConfig)); };\nFaLayersComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaLayersComponent, selectors: [[\"fa-layers\"]], hostVars: 2, hostBindings: function FaLayersComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"fa-fw\", ctx.fixedWidth);\n } }, inputs: { fixedWidth: \"fixedWidth\", size: \"size\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 1, vars: 0, template: function FaLayersComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nFaLayersComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: FaConfig }\n];\n__decorate([\n Input()\n], FaLayersComponent.prototype, \"size\", void 0);\n__decorate([\n Input(), HostBinding('class.fa-fw')\n], FaLayersComponent.prototype, \"fixedWidth\", void 0);\n\nlet FaLayersCounterComponent = class FaLayersCounterComponent {\n constructor(parent, sanitizer) {\n this.parent = parent;\n this.sanitizer = sanitizer;\n this.classes = [];\n faWarnIfParentNotExist(this.parent, 'FaLayersComponent', this.constructor.name);\n }\n ngOnChanges(changes) {\n if (changes) {\n const params = this.buildParams();\n this.updateContent(params);\n }\n }\n buildParams() {\n return {\n title: this.title,\n classes: this.classes,\n styles: this.styles,\n };\n }\n updateContent(params) {\n this.renderedHTML = this.sanitizer.bypassSecurityTrustHtml(counter(this.content || '', params).html.join(''));\n }\n};\nFaLayersCounterComponent.ɵfac = function FaLayersCounterComponent_Factory(t) { return new (t || FaLayersCounterComponent)(ɵngcc0.ɵɵdirectiveInject(FaLayersComponent, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DomSanitizer)); };\nFaLayersCounterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaLayersCounterComponent, selectors: [[\"fa-layers-counter\"]], hostAttrs: [1, \"ng-fa-layers-counter\"], hostVars: 1, hostBindings: function FaLayersCounterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"innerHTML\", ctx.renderedHTML, ɵngcc0.ɵɵsanitizeHtml);\n } }, inputs: { classes: \"classes\", content: \"content\", title: \"title\", styles: \"styles\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function FaLayersCounterComponent_Template(rf, ctx) { }, encapsulation: 2 });\nFaLayersCounterComponent.ctorParameters = () => [\n { type: FaLayersComponent, decorators: [{ type: Optional }] },\n { type: DomSanitizer }\n];\n__decorate([\n Input()\n], FaLayersCounterComponent.prototype, \"content\", void 0);\n__decorate([\n Input()\n], FaLayersCounterComponent.prototype, \"title\", void 0);\n__decorate([\n Input()\n], FaLayersCounterComponent.prototype, \"styles\", void 0);\n__decorate([\n Input()\n], FaLayersCounterComponent.prototype, \"classes\", void 0);\n__decorate([\n HostBinding('innerHTML')\n], FaLayersCounterComponent.prototype, \"renderedHTML\", void 0);\nFaLayersCounterComponent = __decorate([ __param(0, Optional())\n], FaLayersCounterComponent);\n\nlet FaLayersTextComponent = class FaLayersTextComponent {\n constructor(parent, sanitizer) {\n this.parent = parent;\n this.sanitizer = sanitizer;\n this.classes = [];\n faWarnIfParentNotExist(this.parent, 'FaLayersComponent', this.constructor.name);\n }\n ngOnChanges(changes) {\n if (changes) {\n const params = this.buildParams();\n this.updateContent(params);\n }\n }\n /**\n * Updating params by component props.\n */\n buildParams() {\n const classOpts = {\n flip: this.flip,\n spin: this.spin,\n pulse: this.pulse,\n border: this.border,\n inverse: this.inverse,\n size: this.size || null,\n pull: this.pull || null,\n rotate: this.rotate || null,\n fixedWidth: this.fixedWidth,\n };\n const parsedTransform = typeof this.transform === 'string' ? parse.transform(this.transform) : this.transform;\n return {\n transform: parsedTransform,\n classes: [...faClassList(classOpts), ...this.classes],\n title: this.title,\n styles: this.styles,\n };\n }\n updateContent(params) {\n this.renderedHTML = this.sanitizer.bypassSecurityTrustHtml(text(this.content || '', params).html.join('\\n'));\n }\n};\nFaLayersTextComponent.ɵfac = function FaLayersTextComponent_Factory(t) { return new (t || FaLayersTextComponent)(ɵngcc0.ɵɵdirectiveInject(FaLayersComponent, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.DomSanitizer)); };\nFaLayersTextComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaLayersTextComponent, selectors: [[\"fa-layers-text\"]], hostAttrs: [1, \"ng-fa-layers-text\"], hostVars: 1, hostBindings: function FaLayersTextComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"innerHTML\", ctx.renderedHTML, ɵngcc0.ɵɵsanitizeHtml);\n } }, inputs: { classes: \"classes\", content: \"content\", title: \"title\", styles: \"styles\", spin: \"spin\", pulse: \"pulse\", flip: \"flip\", size: \"size\", pull: \"pull\", border: \"border\", inverse: \"inverse\", rotate: \"rotate\", fixedWidth: \"fixedWidth\", transform: \"transform\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function FaLayersTextComponent_Template(rf, ctx) { }, encapsulation: 2 });\nFaLayersTextComponent.ctorParameters = () => [\n { type: FaLayersComponent, decorators: [{ type: Optional }] },\n { type: DomSanitizer }\n];\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"content\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"title\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"styles\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"classes\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"spin\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"pulse\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"flip\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"size\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"pull\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"border\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"inverse\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"rotate\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"fixedWidth\", void 0);\n__decorate([\n Input()\n], FaLayersTextComponent.prototype, \"transform\", void 0);\n__decorate([\n HostBinding('innerHTML')\n], FaLayersTextComponent.prototype, \"renderedHTML\", void 0);\nFaLayersTextComponent = __decorate([ __param(0, Optional())\n], FaLayersTextComponent);\n\nlet FaStackComponent = class FaStackComponent {\n constructor(renderer, elementRef) {\n this.renderer = renderer;\n this.elementRef = elementRef;\n }\n ngOnInit() {\n this.renderer.addClass(this.elementRef.nativeElement, 'fa-stack');\n }\n ngOnChanges(changes) {\n if ('size' in changes) {\n if (changes.size.currentValue != null) {\n this.renderer.addClass(this.elementRef.nativeElement, `fa-${changes.size.currentValue}`);\n }\n if (changes.size.previousValue != null) {\n this.renderer.removeClass(this.elementRef.nativeElement, `fa-${changes.size.previousValue}`);\n }\n }\n }\n};\nFaStackComponent.ɵfac = function FaStackComponent_Factory(t) { return new (t || FaStackComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFaStackComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FaStackComponent, selectors: [[\"fa-stack\"]], inputs: { size: \"size\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c3, decls: 1, vars: 0, template: function FaStackComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c2);\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nFaStackComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef }\n];\n__decorate([\n Input()\n], FaStackComponent.prototype, \"size\", void 0);\n\nlet FontAwesomeModule = class FontAwesomeModule {\n};\nFontAwesomeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FontAwesomeModule });\nFontAwesomeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FontAwesomeModule_Factory(t) { return new (t || FontAwesomeModule)(); } });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaConfig, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaIconLibrary, [{\n type: Injectable,\n args: [{ providedIn: 'root' }]\n }], function () { return []; }, null); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaStackItemSizeDirective, [{\n type: Directive,\n args: [{\n // tslint:disable-next-line:directive-selector\n selector: 'fa-icon[stackItemSize],fa-duotone-icon[stackItemSize]'\n }]\n }], function () { return []; }, { stackItemSize: [{\n type: Input\n }], size: [{\n type: Input\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaIconComponent, [{\n type: Component,\n args: [{\n selector: 'fa-icon',\n template: ``,\n host: {\n class: 'ng-fa-icon',\n '[attr.title]': 'title'\n }\n }]\n }], function () { return [{ type: ɵngcc1.DomSanitizer }, { type: FaConfig }, { type: FaIconLibrary }, { type: FaStackItemSizeDirective, decorators: [{\n type: Optional\n }] }]; }, { classes: [{\n type: Input\n }], renderedIconHTML: [{\n type: HostBinding,\n args: ['innerHTML']\n }], icon: [{\n type: Input\n }], title: [{\n type: Input\n }], spin: [{\n type: Input\n }], pulse: [{\n type: Input\n }], mask: [{\n type: Input\n }], styles: [{\n type: Input\n }], flip: [{\n type: Input\n }], size: [{\n type: Input\n }], pull: [{\n type: Input\n }], border: [{\n type: Input\n }], inverse: [{\n type: Input\n }], symbol: [{\n type: Input\n }], rotate: [{\n type: Input\n }], fixedWidth: [{\n type: Input\n }], transform: [{\n type: Input\n }], a11yRole: [{\n type: Input\n }] }); })();\nconst ɵFaDuotoneIconComponent_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(FaDuotoneIconComponent);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaDuotoneIconComponent, [{\n type: Component,\n args: [{\n selector: 'fa-duotone-icon',\n template: ``\n }]\n }], null, { swapOpacity: [{\n type: Input\n }], primaryOpacity: [{\n type: Input\n }], secondaryOpacity: [{\n type: Input\n }], primaryColor: [{\n type: Input\n }], secondaryColor: [{\n type: Input\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaLayersComponent, [{\n type: Component,\n args: [{\n selector: 'fa-layers',\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: FaConfig }]; }, { fixedWidth: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.fa-fw']\n }], size: [{\n type: Input\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaLayersCounterComponent, [{\n type: Component,\n args: [{\n selector: 'fa-layers-counter',\n template: '',\n host: {\n class: 'ng-fa-layers-counter'\n }\n }]\n }], function () { return [{ type: FaLayersComponent, decorators: [{\n type: Optional\n }] }, { type: ɵngcc1.DomSanitizer }]; }, { classes: [{\n type: Input\n }], renderedHTML: [{\n type: HostBinding,\n args: ['innerHTML']\n }], content: [{\n type: Input\n }], title: [{\n type: Input\n }], styles: [{\n type: Input\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaLayersTextComponent, [{\n type: Component,\n args: [{\n selector: 'fa-layers-text',\n template: '',\n host: {\n class: 'ng-fa-layers-text'\n }\n }]\n }], function () { return [{ type: FaLayersComponent, decorators: [{\n type: Optional\n }] }, { type: ɵngcc1.DomSanitizer }]; }, { classes: [{\n type: Input\n }], renderedHTML: [{\n type: HostBinding,\n args: ['innerHTML']\n }], content: [{\n type: Input\n }], title: [{\n type: Input\n }], styles: [{\n type: Input\n }], spin: [{\n type: Input\n }], pulse: [{\n type: Input\n }], flip: [{\n type: Input\n }], size: [{\n type: Input\n }], pull: [{\n type: Input\n }], border: [{\n type: Input\n }], inverse: [{\n type: Input\n }], rotate: [{\n type: Input\n }], fixedWidth: [{\n type: Input\n }], transform: [{\n type: Input\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FaStackComponent, [{\n type: Component,\n args: [{\n selector: 'fa-stack',\n // TODO: See if it is better to select fa-icon and throw if it does not have stackItemSize directive\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }]; }, { size: [{\n type: Input\n }] }); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FontAwesomeModule, { declarations: [FaIconComponent,\n FaDuotoneIconComponent,\n FaLayersComponent,\n FaLayersTextComponent,\n FaLayersCounterComponent,\n FaStackComponent,\n FaStackItemSizeDirective], exports: [FaIconComponent,\n FaDuotoneIconComponent,\n FaLayersComponent,\n FaLayersTextComponent,\n FaLayersCounterComponent,\n FaStackComponent,\n FaStackItemSizeDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FontAwesomeModule, [{\n type: NgModule,\n args: [{\n declarations: [\n FaIconComponent,\n FaDuotoneIconComponent,\n FaLayersComponent,\n FaLayersTextComponent,\n FaLayersCounterComponent,\n FaStackComponent,\n FaStackItemSizeDirective,\n ],\n exports: [\n FaIconComponent,\n FaDuotoneIconComponent,\n FaLayersComponent,\n FaLayersTextComponent,\n FaLayersCounterComponent,\n FaStackComponent,\n FaStackItemSizeDirective,\n ],\n entryComponents: [FaIconComponent, FaDuotoneIconComponent]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { FaConfig, FaDuotoneIconComponent, FaIconComponent, FaIconLibrary, FaLayersComponent, FaLayersCounterComponent, FaLayersTextComponent, FaStackComponent, FaStackItemSizeDirective, FontAwesomeModule };\n\n//# sourceMappingURL=angular-fontawesome.js.map","
\n
\n \n
\n
0\" [style.height.px]=\"height\">\n \n
\n
\n
\n \n
","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {process, SortDescriptor} from '@progress/kendo-data-query';\nimport {RequestState} from '../../api/request-handler';\nimport {faCheck} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'app-autoselect-list',\n templateUrl: './autoselect-list.component.html',\n styleUrls: ['./autoselect-list.component.scss']\n})\nexport class AutoselectListComponent implements OnInit, OnChanges {\n RequestState = RequestState;\n @Input() hasSearch = true;\n @Input() height = 300;\n @Input() state = RequestState.Waiting;\n @Input() data;\n @Input() keyField;\n @Input() displayField;\n @Input() subDisplayField;\n @Input() selectedOption;\n @Input() sort = true;\n @Input() useCheckIcon = false;\n @Output() itemSelect = new EventEmitter();\n faCheck = faCheck;\n\n result = {\n data: []\n };\n\n public view: any[] = [];\n\n constructor() { }\n\n ngOnInit(): void {\n this.updateResults('');\n this.loadMore();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n // console.log(JSON.stringify(this.state), RequestState.Complete, changes, JSON.stringify(this.data));\n this.updateResults('');\n }\n\n onValueChange(query) { // on search textbox change\n this.updateResults(query);\n }\n\n onListItemSelect(key) {\n this.selectedOption = key;\n this.itemSelect.emit(this.selectedOption);\n }\n\n updateResults(query) {\n // apply filters\n this.result = process(this.data, {\n sort: ((this.sort) ? [{ field: 'label', dir: 'asc' }] : null),\n filter: {\n logic: 'and',\n filters: [\n {field: 'label', operator: 'contains', value: query},\n ]\n }\n });\n // put selected items from main array\n const selectedItems = [];\n for (let key = 0; key < this.result.data.length; key++) {\n const item = this.result.data[key];\n if (item[this.keyField] === this.selectedOption) {\n selectedItems.push(item);\n this.result.data.splice(key, 1);\n }\n }\n // add selected items back at top\n for (let key = selectedItems.length - 1; key >= 0; key--) {\n this.result.data.unshift(selectedItems[key]);\n }\n // console.log(this.result);\n // reset view\n this.view = [];\n this.loadMore();\n }\n\n loadMore(): void {\n const next = this.view.length;\n this.view = [\n ...this.view,\n ...this.result.data.slice(next, next + 25)\n ];\n }\n}\n","import { OnInit, OnDestroy } from '@angular/core';\r\nimport {ApiService} from '../../api/api.service';\r\nimport {DetailChoicesService} from './detail-choices.service';\r\n\r\nexport class ToggleSwitches implements OnInit, OnDestroy {\r\n config = [];\r\n updateListener = '';\r\n selectedValues = {};\r\n\r\n constructor(\r\n private apiService: ApiService,\r\n private detailChoicesService: DetailChoicesService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n for (const item of this.config) {\r\n this.selectedValues[item.key] = this.detailChoicesService.getFilter(item.key);\r\n }\r\n this.detailChoicesService.onUpdate(this.updateListener, (diseaseState) => {\r\n // update selectedItem to empty\r\n for (const item of this.config) {\r\n this.selectedValues[item.key] = item.defaultValue;\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.detailChoicesService.clearUpdateListener(this.updateListener);\r\n }\r\n\r\n toggleSwitchValue(key, value) {\r\n value = !value;\r\n this.selectedValues[key] = value;\r\n this.detailChoicesService.setFilter(key, value, true);\r\n }\r\n}\r\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {RequestState} from '../../../api/request-handler';\nimport {DetailChoicesService} from '../detail-choices.service';\nimport {ApiService} from '../../../api/api.service';\nimport {RefreshHandlerService} from '../../../api/refresh-handler.service';\n\n@ComponentLookup('DetailAssayFilterComponent')\n@Component({\n selector: 'app-detail-assay-filter',\n templateUrl: './detail-assay-filter.component.html',\n styleUrls: ['./detail-assay-filter.component.scss']\n})\nexport class DetailAssayFilterComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n rawList = [];\n selectedItem;\n requestHandler;\n @Input() metricId;\n\n constructor(\n private apiService: ApiService,\n private detailChoicesService: DetailChoicesService,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/search/assaysdetails');\n this.requestHandler.sendRequest('/search/assaysdetails', { metricid: this.metricId });\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // console.log(apiData);\n if (apiData.hasOwnProperty('assaysDetails')) {\n const buildData = [];\n for (const assay of apiData.assaysDetails) {\n buildData.push({\n label: assay.assays, // or customersrno\n key: assay.assaysid\n });\n }\n this.data = buildData;\n }\n this.rawList = apiData.assaysDetails;\n }\n });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest('/search/assaysdetails', { metricid: this.metricId });\n },\n this.requestHandler.getRelativeParams('/search/assaysdetails')\n );\n this.selectedItem = this.detailChoicesService.getFilter('detailAssayFilter');\n this.detailChoicesService.onUpdate('diseaseStateId', (diseaseState) => {\n // filter list contents\n const buildData = [];\n const added = [];\n for (const assay of this.rawList) {\n for (const ds of assay.diseasestate) {\n if ((ds === diseaseState || diseaseState === null)\n && added.indexOf(assay.assaysid) === -1\n ) {\n buildData.push({\n label: assay.assays, // or customersrno\n key: assay.assaysid\n });\n added.push(assay.assaysid);\n }\n }\n }\n this.data = buildData;\n\n // update selectedItem to empty\n this.selectedItem = null;\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.detailChoicesService.clearUpdateListener('diseaseStateId');\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.detailChoicesService.setFilter('detailAssayFilter', selectedItem, true);\n this.detailChoicesService.callUpdateListenerByKey('assayId', selectedItem);\n }\n}\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {RequestState} from '../../../api/request-handler';\nimport {DetailChoicesService} from '../detail-choices.service';\nimport {ApiService} from '../../../api/api.service';\nimport {RefreshHandlerService} from '../../../api/refresh-handler.service';\n\n@ComponentLookup('DetailAccountFilterComponent')\n@Component({\n selector: 'app-detail-account-filter',\n templateUrl: './detail-account-filter.component.html',\n styleUrls: ['./detail-account-filter.component.scss']\n})\nexport class DetailAccountFilterComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n @Input() metricId;\n\n constructor(\n private apiService: ApiService,\n private detailChoicesService: DetailChoicesService,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/search/accountdetails');\n this.requestHandler.sendRequest('/search/accountdetails');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // console.log(apiData);\n if (apiData.hasOwnProperty('accountdetails')) {\n const buildData = [];\n for (const account of apiData.accountdetails) {\n buildData.push({\n label: account.accountname, // or customersrno\n key: account.accountid\n });\n }\n this.data = buildData;\n }\n }\n });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest('/search/accountdetails');\n },\n this.requestHandler.getRelativeParams('/search/accountdetails')\n );\n\n this.selectedItem = this.detailChoicesService.getFilter('detailAccountFilter');\n this.detailChoicesService.onUpdate('accountId', (productLine) => {\n // update selectedItem to empty\n this.selectedItem = null;\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.detailChoicesService.clearUpdateListener('accountId');\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.detailChoicesService.setFilter('detailAccountFilter', selectedItem, true);\n }\n}\n","
\n
Accounts
\n
\n \n \n
\n
\n","
\n
Assays
\n
\n \n \n
\n
\n","
\n
Capital/Service/Assay/Other
\n
\n
\n
\n \n
\n
\n {{item.label}}\n
\n
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {ToggleSwitches} from '../toggle-switches';\n\n@ComponentLookup('DetailCapitalServiceAssaySwitchesFilterComponent')\n@Component({\n selector: 'app-detail-capital-service-assay-switches-filter',\n templateUrl: './detail-capital-service-assay-switches-filter.component.html',\n styleUrls: ['./detail-capital-service-assay-switches-filter.component.scss']\n})\nexport class DetailCapitalServiceAssaySwitchesFilterComponent extends ToggleSwitches {\n @Input() metricId;\n\n updateListener = 'capitalServiceAssaySwitches';\n config = [\n {\n key: 'detailIsCapitalFilter',\n label: 'Capital',\n defaultValue: true\n },\n {\n key: 'detailIsServiceFilter',\n label: 'Service',\n defaultValue: true\n },\n {\n key: 'detailIsReagentFilter',\n label: 'Reagent/Assay',\n defaultValue: true\n },\n {\n key: 'detailIsOtherFilter',\n label: 'Other',\n defaultValue: true\n }\n ];\n}\n","
\n
Categories
\n
\n
\n
\n \n
\n
\n {{item.label}}\n
\n
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {ToggleSwitches} from '../toggle-switches';\n\n@ComponentLookup('DetailCategorySwitchesFilterComponent')\n@Component({\n selector: 'app-detail-category-switches-filter',\n templateUrl: './detail-category-switches-filter.component.html',\n styleUrls: ['./detail-category-switches-filter.component.scss']\n})\nexport class DetailCategorySwitchesFilterComponent extends ToggleSwitches {\n @Input() metricId;\n\n updateListener = 'categorySwitches';\n config = [\n {\n key: 'detailIsReagentFilter',\n label: 'Reagent',\n defaultValue: true\n },\n {\n key: 'detailIsFieldServiceContractFilter',\n label: 'Field Service Contract',\n defaultValue: true\n },\n {\n key: 'detailIsOtherFilter',\n label: 'Other',\n defaultValue: true\n }\n ];\n}\n","import { Input, Component, OnInit } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport { TileReference } from '../../../dashboards/tile-reference';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n@ComponentLookup('BrPlaceholderComponent')\n@Component({\n selector: 'app-br-placeholder',\n templateUrl: './br-placeholder.component.html',\n styleUrls: ['./br-placeholder.component.scss']\n})\nexport class BrPlaceholderComponent extends TileComponent implements OnInit {\n @Input() tileReference: TileReference;\n\n translateApiDataForChart(apiData) {\n // override for currency preference\n console.log(this.tileReference);\n console.log(apiData);\n }\n\n}\n","import {Component, OnDestroy, OnInit, Input} from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {RequestState} from '../../../api/request-handler';\nimport {ApiService} from '../../../api/api.service';\nimport {DetailChoicesService} from '../detail-choices.service';\n\n@ComponentLookup('DetailProductLineFilterComponent')\n@Component({\n selector: 'app-detail-product-line-filter',\n templateUrl: './detail-product-line-filter.component.html',\n styleUrls: ['./detail-product-line-filter.component.scss']\n})\nexport class DetailProductLineFilterComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n rawProductLines = [];\n selectedItem;\n requestHandler;\n @Input() metricId;\n\n constructor(\n private apiService: ApiService,\n private detailChoicesService: DetailChoicesService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/productline/details');\n this.requestHandler.sendRequest('/productline/details');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n if (apiData.hasOwnProperty('productlines')) {\n const buildData = [];\n for (const productline of apiData.productlines) {\n buildData.push({\n label: productline.productname,\n key: productline.productlineid\n });\n }\n this.data = buildData;\n }\n this.rawProductLines = apiData.productlines;\n }\n });\n this.selectedItem = this.detailChoicesService.getFilter('detailProductLineFilter');\n this.detailChoicesService.onUpdate('customerId', (customerId) => {\n // filter list contents\n const buildData = [];\n const addedProductLines = [];\n for (const productline of this.rawProductLines) {\n for (const customerId2 of productline.customers) {\n if ((customerId === customerId2 || customerId === null)\n && addedProductLines.indexOf(productline.productlineid) === -1) {\n buildData.push({\n label: productline.productname,\n key: productline.productlineid\n });\n addedProductLines.push(productline.productlineid);\n }\n }\n }\n this.data = buildData;\n\n // update selectedItem to empty\n this.selectedItem = null;\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.detailChoicesService.clearUpdateListener('customerId');\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.detailChoicesService.setFilter('detailProductLineFilter', selectedItem, true);\n this.detailChoicesService.callUpdateListenerByKey('productLineId', selectedItem);\n // this.personaService.setPersonaOption(PersonaTypes.ProductLine, selectedItem, '');\n }\n}\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {RequestState} from '../../../api/request-handler';\nimport {DetailChoicesService} from '../detail-choices.service';\nimport {ApiService} from '../../../api/api.service';\nimport {RefreshHandlerService} from '../../../api/refresh-handler.service';\n\n@ComponentLookup('DetailDiseaseStateFilterComponent')\n@Component({\n selector: 'app-detail-disease-state-filter',\n templateUrl: './detail-disease-state-filter.component.html',\n styleUrls: ['./detail-disease-state-filter.component.scss']\n})\nexport class DetailDiseaseStateFilterComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n rawList = [];\n selectedItem;\n requestHandler;\n @Input() metricId;\n\n constructor(\n private apiService: ApiService,\n private detailChoicesService: DetailChoicesService,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/search/diseasestatedetails');\n this.requestHandler.sendRequest('/search/diseasestatedetails', { metricid: this.metricId });\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // console.log(apiData);\n if (apiData.hasOwnProperty('diseaseStateDetails')) {\n const buildData = [];\n for (const diseasestate of apiData.diseaseStateDetails) {\n buildData.push({\n label: diseasestate.diseasestate, // or customersrno\n key: diseasestate.diseasestateid\n });\n }\n this.data = buildData;\n }\n this.rawList = apiData.diseaseStateDetails;\n }\n });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest('/search/diseasestatedetails', { metricid: this.metricId });\n },\n this.requestHandler.getRelativeParams('/search/diseasestatedetails')\n );\n this.selectedItem = this.detailChoicesService.getFilter('detailDiseaseStateFilter');\n this.detailChoicesService.onUpdate('assayId', (assay) => {\n // filter list contents\n const buildData = [];\n const added = [];\n for (const diseasestate of this.rawList) {\n for (const asid of diseasestate.assays) {\n if ((asid === assay || assay === null)\n && added.indexOf(diseasestate.diseasestateid) === -1\n ) {\n buildData.push({\n label: diseasestate.diseasestate, // or customersrno\n key: diseasestate.diseasestateid\n });\n added.push(diseasestate.diseasestateid);\n }\n }\n }\n this.data = buildData;\n\n // update selectedItem to empty\n this.selectedItem = null;\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.detailChoicesService.clearUpdateListener('assayId');\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.detailChoicesService.setFilter('detailDiseaseStateFilter', selectedItem, true);\n this.detailChoicesService.callUpdateListenerByKey('diseaseStateId', selectedItem);\n // this.personaService.setPersonaOption(PersonaTypes.Customer, selectedItem, '');\n }\n}\n","import {Component, OnDestroy, OnInit, Input} from '@angular/core';\nimport {faSearch} from '@fortawesome/free-solid-svg-icons';\nimport {ComponentLookup} from '../../../decorators/component-lookup';\nimport {RequestState} from '../../../api/request-handler';\nimport {ApiService} from '../../../api/api.service';\nimport {DetailChoicesService} from '../detail-choices.service';\n\n@ComponentLookup('DetailCustomerFilterComponent')\n@Component({\n selector: 'app-detail-customer-filter',\n templateUrl: './detail-customer-filter.component.html',\n styleUrls: ['./detail-customer-filter.component.scss']\n})\nexport class DetailCustomerFilterComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n rawCustomers = [];\n selectedItem;\n requestHandler;\n @Input() metricId;\n\n faSearch = faSearch;\n\n constructor(\n private apiService: ApiService,\n private detailChoicesService: DetailChoicesService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/customer/details');\n this.requestHandler.sendRequest('/customer/details');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // console.log(apiData);\n if (apiData.hasOwnProperty('customers')) {\n const buildData = [];\n for (const customer of apiData.customers) {\n buildData.push({\n label: customer.name, // or customersrno\n key: customer.customerid\n });\n }\n this.data = buildData;\n }\n this.rawCustomers = apiData.customers;\n }\n });\n this.selectedItem = this.detailChoicesService.getFilter('detailCustomerIdFilter');\n this.detailChoicesService.onUpdate('productLineId', (productLine) => {\n // filter list contents\n const buildData = [];\n const addedCustomerIds = [];\n for (const customer of this.rawCustomers) {\n for (const pl of customer.productlines) {\n if ((pl === productLine || productLine === null)\n && addedCustomerIds.indexOf(customer.customerid) === -1) {\n buildData.push({\n label: customer.name, // or customersrno\n key: customer.customerid\n });\n addedCustomerIds.push(customer.customerid);\n }\n }\n }\n this.data = buildData;\n\n // update selectedItem to empty\n this.selectedItem = null;\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.detailChoicesService.clearUpdateListener('productLineId');\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.detailChoicesService.setFilter('detailCustomerIdFilter', selectedItem, true);\n this.detailChoicesService.callUpdateListenerByKey('customerId', selectedItem);\n // this.personaService.setPersonaOption(PersonaTypes.Customer, selectedItem, '');\n }\n}\n","
\n
Customers
\n \n \n
\n\n\n \n \n \n \n\n\n\n\n\n\n","
\n
LOB - Disease State
\n
\n \n \n
\n
\n","
\n
Product Lines
\n \n \n
\n\n\n\n\n\n\n","

br-placeholder works!

\n","
\n

{{preferences.title}}

\n \n
\n \n
\n No data!\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileComponent } from '../../../tiles/base/tile.component';\nimport { RenderEvent } from '@progress/kendo-angular-charts';\nimport { Rect, Circle as CircleGeometry } from '@progress/kendo-drawing/geometry';\nimport { Group, Path, Layout, Text } from '@progress/kendo-drawing';\n\n@ComponentLookup('BrStackedBarLineChartComponent')\n@Component({\n selector: 'app-br-stacked-bar-line-chart',\n templateUrl: './br-stacked-bar-line-chart.component.html',\n styleUrls: ['./br-stacked-bar-line-chart.component.scss']\n})\n\nexport class BrStackedBarLineChartComponent extends TileComponent implements OnInit {\n axis1LabelSegments = 4;\n axis2LabelSegments = 4;\n yAxisLabel = '';\n\n\n defaultPreferences() {\n return {\n periodsToShow: 4,\n showTitle: true,\n valueAxis1Label: '{0}',\n valueAxis2Label: '{0}'\n };\n }\n\n translateApiDataForChart(apiData) {\n if (apiData.yAxisLabel) { this.yAxisLabel = apiData.yAxisLabel; }\n\n const chartStackSeries = [{\n name: '',\n color: '#3498DB', // '#ff0000',\n type: 'column',\n gap: .5,\n border: {\n color: '#000',\n width: 1,\n dashType: 'solid'\n },\n data: [],\n axis: 'axis1',\n tooltip: {\n visible: true,\n format: '{0}',\n background: '#aa0061',\n padding: '2'\n }\n }];\n\n const chartCategories = [];\n\n let maxValue = 0;\n let minValue = 0;\n let markUnits = 10;\n\n let values = [];\n if ('bar_values' in apiData) {\n values = apiData.bar_values;\n } else if ('values' in apiData) {\n values = apiData.values;\n }\n for (const row of values.reverse()) {\n chartCategories.push(row.key);\n const intValue = parseInt(row.value, 10);\n if (intValue > maxValue) {\n maxValue = intValue;\n }\n chartStackSeries[0].data.push(intValue);\n // stacked bar\n /*\n for (chartDataItemKey = 0; chartDataItemKey < chartDataColumn.stacks.length; chartDataItemKey++) {\n const chartDataItem = chartDataColumn.stacks[chartDataItemKey];\n const intValue = parseInt(chartDataItem, 10);\n\n chartStackSeries[chartDataItemKey].data.push(intValue);\n }*/\n\n }\n\n const zero = '0';\n const valueSize = maxValue.toString().length;\n const roundSizeStr = '1'.padEnd(valueSize, zero);\n const roundSize = parseInt(roundSizeStr, 10);\n\n markUnits = roundSize;\n maxValue = this.roundUp(maxValue * 1.2, roundSize);\n if (apiData.chartTopLimit) { maxValue = apiData.chartTopLimit; }\n if (apiData.chartBottomLimit) { minValue = apiData.chartBottomLimit; }\n if (this.apiData.yAxisMajorUnit) { markUnits = this.apiData.yAxisMajorUnit; }\n\n // fix to allow a max of 14 data y axis labels on chart\n const markUnitsPointCount = maxValue / markUnits;\n if (markUnitsPointCount > 14) {\n const markUnitsFactor = this.roundUp(markUnitsPointCount / 14, 1);\n markUnits = markUnits * markUnitsFactor;\n }\n\n // console.log(chartCategories);\n // console.log(chartSeries);\n const valueAxis1 = {\n name: 'axis1',\n labels: {\n // https://github.com/telerik/kendo-intl/blob/master/docs/num-formatting/index.md\n // cannot currently add format of #K, add issue to https://github.com/telerik/kendo-intl/issues\n format: '{0}',\n content: (e) => {\n return e.value;\n },\n position: 'start',\n visible: true\n },\n max: maxValue,\n min: minValue,\n majorUnit: markUnits,\n line: {\n visible: false\n },\n title: {\n text: this.yAxisLabel,\n color: '#000000'\n },\n tooltip: {\n visible: true,\n format: '{0}',\n background: '#aa0061',\n padding: '2'\n }\n };\n\n\n this.chartOptions = {\n seriesDefaults: {\n type: 'column',\n stack: true\n },\n series: chartStackSeries,\n chartArea: {\n border: {\n color: '#000',\n width: 1,\n dashType: 'solid'\n }\n },\n valueAxis: [valueAxis1], // removed valueAxis2\n categoryAxis: {\n categories: chartCategories,\n majorGridLines: {\n visible: false\n },\n labels: {\n rotation: -45\n }\n }\n };\n }\n\n roundUp(value, toTheNearest) {\n return Math.ceil(value / toTheNearest) * toTheNearest;\n }\n\n isDataFound(value) {\n const dataFound = (value !== undefined && value !== null && (Array.isArray(value.values) && value.values.length > 0));\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","
\n \n
\n

{{apiData.title}}

\n

{{preferences.subHeading}}

\n
\n \n \n \n \n
\n
\n No data!\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n@ComponentLookup('BrMultiLineChartComponent')\n@Component({\n selector: 'app-br-multi-line-chart',\n templateUrl: './br-multi-line-chart.component.html',\n styleUrls: ['./br-multi-line-chart.component.scss']\n})\n\nexport class BrMultiLineChartComponent extends TileComponent implements OnInit {\n getLineColor(apiData, i) {\n if (this.preferences.hasOwnProperty('rowColorOverrides') && this.preferences.rowColorOverrides[i] !== null) {\n return this.preferences.rowColorOverrides[i];\n }\n if (this.preferences.hasOwnProperty('colorsByIndex')) {\n const colorsByIndex = this.preferences.colorsByIndex;\n return apiData.linecolors[colorsByIndex[i]];\n }\n return apiData.linecolors[i];\n }\n\n translateApiDataForChart(apiData) {\n const categoryList = [];\n const seriesList = [];\n let categoryField = [];\n\n if (apiData.names) {\n categoryField = apiData.names;\n }\n\n let yaxisleftlabel = apiData.yaxisleftlabel;\n if ('yaxisleftlabel' in this.preferences) {\n yaxisleftlabel = this.preferences.yaxisleftlabel;\n }\n\n let yaxisrightlabel = apiData.yaxisrightlabel;\n if ('yaxisrightlabel' in this.preferences) {\n yaxisrightlabel = this.preferences.yaxisrightlabel;\n }\n\n let values = apiData.values;\n //if ('periodsToShow' in this.preferences) {\n // only use the last x periods in the chart\n // values = values.slice(Math.max(values.length - this.preferences.periodsToShow, 1));\n //}\n let minValue = 0;\n if ('min' in this.preferences) {\n minValue = this.preferences.min;\n }\n\n //console.log('Testing Function', values);\n for (const value of values) {\n categoryList.push(value.xlabel);\n for (let i = 0; i < value.points.length; i++) {\n let excludeLines = [];\n if (this.preferences.hasOwnProperty('excludeLines')) {\n excludeLines = this.preferences.excludeLines;\n }\n\n //console.log(\"TEST Exclude Lines\", excludeLines);\n if (!excludeLines.includes(i)) { // if exclusions do not include i\n if (typeof seriesList[i] === 'undefined') {\n seriesList[i] = {\n data: [],\n missingValues: 'gap',\n color: this.getLineColor(apiData, i)\n };\n if ('names2' in apiData) {\n seriesList[i].name = apiData.names2[i];\n }\n if ('axisassigments' in apiData) {\n seriesList[i].axis = apiData.axisassigments[i];\n }\n }\n seriesList[i].data.push(((value.points[i] !== 'N/A') ? value.points[i] : null));\n }\n }\n }\n\n //console.log(\"Series List\", seriesList);\n let tickCount = 4;\n if ('tickCount' in this.preferences) {\n tickCount = this.preferences.tickCount;\n }\n const axis2Max = this.nextHighestNumberDivisibleBy(apiData.yleftmax, tickCount - 1);\n const valueAxis = [];\n if ('yaxisleftlabel' in apiData) {\n valueAxis.push({\n name: 'left',\n labels: {\n format: '{0}',\n position: 'start'\n },\n title: {\n text: yaxisleftlabel\n },\n line: {\n visible: false\n },\n axisCrossingValue: -10,\n max: axis2Max,\n min: minValue,\n majorUnit: axis2Max / (tickCount - 1)\n });\n }\n if ('yaxisrightlabel' in apiData) {\n let yrightmax = axis2Max;\n if ('yrightmax' in apiData) {\n yrightmax = this.apiData.yrightmax;\n }\n let tickCountRight = tickCount;\n if ('yrighttickcount' in apiData) {\n tickCountRight = this.apiData.yrighttickcount;\n }\n valueAxis.push({\n name: 'right',\n labels: {\n format: '{0}',\n position: 'end'\n },\n title: {\n text: yaxisrightlabel\n },\n line: {\n visible: false\n },\n axisCrossingValue: -10,\n max: yrightmax,\n min: minValue,\n majorUnit: yrightmax / (tickCountRight - 1)\n });\n }\n this.chartOptions = {\n legend: {\n align: 'center',\n position: 'top',\n labels: {\n font: '10pt sans-serif'\n }\n },\n seriesDefaults: {\n type: 'line',\n area: {\n line: {\n style: 'smooth'\n }\n }\n },\n series: seriesList,\n valueAxis: valueAxis,\n categoryAxis: {\n categories: categoryList,\n majorGridLines: {\n visible: false\n },\n labels: {\n rotation: -45,\n position: 'start'\n }\n }\n };\n }\n}\n","
\n

{{preferences.title}}

\n \n \n \n \n
\n","import { Input, Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileReference } from '../../../dashboards/tile-reference';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n//@ComponentLookup('BrMultiBarChartComponent')\n@Component({\n selector: 'app-br-multi-bar-chart',\n templateUrl: './br-multi-bar-chart.component.html',\n styleUrls: ['./br-multi-bar-chart.component.scss']\n})\n\n\nexport class BrMultiBarChartComponent extends TileComponent implements OnInit {\n\n public name1;\n public name2;\n public periods = [];\n public value1 = [];\n public value2 = [];\n yAxisLabel = '';\n\n defaultPreferences() {\n return {\n periodsToShow: 4,\n showTitle: true,\n };\n }\n\n translateApiDataForChart(apiData: any) {\n if (apiData.names[0]) { this.name1 = apiData.names[0]; }\n if (apiData.names[1]) { this.name2 = apiData.names[1]; }\n // console.log('WAIT TIME VALUES', apiData);\n\n const periods: any[] = [];\n const value1: any[] = [];\n const value2: any[] = [];\n\n let maxValue = 0;\n\n let values = [];\n values = apiData.values;\n\n for (const row of values.reverse()) {\n periods.push(row.key);\n value1.push(row.value1);\n value2.push(row.value2);\n }\n //console.log('Values From value1', value1);\n }\n\n isDataFound(apiData) {\n const dataFound = super.isDataFound(apiData);\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","
\r\n

{{preferences.title}}

\r\n \r\n
\r\n

{{strChartTitle}}

\r\n

{{preferences.subHeading}}

\r\n \r\n \r\n \r\n
\r\n
\r\n No data!\r\n
\r\n
\r\n
\r\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileReference } from '../../../dashboards/tile-reference';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n@Component({\n selector: 'app-br-line-chart',\n templateUrl: './br-line-chart.component.html',\n styleUrls: ['./br-line-chart.component.scss']\n})\n\nexport class BrLineChartComponent extends TileComponent implements OnInit {\n\n defaultPreferences() {\n return {\n showTitle: true\n };\n }\n\n strChartTitle;\n strTitle;\n strYAxis = '';\n strYAxis2 = '';\n chartTopLimit;\n chartBottomLimit;\n\n chartValues: any[];\n\n translateApiDataForChart(apiData: any) {\n const chartStackSeries = [{\n name: '',\n color: '#3498DB', // '#ff0000',\n type: 'line',\n data: [],\n axis: 'axis1',\n tooltip: {\n visible: true,\n format: '{0}',\n background: '#aa0061',\n padding: '2'\n }\n }];\n\n // console.log('Test JSON ITEM--', JSON.stringify(apiData));\n this.strChartTitle = apiData.title;\n this.strYAxis = apiData.yAxisLabel;\n this.strYAxis2 = apiData.yAxisLabel2;\n\n const chartCategories = [];\n let maxValue = 0;\n let minValue = 0;\n let roundSize = 0;\n\n for (const row of apiData.values) {\n chartCategories.push(row.key);\n const intValue = parseInt(row.value, 10);\n if (intValue > maxValue) {\n maxValue = intValue;\n }\n chartStackSeries[0].data.push(intValue);\n }\n\n const zero = '0';\n const valueSize = maxValue.toString().length;\n const roundSizeStr = '1'.padEnd(valueSize, zero);\n roundSize = 10;\n maxValue = this.roundUp(maxValue * 1.2, roundSize);\n\n if (this.apiData.chartTopLimit) { maxValue = this.apiData.chartTopLimit; }\n if (this.apiData.chartBottomLimit) { minValue = this.apiData.chartBottomLimit; }\n if (this.apiData.yAxisMajorUnit) { roundSize = this.apiData.yAxisMajorUnit; }\n\n // console.log('API DATA', this.apiData);\n\n const valueAxis1 = {\n name: 'axis1',\n labels: {\n // https://github.com/telerik/kendo-intl/blob/master/docs/num-formatting/index.md\n // cannot currently add format of #K, add issue to https://github.com/telerik/kendo-intl/issues\n format: '{0}',\n content: (e) => {\n return e.value;\n },\n position: 'start',\n visible: true\n },\n max: maxValue,\n min: minValue,\n majorUnit: roundSize,\n line: {\n visible: false\n },\n title: {\n text: this.strYAxis,\n color: '#000000'\n },\n tooltip: {\n visible: true,\n format: '{0}',\n background: '#aa0061',\n padding: '2'\n }\n };\n\n this.chartOptions = {\n seriesDefaults: {\n type: 'line',\n area: {\n line: {\n style: 'smooth'\n }\n }\n },\n series: chartStackSeries,\n chartArea: {\n border: {\n color: '#000',\n width: 1,\n dashType: 'solid'\n }\n },\n valueAxis: [valueAxis1], // removed valueAxis2\n categoryAxis: {\n categories: chartCategories,\n majorGridLines: {\n visible: false\n },\n labels: {\n rotation: -45\n }\n }\n };\n // throw new Error('Method not implemented.');\n }\n\n roundUp(value, toTheNearest) {\n return Math.ceil(value / toTheNearest) * toTheNearest;\n }\n\n isDataFound(value) {\n let dataFound = (value !== undefined && value !== null && (Array.isArray(value.values) && value.values.length > 0));\n let atLeastOneValueNotNull = false;\n if (value !== undefined && 'values' in value) {\n for (const item of value.values) {\n if (item.value !== null) {\n atLeastOneValueNotNull = true;\n }\n }\n }\n if (!atLeastOneValueNotNull) {\n dataFound = false;\n }\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","
\r\n

{{preferences.title}}

\r\n \r\n \r\n \r\n
","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileComponent } from '../../../tiles/base/tile.component';\nimport { RenderEvent } from '@progress/kendo-angular-charts';\nimport { Rect, Circle as CircleGeometry } from '@progress/kendo-drawing/geometry';\nimport { Group, Path, Layout, Text } from '@progress/kendo-drawing';\n\n@Component({\n selector: 'app-br-pie-chart',\n templateUrl: './br-pie-chart.component.html',\n styleUrls: ['./br-pie-chart.component.scss']\n})\n\nexport class BrPieChartComponent extends TileComponent implements OnInit {\n\n private goalPercent: number;\n private center: any;\n private radius: number;\n\n // Necessary to bind `this` to the AppComponent instance\n public visualHandler = this.visual.bind(this);\n\n translateApiDataForChart(apiData) {\n const pieDataTemp: any[] = [];\n for (const pieItem of apiData.values) {\n pieDataTemp.push({\n value: pieItem.value,\n category:pieItem.category,\n dashType: 'solid'\n });\n }\n // console.log(this.goalPercent);\n\n this.chartOptions = {\n pieData: pieDataTemp\n };\n // console.log('chartOptions', this.chartOptions);\n }\n\n public legendItemVisual = (args: any) => {\n const path = new Path({\n stroke: {\n color: args.series.data[args.pointIndex].color,\n dashType: args.series.data[args.pointIndex].dashType,\n width: 3\n }\n }).moveTo(0, 0).lineTo(15, 0).close();\n const text = new Text(args.series.data[args.pointIndex].category, [0, 0]);\n const layout = new Layout(new Rect([0, 0], [Number.MAX_VALUE, 0]), {\n alignItems: 'center',\n spacing: 5\n });\n\n layout.append(path, text);\n layout.reflow();\n\n return layout;\n }\n\n public visual(e: any): Group {\n // Obtain parameters for the segments\n this.center = e.center;\n this.radius = e.radius;\n\n // console.log(\"Metric: \" + this.apiData.title + \", Center: \" + this.center + \", Start Angle: \" + e.startAngle\n // + \", End Angle: \" + e.endAngle + \", Percentage: \" + e.percentage + \", Radius: \" + this.radius\n // + \", Goal Percent: \" + this.goalPercent);\n // Create default visual\n return e.createVisual();\n }\n\n public onRender(e: RenderEvent): void {\n // The center and radius are populated by now.\n // We can ask a circle geometry to calculate the bounding rectangle for us.\n //\n // http://www.telerik.com/kendo-angular-ui/components/drawing/api/geometry/Circle/\n\n if (this.preferences.showGoal === false) {\n return;\n }\n const c = this.center;\n // console.log(\"Metric: \" + this.apiData.title + \", Center: \" + c + \", radius: \" + this.radius);\n const circleGeometry = new CircleGeometry([c.x, c.y], this.radius);\n\n // Reflow the text in the bounding box\n //\n // http://www.telerik.com/kendo-angular-ui/components/drawing/api/Layout\n // http://www.telerik.com/kendo-angular-ui/components/drawing/api/LayoutOptions\n /*const path = new Path({\n stroke: {\n color: '#000',\n dashType: 'dash',\n width: 1\n }\n });*/\n\n // The starting point (or when 0 is passed) is at: 0.25\n // 1 degree equals 1/360; starting point center-right\n const calcGoalPercent = this.goalPercent - 0.25; // 0.90 - 0.25 to make starting point relative to top-center\n\n const point = circleGeometry.pointAt(360 * calcGoalPercent);\n\n //path.moveTo(c.x, c.y).lineTo(point.x, point.y);\n\n // Draw it on the Chart drawing surface\n // http://www.telerik.com/kendo-angular-ui/components/charts/api/ChartComponent/#toc-surface\n //e.sender.surface.draw(path);\n }\n\n isDataFound(apiData) {\n const dataFound = super.isDataFound(apiData);\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","
\n

{{preferences.title}}

\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n No data found\n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n@ComponentLookup('StackedBarChartByProductComponent')\n@Component({\n selector: 'app-br-stacked-bar-chart-by-product',\n templateUrl: './br-stacked-bar-chart-by-product.component.html',\n styleUrls: ['./br-stacked-bar-chart-by-product.component.scss']\n})\n\nexport class BrStackedBarChartByProductComponent extends TileComponent implements OnInit {\n protected defaultPreferences() {\n return {\n showTitle: true,\n valueAxis1Label: '{0}',\n valueAxis2Label: '{0}'\n };\n }\n\n\n translateApiDataForChart(apiData) {\n if (this.preferences.hasOwnProperty('apiObjectKey')) {\n apiData = apiData.range[this.preferences.apiObjectKey];\n }\n\n const chartStackSeries = {\n name: '',\n colorField: 'valueColor',\n type: 'column',\n gap: .5,\n border: {\n color: '#000',\n width: 1,\n dashType: 'solid'\n },\n data: [],\n axis: 'axis1'\n };\n\n const chartCategories = [];\n const valueAxis1Label = this.getPreference('valueAxis1Label');\n const valueAxis2Label = this.getPreference('valueAxis2Label');\n\n let values = apiData.values;\n if ('periodsToShow' in this.preferences) {\n // only use the last x periods in the chart\n values = values.slice(Math.max(values.length - this.preferences.periodsToShow, 1));\n }\n\n for (const chartDataColumnKey in values) {\n if (chartDataColumnKey in values) {\n const chartDataColumn = values[chartDataColumnKey];\n const chartDataColumnColor = apiData.stackcolors[chartDataColumnKey];\n chartCategories.push(chartDataColumn.xlabel);\n const chartDataItem = chartDataColumn.stacks[0];\n let intValue = parseInt(chartDataItem, 10);\n if (valueAxis1Label === '#K') {\n intValue /= 1000;\n }\n chartStackSeries.data.push({\n value: intValue,\n valueColor: chartDataColumnColor,\n tooltip: {\n visible: true,\n format: '{0}'\n }\n });\n }\n }\n\n const chartSeries = [chartStackSeries];\n const valueAxis1 = {\n name: 'axis1',\n labels: {\n // https://github.com/telerik/kendo-intl/blob/master/docs/num-formatting/index.md\n // cannot currently add format of #K, add issue to https://github.com/telerik/kendo-intl/issues\n format: valueAxis1Label,\n position: 'start',\n visible: true\n },\n line: {\n visible: false\n },\n title: {}\n };\n\n if ('yaxisleftlabel' in apiData) {\n valueAxis1.title = {\n text: apiData.yaxisleftlabel,\n color: apiData.yaxisleftlabelcolor\n };\n } else {\n valueAxis1.labels.visible = false;\n }\n\n this.chartOptions = {\n seriesDefaults: {\n type: 'column',\n stack: false\n },\n\n series: chartSeries,\n chartArea: {\n border: {\n color: '#000',\n width: 1,\n dashType: 'solid'\n },\n height: 400\n },\n\n valueAxis: [valueAxis1],\n categoryAxis: {\n categories: chartCategories,\n majorGridLines: {\n visible: false\n },\n labels: {\n rotation: -45\n }\n }\n };\n }\n\n isDataFound(apiData) {\n const dataFound = super.isDataFound(apiData);\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","import { Input, Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileReference } from '../../../dashboards/tile-reference';\nimport { TileComponent } from '../../../tiles/base/tile.component';\n\n@ComponentLookup('BrTextIndicatorsComponent')\n@Component({\n selector: 'app-br-text-indicator',\n templateUrl: './br-text-indicator.component.html',\n styleUrls: ['./br-text-indicator.component.scss']\n})\n\nexport class BrTextIndicatorComponent extends TileComponent implements OnInit {\n defaultPreferences() {\n return {\n showTitle: true\n };\n }\n\n title = 'No Title Listed';\n strScore = 0\n strColor = 'gray';\n strSubTitle = 'No Subtitle Listed';\n\n translateApiDataForChart(apiData) {\n // console.log(this.tileReference.apiSource);\n // console.log('ALCM Score', apiData.values['score']);\n this.title = apiData.title;\n this.strSubTitle = apiData.subtitle;\n if (apiData.values['score'].score) { this.strScore = apiData.values['score'].score; };\n if (apiData.values['score'].color) { this.strColor = apiData.values['score'].color; };\n }\n\n isDataFound(apiData) {\n const dataFound = super.isDataFound(apiData);\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\n return dataFound;\n }\n}\n","\n
\n \n \n \n \n

{{title}}

\n \n {{strScore}}\n \n
\n \n {{strSubTitle}}\n \n
\n
\n
\n","\n
\n \n

{{title}}

\n \n
\n
\n\n","import { Input, Component, OnInit } from '@angular/core';\r\nimport { ComponentLookup } from '../../../decorators/component-lookup';\r\nimport { TileReference } from '../../../dashboards/tile-reference';\r\nimport { TileComponent } from '../../../tiles/base/tile.component';\r\n\r\n@Component({\r\n selector: 'app-br-top-items',\r\n templateUrl: './br-top-items.component.html',\r\n styleUrls: ['./br-top-items.component.scss']\r\n})\r\n\r\nexport class BrTopItemsComponent extends TileComponent implements OnInit {\r\n protected defaultPreferences() {\r\n return {\r\n showTitle: true\r\n };\r\n }\r\n\r\n title = 'Customer NPS Scores';\r\n overallColor = 'gray';\r\n fieldColor = 'gray';\r\n techColor = 'gray';\r\n\r\n overallScore = 'N/A';\r\n fieldScore = 'N/A';\r\n techScore = 'N/A';\r\n\r\n translateApiDataForChart(apiData: any) {\r\n //console.log('Test JSON ITEM--', JSON.stringify(apiData));\r\n //console.log('NPS Details--', apiData.values);\r\n this.title = apiData.title;\r\n if (apiData.values['overall'].overallScore) { this.overallScore = apiData.values['overall'].overallScore; }\r\n if (apiData.values['overall'].overallColor) { this.overallColor = apiData.values['overall'].overallColor };\r\n if (apiData.values['field'].fieldScore) { this.fieldScore = apiData.values['field'].fieldScore };\r\n if (apiData.values['field'].fieldColor) { this.fieldColor = apiData.values['field'].fieldColor };\r\n if (apiData.values['tech'].techScore) { this.techScore = apiData.values['tech'].techScore };\r\n if (apiData.values['tech'].techColor) { this.techColor = apiData.values['tech'].techColor; };\r\n // throw new Error('Method not implemented.');\r\n }\r\n isDataFound(apiData) {\r\n const dataFound = super.isDataFound(apiData);\r\n this.nodatacheckService.setHasData(this.tileReference.apiSource, dataFound);\r\n return dataFound;\r\n }\r\n}\r\n","\r\n
\r\n

Multi-Line Chart

\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n No data found\r\n
\r\n
\r\n\r\n\r\n","import { Component, OnInit } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport { TileComponent } from '../../../tiles/base/tile.component';\nimport { RenderEvent } from '@progress/kendo-angular-charts';\nimport { Rect, Circle as CircleGeometry } from '@progress/kendo-drawing/geometry';\nimport { Group, Path, Layout, Text } from '@progress/kendo-drawing';\n\n@Component({\n selector: 'app-br-example-pie-chart',\n templateUrl: './br-example-pie-chart.component.html',\n styleUrls: ['./br-example-pie-chart.component.scss']\n})\nexport class BrExamplePieChartComponent extends TileComponent implements OnInit {\n\n years = ['assay1', 'assay2', 'assay3', 'assay4', 'assay5'];\n\n students = [\n { name: 'Al', values: [90, 91, 92, 93, 94] },\n { name: 'Brad', values: [89, 88, 87, 86, 85] },\n { name: 'Carl', values: [80, 81, 82, 83, 84] },\n { name: 'Dave', values: [85, 86, 87, 88, 89] },\n ];\n\n translateApiDataForChart(apiData) {\n\n }\n}\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport { ComponentLookup } from '../../../decorators/component-lookup';\nimport {TileReference} from '../../../dashboards/tile-reference';\nimport {BaseTileComponent} from '../../../tiles/base/base-tile.component';\nimport {RequestState} from '../../../api/request-handler';\n\n@ComponentLookup('ApiTestComponent')\n@Component({\n selector: 'app-api-test',\n templateUrl: './api-test.component.html',\n styleUrls: ['./api-test.component.scss']\n})\nexport class ApiTestComponent extends BaseTileComponent implements OnInit, OnDestroy {\n @Input() tileReference: TileReference;\n public apiData;\n public chartOptions;\n protected refreshHandleKey;\n protected requestHandler;\n apiCallIncrement = 1;\n queryParams;\n\n ngOnInit(): void {\n this.setupPreferences();\n this.requestHandler = this.callApiSource(this.tileReference.apiSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.setApiCallResponse(apiData, 0);\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.tileReference.apiSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.tileReference.apiSource));\n }\n\n refreshCall() {\n // { force_call_via_unique_param: this.apiCallIncrement}\n this.requestHandler.sendRequest(this.tileReference.apiSource); // , null, true\n this.apiCallIncrement++;\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n }\n\n setApiCallResponse(apiData, apiDataIndex) {\n this.apiData = apiData;\n }\n\n getQueryParams2() {\n this.queryParams = this.detailQueryParamsService.getQueryParams();\n this.queryParams['component'] = 'DdtLoaderComponent';\n this.queryParams['apiUrl'] = this.tileReference.apiSource;\n return this.queryParams;\n }\n}\n","import { Injectable } from '@angular/core';\nimport {PersonaLevels} from '../configuration/persona-levels';\nimport {ApiService} from './api.service';\nimport {RefreshHandlerService} from './refresh-handler.service';\nimport {AuthenticationService} from '../authentication/authentication.service';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PersonaOptionsService {\n requestHandlers = {};\n\n config = PersonaLevels;\n\n constructor(\n private apiService: ApiService,\n private refreshHandlerService: RefreshHandlerService,\n private authService: AuthenticationService\n ) { }\n\n initialLoad() {\n // preload values for the menus, so user need not wait\n this.loadPersonaOptions('level1Service');\n this.loadPersonaOptions('level2ServiceCustomers');\n this.loadPersonaOptions('level2ServiceInstruments');\n this.loadPersonaOptions('level1Amb');\n }\n\n loadPersonaOptions(configType) {\n // api calls\n if (!(configType in this.config)) {\n console.error(\n 'persona.service.ts: Cannot call loadPersonaOptions(configType)' +\n ' for a configType not existing in the configuration array.'\n );\n }\n for (const apiCall of this.config[configType].apiCalls) {\n this.loadPersonaOptionList(apiCall.mappingKey, configType);\n }\n }\n\n loadPersonaOptionList(mappingKey, configType) {\n if (!(mappingKey in this.requestHandlers)) {\n this.requestHandlers[mappingKey] = this.apiService.get(mappingKey);\n this.requestHandlers[mappingKey].sendRequest(mappingKey);\n if (configType === 'level2ServiceCustomers' || configType === 'level2ServiceInstruments') {\n this.refreshHandlerService.onRefreshEvent(\n (index) => {\n this.requestHandlers[mappingKey].sendRequest(mappingKey);\n },\n this.requestHandlers[mappingKey].getRelativeParams(mappingKey)\n );\n }\n } else { // this may not be needed due to the refresh handler\n this.requestHandlers[mappingKey].sendRequest(mappingKey);\n }\n }\n}\n","import { empty } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nexport var NotificationKind;\n(function (NotificationKind) {\n NotificationKind[\"NEXT\"] = \"N\";\n NotificationKind[\"ERROR\"] = \"E\";\n NotificationKind[\"COMPLETE\"] = \"C\";\n})(NotificationKind || (NotificationKind = {}));\nexport class Notification {\n constructor(kind, value, error) {\n this.kind = kind;\n this.value = value;\n this.error = error;\n this.hasValue = kind === 'N';\n }\n observe(observer) {\n switch (this.kind) {\n case 'N':\n return observer.next && observer.next(this.value);\n case 'E':\n return observer.error && observer.error(this.error);\n case 'C':\n return observer.complete && observer.complete();\n }\n }\n do(next, error, complete) {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return next && next(this.value);\n case 'E':\n return error && error(this.error);\n case 'C':\n return complete && complete();\n }\n }\n accept(nextOrObserver, error, complete) {\n if (nextOrObserver && typeof nextOrObserver.next === 'function') {\n return this.observe(nextOrObserver);\n }\n else {\n return this.do(nextOrObserver, error, complete);\n }\n }\n toObservable() {\n const kind = this.kind;\n switch (kind) {\n case 'N':\n return of(this.value);\n case 'E':\n return throwError(this.error);\n case 'C':\n return empty();\n }\n throw new Error('unexpected notification kind value');\n }\n static createNext(value) {\n if (typeof value !== 'undefined') {\n return new Notification('N', value);\n }\n return Notification.undefinedValueNotification;\n }\n static createError(err) {\n return new Notification('E', undefined, err);\n }\n static createComplete() {\n return Notification.completeNotification;\n }\n}\nNotification.completeNotification = new Notification('C');\nNotification.undefinedValueNotification = new Notification('N', undefined);\n//# sourceMappingURL=Notification.js.map","{{ tileReference.apiSource }}
\n
\n\nDDT","import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\nexport const NEVER = new Observable(noop);\nexport function never() {\n return NEVER;\n}\n//# sourceMappingURL=never.js.map","import { async } from '../scheduler/async';\nimport { isDate } from '../util/isDate';\nimport { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function delay(delay, scheduler = async) {\n const absoluteDelay = isDate(delay);\n const delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);\n return (source) => source.lift(new DelayOperator(delayFor, scheduler));\n}\nclass DelayOperator {\n constructor(delay, scheduler) {\n this.delay = delay;\n this.scheduler = scheduler;\n }\n call(subscriber, source) {\n return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));\n }\n}\nclass DelaySubscriber extends Subscriber {\n constructor(destination, delay, scheduler) {\n super(destination);\n this.delay = delay;\n this.scheduler = scheduler;\n this.queue = [];\n this.active = false;\n this.errored = false;\n }\n static dispatch(state) {\n const source = state.source;\n const queue = source.queue;\n const scheduler = state.scheduler;\n const destination = state.destination;\n while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {\n queue.shift().notification.observe(destination);\n }\n if (queue.length > 0) {\n const delay = Math.max(0, queue[0].time - scheduler.now());\n this.schedule(state, delay);\n }\n else {\n this.unsubscribe();\n source.active = false;\n }\n }\n _schedule(scheduler) {\n this.active = true;\n const destination = this.destination;\n destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {\n source: this, destination: this.destination, scheduler: scheduler\n }));\n }\n scheduleNotification(notification) {\n if (this.errored === true) {\n return;\n }\n const scheduler = this.scheduler;\n const message = new DelayMessage(scheduler.now() + this.delay, notification);\n this.queue.push(message);\n if (this.active === false) {\n this._schedule(scheduler);\n }\n }\n _next(value) {\n this.scheduleNotification(Notification.createNext(value));\n }\n _error(err) {\n this.errored = true;\n this.queue = [];\n this.destination.error(err);\n this.unsubscribe();\n }\n _complete() {\n this.scheduleNotification(Notification.createComplete());\n this.unsubscribe();\n }\n}\nclass DelayMessage {\n constructor(time, notification) {\n this.time = time;\n this.notification = notification;\n }\n}\n//# sourceMappingURL=delay.js.map","export function isDate(value) {\n return value instanceof Date && !isNaN(+value);\n}\n//# sourceMappingURL=isDate.js.map","/**\n * @license Angular v9.0.7\n * (c) 2010-2020 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { isPlatformBrowser } from '@angular/common';\nimport { Injectable, InjectionToken, ApplicationRef, PLATFORM_ID, APP_INITIALIZER, Injector, NgModule } from '@angular/core';\nimport { defer, throwError, fromEvent, of, concat, Subject, NEVER, merge } from 'rxjs';\nimport { map, filter, switchMap, publish, take, tap, delay } from 'rxjs/operators';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/src/low_level.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nimport * as ɵngcc0 from '@angular/core';\nconst ERR_SW_NOT_SUPPORTED = 'Service workers are disabled or not supported by this browser';\n/**\n * An event emitted when a new version of the app is available.\n *\n * \\@publicApi\n * @record\n */\nfunction UpdateAvailableEvent() { }\nif (false) {\n /** @type {?} */\n UpdateAvailableEvent.prototype.type;\n /** @type {?} */\n UpdateAvailableEvent.prototype.current;\n /** @type {?} */\n UpdateAvailableEvent.prototype.available;\n}\n/**\n * An event emitted when a new version of the app has been downloaded and activated.\n *\n * \\@publicApi\n * @record\n */\nfunction UpdateActivatedEvent() { }\nif (false) {\n /** @type {?} */\n UpdateActivatedEvent.prototype.type;\n /** @type {?|undefined} */\n UpdateActivatedEvent.prototype.previous;\n /** @type {?} */\n UpdateActivatedEvent.prototype.current;\n}\n/**\n * An event emitted when a `PushEvent` is received by the service worker.\n * @record\n */\nfunction PushEvent() { }\nif (false) {\n /** @type {?} */\n PushEvent.prototype.type;\n /** @type {?} */\n PushEvent.prototype.data;\n}\n/**\n * @record\n */\nfunction TypedEvent() { }\nif (false) {\n /** @type {?} */\n TypedEvent.prototype.type;\n}\n/**\n * @record\n */\nfunction StatusEvent() { }\nif (false) {\n /** @type {?} */\n StatusEvent.prototype.type;\n /** @type {?} */\n StatusEvent.prototype.nonce;\n /** @type {?} */\n StatusEvent.prototype.status;\n /** @type {?|undefined} */\n StatusEvent.prototype.error;\n}\n/**\n * @param {?} message\n * @return {?}\n */\nfunction errorObservable(message) {\n return defer((/**\n * @return {?}\n */\n () => throwError(new Error(message))));\n}\n/**\n * \\@publicApi\n */\nclass NgswCommChannel {\n /**\n * @param {?} serviceWorker\n */\n constructor(serviceWorker) {\n this.serviceWorker = serviceWorker;\n if (!serviceWorker) {\n this.worker = this.events = this.registration = errorObservable(ERR_SW_NOT_SUPPORTED);\n }\n else {\n /** @type {?} */\n const controllerChangeEvents = fromEvent(serviceWorker, 'controllerchange');\n /** @type {?} */\n const controllerChanges = controllerChangeEvents.pipe(map((/**\n * @return {?}\n */\n () => serviceWorker.controller)));\n /** @type {?} */\n const currentController = defer((/**\n * @return {?}\n */\n () => of(serviceWorker.controller)));\n /** @type {?} */\n const controllerWithChanges = concat(currentController, controllerChanges);\n this.worker = controllerWithChanges.pipe(filter((/**\n * @param {?} c\n * @return {?}\n */\n (c) => !!c)));\n this.registration = (/** @type {?} */ ((this.worker.pipe(switchMap((/**\n * @return {?}\n */\n () => serviceWorker.getRegistration()))))));\n /** @type {?} */\n const rawEvents = fromEvent(serviceWorker, 'message');\n /** @type {?} */\n const rawEventPayload = rawEvents.pipe(map((/**\n * @param {?} event\n * @return {?}\n */\n event => event.data)));\n /** @type {?} */\n const eventsUnconnected = rawEventPayload.pipe(filter((/**\n * @param {?} event\n * @return {?}\n */\n event => event && event.type)));\n /** @type {?} */\n const events = (/** @type {?} */ (eventsUnconnected.pipe(publish())));\n events.connect();\n this.events = events;\n }\n }\n /**\n * @param {?} action\n * @param {?} payload\n * @return {?}\n */\n postMessage(action, payload) {\n return this.worker\n .pipe(take(1), tap((/**\n * @param {?} sw\n * @return {?}\n */\n (sw) => {\n sw.postMessage(Object.assign({ action }, payload));\n })))\n .toPromise()\n .then((/**\n * @return {?}\n */\n () => undefined));\n }\n /**\n * @param {?} type\n * @param {?} payload\n * @param {?} nonce\n * @return {?}\n */\n postMessageWithStatus(type, payload, nonce) {\n /** @type {?} */\n const waitForStatus = this.waitForStatus(nonce);\n /** @type {?} */\n const postMessage = this.postMessage(type, payload);\n return Promise.all([waitForStatus, postMessage]).then((/**\n * @return {?}\n */\n () => undefined));\n }\n /**\n * @return {?}\n */\n generateNonce() { return Math.round(Math.random() * 10000000); }\n /**\n * @template T\n * @param {?} type\n * @return {?}\n */\n eventsOfType(type) {\n /** @type {?} */\n const filterFn = (/**\n * @param {?} event\n * @return {?}\n */\n (event) => event.type === type);\n return this.events.pipe(filter(filterFn));\n }\n /**\n * @template T\n * @param {?} type\n * @return {?}\n */\n nextEventOfType(type) {\n return this.eventsOfType(type).pipe(take(1));\n }\n /**\n * @param {?} nonce\n * @return {?}\n */\n waitForStatus(nonce) {\n return this.eventsOfType('STATUS')\n .pipe(filter((/**\n * @param {?} event\n * @return {?}\n */\n event => event.nonce === nonce)), take(1), map((/**\n * @param {?} event\n * @return {?}\n */\n event => {\n if (event.status) {\n return undefined;\n }\n throw new Error((/** @type {?} */ (event.error)));\n })))\n .toPromise();\n }\n /**\n * @return {?}\n */\n get isEnabled() { return !!this.serviceWorker; }\n}\nif (false) {\n /** @type {?} */\n NgswCommChannel.prototype.worker;\n /** @type {?} */\n NgswCommChannel.prototype.registration;\n /** @type {?} */\n NgswCommChannel.prototype.events;\n /**\n * @type {?}\n * @private\n */\n NgswCommChannel.prototype.serviceWorker;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/src/push.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Subscribe and listen to\n * [Web Push Notifications](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n * through Angular Service Worker.\n *\n * \\@usageNotes\n *\n * You can inject a `SwPush` instance into any component or service\n * as a dependency.\n *\n * \n *\n * To subscribe, call `SwPush.requestSubscription()`, which asks the user for permission.\n * The call returns a `Promise` with a new\n * [`PushSubscription`](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * instance.\n *\n * \n *\n * A request is rejected if the user denies permission, or if the browser\n * blocks or does not support the Push API or ServiceWorkers.\n * Check `SwPush.isEnabled` to confirm status.\n *\n * Invoke Push Notifications by pushing a message with the following payload.\n *\n * ```ts\n * {\n * \"notification\": {\n * \"actions\": NotificationAction[],\n * \"badge\": USVString\n * \"body\": DOMString,\n * \"data\": any,\n * \"dir\": \"auto\"|\"ltr\"|\"rtl\",\n * \"icon\": USVString,\n * \"image\": USVString,\n * \"lang\": DOMString,\n * \"renotify\": boolean,\n * \"requireInteraction\": boolean,\n * \"silent\": boolean,\n * \"tag\": DOMString,\n * \"timestamp\": DOMTimeStamp,\n * \"title\": DOMString,\n * \"vibrate\": number[]\n * }\n * }\n * ```\n *\n * Only `title` is required. See `Notification`\n * [instance properties](https://developer.mozilla.org/en-US/docs/Web/API/Notification#Instance_properties).\n *\n * While the subscription is active, Service Worker listens for\n * [PushEvent](https://developer.mozilla.org/en-US/docs/Web/API/PushEvent)\n * occurrences and creates\n * [Notification](https://developer.mozilla.org/en-US/docs/Web/API/Notification)\n * instances in response.\n *\n * Unsubscribe using `SwPush.unsubscribe()`.\n *\n * An application can subscribe to `SwPush.notificationClicks` observable to be notified when a user\n * clicks on a notification. For example:\n *\n * \n *\n * @see [Push Notifications](https://developers.google.com/web/fundamentals/codelabs/push-notifications/)\n * @see [Angular Push Notifications](https://blog.angular-university.io/angular-push-notifications/)\n * @see [MDN: Push API](https://developer.mozilla.org/en-US/docs/Web/API/Push_API)\n * @see [MDN: Notifications API](https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API)\n * @see [MDN: Web Push API Notifications best practices](https://developer.mozilla.org/en-US/docs/Web/API/Push_API/Best_Practices)\n *\n * \\@publicApi\n */\nclass SwPush {\n /**\n * @param {?} sw\n */\n constructor(sw) {\n this.sw = sw;\n this.subscriptionChanges = new Subject();\n if (!sw.isEnabled) {\n this.messages = NEVER;\n this.notificationClicks = NEVER;\n this.subscription = NEVER;\n return;\n }\n this.messages = this.sw.eventsOfType('PUSH').pipe(map((/**\n * @param {?} message\n * @return {?}\n */\n message => message.data)));\n this.notificationClicks =\n this.sw.eventsOfType('NOTIFICATION_CLICK').pipe(map((/**\n * @param {?} message\n * @return {?}\n */\n (message) => message.data)));\n this.pushManager = this.sw.registration.pipe(map((/**\n * @param {?} registration\n * @return {?}\n */\n registration => registration.pushManager)));\n /** @type {?} */\n const workerDrivenSubscriptions = this.pushManager.pipe(switchMap((/**\n * @param {?} pm\n * @return {?}\n */\n pm => pm.getSubscription())));\n this.subscription = merge(workerDrivenSubscriptions, this.subscriptionChanges);\n }\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n * @return {?}\n */\n get isEnabled() { return this.sw.isEnabled; }\n /**\n * Subscribes to Web Push Notifications,\n * after requesting and receiving user permission.\n *\n * @param {?} options An object containing the `serverPublicKey` string.\n * @return {?} A Promise that resolves to the new subscription object.\n */\n requestSubscription(options) {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n /** @type {?} */\n const pushOptions = { userVisibleOnly: true };\n /** @type {?} */\n let key = this.decodeBase64(options.serverPublicKey.replace(/_/g, '/').replace(/-/g, '+'));\n /** @type {?} */\n let applicationServerKey = new Uint8Array(new ArrayBuffer(key.length));\n for (let i = 0; i < key.length; i++) {\n applicationServerKey[i] = key.charCodeAt(i);\n }\n pushOptions.applicationServerKey = applicationServerKey;\n return this.pushManager.pipe(switchMap((/**\n * @param {?} pm\n * @return {?}\n */\n pm => pm.subscribe(pushOptions))), take(1))\n .toPromise()\n .then((/**\n * @param {?} sub\n * @return {?}\n */\n sub => {\n this.subscriptionChanges.next(sub);\n return sub;\n }));\n }\n /**\n * Unsubscribes from Service Worker push notifications.\n *\n * @return {?} A Promise that is resolved when the operation succeeds, or is rejected if there is no\n * active subscription or the unsubscribe operation fails.\n */\n unsubscribe() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n /** @type {?} */\n const doUnsubscribe = (/**\n * @param {?} sub\n * @return {?}\n */\n (sub) => {\n if (sub === null) {\n throw new Error('Not subscribed to push notifications.');\n }\n return sub.unsubscribe().then((/**\n * @param {?} success\n * @return {?}\n */\n success => {\n if (!success) {\n throw new Error('Unsubscribe failed!');\n }\n this.subscriptionChanges.next(null);\n }));\n });\n return this.subscription.pipe(take(1), switchMap(doUnsubscribe)).toPromise();\n }\n /**\n * @private\n * @param {?} input\n * @return {?}\n */\n decodeBase64(input) { return atob(input); }\n}\nSwPush.ɵfac = function SwPush_Factory(t) { return new (t || SwPush)(ɵngcc0.ɵɵinject(NgswCommChannel)); };\nSwPush.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SwPush, factory: SwPush.ɵfac });\n/** @nocollapse */\nSwPush.ctorParameters = () => [\n { type: NgswCommChannel }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SwPush, [{\n type: Injectable\n }], function () { return [{ type: NgswCommChannel }]; }, null); })();\nif (false) {\n /**\n * Emits the payloads of the received push notification messages.\n * @type {?}\n */\n SwPush.prototype.messages;\n /**\n * Emits the payloads of the received push notification messages as well as the action the user\n * interacted with. If no action was used the `action` property contains an empty string `''`.\n *\n * Note that the `notification` property does **not** contain a\n * [Notification][Mozilla Notification] object but rather a\n * [NotificationOptions](https://notifications.spec.whatwg.org/#dictdef-notificationoptions)\n * object that also includes the `title` of the [Notification][Mozilla Notification] object.\n *\n * [Mozilla Notification]: https://developer.mozilla.org/en-US/docs/Web/API/Notification\n * @type {?}\n */\n SwPush.prototype.notificationClicks;\n /**\n * Emits the currently active\n * [PushSubscription](https://developer.mozilla.org/en-US/docs/Web/API/PushSubscription)\n * associated to the Service Worker registration or `null` if there is no subscription.\n * @type {?}\n */\n SwPush.prototype.subscription;\n /**\n * @type {?}\n * @private\n */\n SwPush.prototype.pushManager;\n /**\n * @type {?}\n * @private\n */\n SwPush.prototype.subscriptionChanges;\n /**\n * @type {?}\n * @private\n */\n SwPush.prototype.sw;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/src/update.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Subscribe to update notifications from the Service Worker, trigger update\n * checks, and forcibly activate updates.\n *\n * \\@publicApi\n */\nclass SwUpdate {\n /**\n * @param {?} sw\n */\n constructor(sw) {\n this.sw = sw;\n if (!sw.isEnabled) {\n this.available = NEVER;\n this.activated = NEVER;\n return;\n }\n this.available = this.sw.eventsOfType('UPDATE_AVAILABLE');\n this.activated = this.sw.eventsOfType('UPDATE_ACTIVATED');\n }\n /**\n * True if the Service Worker is enabled (supported by the browser and enabled via\n * `ServiceWorkerModule`).\n * @return {?}\n */\n get isEnabled() { return this.sw.isEnabled; }\n /**\n * @return {?}\n */\n checkForUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n /** @type {?} */\n const statusNonce = this.sw.generateNonce();\n return this.sw.postMessageWithStatus('CHECK_FOR_UPDATES', { statusNonce }, statusNonce);\n }\n /**\n * @return {?}\n */\n activateUpdate() {\n if (!this.sw.isEnabled) {\n return Promise.reject(new Error(ERR_SW_NOT_SUPPORTED));\n }\n /** @type {?} */\n const statusNonce = this.sw.generateNonce();\n return this.sw.postMessageWithStatus('ACTIVATE_UPDATE', { statusNonce }, statusNonce);\n }\n}\nSwUpdate.ɵfac = function SwUpdate_Factory(t) { return new (t || SwUpdate)(ɵngcc0.ɵɵinject(NgswCommChannel)); };\nSwUpdate.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SwUpdate, factory: SwUpdate.ɵfac });\n/** @nocollapse */\nSwUpdate.ctorParameters = () => [\n { type: NgswCommChannel }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SwUpdate, [{\n type: Injectable\n }], function () { return [{ type: NgswCommChannel }]; }, null); })();\nif (false) {\n /**\n * Emits an `UpdateAvailableEvent` event whenever a new app version is available.\n * @type {?}\n */\n SwUpdate.prototype.available;\n /**\n * Emits an `UpdateActivatedEvent` event whenever the app has been updated to a new version.\n * @type {?}\n */\n SwUpdate.prototype.activated;\n /**\n * @type {?}\n * @private\n */\n SwUpdate.prototype.sw;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/src/module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Token that can be used to provide options for `ServiceWorkerModule` outside of\n * `ServiceWorkerModule.register()`.\n *\n * You can use this token to define a provider that generates the registration options at runtime,\n * for example via a function call:\n *\n * {\\@example service-worker/registration-options/module.ts region=\"registration-options\"\n * header=\"app.module.ts\"}\n *\n * \\@publicApi\n * @abstract\n */\nclass SwRegistrationOptions {\n}\nif (false) {\n /**\n * Whether the ServiceWorker will be registered and the related services (such as `SwPush` and\n * `SwUpdate`) will attempt to communicate and interact with it.\n *\n * Default: true\n * @type {?}\n */\n SwRegistrationOptions.prototype.enabled;\n /**\n * A URL that defines the ServiceWorker's registration scope; that is, what range of URLs it can\n * control. It will be used when calling\n * [ServiceWorkerContainer#register()](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register).\n * @type {?}\n */\n SwRegistrationOptions.prototype.scope;\n /**\n * Defines the ServiceWorker registration strategy, which determines when it will be registered\n * with the browser.\n *\n * The default behavior of registering once the application stabilizes (i.e. as soon as there are\n * no pending micro- and macro-tasks), is designed register the ServiceWorker as soon as possible\n * but without affecting the application's first time load.\n *\n * Still, there might be cases where you want more control over when the ServiceWorker is\n * registered (e.g. there might be a long-running timeout or polling interval, preventing the app\n * to stabilize). The available option are:\n *\n * - `registerWhenStable`: Register as soon as the application stabilizes (no pending\n * micro-/macro-tasks).\n * - `registerImmediately`: Register immediately.\n * - `registerWithDelay:`: Register with a delay of `` milliseconds. For\n * example, use `registerWithDelay:5000` to register the ServiceWorker after 5 seconds. If\n * `` is omitted, is defaults to `0`, which will register the ServiceWorker as soon\n * as possible but still asynchronously, once all pending micro-tasks are completed.\n * - An [Observable](guide/observables) factory function: A function that returns an `Observable`.\n * The function will be used at runtime to obtain and subscribe to the `Observable` and the\n * ServiceWorker will be registered as soon as the first value is emitted.\n *\n * Default: 'registerWhenStable'\n * @type {?}\n */\n SwRegistrationOptions.prototype.registrationStrategy;\n}\n/** @type {?} */\nconst SCRIPT = new InjectionToken('NGSW_REGISTER_SCRIPT');\n/**\n * @param {?} injector\n * @param {?} script\n * @param {?} options\n * @param {?} platformId\n * @return {?}\n */\nfunction ngswAppInitializer(injector, script, options, platformId) {\n /** @type {?} */\n const initializer = (/**\n * @return {?}\n */\n () => {\n if (!(isPlatformBrowser(platformId) && ('serviceWorker' in navigator) &&\n options.enabled !== false)) {\n return;\n }\n // Wait for service worker controller changes, and fire an INITIALIZE action when a new SW\n // becomes active. This allows the SW to initialize itself even if there is no application\n // traffic.\n navigator.serviceWorker.addEventListener('controllerchange', (/**\n * @return {?}\n */\n () => {\n if (navigator.serviceWorker.controller !== null) {\n navigator.serviceWorker.controller.postMessage({ action: 'INITIALIZE' });\n }\n }));\n /** @type {?} */\n let readyToRegister$;\n if (typeof options.registrationStrategy === 'function') {\n readyToRegister$ = options.registrationStrategy();\n }\n else {\n const [strategy, ...args] = (options.registrationStrategy || 'registerWhenStable').split(':');\n switch (strategy) {\n case 'registerImmediately':\n readyToRegister$ = of(null);\n break;\n case 'registerWithDelay':\n readyToRegister$ = of(null).pipe(delay(+args[0] || 0));\n break;\n case 'registerWhenStable':\n /** @type {?} */\n const appRef = injector.get(ApplicationRef);\n readyToRegister$ = appRef.isStable.pipe(filter((/**\n * @param {?} stable\n * @return {?}\n */\n stable => stable)));\n break;\n default:\n // Unknown strategy.\n throw new Error(`Unknown ServiceWorker registration strategy: ${options.registrationStrategy}`);\n }\n }\n // Don't return anything to avoid blocking the application until the SW is registered.\n // Catch and log the error if SW registration fails to avoid uncaught rejection warning.\n readyToRegister$.pipe(take(1)).subscribe((/**\n * @return {?}\n */\n () => navigator.serviceWorker.register(script, { scope: options.scope })\n .catch((/**\n * @param {?} err\n * @return {?}\n */\n err => console.error('Service worker registration failed with:', err)))));\n });\n return initializer;\n}\n/**\n * @param {?} opts\n * @param {?} platformId\n * @return {?}\n */\nfunction ngswCommChannelFactory(opts, platformId) {\n return new NgswCommChannel(isPlatformBrowser(platformId) && opts.enabled !== false ? navigator.serviceWorker :\n undefined);\n}\n/**\n * \\@publicApi\n */\nclass ServiceWorkerModule {\n /**\n * Register the given Angular Service Worker script.\n *\n * If `enabled` is set to `false` in the given options, the module will behave as if service\n * workers are not supported by the browser, and the service worker will not be registered.\n * @param {?} script\n * @param {?=} opts\n * @return {?}\n */\n static register(script, opts = {}) {\n return {\n ngModule: ServiceWorkerModule,\n providers: [\n { provide: SCRIPT, useValue: script },\n { provide: SwRegistrationOptions, useValue: opts },\n {\n provide: NgswCommChannel,\n useFactory: ngswCommChannelFactory,\n deps: [SwRegistrationOptions, PLATFORM_ID]\n },\n {\n provide: APP_INITIALIZER,\n useFactory: ngswAppInitializer,\n deps: [Injector, SCRIPT, SwRegistrationOptions, PLATFORM_ID],\n multi: true,\n },\n ],\n };\n }\n}\nServiceWorkerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ServiceWorkerModule });\nServiceWorkerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ServiceWorkerModule_Factory(t) { return new (t || ServiceWorkerModule)(); }, providers: [SwPush, SwUpdate] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ServiceWorkerModule, [{\n type: NgModule,\n args: [{\n providers: [SwPush, SwUpdate]\n }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/src/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/public_api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/service-worker/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ServiceWorkerModule, SwPush, SwRegistrationOptions, SwUpdate, NgswCommChannel as ɵangular_packages_service_worker_service_worker_a, SCRIPT as ɵangular_packages_service_worker_service_worker_b, ngswAppInitializer as ɵangular_packages_service_worker_service_worker_c, ngswCommChannelFactory as ɵangular_packages_service_worker_service_worker_d };\n\n//# sourceMappingURL=service-worker.js.map","import { Subject } from '../Subject';\nimport { multicast } from './multicast';\nexport function publish(selector) {\n return selector ?\n multicast(() => new Subject(), selector) :\n multicast(new Subject());\n}\n//# sourceMappingURL=publish.js.map","import {Injectable} from \"@angular/core\";\nimport {HttpClient, HttpParams, HttpHeaders} from \"@angular/common/http\";\nimport { ApiService } from './api.service';\nimport { environment } from '../../environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PushNotificationService {\n\n subscribeRoute = 'pushnotifications/subscribe';\n sendRoute = 'pushnotifications/send';\n\n apiUrl = environment.proxyServerUrl + '/proxy2.php';\n\n constructor(private apiService: ApiService, private http: HttpClient) {\n }\n\n /*addPushSubscriber(sub: any) {\n const requestHandler = this.apiService.get(this.subscribeRoute);\n let subsJsonString = JSON.stringify(sub);\n console.log(subsJsonString);\n let subsObj = JSON.parse(subsJsonString);\n console.log(subsObj);\n let params = { endpoint: subsObj.endpoint, expirationTime: subsObj.expirationTime, p256dh: subsObj.keys.p256dh, auth: subsObj.keys.auth };\n console.log(params);\n return requestHandler.sendRequest(this.subscribeRoute, params);\n } \n\n send() {\n const requestHandler = this.apiService.get(this.sendRoute);\n requestHandler.sendRequest(this.sendRoute);\n } */\n\n addPushSubscriber(sub:any) {\n const formData = new HttpParams({\n fromObject: {\n route: this.subscribeRoute,\n post: JSON.stringify(sub)\n }\n });\n const headers = new HttpHeaders().set('Content-Type', 'application/x-www-form-urlencoded');\n return this.http.post(this.apiUrl + '?route=' + this.subscribeRoute, formData, {headers: headers, withCredentials: true });\n }\n\n send() { \n return this.http.post(this.apiUrl + '?route=' + this.sendRoute, null);\n }\n \n}\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n * Constants\r\n */\r\nvar Constants = /** @class */ (function () {\r\n function Constants() {\r\n }\r\n Object.defineProperty(Constants, \"libraryName\", {\r\n get: function () { return \"Msal.js\"; } // used in telemetry sdkName\r\n ,\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"claims\", {\r\n get: function () { return \"claims\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"clientId\", {\r\n get: function () { return \"clientId\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"adalIdToken\", {\r\n get: function () { return \"adal.idtoken\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"cachePrefix\", {\r\n get: function () { return \"msal\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"scopes\", {\r\n get: function () { return \"scopes\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"no_account\", {\r\n get: function () { return \"NO_ACCOUNT\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"upn\", {\r\n get: function () { return \"upn\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"domain_hint\", {\r\n get: function () { return \"domain_hint\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"prompt_select_account\", {\r\n get: function () { return \"&prompt=select_account\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"prompt_none\", {\r\n get: function () { return \"&prompt=none\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"prompt\", {\r\n get: function () { return \"prompt\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"response_mode_fragment\", {\r\n get: function () { return \"&response_mode=fragment\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"resourceDelimiter\", {\r\n get: function () { return \"|\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"cacheDelimiter\", {\r\n get: function () { return \".\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"popUpWidth\", {\r\n get: function () { return this._popUpWidth; },\r\n set: function (width) {\r\n this._popUpWidth = width;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"popUpHeight\", {\r\n get: function () { return this._popUpHeight; },\r\n set: function (height) {\r\n this._popUpHeight = height;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"login\", {\r\n get: function () { return \"LOGIN\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"renewToken\", {\r\n get: function () { return \"RENEW_TOKEN\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"unknown\", {\r\n get: function () { return \"UNKNOWN\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"ADFS\", {\r\n get: function () { return \"adfs\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"homeAccountIdentifier\", {\r\n get: function () { return \"homeAccountIdentifier\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"common\", {\r\n get: function () { return \"common\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"openidScope\", {\r\n get: function () { return \"openid\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"profileScope\", {\r\n get: function () { return \"profile\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"oidcScopes\", {\r\n get: function () { return [this.openidScope, this.profileScope]; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"interactionTypeRedirect\", {\r\n get: function () { return \"redirectInteraction\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"interactionTypePopup\", {\r\n get: function () { return \"popupInteraction\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"interactionTypeSilent\", {\r\n get: function () { return \"silentInteraction\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Constants, \"inProgress\", {\r\n get: function () { return \"inProgress\"; },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Constants._popUpWidth = 483;\r\n Constants._popUpHeight = 600;\r\n return Constants;\r\n}());\r\nexport { Constants };\r\n/**\r\n * Keys in the hashParams\r\n */\r\nexport var ServerHashParamKeys;\r\n(function (ServerHashParamKeys) {\r\n ServerHashParamKeys[\"SCOPE\"] = \"scope\";\r\n ServerHashParamKeys[\"STATE\"] = \"state\";\r\n ServerHashParamKeys[\"ERROR\"] = \"error\";\r\n ServerHashParamKeys[\"ERROR_DESCRIPTION\"] = \"error_description\";\r\n ServerHashParamKeys[\"ACCESS_TOKEN\"] = \"access_token\";\r\n ServerHashParamKeys[\"ID_TOKEN\"] = \"id_token\";\r\n ServerHashParamKeys[\"EXPIRES_IN\"] = \"expires_in\";\r\n ServerHashParamKeys[\"SESSION_STATE\"] = \"session_state\";\r\n ServerHashParamKeys[\"CLIENT_INFO\"] = \"client_info\";\r\n})(ServerHashParamKeys || (ServerHashParamKeys = {}));\r\n/**\r\n * @hidden\r\n * @ignore\r\n * response_type from OpenIDConnect\r\n * References: https://openid.net/specs/oauth-v2-multiple-response-types-1_0.html & https://tools.ietf.org/html/rfc6749#section-4.2.1\r\n *\r\n */\r\nexport var ResponseTypes = {\r\n id_token: \"id_token\",\r\n token: \"token\",\r\n id_token_token: \"id_token token\"\r\n};\r\n/**\r\n * @hidden\r\n * CacheKeys for MSAL\r\n */\r\nexport var TemporaryCacheKeys;\r\n(function (TemporaryCacheKeys) {\r\n TemporaryCacheKeys[\"AUTHORITY\"] = \"authority\";\r\n TemporaryCacheKeys[\"ACQUIRE_TOKEN_ACCOUNT\"] = \"acquireTokenAccount\";\r\n TemporaryCacheKeys[\"SESSION_STATE\"] = \"session.state\";\r\n TemporaryCacheKeys[\"STATE_LOGIN\"] = \"state.login\";\r\n TemporaryCacheKeys[\"STATE_ACQ_TOKEN\"] = \"state.acquireToken\";\r\n TemporaryCacheKeys[\"STATE_RENEW\"] = \"state.renew\";\r\n TemporaryCacheKeys[\"NONCE_IDTOKEN\"] = \"nonce.idtoken\";\r\n TemporaryCacheKeys[\"LOGIN_REQUEST\"] = \"login.request\";\r\n TemporaryCacheKeys[\"RENEW_STATUS\"] = \"token.renew.status\";\r\n TemporaryCacheKeys[\"URL_HASH\"] = \"urlHash\";\r\n TemporaryCacheKeys[\"INTERACTION_STATUS\"] = \"interaction_status\";\r\n TemporaryCacheKeys[\"REDIRECT_REQUEST\"] = \"redirect_request\";\r\n})(TemporaryCacheKeys || (TemporaryCacheKeys = {}));\r\nexport var PersistentCacheKeys;\r\n(function (PersistentCacheKeys) {\r\n PersistentCacheKeys[\"IDTOKEN\"] = \"idtoken\";\r\n PersistentCacheKeys[\"CLIENT_INFO\"] = \"client.info\";\r\n})(PersistentCacheKeys || (PersistentCacheKeys = {}));\r\nexport var ErrorCacheKeys;\r\n(function (ErrorCacheKeys) {\r\n ErrorCacheKeys[\"LOGIN_ERROR\"] = \"login.error\";\r\n ErrorCacheKeys[\"ERROR\"] = \"error\";\r\n ErrorCacheKeys[\"ERROR_DESC\"] = \"error.description\";\r\n})(ErrorCacheKeys || (ErrorCacheKeys = {}));\r\nexport var DEFAULT_AUTHORITY = \"https://login.microsoftonline.com/common/\";\r\nexport var AAD_INSTANCE_DISCOVERY_ENDPOINT = DEFAULT_AUTHORITY + \"/discovery/instance?api-version=1.1&authorization_endpoint=\";\r\nexport var WELL_KNOWN_SUFFIX = \".well-known/openid-configuration\";\r\n/**\r\n * @hidden\r\n * SSO Types - generated to populate hints\r\n */\r\nexport var SSOTypes;\r\n(function (SSOTypes) {\r\n SSOTypes[\"ACCOUNT\"] = \"account\";\r\n SSOTypes[\"SID\"] = \"sid\";\r\n SSOTypes[\"LOGIN_HINT\"] = \"login_hint\";\r\n SSOTypes[\"ORGANIZATIONS\"] = \"organizations\";\r\n SSOTypes[\"CONSUMERS\"] = \"consumers\";\r\n SSOTypes[\"ID_TOKEN\"] = \"id_token\";\r\n SSOTypes[\"ACCOUNT_ID\"] = \"accountIdentifier\";\r\n SSOTypes[\"HOMEACCOUNT_ID\"] = \"homeAccountIdentifier\";\r\n})(SSOTypes || (SSOTypes = {}));\r\n/**\r\n * @hidden\r\n */\r\nexport var BlacklistedEQParams = [\r\n SSOTypes.SID,\r\n SSOTypes.LOGIN_HINT\r\n];\r\nexport var NetworkRequestType = {\r\n GET: \"GET\",\r\n POST: \"POST\"\r\n};\r\n/**\r\n * we considered making this \"enum\" in the request instead of string, however it looks like the allowed list of\r\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\r\n * internal partners too, hence the choice of generic \"string\" type instead of the \"enum\"\r\n * @hidden\r\n */\r\nexport var PromptState = {\r\n LOGIN: \"login\",\r\n SELECT_ACCOUNT: \"select_account\",\r\n CONSENT: \"consent\",\r\n NONE: \"none\"\r\n};\r\n/**\r\n * Frame name prefixes for the hidden iframe created in silent frames\r\n */\r\nexport var FramePrefix = {\r\n ID_TOKEN_FRAME: \"msalIdTokenFrame\",\r\n TOKEN_FRAME: \"msalRenewFrame\"\r\n};\r\n//# sourceMappingURL=Constants.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar CryptoUtils = /** @class */ (function () {\r\n function CryptoUtils() {\r\n }\r\n /**\r\n * Creates a new random GUID\r\n * @returns string (GUID)\r\n */\r\n CryptoUtils.createNewGuid = function () {\r\n /*\r\n * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or\r\n * pseudo-random numbers.\r\n * The algorithm is as follows:\r\n * Set the two most significant bits (bits 6 and 7) of the\r\n * clock_seq_hi_and_reserved to zero and one, respectively.\r\n * Set the four most significant bits (bits 12 through 15) of the\r\n * time_hi_and_version field to the 4-bit version number from\r\n * Section 4.1.3. Version4\r\n * Set all the other bits to randomly (or pseudo-randomly) chosen\r\n * values.\r\n * UUID = time-low \"-\" time-mid \"-\"time-high-and-version \"-\"clock-seq-reserved and low(2hexOctet)\"-\" node\r\n * time-low = 4hexOctet\r\n * time-mid = 2hexOctet\r\n * time-high-and-version = 2hexOctet\r\n * clock-seq-and-reserved = hexOctet:\r\n * clock-seq-low = hexOctet\r\n * node = 6hexOctet\r\n * Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\r\n * y could be 1000, 1001, 1010, 1011 since most significant two bits needs to be 10\r\n * y values are 8, 9, A, B\r\n */\r\n var cryptoObj = window.crypto; // for IE 11\r\n if (cryptoObj && cryptoObj.getRandomValues) {\r\n var buffer = new Uint8Array(16);\r\n cryptoObj.getRandomValues(buffer);\r\n // buffer[6] and buffer[7] represents the time_hi_and_version field. We will set the four most significant bits (4 through 7) of buffer[6] to represent decimal number 4 (UUID version number).\r\n buffer[6] |= 0x40; // buffer[6] | 01000000 will set the 6 bit to 1.\r\n buffer[6] &= 0x4f; // buffer[6] & 01001111 will set the 4, 5, and 7 bit to 0 such that bits 4-7 == 0100 = \"4\".\r\n // buffer[8] represents the clock_seq_hi_and_reserved field. We will set the two most significant bits (6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively.\r\n buffer[8] |= 0x80; // buffer[8] | 10000000 will set the 7 bit to 1.\r\n buffer[8] &= 0xbf; // buffer[8] & 10111111 will set the 6 bit to 0.\r\n return CryptoUtils.decimalToHex(buffer[0]) + CryptoUtils.decimalToHex(buffer[1])\r\n + CryptoUtils.decimalToHex(buffer[2]) + CryptoUtils.decimalToHex(buffer[3])\r\n + \"-\" + CryptoUtils.decimalToHex(buffer[4]) + CryptoUtils.decimalToHex(buffer[5])\r\n + \"-\" + CryptoUtils.decimalToHex(buffer[6]) + CryptoUtils.decimalToHex(buffer[7])\r\n + \"-\" + CryptoUtils.decimalToHex(buffer[8]) + CryptoUtils.decimalToHex(buffer[9])\r\n + \"-\" + CryptoUtils.decimalToHex(buffer[10]) + CryptoUtils.decimalToHex(buffer[11])\r\n + CryptoUtils.decimalToHex(buffer[12]) + CryptoUtils.decimalToHex(buffer[13])\r\n + CryptoUtils.decimalToHex(buffer[14]) + CryptoUtils.decimalToHex(buffer[15]);\r\n }\r\n else {\r\n var guidHolder = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\r\n var hex = \"0123456789abcdef\";\r\n var r = 0;\r\n var guidResponse = \"\";\r\n for (var i = 0; i < 36; i++) {\r\n if (guidHolder[i] !== \"-\" && guidHolder[i] !== \"4\") {\r\n // each x and y needs to be random\r\n r = Math.random() * 16 | 0;\r\n }\r\n if (guidHolder[i] === \"x\") {\r\n guidResponse += hex[r];\r\n }\r\n else if (guidHolder[i] === \"y\") {\r\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\r\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\r\n r |= 0x8; // set pos 3 to 1 as 1???\r\n guidResponse += hex[r];\r\n }\r\n else {\r\n guidResponse += guidHolder[i];\r\n }\r\n }\r\n return guidResponse;\r\n }\r\n };\r\n /**\r\n * verifies if a string is GUID\r\n * @param guid\r\n */\r\n CryptoUtils.isGuid = function (guid) {\r\n var regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n return regexGuid.test(guid);\r\n };\r\n /**\r\n * Decimal to Hex\r\n *\r\n * @param num\r\n */\r\n CryptoUtils.decimalToHex = function (num) {\r\n var hex = num.toString(16);\r\n while (hex.length < 2) {\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n };\r\n // See: https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_4_%E2%80%93_escaping_the_string_before_encoding_it\r\n /**\r\n * encoding string to base64 - platform specific check\r\n *\r\n * @param input\r\n */\r\n CryptoUtils.base64Encode = function (input) {\r\n return btoa(encodeURIComponent(input).replace(/%([0-9A-F]{2})/g, function toSolidBytes(match, p1) {\r\n return String.fromCharCode(Number(\"0x\" + p1));\r\n }));\r\n };\r\n /**\r\n * Decodes a base64 encoded string.\r\n *\r\n * @param input\r\n */\r\n CryptoUtils.base64Decode = function (input) {\r\n var encodedString = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n switch (encodedString.length % 4) {\r\n case 0:\r\n break;\r\n case 2:\r\n encodedString += \"==\";\r\n break;\r\n case 3:\r\n encodedString += \"=\";\r\n break;\r\n default:\r\n throw new Error(\"Invalid base64 string\");\r\n }\r\n return decodeURIComponent(atob(encodedString).split(\"\").map(function (c) {\r\n return \"%\" + (\"00\" + c.charCodeAt(0).toString(16)).slice(-2);\r\n }).join(\"\"));\r\n };\r\n /**\r\n * deserialize a string\r\n *\r\n * @param query\r\n */\r\n CryptoUtils.deserialize = function (query) {\r\n var match; // Regex for replacing addition symbol with a space\r\n var pl = /\\+/g;\r\n var search = /([^&=]+)=([^&]*)/g;\r\n var decode = function (s) { return decodeURIComponent(s.replace(pl, \" \")); };\r\n var obj = {};\r\n match = search.exec(query);\r\n while (match) {\r\n obj[decode(match[1])] = decode(match[2]);\r\n match = search.exec(query);\r\n }\r\n return obj;\r\n };\r\n return CryptoUtils;\r\n}());\r\nexport { CryptoUtils };\r\n//# sourceMappingURL=CryptoUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { ClientConfigurationErrorMessage, ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { XhrClient } from \"../XHRClient\";\r\nimport { UrlUtils } from \"../utils/UrlUtils\";\r\nimport { TrustedAuthority } from \"./TrustedAuthority\";\r\nimport { NetworkRequestType, Constants, WELL_KNOWN_SUFFIX } from \"../utils/Constants\";\r\n/**\r\n * @hidden\r\n */\r\nexport var AuthorityType;\r\n(function (AuthorityType) {\r\n AuthorityType[AuthorityType[\"Default\"] = 0] = \"Default\";\r\n AuthorityType[AuthorityType[\"Adfs\"] = 1] = \"Adfs\";\r\n})(AuthorityType || (AuthorityType = {}));\r\n/**\r\n * @hidden\r\n */\r\nvar Authority = /** @class */ (function () {\r\n function Authority(authority, validateAuthority, authorityMetadata) {\r\n this.IsValidationEnabled = validateAuthority;\r\n this.CanonicalAuthority = authority;\r\n this.validateAsUri();\r\n this.tenantDiscoveryResponse = authorityMetadata;\r\n }\r\n Authority.isAdfs = function (authorityUrl) {\r\n var components = UrlUtils.GetUrlComponents(authorityUrl);\r\n var pathSegments = components.PathSegments;\r\n return (pathSegments.length && pathSegments[0].toLowerCase() === Constants.ADFS);\r\n };\r\n Object.defineProperty(Authority.prototype, \"AuthorityType\", {\r\n get: function () {\r\n return Authority.isAdfs(this.canonicalAuthority) ? AuthorityType.Adfs : AuthorityType.Default;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"Tenant\", {\r\n get: function () {\r\n return this.CanonicalAuthorityUrlComponents.PathSegments[0];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"AuthorizationEndpoint\", {\r\n get: function () {\r\n this.validateResolved();\r\n return this.tenantDiscoveryResponse.AuthorizationEndpoint.replace(/{tenant}|{tenantid}/g, this.Tenant);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"EndSessionEndpoint\", {\r\n get: function () {\r\n this.validateResolved();\r\n return this.tenantDiscoveryResponse.EndSessionEndpoint.replace(/{tenant}|{tenantid}/g, this.Tenant);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"SelfSignedJwtAudience\", {\r\n get: function () {\r\n this.validateResolved();\r\n return this.tenantDiscoveryResponse.Issuer.replace(/{tenant}|{tenantid}/g, this.Tenant);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Authority.prototype.validateResolved = function () {\r\n if (!this.hasCachedMetadata()) {\r\n throw \"Please call ResolveEndpointsAsync first\";\r\n }\r\n };\r\n Object.defineProperty(Authority.prototype, \"CanonicalAuthority\", {\r\n /**\r\n * A URL that is the authority set by the developer\r\n */\r\n get: function () {\r\n return this.canonicalAuthority;\r\n },\r\n set: function (url) {\r\n this.canonicalAuthority = UrlUtils.CanonicalizeUri(url);\r\n this.canonicalAuthorityUrlComponents = null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"CanonicalAuthorityUrlComponents\", {\r\n get: function () {\r\n if (!this.canonicalAuthorityUrlComponents) {\r\n this.canonicalAuthorityUrlComponents = UrlUtils.GetUrlComponents(this.CanonicalAuthority);\r\n }\r\n return this.canonicalAuthorityUrlComponents;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Authority.prototype, \"DefaultOpenIdConfigurationEndpoint\", {\r\n // http://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata\r\n get: function () {\r\n return (this.AuthorityType === AuthorityType.Adfs) ? \"\" + this.CanonicalAuthority + WELL_KNOWN_SUFFIX : this.CanonicalAuthority + \"v2.0/\" + WELL_KNOWN_SUFFIX;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Given a string, validate that it is of the form https://domain/path\r\n */\r\n Authority.prototype.validateAsUri = function () {\r\n var components;\r\n try {\r\n components = this.CanonicalAuthorityUrlComponents;\r\n }\r\n catch (e) {\r\n throw ClientConfigurationErrorMessage.invalidAuthorityType;\r\n }\r\n if (!components.Protocol || components.Protocol.toLowerCase() !== \"https:\") {\r\n throw ClientConfigurationErrorMessage.authorityUriInsecure;\r\n }\r\n if (!components.PathSegments || components.PathSegments.length < 1) {\r\n throw ClientConfigurationErrorMessage.authorityUriInvalidPath;\r\n }\r\n };\r\n /**\r\n * Calls the OIDC endpoint and returns the response\r\n */\r\n Authority.prototype.DiscoverEndpoints = function (openIdConfigurationEndpoint, telemetryManager, correlationId) {\r\n var client = new XhrClient();\r\n var httpMethod = NetworkRequestType.GET;\r\n var httpEvent = telemetryManager.createAndStartHttpEvent(correlationId, httpMethod, openIdConfigurationEndpoint, \"openIdConfigurationEndpoint\");\r\n return client.sendRequestAsync(openIdConfigurationEndpoint, httpMethod, /* enableCaching: */ true)\r\n .then(function (response) {\r\n httpEvent.httpResponseStatus = response.statusCode;\r\n telemetryManager.stopEvent(httpEvent);\r\n return {\r\n AuthorizationEndpoint: response.body[\"authorization_endpoint\"],\r\n EndSessionEndpoint: response.body[\"end_session_endpoint\"],\r\n Issuer: response.body[\"issuer\"]\r\n };\r\n })\r\n .catch(function (err) {\r\n httpEvent.serverErrorCode = err;\r\n telemetryManager.stopEvent(httpEvent);\r\n throw err;\r\n });\r\n };\r\n /**\r\n * Returns a promise.\r\n * Checks to see if the authority is in the cache\r\n * Discover endpoints via openid-configuration\r\n * If successful, caches the endpoint for later use in OIDC\r\n */\r\n Authority.prototype.resolveEndpointsAsync = function (telemetryManager, correlationId) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var host, openIdConfigurationEndpointResponse, _a;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n if (!this.IsValidationEnabled) return [3 /*break*/, 3];\r\n host = this.canonicalAuthorityUrlComponents.HostNameAndPort;\r\n if (!(TrustedAuthority.getTrustedHostList().length === 0)) return [3 /*break*/, 2];\r\n return [4 /*yield*/, TrustedAuthority.setTrustedAuthoritiesFromNetwork(this.canonicalAuthority, telemetryManager, correlationId)];\r\n case 1:\r\n _b.sent();\r\n _b.label = 2;\r\n case 2:\r\n if (!TrustedAuthority.IsInTrustedHostList(host)) {\r\n throw ClientConfigurationError.createUntrustedAuthorityError(host);\r\n }\r\n _b.label = 3;\r\n case 3:\r\n openIdConfigurationEndpointResponse = this.GetOpenIdConfigurationEndpoint();\r\n _a = this;\r\n return [4 /*yield*/, this.DiscoverEndpoints(openIdConfigurationEndpointResponse, telemetryManager, correlationId)];\r\n case 4:\r\n _a.tenantDiscoveryResponse = _b.sent();\r\n return [2 /*return*/, this.tenantDiscoveryResponse];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Checks if there is a cached tenant discovery response with required fields.\r\n */\r\n Authority.prototype.hasCachedMetadata = function () {\r\n return !!(this.tenantDiscoveryResponse &&\r\n this.tenantDiscoveryResponse.AuthorizationEndpoint &&\r\n this.tenantDiscoveryResponse.EndSessionEndpoint &&\r\n this.tenantDiscoveryResponse.Issuer);\r\n };\r\n /**\r\n * Returns a promise which resolves to the OIDC endpoint\r\n * Only responds with the endpoint\r\n */\r\n Authority.prototype.GetOpenIdConfigurationEndpoint = function () {\r\n return this.DefaultOpenIdConfigurationEndpoint;\r\n };\r\n return Authority;\r\n}());\r\nexport { Authority };\r\n//# sourceMappingURL=Authority.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nexport var AuthErrorMessage = {\r\n unexpectedError: {\r\n code: \"unexpected_error\",\r\n desc: \"Unexpected error in authentication.\"\r\n },\r\n noWindowObjectError: {\r\n code: \"no_window_object\",\r\n desc: \"No window object available. Details:\"\r\n }\r\n};\r\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\r\nvar AuthError = /** @class */ (function (_super) {\r\n tslib_1.__extends(AuthError, _super);\r\n function AuthError(errorCode, errorMessage) {\r\n var _this = _super.call(this, errorMessage) || this;\r\n Object.setPrototypeOf(_this, AuthError.prototype);\r\n _this.errorCode = errorCode;\r\n _this.errorMessage = errorMessage;\r\n _this.name = \"AuthError\";\r\n return _this;\r\n }\r\n AuthError.createUnexpectedError = function (errDesc) {\r\n return new AuthError(AuthErrorMessage.unexpectedError.code, AuthErrorMessage.unexpectedError.desc + \": \" + errDesc);\r\n };\r\n AuthError.createNoWindowObjectError = function (errDesc) {\r\n return new AuthError(AuthErrorMessage.noWindowObjectError.code, AuthErrorMessage.noWindowObjectError.desc + \" \" + errDesc);\r\n };\r\n return AuthError;\r\n}(Error));\r\nexport { AuthError };\r\n//# sourceMappingURL=AuthError.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar StringUtils = /** @class */ (function () {\r\n function StringUtils() {\r\n }\r\n /**\r\n * Check if a string is empty\r\n *\r\n * @param str\r\n */\r\n StringUtils.isEmpty = function (str) {\r\n return (typeof str === \"undefined\" || !str || 0 === str.length);\r\n };\r\n /**\r\n * Check if a string's value is a valid JSON object\r\n *\r\n * @param str\r\n */\r\n StringUtils.validateAndParseJsonCacheKey = function (str) {\r\n try {\r\n var parsedKey = JSON.parse(str);\r\n /**\r\n * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\r\n * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\r\n * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\r\n *\r\n */\r\n return (parsedKey && typeof parsedKey === \"object\") ? parsedKey : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n };\r\n return StringUtils;\r\n}());\r\nexport { StringUtils };\r\n//# sourceMappingURL=StringUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { AuthError } from \"./AuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nexport var ClientAuthErrorMessage = {\r\n endpointResolutionError: {\r\n code: \"endpoints_resolution_error\",\r\n desc: \"Error: could not resolve endpoints. Please check network and try again.\"\r\n },\r\n popUpWindowError: {\r\n code: \"popup_window_error\",\r\n desc: \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\"\r\n },\r\n tokenRenewalError: {\r\n code: \"token_renewal_error\",\r\n desc: \"Token renewal operation failed due to timeout.\"\r\n },\r\n invalidIdToken: {\r\n code: \"invalid_id_token\",\r\n desc: \"Invalid ID token format.\"\r\n },\r\n invalidStateError: {\r\n code: \"invalid_state_error\",\r\n desc: \"Invalid state.\"\r\n },\r\n nonceMismatchError: {\r\n code: \"nonce_mismatch_error\",\r\n desc: \"Nonce is not matching, Nonce received: \"\r\n },\r\n loginProgressError: {\r\n code: \"login_progress_error\",\r\n desc: \"Login_In_Progress: Error during login call - login is already in progress.\"\r\n },\r\n acquireTokenProgressError: {\r\n code: \"acquiretoken_progress_error\",\r\n desc: \"AcquireToken_In_Progress: Error during login call - login is already in progress.\"\r\n },\r\n userCancelledError: {\r\n code: \"user_cancelled\",\r\n desc: \"User cancelled the flow.\"\r\n },\r\n callbackError: {\r\n code: \"callback_error\",\r\n desc: \"Error occurred in token received callback function.\"\r\n },\r\n userLoginRequiredError: {\r\n code: \"user_login_error\",\r\n desc: \"User login is required. For silent calls, request must contain either sid or login_hint\"\r\n },\r\n userDoesNotExistError: {\r\n code: \"user_non_existent\",\r\n desc: \"User object does not exist. Please call a login API.\"\r\n },\r\n clientInfoDecodingError: {\r\n code: \"client_info_decoding_error\",\r\n desc: \"The client info could not be parsed/decoded correctly. Please review the trace to determine the root cause.\"\r\n },\r\n clientInfoNotPopulatedError: {\r\n code: \"client_info_not_populated_error\",\r\n desc: \"The service did not populate client_info in the response, Please verify with the service team\"\r\n },\r\n nullOrEmptyIdToken: {\r\n code: \"null_or_empty_id_token\",\r\n desc: \"The idToken is null or empty. Please review the trace to determine the root cause.\"\r\n },\r\n idTokenNotParsed: {\r\n code: \"id_token_parsing_error\",\r\n desc: \"ID token cannot be parsed. Please review stack trace to determine root cause.\"\r\n },\r\n tokenEncodingError: {\r\n code: \"token_encoding_error\",\r\n desc: \"The token to be decoded is not encoded correctly.\"\r\n },\r\n invalidInteractionType: {\r\n code: \"invalid_interaction_type\",\r\n desc: \"The interaction type passed to the handler was incorrect or unknown\"\r\n },\r\n cacheParseError: {\r\n code: \"cannot_parse_cache\",\r\n desc: \"The cached token key is not a valid JSON and cannot be parsed\"\r\n },\r\n blockTokenRequestsInHiddenIframe: {\r\n code: \"block_token_requests\",\r\n desc: \"Token calls are blocked in hidden iframes\"\r\n }\r\n};\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nvar ClientAuthError = /** @class */ (function (_super) {\r\n tslib_1.__extends(ClientAuthError, _super);\r\n function ClientAuthError(errorCode, errorMessage) {\r\n var _this = _super.call(this, errorCode, errorMessage) || this;\r\n _this.name = \"ClientAuthError\";\r\n Object.setPrototypeOf(_this, ClientAuthError.prototype);\r\n return _this;\r\n }\r\n ClientAuthError.createEndpointResolutionError = function (errDetail) {\r\n var errorMessage = ClientAuthErrorMessage.endpointResolutionError.desc;\r\n if (errDetail && !StringUtils.isEmpty(errDetail)) {\r\n errorMessage += \" Details: \" + errDetail;\r\n }\r\n return new ClientAuthError(ClientAuthErrorMessage.endpointResolutionError.code, errorMessage);\r\n };\r\n ClientAuthError.createPopupWindowError = function (errDetail) {\r\n var errorMessage = ClientAuthErrorMessage.popUpWindowError.desc;\r\n if (errDetail && !StringUtils.isEmpty(errDetail)) {\r\n errorMessage += \" Details: \" + errDetail;\r\n }\r\n return new ClientAuthError(ClientAuthErrorMessage.popUpWindowError.code, errorMessage);\r\n };\r\n ClientAuthError.createTokenRenewalTimeoutError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenRenewalError.code, ClientAuthErrorMessage.tokenRenewalError.desc);\r\n };\r\n ClientAuthError.createInvalidIdTokenError = function (idToken) {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidIdToken.code, ClientAuthErrorMessage.invalidIdToken.desc + \" Given token: \" + idToken);\r\n };\r\n // TODO: Is this not a security flaw to send the user the state expected??\r\n ClientAuthError.createInvalidStateError = function (invalidState, actualState) {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidStateError.code, ClientAuthErrorMessage.invalidStateError.desc + \" \" + invalidState + \", state expected : \" + actualState + \".\");\r\n };\r\n // TODO: Is this not a security flaw to send the user the Nonce expected??\r\n ClientAuthError.createNonceMismatchError = function (invalidNonce, actualNonce) {\r\n return new ClientAuthError(ClientAuthErrorMessage.nonceMismatchError.code, ClientAuthErrorMessage.nonceMismatchError.desc + \" \" + invalidNonce + \", nonce expected : \" + actualNonce + \".\");\r\n };\r\n ClientAuthError.createLoginInProgressError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.loginProgressError.code, ClientAuthErrorMessage.loginProgressError.desc);\r\n };\r\n ClientAuthError.createAcquireTokenInProgressError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.acquireTokenProgressError.code, ClientAuthErrorMessage.acquireTokenProgressError.desc);\r\n };\r\n ClientAuthError.createUserCancelledError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.userCancelledError.code, ClientAuthErrorMessage.userCancelledError.desc);\r\n };\r\n ClientAuthError.createErrorInCallbackFunction = function (errorDesc) {\r\n return new ClientAuthError(ClientAuthErrorMessage.callbackError.code, ClientAuthErrorMessage.callbackError.desc + \" \" + errorDesc + \".\");\r\n };\r\n ClientAuthError.createUserLoginRequiredError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.userLoginRequiredError.code, ClientAuthErrorMessage.userLoginRequiredError.desc);\r\n };\r\n ClientAuthError.createUserDoesNotExistError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.userDoesNotExistError.code, ClientAuthErrorMessage.userDoesNotExistError.desc);\r\n };\r\n ClientAuthError.createClientInfoDecodingError = function (caughtError) {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoDecodingError.code, ClientAuthErrorMessage.clientInfoDecodingError.desc + \" Failed with error: \" + caughtError);\r\n };\r\n ClientAuthError.createClientInfoNotPopulatedError = function (caughtError) {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoNotPopulatedError.code, ClientAuthErrorMessage.clientInfoNotPopulatedError.desc + \" Failed with error: \" + caughtError);\r\n };\r\n ClientAuthError.createIdTokenNullOrEmptyError = function (invalidRawTokenString) {\r\n return new ClientAuthError(ClientAuthErrorMessage.nullOrEmptyIdToken.code, ClientAuthErrorMessage.nullOrEmptyIdToken.desc + \" Raw ID Token Value: \" + invalidRawTokenString);\r\n };\r\n ClientAuthError.createIdTokenParsingError = function (caughtParsingError) {\r\n return new ClientAuthError(ClientAuthErrorMessage.idTokenNotParsed.code, ClientAuthErrorMessage.idTokenNotParsed.desc + \" Failed with error: \" + caughtParsingError);\r\n };\r\n ClientAuthError.createTokenEncodingError = function (incorrectlyEncodedToken) {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenEncodingError.code, ClientAuthErrorMessage.tokenEncodingError.desc + \" Attempted to decode: \" + incorrectlyEncodedToken);\r\n };\r\n ClientAuthError.createInvalidInteractionTypeError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidInteractionType.code, ClientAuthErrorMessage.invalidInteractionType.desc);\r\n };\r\n ClientAuthError.createCacheParseError = function (key) {\r\n var errorMessage = \"invalid key: \" + key + \", \" + ClientAuthErrorMessage.cacheParseError.desc;\r\n return new ClientAuthError(ClientAuthErrorMessage.cacheParseError.code, errorMessage);\r\n };\r\n ClientAuthError.createBlockTokenRequestsInHiddenIframeError = function () {\r\n return new ClientAuthError(ClientAuthErrorMessage.blockTokenRequestsInHiddenIframe.code, ClientAuthErrorMessage.blockTokenRequestsInHiddenIframe.desc);\r\n };\r\n return ClientAuthError;\r\n}(AuthError));\r\nexport { ClientAuthError };\r\n//# sourceMappingURL=ClientAuthError.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { ClientAuthError } from \"./ClientAuthError\";\r\nexport var ClientConfigurationErrorMessage = {\r\n configurationNotSet: {\r\n code: \"no_config_set\",\r\n desc: \"Configuration has not been set. Please call the UserAgentApplication constructor with a valid Configuration object.\"\r\n },\r\n storageNotSupported: {\r\n code: \"storage_not_supported\",\r\n desc: \"The value for the cacheLocation is not supported.\"\r\n },\r\n noRedirectCallbacksSet: {\r\n code: \"no_redirect_callbacks\",\r\n desc: \"No redirect callbacks have been set. Please call handleRedirectCallback() with the appropriate function arguments before continuing. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n invalidCallbackObject: {\r\n code: \"invalid_callback_object\",\r\n desc: \"The object passed for the callback was invalid. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n scopesRequired: {\r\n code: \"scopes_required\",\r\n desc: \"Scopes are required to obtain an access token.\"\r\n },\r\n emptyScopes: {\r\n code: \"empty_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as empty array.\"\r\n },\r\n nonArrayScopes: {\r\n code: \"nonarray_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as non-array.\"\r\n },\r\n invalidPrompt: {\r\n code: \"invalid_prompt_value\",\r\n desc: \"Supported prompt values are 'login', 'select_account', 'consent' and 'none'\",\r\n },\r\n invalidAuthorityType: {\r\n code: \"invalid_authority_type\",\r\n desc: \"The given authority is not a valid type of authority supported by MSAL. Please see here for valid authorities: .\"\r\n },\r\n authorityUriInsecure: {\r\n code: \"authority_uri_insecure\",\r\n desc: \"Authority URIs must use https.\"\r\n },\r\n authorityUriInvalidPath: {\r\n code: \"authority_uri_invalid_path\",\r\n desc: \"Given authority URI is invalid.\"\r\n },\r\n unsupportedAuthorityValidation: {\r\n code: \"unsupported_authority_validation\",\r\n desc: \"The authority validation is not supported for this authority type.\"\r\n },\r\n untrustedAuthority: {\r\n code: \"untrusted_authority\",\r\n desc: \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter or set validateAuthority=false.\"\r\n },\r\n b2cAuthorityUriInvalidPath: {\r\n code: \"b2c_authority_uri_invalid_path\",\r\n desc: \"The given URI for the B2C authority is invalid.\"\r\n },\r\n b2cKnownAuthoritiesNotSet: {\r\n code: \"b2c_known_authorities_not_set\",\r\n desc: \"Must set known authorities when validateAuthority is set to True and using B2C\"\r\n },\r\n claimsRequestParsingError: {\r\n code: \"claims_request_parsing_error\",\r\n desc: \"Could not parse the given claims request object.\"\r\n },\r\n emptyRequestError: {\r\n code: \"empty_request_error\",\r\n desc: \"Request object is required.\"\r\n },\r\n invalidCorrelationIdError: {\r\n code: \"invalid_guid_sent_as_correlationId\",\r\n desc: \"Please set the correlationId as a valid guid\"\r\n },\r\n telemetryConfigError: {\r\n code: \"telemetry_config_error\",\r\n desc: \"Telemetry config is not configured with required values\"\r\n },\r\n ssoSilentError: {\r\n code: \"sso_silent_error\",\r\n desc: \"request must contain either sid or login_hint\"\r\n },\r\n invalidAuthorityMetadataError: {\r\n code: \"authority_metadata_error\",\r\n desc: \"Invalid authorityMetadata. Must be a JSON object containing authorization_endpoint, end_session_endpoint, and issuer fields.\"\r\n }\r\n};\r\n/**\r\n * Error thrown when there is an error in configuration of the .js library.\r\n */\r\nvar ClientConfigurationError = /** @class */ (function (_super) {\r\n tslib_1.__extends(ClientConfigurationError, _super);\r\n function ClientConfigurationError(errorCode, errorMessage) {\r\n var _this = _super.call(this, errorCode, errorMessage) || this;\r\n _this.name = \"ClientConfigurationError\";\r\n Object.setPrototypeOf(_this, ClientConfigurationError.prototype);\r\n return _this;\r\n }\r\n ClientConfigurationError.createNoSetConfigurationError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.configurationNotSet.code, \"\" + ClientConfigurationErrorMessage.configurationNotSet.desc);\r\n };\r\n ClientConfigurationError.createStorageNotSupportedError = function (givenCacheLocation) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.storageNotSupported.code, ClientConfigurationErrorMessage.storageNotSupported.desc + \" Given location: \" + givenCacheLocation);\r\n };\r\n ClientConfigurationError.createRedirectCallbacksNotSetError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.noRedirectCallbacksSet.code, ClientConfigurationErrorMessage.noRedirectCallbacksSet.desc);\r\n };\r\n ClientConfigurationError.createInvalidCallbackObjectError = function (callbackObject) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCallbackObject.code, ClientConfigurationErrorMessage.invalidCallbackObject.desc + \" Given value for callback function: \" + callbackObject);\r\n };\r\n ClientConfigurationError.createEmptyScopesArrayError = function (scopesValue) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.emptyScopes.code, ClientConfigurationErrorMessage.emptyScopes.desc + \" Given value: \" + scopesValue + \".\");\r\n };\r\n ClientConfigurationError.createScopesNonArrayError = function (scopesValue) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.nonArrayScopes.code, ClientConfigurationErrorMessage.nonArrayScopes.desc + \" Given value: \" + scopesValue + \".\");\r\n };\r\n ClientConfigurationError.createScopesRequiredError = function (scopesValue) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.scopesRequired.code, ClientConfigurationErrorMessage.scopesRequired.desc + \" Given value: \" + scopesValue);\r\n };\r\n ClientConfigurationError.createInvalidPromptError = function (promptValue) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidPrompt.code, ClientConfigurationErrorMessage.invalidPrompt.desc + \" Given value: \" + promptValue);\r\n };\r\n ClientConfigurationError.createClaimsRequestParsingError = function (claimsRequestParseError) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.claimsRequestParsingError.code, ClientConfigurationErrorMessage.claimsRequestParsingError.desc + \" Given value: \" + claimsRequestParseError);\r\n };\r\n ClientConfigurationError.createEmptyRequestError = function () {\r\n var _a = ClientConfigurationErrorMessage.emptyRequestError, code = _a.code, desc = _a.desc;\r\n return new ClientConfigurationError(code, desc);\r\n };\r\n ClientConfigurationError.createInvalidCorrelationIdError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCorrelationIdError.code, ClientConfigurationErrorMessage.invalidCorrelationIdError.desc);\r\n };\r\n ClientConfigurationError.createKnownAuthoritiesNotSetError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.b2cKnownAuthoritiesNotSet.code, ClientConfigurationErrorMessage.b2cKnownAuthoritiesNotSet.desc);\r\n };\r\n ClientConfigurationError.createInvalidAuthorityTypeError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthorityType.code, ClientConfigurationErrorMessage.invalidAuthorityType.desc);\r\n };\r\n ClientConfigurationError.createUntrustedAuthorityError = function (host) {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.untrustedAuthority.code, ClientConfigurationErrorMessage.untrustedAuthority.desc + \" Provided Authority: \" + host);\r\n };\r\n ClientConfigurationError.createTelemetryConfigError = function (config) {\r\n var _a = ClientConfigurationErrorMessage.telemetryConfigError, code = _a.code, desc = _a.desc;\r\n var requiredKeys = {\r\n applicationName: \"string\",\r\n applicationVersion: \"string\",\r\n telemetryEmitter: \"function\"\r\n };\r\n var missingKeys = Object.keys(requiredKeys)\r\n .reduce(function (keys, key) {\r\n return config[key] ? keys : keys.concat([key + \" (\" + requiredKeys[key] + \")\"]);\r\n }, []);\r\n return new ClientConfigurationError(code, desc + \" mising values: \" + missingKeys.join(\",\"));\r\n };\r\n ClientConfigurationError.createSsoSilentError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.ssoSilentError.code, ClientConfigurationErrorMessage.ssoSilentError.desc);\r\n };\r\n ClientConfigurationError.createInvalidAuthorityMetadataError = function () {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthorityMetadataError.code, ClientConfigurationErrorMessage.invalidAuthorityMetadataError.desc);\r\n };\r\n return ClientConfigurationError;\r\n}(ClientAuthError));\r\nexport { ClientConfigurationError };\r\n//# sourceMappingURL=ClientConfigurationError.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { ClientConfigurationError } from \"./error/ClientConfigurationError\";\r\nimport { Constants } from \"./utils/Constants\";\r\nvar ScopeSet = /** @class */ (function () {\r\n function ScopeSet() {\r\n }\r\n /**\r\n * Check if there are dup scopes in a given request\r\n *\r\n * @param cachedScopes\r\n * @param scopes\r\n */\r\n // TODO: Rename this, intersecting scopes isn't a great name for duplicate checker\r\n ScopeSet.isIntersectingScopes = function (cachedScopes, scopes) {\r\n var convertedCachedScopes = this.trimAndConvertArrayToLowerCase(cachedScopes.slice());\r\n var requestScopes = this.trimAndConvertArrayToLowerCase(scopes.slice());\r\n for (var i = 0; i < requestScopes.length; i++) {\r\n if (convertedCachedScopes.indexOf(requestScopes[i].toLowerCase()) > -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n /**\r\n * Check if a given scope is present in the request\r\n *\r\n * @param cachedScopes\r\n * @param scopes\r\n */\r\n ScopeSet.containsScope = function (cachedScopes, scopes) {\r\n var convertedCachedScopes = this.trimAndConvertArrayToLowerCase(cachedScopes.slice());\r\n var requestScopes = this.trimAndConvertArrayToLowerCase(scopes.slice());\r\n return requestScopes.every(function (value) { return convertedCachedScopes.indexOf(value.toString().toLowerCase()) >= 0; });\r\n };\r\n /**\r\n * Trims and converts string to lower case\r\n *\r\n * @param scopes\r\n */\r\n // TODO: Rename this, too generic name for a function that only deals with scopes\r\n ScopeSet.trimAndConvertToLowerCase = function (scope) {\r\n return scope.trim().toLowerCase();\r\n };\r\n /**\r\n * Performs trimAndConvertToLowerCase on string array\r\n * @param scopes\r\n */\r\n ScopeSet.trimAndConvertArrayToLowerCase = function (scopes) {\r\n var _this = this;\r\n return scopes.map(function (scope) { return _this.trimAndConvertToLowerCase(scope); });\r\n };\r\n /**\r\n * Trims each scope in scopes array\r\n * @param scopes\r\n */\r\n ScopeSet.trimScopes = function (scopes) {\r\n return scopes.map(function (scope) { return scope.trim(); });\r\n };\r\n /**\r\n * Remove one element from a scope array\r\n *\r\n * @param scopes\r\n * @param scope\r\n */\r\n // TODO: Rename this, too generic name for a function that only deals with scopes\r\n ScopeSet.removeElement = function (scopes, scope) {\r\n var scopeVal = this.trimAndConvertToLowerCase(scope);\r\n return scopes.filter(function (value) { return value !== scopeVal; });\r\n };\r\n /**\r\n * Parse the scopes into a formatted scopeList\r\n * @param scopes\r\n */\r\n ScopeSet.parseScope = function (scopes) {\r\n var scopeList = \"\";\r\n if (scopes) {\r\n for (var i = 0; i < scopes.length; ++i) {\r\n scopeList += (i !== scopes.length - 1) ? scopes[i] + \" \" : scopes[i];\r\n }\r\n }\r\n return scopeList;\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Used to validate the scopes input parameter requested by the developer.\r\n * @param {Array} scopes - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned.\r\n * @param {boolean} scopesRequired - Boolean indicating whether the scopes array is required or not\r\n * @ignore\r\n */\r\n ScopeSet.validateInputScope = function (scopes, scopesRequired) {\r\n if (!scopes) {\r\n if (scopesRequired) {\r\n throw ClientConfigurationError.createScopesRequiredError(scopes);\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n // Check that scopes is an array object (also throws error if scopes == null)\r\n if (!Array.isArray(scopes)) {\r\n throw ClientConfigurationError.createScopesNonArrayError(scopes);\r\n }\r\n // Check that scopes is not an empty array\r\n if (scopes.length < 1 && scopesRequired) {\r\n throw ClientConfigurationError.createEmptyScopesArrayError(scopes.toString());\r\n }\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Extracts scope value from the state sent with the authentication request.\r\n * @param {string} state\r\n * @returns {string} scope.\r\n * @ignore\r\n */\r\n ScopeSet.getScopeFromState = function (state) {\r\n if (state) {\r\n var splitIndex = state.indexOf(Constants.resourceDelimiter);\r\n if (splitIndex > -1 && splitIndex + 1 < state.length) {\r\n return state.substring(splitIndex + 1);\r\n }\r\n }\r\n return \"\";\r\n };\r\n /**\r\n * @ignore\r\n * Appends extraScopesToConsent if passed\r\n * @param {@link AuthenticationParameters}\r\n */\r\n ScopeSet.appendScopes = function (reqScopes, reqExtraScopesToConsent) {\r\n if (reqScopes) {\r\n var convertedExtraScopes = reqExtraScopesToConsent ? this.trimAndConvertArrayToLowerCase(reqExtraScopesToConsent.slice()) : null;\r\n var convertedReqScopes = this.trimAndConvertArrayToLowerCase(reqScopes.slice());\r\n return convertedExtraScopes ? convertedReqScopes.concat(convertedExtraScopes) : convertedReqScopes;\r\n }\r\n return null;\r\n };\r\n // #endregion\r\n /**\r\n * @ignore\r\n * Returns true if the scopes array only contains openid and/or profile\r\n */\r\n ScopeSet.onlyContainsOidcScopes = function (scopes) {\r\n var scopesCount = scopes.length;\r\n var oidcScopesFound = 0;\r\n if (scopes.indexOf(Constants.openidScope) > -1) {\r\n oidcScopesFound += 1;\r\n }\r\n if (scopes.indexOf(Constants.profileScope) > -1) {\r\n oidcScopesFound += 1;\r\n }\r\n return (scopesCount > 0 && scopesCount === oidcScopesFound);\r\n };\r\n /**\r\n * @ignore\r\n * Returns true if the scopes array only contains openid and/or profile\r\n */\r\n ScopeSet.containsAnyOidcScopes = function (scopes) {\r\n var containsOpenIdScope = scopes.indexOf(Constants.openidScope) > -1;\r\n var containsProfileScope = scopes.indexOf(Constants.profileScope) > -1;\r\n return (containsOpenIdScope || containsProfileScope);\r\n };\r\n /**\r\n * @ignore\r\n * Returns true if the clientId is the only scope in the array\r\n */\r\n ScopeSet.onlyContainsClientId = function (scopes, clientId) {\r\n // Double negation to force false value returned in case scopes is null\r\n return !!scopes && (scopes.indexOf(clientId) > -1 && scopes.length === 1);\r\n };\r\n /**\r\n * @ignore\r\n * Adds missing OIDC scopes to scopes array without duplication. Since STS requires OIDC scopes for\r\n * all implicit flow requests, 'openid' and 'profile' should always be included in the final request\r\n */\r\n ScopeSet.appendDefaultScopes = function (scopes) {\r\n var extendedScopes = scopes;\r\n if (extendedScopes.indexOf(Constants.openidScope) === -1) {\r\n extendedScopes.push(Constants.openidScope);\r\n }\r\n if (extendedScopes.indexOf(Constants.profileScope) === -1) {\r\n extendedScopes.push(Constants.profileScope);\r\n }\r\n return extendedScopes;\r\n };\r\n /**\r\n * @ignore\r\n * Removes present OIDC scopes from scopes array.\r\n */\r\n ScopeSet.removeDefaultScopes = function (scopes) {\r\n return scopes.filter(function (scope) {\r\n return (scope !== Constants.openidScope && scope !== Constants.profileScope);\r\n });\r\n };\r\n /**\r\n * @ignore\r\n * Removes clientId from scopes array if included as only scope. If it's not the only scope, it is treated as a resource scope.\r\n * @param scopes Array: Pre-normalized scopes array\r\n * @param clientId string: The application's clientId that is searched for in the scopes array\r\n */\r\n ScopeSet.translateClientIdIfSingleScope = function (scopes, clientId) {\r\n return this.onlyContainsClientId(scopes, clientId) ? Constants.oidcScopes : scopes;\r\n };\r\n return ScopeSet;\r\n}());\r\nexport { ScopeSet };\r\n//# sourceMappingURL=ScopeSet.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { Constants, SSOTypes, ServerHashParamKeys } from \"./Constants\";\r\nimport { ScopeSet } from \"../ScopeSet\";\r\nimport { StringUtils } from \"./StringUtils\";\r\nimport { CryptoUtils } from \"./CryptoUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar UrlUtils = /** @class */ (function () {\r\n function UrlUtils() {\r\n }\r\n /**\r\n * generates the URL with QueryString Parameters\r\n * @param scopes\r\n */\r\n UrlUtils.createNavigateUrl = function (serverRequestParams) {\r\n var str = this.createNavigationUrlString(serverRequestParams);\r\n var authEndpoint = serverRequestParams.authorityInstance.AuthorizationEndpoint;\r\n // if the endpoint already has queryparams, lets add to it, otherwise add the first one\r\n if (authEndpoint.indexOf(\"?\") < 0) {\r\n authEndpoint += \"?\";\r\n }\r\n else {\r\n authEndpoint += \"&\";\r\n }\r\n var requestUrl = \"\" + authEndpoint + str.join(\"&\");\r\n return requestUrl;\r\n };\r\n /**\r\n * Generate the array of all QueryStringParams to be sent to the server\r\n * @param scopes\r\n */\r\n UrlUtils.createNavigationUrlString = function (serverRequestParams) {\r\n var scopes = ScopeSet.appendDefaultScopes(serverRequestParams.scopes);\r\n var str = [];\r\n str.push(\"response_type=\" + serverRequestParams.responseType);\r\n str.push(\"scope=\" + encodeURIComponent(ScopeSet.parseScope(scopes)));\r\n str.push(\"client_id=\" + encodeURIComponent(serverRequestParams.clientId));\r\n str.push(\"redirect_uri=\" + encodeURIComponent(serverRequestParams.redirectUri));\r\n str.push(\"state=\" + encodeURIComponent(serverRequestParams.state));\r\n str.push(\"nonce=\" + encodeURIComponent(serverRequestParams.nonce));\r\n str.push(\"client_info=1\");\r\n str.push(\"x-client-SKU=\" + serverRequestParams.xClientSku);\r\n str.push(\"x-client-Ver=\" + serverRequestParams.xClientVer);\r\n if (serverRequestParams.promptValue) {\r\n str.push(\"prompt=\" + encodeURIComponent(serverRequestParams.promptValue));\r\n }\r\n if (serverRequestParams.claimsValue) {\r\n str.push(\"claims=\" + encodeURIComponent(serverRequestParams.claimsValue));\r\n }\r\n if (serverRequestParams.queryParameters) {\r\n str.push(serverRequestParams.queryParameters);\r\n }\r\n if (serverRequestParams.extraQueryParameters) {\r\n str.push(serverRequestParams.extraQueryParameters);\r\n }\r\n str.push(\"client-request-id=\" + encodeURIComponent(serverRequestParams.correlationId));\r\n return str;\r\n };\r\n /**\r\n * Returns current window URL as redirect uri\r\n */\r\n UrlUtils.getCurrentUrl = function () {\r\n return window.location.href.split(\"?\")[0].split(\"#\")[0];\r\n };\r\n /**\r\n * Returns given URL with query string removed\r\n */\r\n UrlUtils.removeHashFromUrl = function (url) {\r\n return url.split(\"#\")[0];\r\n };\r\n /**\r\n * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\r\n * @param href The url\r\n * @param tenantId The tenant id to replace\r\n */\r\n UrlUtils.replaceTenantPath = function (url, tenantId) {\r\n var lowerCaseUrl = url.toLowerCase();\r\n var urlObject = this.GetUrlComponents(lowerCaseUrl);\r\n var pathArray = urlObject.PathSegments;\r\n if (tenantId && (pathArray.length !== 0 && (pathArray[0] === Constants.common || pathArray[0] === SSOTypes.ORGANIZATIONS || pathArray[0] === SSOTypes.CONSUMERS))) {\r\n pathArray[0] = tenantId;\r\n }\r\n return this.constructAuthorityUriFromObject(urlObject, pathArray);\r\n };\r\n UrlUtils.constructAuthorityUriFromObject = function (urlObject, pathArray) {\r\n return this.CanonicalizeUri(urlObject.Protocol + \"//\" + urlObject.HostNameAndPort + \"/\" + pathArray.join(\"/\"));\r\n };\r\n /**\r\n * Checks if an authority is common (ex. https://a:b/common/)\r\n * @param url The url\r\n * @returns true if authority is common and false otherwise\r\n */\r\n UrlUtils.isCommonAuthority = function (url) {\r\n var authority = this.CanonicalizeUri(url);\r\n var pathArray = this.GetUrlComponents(authority).PathSegments;\r\n return (pathArray.length !== 0 && pathArray[0] === Constants.common);\r\n };\r\n /**\r\n * Checks if an authority is for organizations (ex. https://a:b/organizations/)\r\n * @param url The url\r\n * @returns true if authority is for and false otherwise\r\n */\r\n UrlUtils.isOrganizationsAuthority = function (url) {\r\n var authority = this.CanonicalizeUri(url);\r\n var pathArray = this.GetUrlComponents(authority).PathSegments;\r\n return (pathArray.length !== 0 && pathArray[0] === SSOTypes.ORGANIZATIONS);\r\n };\r\n /**\r\n * Checks if an authority is for consumers (ex. https://a:b/consumers/)\r\n * @param url The url\r\n * @returns true if authority is for and false otherwise\r\n */\r\n UrlUtils.isConsumersAuthority = function (url) {\r\n var authority = this.CanonicalizeUri(url);\r\n var pathArray = this.GetUrlComponents(authority).PathSegments;\r\n return (pathArray.length !== 0 && pathArray[0] === SSOTypes.CONSUMERS);\r\n };\r\n /**\r\n * Parses out the components from a url string.\r\n * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\r\n */\r\n UrlUtils.GetUrlComponents = function (url) {\r\n if (!url) {\r\n throw \"Url required\";\r\n }\r\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\r\n var regEx = RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\");\r\n var match = url.match(regEx);\r\n if (!match || match.length < 6) {\r\n throw \"Valid url required\";\r\n }\r\n var urlComponents = {\r\n Protocol: match[1],\r\n HostNameAndPort: match[4],\r\n AbsolutePath: match[5]\r\n };\r\n var pathSegments = urlComponents.AbsolutePath.split(\"/\");\r\n pathSegments = pathSegments.filter(function (val) { return val && val.length > 0; }); // remove empty elements\r\n urlComponents.PathSegments = pathSegments;\r\n if (match[6]) {\r\n urlComponents.Search = match[6];\r\n }\r\n if (match[8]) {\r\n urlComponents.Hash = match[8];\r\n }\r\n return urlComponents;\r\n };\r\n /**\r\n * Given a url or path, append a trailing slash if one doesnt exist\r\n *\r\n * @param url\r\n */\r\n UrlUtils.CanonicalizeUri = function (url) {\r\n if (url) {\r\n url = url.toLowerCase();\r\n }\r\n if (url && !UrlUtils.endsWith(url, \"/\")) {\r\n url += \"/\";\r\n }\r\n return url;\r\n };\r\n /**\r\n * Checks to see if the url ends with the suffix\r\n * Required because we are compiling for es5 instead of es6\r\n * @param url\r\n * @param str\r\n */\r\n // TODO: Rename this, not clear what it is supposed to do\r\n UrlUtils.endsWith = function (url, suffix) {\r\n if (!url || !suffix) {\r\n return false;\r\n }\r\n return url.indexOf(suffix, url.length - suffix.length) !== -1;\r\n };\r\n /**\r\n * Utils function to remove the login_hint and domain_hint from the i/p extraQueryParameters\r\n * @param url\r\n * @param name\r\n */\r\n UrlUtils.urlRemoveQueryStringParameter = function (url, name) {\r\n if (StringUtils.isEmpty(url)) {\r\n return url;\r\n }\r\n var regex = new RegExp(\"(\\\\&\" + name + \"=)[^\\&]+\");\r\n url = url.replace(regex, \"\");\r\n // name=value&\r\n regex = new RegExp(\"(\" + name + \"=)[^\\&]+&\");\r\n url = url.replace(regex, \"\");\r\n // name=value\r\n regex = new RegExp(\"(\" + name + \"=)[^\\&]+\");\r\n url = url.replace(regex, \"\");\r\n return url;\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * Returns the anchor part(#) of the URL\r\n */\r\n UrlUtils.getHashFromUrl = function (urlStringOrFragment) {\r\n var hashIndex1 = urlStringOrFragment.indexOf(\"#\");\r\n var hashIndex2 = urlStringOrFragment.indexOf(\"#/\");\r\n if (hashIndex2 > -1) {\r\n return urlStringOrFragment.substring(hashIndex2 + 2);\r\n }\r\n else if (hashIndex1 > -1) {\r\n return urlStringOrFragment.substring(hashIndex1 + 1);\r\n }\r\n return urlStringOrFragment;\r\n };\r\n /**\r\n * @hidden\r\n * Check if the url contains a hash with known properties\r\n * @ignore\r\n */\r\n UrlUtils.urlContainsHash = function (urlString) {\r\n var parameters = UrlUtils.deserializeHash(urlString);\r\n return (parameters.hasOwnProperty(ServerHashParamKeys.ERROR_DESCRIPTION) ||\r\n parameters.hasOwnProperty(ServerHashParamKeys.ERROR) ||\r\n parameters.hasOwnProperty(ServerHashParamKeys.ACCESS_TOKEN) ||\r\n parameters.hasOwnProperty(ServerHashParamKeys.ID_TOKEN));\r\n };\r\n /**\r\n * @hidden\r\n * Returns deserialized portion of URL hash\r\n * @ignore\r\n */\r\n UrlUtils.deserializeHash = function (urlFragment) {\r\n var hash = UrlUtils.getHashFromUrl(urlFragment);\r\n return CryptoUtils.deserialize(hash);\r\n };\r\n /**\r\n * @ignore\r\n * @param {string} URI\r\n * @returns {string} host from the URI\r\n *\r\n * extract URI from the host\r\n */\r\n UrlUtils.getHostFromUri = function (uri) {\r\n // remove http:// or https:// from uri\r\n var extractedUri = String(uri).replace(/^(https?:)\\/\\//, \"\");\r\n extractedUri = extractedUri.split(\"/\")[0];\r\n return extractedUri;\r\n };\r\n return UrlUtils;\r\n}());\r\nexport { UrlUtils };\r\n//# sourceMappingURL=UrlUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { CryptoUtils } from \"../utils/CryptoUtils\";\r\nimport { UrlUtils } from \"../utils/UrlUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar AccessTokenKey = /** @class */ (function () {\r\n function AccessTokenKey(authority, clientId, scopes, uid, utid) {\r\n this.authority = UrlUtils.CanonicalizeUri(authority);\r\n this.clientId = clientId;\r\n this.scopes = scopes;\r\n this.homeAccountIdentifier = CryptoUtils.base64Encode(uid) + \".\" + CryptoUtils.base64Encode(utid);\r\n }\r\n return AccessTokenKey;\r\n}());\r\nexport { AccessTokenKey };\r\n//# sourceMappingURL=AccessTokenKey.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar AccessTokenValue = /** @class */ (function () {\r\n function AccessTokenValue(accessToken, idToken, expiresIn, homeAccountIdentifier) {\r\n this.accessToken = accessToken;\r\n this.idToken = idToken;\r\n this.expiresIn = expiresIn;\r\n this.homeAccountIdentifier = homeAccountIdentifier;\r\n }\r\n return AccessTokenValue;\r\n}());\r\nexport { AccessTokenValue };\r\n//# sourceMappingURL=AccessTokenValue.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { CryptoUtils } from \"./utils/CryptoUtils\";\r\nimport { SSOTypes, Constants, PromptState, ResponseTypes } from \"./utils/Constants\";\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\nimport { ScopeSet } from \"./ScopeSet\";\r\nimport { version as libraryVersion } from \"./packageMetadata\";\r\n/**\r\n * Nonce: OIDC Nonce definition: https://openid.net/specs/openid-connect-core-1_0.html#IDToken\r\n * State: OAuth Spec: https://tools.ietf.org/html/rfc6749#section-10.12\r\n * @hidden\r\n */\r\nvar ServerRequestParameters = /** @class */ (function () {\r\n /**\r\n * Constructor\r\n * @param authority\r\n * @param clientId\r\n * @param scope\r\n * @param responseType\r\n * @param redirectUri\r\n * @param state\r\n */\r\n function ServerRequestParameters(authority, clientId, responseType, redirectUri, scopes, state, correlationId) {\r\n this.authorityInstance = authority;\r\n this.clientId = clientId;\r\n this.nonce = CryptoUtils.createNewGuid();\r\n // set scope to clientId if null\r\n this.scopes = scopes ? scopes.slice() : Constants.oidcScopes;\r\n this.scopes = ScopeSet.trimScopes(this.scopes);\r\n // set state (already set at top level)\r\n this.state = state;\r\n // set correlationId\r\n this.correlationId = correlationId;\r\n // telemetry information\r\n this.xClientSku = \"MSAL.JS\";\r\n this.xClientVer = libraryVersion;\r\n this.responseType = responseType;\r\n this.redirectUri = redirectUri;\r\n }\r\n Object.defineProperty(ServerRequestParameters.prototype, \"authority\", {\r\n get: function () {\r\n return this.authorityInstance ? this.authorityInstance.CanonicalAuthority : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * Utility to populate QueryParameters and ExtraQueryParameters to ServerRequestParamerers\r\n * @param request\r\n * @param serverAuthenticationRequest\r\n */\r\n ServerRequestParameters.prototype.populateQueryParams = function (account, request, adalIdTokenObject, silentCall) {\r\n var queryParameters = {};\r\n if (request) {\r\n // add the prompt parameter to serverRequestParameters if passed\r\n if (request.prompt) {\r\n this.promptValue = request.prompt;\r\n }\r\n // Add claims challenge to serverRequestParameters if passed\r\n if (request.claimsRequest) {\r\n this.claimsValue = request.claimsRequest;\r\n }\r\n // if the developer provides one of these, give preference to developer choice\r\n if (ServerRequestParameters.isSSOParam(request)) {\r\n queryParameters = this.constructUnifiedCacheQueryParameter(request, null);\r\n }\r\n }\r\n if (adalIdTokenObject) {\r\n queryParameters = this.constructUnifiedCacheQueryParameter(null, adalIdTokenObject);\r\n }\r\n /*\r\n * adds sid/login_hint if not populated\r\n * this.logger.verbose(\"Calling addHint parameters\");\r\n */\r\n queryParameters = this.addHintParameters(account, queryParameters);\r\n // sanity check for developer passed extraQueryParameters\r\n var eQParams = request ? request.extraQueryParameters : null;\r\n // Populate the extraQueryParameters to be sent to the server\r\n this.queryParameters = ServerRequestParameters.generateQueryParametersString(queryParameters);\r\n this.extraQueryParameters = ServerRequestParameters.generateQueryParametersString(eQParams, silentCall);\r\n };\r\n // #region QueryParam helpers\r\n /**\r\n * Constructs extraQueryParameters to be sent to the server for the AuthenticationParameters set by the developer\r\n * in any login() or acquireToken() calls\r\n * @param idTokenObject\r\n * @param extraQueryParameters\r\n * @param sid\r\n * @param loginHint\r\n */\r\n // TODO: check how this behaves when domain_hint only is sent in extraparameters and idToken has no upn.\r\n ServerRequestParameters.prototype.constructUnifiedCacheQueryParameter = function (request, idTokenObject) {\r\n // preference order: account > sid > login_hint\r\n var ssoType;\r\n var ssoData;\r\n var serverReqParam = {};\r\n // if account info is passed, account.sid > account.login_hint\r\n if (request) {\r\n if (request.account) {\r\n var account = request.account;\r\n if (account.sid) {\r\n ssoType = SSOTypes.SID;\r\n ssoData = account.sid;\r\n }\r\n else if (account.userName) {\r\n ssoType = SSOTypes.LOGIN_HINT;\r\n ssoData = account.userName;\r\n }\r\n }\r\n // sid from request\r\n else if (request.sid) {\r\n ssoType = SSOTypes.SID;\r\n ssoData = request.sid;\r\n }\r\n // loginHint from request\r\n else if (request.loginHint) {\r\n ssoType = SSOTypes.LOGIN_HINT;\r\n ssoData = request.loginHint;\r\n }\r\n }\r\n // adalIdToken retrieved from cache\r\n else if (idTokenObject) {\r\n if (idTokenObject.hasOwnProperty(Constants.upn)) {\r\n ssoType = SSOTypes.ID_TOKEN;\r\n ssoData = idTokenObject[\"upn\"];\r\n }\r\n }\r\n serverReqParam = this.addSSOParameter(ssoType, ssoData);\r\n return serverReqParam;\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Adds login_hint to authorization URL which is used to pre-fill the username field of sign in page for the user if known ahead of time\r\n * domain_hint if added skips the email based discovery process of the user - only supported for interactive calls in implicit_flow\r\n * domain_req utid received as part of the clientInfo\r\n * login_req uid received as part of clientInfo\r\n * Also does a sanity check for extraQueryParameters passed by the user to ensure no repeat queryParameters\r\n *\r\n * @param {@link Account} account - Account for which the token is requested\r\n * @param queryparams\r\n * @param {@link ServerRequestParameters}\r\n * @ignore\r\n */\r\n ServerRequestParameters.prototype.addHintParameters = function (account, qParams) {\r\n /*\r\n * This is a final check for all queryParams added so far; preference order: sid > login_hint\r\n * sid cannot be passed along with login_hint or domain_hint, hence we check both are not populated yet in queryParameters\r\n */\r\n if (account && !qParams[SSOTypes.SID]) {\r\n // sid - populate only if login_hint is not already populated and the account has sid\r\n var populateSID = !qParams[SSOTypes.LOGIN_HINT] && account.sid && this.promptValue === PromptState.NONE;\r\n if (populateSID) {\r\n qParams = this.addSSOParameter(SSOTypes.SID, account.sid, qParams);\r\n }\r\n // login_hint - account.userName\r\n else {\r\n var populateLoginHint = !qParams[SSOTypes.LOGIN_HINT] && account.userName && !StringUtils.isEmpty(account.userName);\r\n if (populateLoginHint) {\r\n qParams = this.addSSOParameter(SSOTypes.LOGIN_HINT, account.userName, qParams);\r\n }\r\n }\r\n }\r\n return qParams;\r\n };\r\n /**\r\n * Add SID to extraQueryParameters\r\n * @param sid\r\n */\r\n ServerRequestParameters.prototype.addSSOParameter = function (ssoType, ssoData, ssoParam) {\r\n if (!ssoParam) {\r\n ssoParam = {};\r\n }\r\n if (!ssoData) {\r\n return ssoParam;\r\n }\r\n switch (ssoType) {\r\n case SSOTypes.SID: {\r\n ssoParam[SSOTypes.SID] = ssoData;\r\n break;\r\n }\r\n case SSOTypes.ID_TOKEN: {\r\n ssoParam[SSOTypes.LOGIN_HINT] = ssoData;\r\n break;\r\n }\r\n case SSOTypes.LOGIN_HINT: {\r\n ssoParam[SSOTypes.LOGIN_HINT] = ssoData;\r\n break;\r\n }\r\n }\r\n return ssoParam;\r\n };\r\n /**\r\n * Utility to generate a QueryParameterString from a Key-Value mapping of extraQueryParameters passed\r\n * @param extraQueryParameters\r\n */\r\n ServerRequestParameters.generateQueryParametersString = function (queryParameters, silentCall) {\r\n var paramsString = null;\r\n if (queryParameters) {\r\n Object.keys(queryParameters).forEach(function (key) {\r\n // sid cannot be passed along with login_hint or domain_hint\r\n if (key === Constants.domain_hint && (silentCall || queryParameters[SSOTypes.SID])) {\r\n return;\r\n }\r\n if (!paramsString) {\r\n paramsString = key + \"=\" + encodeURIComponent(queryParameters[key]);\r\n }\r\n else {\r\n paramsString += \"&\" + key + \"=\" + encodeURIComponent(queryParameters[key]);\r\n }\r\n });\r\n }\r\n return paramsString;\r\n };\r\n // #endregion\r\n /**\r\n * Check to see if there are SSO params set in the Request\r\n * @param request\r\n */\r\n ServerRequestParameters.isSSOParam = function (request) {\r\n return !!(request && (request.account || request.sid || request.loginHint));\r\n };\r\n /**\r\n * Returns the correct response_type string attribute for an acquireToken request configuration\r\n * @param accountsMatch boolean: Determines whether the account in the request matches the cached account\r\n * @param scopes Array: AuthenticationRequest scopes configuration\r\n * @param loginScopesOnly boolean: True if the scopes array ONLY contains the clientId or any combination of OIDC scopes, without resource scopes\r\n */\r\n ServerRequestParameters.determineResponseType = function (accountsMatch, scopes) {\r\n // Supports getting an id_token by sending in clientId as only scope or OIDC scopes as only scopes\r\n if (ScopeSet.onlyContainsOidcScopes(scopes)) {\r\n return ResponseTypes.id_token;\r\n }\r\n // If accounts match, check if OIDC scopes are included, otherwise return id_token_token\r\n return (accountsMatch) ? this.responseTypeForMatchingAccounts(scopes) : ResponseTypes.id_token_token;\r\n };\r\n /**\r\n * Returns the correct response_type string attribute for an acquireToken request configuration that contains an\r\n * account that matches the account in the MSAL cache.\r\n * @param scopes Array: AuthenticationRequest scopes configuration\r\n */\r\n ServerRequestParameters.responseTypeForMatchingAccounts = function (scopes) {\r\n // Opt-into also requesting an ID token by sending in 'openid', 'profile' or both along with resource scopes when login is not necessary.\r\n return (ScopeSet.containsAnyOidcScopes(scopes)) ? ResponseTypes.id_token_token : ResponseTypes.token;\r\n };\r\n return ServerRequestParameters;\r\n}());\r\nexport { ServerRequestParameters };\r\n//# sourceMappingURL=ServerRequestParameters.js.map","/* eslint-disable header/header */\r\nexport var name = \"msal\";\r\nexport var version = \"1.4.11\";\r\n//# sourceMappingURL=packageMetadata.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { NetworkRequestType } from \"./utils/Constants\";\r\n/**\r\n * XHR client for JSON endpoints\r\n * https://www.npmjs.com/package/async-promise\r\n * @hidden\r\n */\r\nvar XhrClient = /** @class */ (function () {\r\n function XhrClient() {\r\n }\r\n XhrClient.prototype.sendRequestAsync = function (url, method, enableCaching) {\r\n var _this = this;\r\n return new Promise(function (resolve, reject) {\r\n var xhr = new XMLHttpRequest();\r\n xhr.open(method, url, /* async: */ true);\r\n if (enableCaching) {\r\n /*\r\n * TODO: (shivb) ensure that this can be cached\r\n * xhr.setRequestHeader(\"Cache-Control\", \"Public\");\r\n */\r\n }\r\n xhr.onload = function () {\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n reject(_this.handleError(xhr.responseText));\r\n }\r\n var jsonResponse;\r\n try {\r\n jsonResponse = JSON.parse(xhr.responseText);\r\n }\r\n catch (e) {\r\n reject(_this.handleError(xhr.responseText));\r\n }\r\n var response = {\r\n statusCode: xhr.status,\r\n body: jsonResponse\r\n };\r\n resolve(response);\r\n };\r\n xhr.onerror = function () {\r\n reject(xhr.status);\r\n };\r\n if (method === NetworkRequestType.GET) {\r\n xhr.send();\r\n }\r\n else {\r\n throw \"not implemented\";\r\n }\r\n });\r\n };\r\n XhrClient.prototype.handleError = function (responseText) {\r\n var jsonResponse;\r\n try {\r\n jsonResponse = JSON.parse(responseText);\r\n if (jsonResponse[\"error\"]) {\r\n return jsonResponse[\"error\"];\r\n }\r\n else {\r\n throw responseText;\r\n }\r\n }\r\n catch (e) {\r\n return responseText;\r\n }\r\n };\r\n return XhrClient;\r\n}());\r\nexport { XhrClient };\r\n//# sourceMappingURL=XHRClient.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { XhrClient } from \"../XHRClient\";\r\nimport { AAD_INSTANCE_DISCOVERY_ENDPOINT, NetworkRequestType } from \"../utils/Constants\";\r\nimport { UrlUtils } from \"../utils/UrlUtils\";\r\nvar TrustedAuthority = /** @class */ (function () {\r\n function TrustedAuthority() {\r\n }\r\n /**\r\n *\r\n * @param validateAuthority\r\n * @param knownAuthorities\r\n */\r\n TrustedAuthority.setTrustedAuthoritiesFromConfig = function (validateAuthority, knownAuthorities) {\r\n if (validateAuthority && !this.getTrustedHostList().length) {\r\n knownAuthorities.forEach(function (authority) {\r\n TrustedAuthority.TrustedHostList.push(authority.toLowerCase());\r\n });\r\n }\r\n };\r\n /**\r\n *\r\n * @param telemetryManager\r\n * @param correlationId\r\n */\r\n TrustedAuthority.getAliases = function (authorityToVerify, telemetryManager, correlationId) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var client, httpMethod, instanceDiscoveryEndpoint, httpEvent;\r\n return tslib_1.__generator(this, function (_a) {\r\n client = new XhrClient();\r\n httpMethod = NetworkRequestType.GET;\r\n instanceDiscoveryEndpoint = \"\" + AAD_INSTANCE_DISCOVERY_ENDPOINT + authorityToVerify + \"oauth2/v2.0/authorize\";\r\n httpEvent = telemetryManager.createAndStartHttpEvent(correlationId, httpMethod, instanceDiscoveryEndpoint, \"getAliases\");\r\n return [2 /*return*/, client.sendRequestAsync(instanceDiscoveryEndpoint, httpMethod, true)\r\n .then(function (response) {\r\n httpEvent.httpResponseStatus = response.statusCode;\r\n telemetryManager.stopEvent(httpEvent);\r\n return response.body[\"metadata\"];\r\n })\r\n .catch(function (err) {\r\n httpEvent.serverErrorCode = err;\r\n telemetryManager.stopEvent(httpEvent);\r\n throw err;\r\n })];\r\n });\r\n });\r\n };\r\n /**\r\n *\r\n * @param telemetryManager\r\n * @param correlationId\r\n */\r\n TrustedAuthority.setTrustedAuthoritiesFromNetwork = function (authorityToVerify, telemetryManager, correlationId) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var metadata, host;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.getAliases(authorityToVerify, telemetryManager, correlationId)];\r\n case 1:\r\n metadata = _a.sent();\r\n metadata.forEach(function (entry) {\r\n var authorities = entry[\"aliases\"];\r\n authorities.forEach(function (authority) {\r\n TrustedAuthority.TrustedHostList.push(authority.toLowerCase());\r\n });\r\n });\r\n host = UrlUtils.GetUrlComponents(authorityToVerify).HostNameAndPort;\r\n if (TrustedAuthority.getTrustedHostList().length && !TrustedAuthority.IsInTrustedHostList(host)) {\r\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded\r\n TrustedAuthority.TrustedHostList.push(host.toLowerCase());\r\n }\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n TrustedAuthority.getTrustedHostList = function () {\r\n return this.TrustedHostList;\r\n };\r\n /**\r\n * Checks to see if the host is in a list of trusted hosts\r\n * @param host\r\n */\r\n TrustedAuthority.IsInTrustedHostList = function (host) {\r\n return this.TrustedHostList.indexOf(host.toLowerCase()) > -1;\r\n };\r\n TrustedAuthority.TrustedHostList = [];\r\n return TrustedAuthority;\r\n}());\r\nexport { TrustedAuthority };\r\n//# sourceMappingURL=TrustedAuthority.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\nimport { version as libraryVersion } from \"./packageMetadata\";\r\nexport var LogLevel;\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"Error\"] = 0] = \"Error\";\r\n LogLevel[LogLevel[\"Warning\"] = 1] = \"Warning\";\r\n LogLevel[LogLevel[\"Info\"] = 2] = \"Info\";\r\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\r\n})(LogLevel || (LogLevel = {}));\r\nvar Logger = /** @class */ (function () {\r\n function Logger(localCallback, options) {\r\n if (options === void 0) { options = {}; }\r\n /**\r\n * @hidden\r\n */\r\n this.level = LogLevel.Info;\r\n var _a = options.correlationId, correlationId = _a === void 0 ? \"\" : _a, _b = options.level, level = _b === void 0 ? LogLevel.Info : _b, _c = options.piiLoggingEnabled, piiLoggingEnabled = _c === void 0 ? false : _c;\r\n this.localCallback = localCallback;\r\n this.correlationId = correlationId;\r\n this.level = level;\r\n this.piiLoggingEnabled = piiLoggingEnabled;\r\n }\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.logMessage = function (logLevel, logMessage, containsPii) {\r\n if ((logLevel > this.level) || (!this.piiLoggingEnabled && containsPii)) {\r\n return;\r\n }\r\n var timestamp = new Date().toUTCString();\r\n var log;\r\n if (!StringUtils.isEmpty(this.correlationId)) {\r\n log = timestamp + \":\" + this.correlationId + \"-\" + libraryVersion + \"-\" + LogLevel[logLevel] + (containsPii ? \"-pii\" : \"\") + \" \" + logMessage;\r\n }\r\n else {\r\n log = timestamp + \":\" + libraryVersion + \"-\" + LogLevel[logLevel] + (containsPii ? \"-pii\" : \"\") + \" \" + logMessage;\r\n }\r\n this.executeCallback(logLevel, log, containsPii);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.executeCallback = function (level, message, containsPii) {\r\n if (this.localCallback) {\r\n this.localCallback(level, message, containsPii);\r\n }\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.error = function (message) {\r\n this.logMessage(LogLevel.Error, message, false);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.errorPii = function (message) {\r\n this.logMessage(LogLevel.Error, message, true);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.warning = function (message) {\r\n this.logMessage(LogLevel.Warning, message, false);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.warningPii = function (message) {\r\n this.logMessage(LogLevel.Warning, message, true);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.info = function (message) {\r\n this.logMessage(LogLevel.Info, message, false);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.infoPii = function (message) {\r\n this.logMessage(LogLevel.Info, message, true);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.verbose = function (message) {\r\n this.logMessage(LogLevel.Verbose, message, false);\r\n };\r\n /**\r\n * @hidden\r\n */\r\n Logger.prototype.verbosePii = function (message) {\r\n this.logMessage(LogLevel.Verbose, message, true);\r\n };\r\n Logger.prototype.isPiiLoggingEnabled = function () {\r\n return this.piiLoggingEnabled;\r\n };\r\n return Logger;\r\n}());\r\nexport { Logger };\r\n//# sourceMappingURL=Logger.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { CryptoUtils } from \"./utils/CryptoUtils\";\r\nimport { ClientAuthError } from \"./error/ClientAuthError\";\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar ClientInfo = /** @class */ (function () {\r\n function ClientInfo(rawClientInfo, authority) {\r\n if (!rawClientInfo || StringUtils.isEmpty(rawClientInfo)) {\r\n this.uid = \"\";\r\n this.utid = \"\";\r\n return;\r\n }\r\n try {\r\n var decodedClientInfo = CryptoUtils.base64Decode(rawClientInfo);\r\n var clientInfo = JSON.parse(decodedClientInfo);\r\n if (clientInfo) {\r\n if (clientInfo.hasOwnProperty(\"uid\")) {\r\n this.uid = authority ? ClientInfo.stripPolicyFromUid(clientInfo.uid, authority) : clientInfo.uid;\r\n }\r\n if (clientInfo.hasOwnProperty(\"utid\")) {\r\n this.utid = clientInfo.utid;\r\n }\r\n }\r\n }\r\n catch (e) {\r\n throw ClientAuthError.createClientInfoDecodingError(e);\r\n }\r\n }\r\n Object.defineProperty(ClientInfo.prototype, \"uid\", {\r\n get: function () {\r\n return this._uid ? this._uid : \"\";\r\n },\r\n set: function (uid) {\r\n this._uid = uid;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ClientInfo.prototype, \"utid\", {\r\n get: function () {\r\n return this._utid ? this._utid : \"\";\r\n },\r\n set: function (utid) {\r\n this._utid = utid;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ClientInfo.createClientInfoFromIdToken = function (idToken, authority) {\r\n var clientInfo = {\r\n uid: idToken.subject,\r\n utid: \"\"\r\n };\r\n return new ClientInfo(CryptoUtils.base64Encode(JSON.stringify(clientInfo)), authority);\r\n };\r\n ClientInfo.stripPolicyFromUid = function (uid, authority) {\r\n var uidSegments = uid.split(\"-\");\r\n // Reverse the url segments so the last one is more easily accessible\r\n var urlSegments = authority.split(\"/\").reverse();\r\n var policy = \"\";\r\n if (!StringUtils.isEmpty(urlSegments[0])) {\r\n policy = urlSegments[0];\r\n }\r\n else if (urlSegments.length > 1) {\r\n // If the original url had a trailing slash, urlSegments[0] would be \"\" so take the next element\r\n policy = urlSegments[1];\r\n }\r\n if (uidSegments[uidSegments.length - 1] === policy) {\r\n // If the last segment of uid matches the last segment of authority url, remove the last segment of uid\r\n return uidSegments.slice(0, uidSegments.length - 1).join(\"-\");\r\n }\r\n return uid;\r\n };\r\n ClientInfo.prototype.encodeClientInfo = function () {\r\n var clientInfo = JSON.stringify({ uid: this.uid, utid: this.utid });\r\n return CryptoUtils.base64Encode(clientInfo);\r\n };\r\n return ClientInfo;\r\n}());\r\nexport { ClientInfo };\r\n//# sourceMappingURL=ClientInfo.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar TimeUtils = /** @class */ (function () {\r\n function TimeUtils() {\r\n }\r\n /**\r\n * Returns time in seconds for expiration based on string value passed in.\r\n *\r\n * @param expiresIn\r\n */\r\n TimeUtils.parseExpiresIn = function (expiresIn) {\r\n // if AAD did not send \"expires_in\" property, use default expiration of 3599 seconds, for some reason AAD sends 3599 as \"expires_in\" value instead of 3600\r\n if (!expiresIn) {\r\n expiresIn = \"3599\";\r\n }\r\n return parseInt(expiresIn, 10);\r\n };\r\n /**\r\n * Return the current time in Unix time (seconds). Date.getTime() returns in milliseconds.\r\n */\r\n TimeUtils.now = function () {\r\n return Math.round(new Date().getTime() / 1000.0);\r\n };\r\n /**\r\n * Returns the amount of time in milliseconds since the page loaded.\r\n */\r\n TimeUtils.relativeNowMs = function () {\r\n return window.performance.now();\r\n };\r\n return TimeUtils;\r\n}());\r\nexport { TimeUtils };\r\n//# sourceMappingURL=TimeUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { CryptoUtils } from \"./CryptoUtils\";\r\nimport { StringUtils } from \"./StringUtils\";\r\nimport { TimeUtils } from \"./TimeUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar TokenUtils = /** @class */ (function () {\r\n function TokenUtils() {\r\n }\r\n /**\r\n * decode a JWT\r\n *\r\n * @param jwtToken\r\n */\r\n TokenUtils.decodeJwt = function (jwtToken) {\r\n if (StringUtils.isEmpty(jwtToken)) {\r\n return null;\r\n }\r\n var idTokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\r\n var matches = idTokenPartsRegex.exec(jwtToken);\r\n if (!matches || matches.length < 4) {\r\n // this._requestContext.logger.warn(\"The returned id_token is not parseable.\");\r\n return null;\r\n }\r\n var crackedToken = {\r\n header: matches[1],\r\n JWSPayload: matches[2],\r\n JWSSig: matches[3]\r\n };\r\n return crackedToken;\r\n };\r\n /**\r\n * Evaluates whether token cache item expiration is within expiration offset range\r\n * @param tokenCacheItem\r\n */\r\n TokenUtils.validateExpirationIsWithinOffset = function (expiration, tokenRenewalOffsetSeconds) {\r\n var offset = tokenRenewalOffsetSeconds || 300;\r\n return expiration && (expiration > TimeUtils.now() + offset);\r\n };\r\n /**\r\n * Extract IdToken by decoding the RAWIdToken\r\n *\r\n * @param encodedIdToken\r\n */\r\n TokenUtils.extractIdToken = function (encodedIdToken) {\r\n // id token will be decoded to get the username\r\n var decodedToken = this.decodeJwt(encodedIdToken);\r\n if (!decodedToken) {\r\n return null;\r\n }\r\n try {\r\n var base64IdToken = decodedToken[\"JWSPayload\"];\r\n var base64Decoded = CryptoUtils.base64Decode(base64IdToken);\r\n if (!base64Decoded) {\r\n // this._requestContext.logger.info(\"The returned id_token could not be base64 url safe decoded.\");\r\n return null;\r\n }\r\n // ECMA script has JSON built-in support\r\n return JSON.parse(base64Decoded);\r\n }\r\n catch (err) {\r\n // this._requestContext.logger.error(\"The returned id_token could not be decoded\" + err);\r\n }\r\n return null;\r\n };\r\n return TokenUtils;\r\n}());\r\nexport { TokenUtils };\r\n//# sourceMappingURL=TokenUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { ClientAuthError } from \"./error/ClientAuthError\";\r\nimport { TokenUtils } from \"./utils/TokenUtils\";\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar IdToken = /** @class */ (function () {\r\n /* tslint:disable:no-string-literal */\r\n function IdToken(rawIdToken) {\r\n if (StringUtils.isEmpty(rawIdToken)) {\r\n throw ClientAuthError.createIdTokenNullOrEmptyError(rawIdToken);\r\n }\r\n try {\r\n this.rawIdToken = rawIdToken;\r\n this.claims = TokenUtils.extractIdToken(rawIdToken);\r\n if (this.claims) {\r\n if (this.claims.hasOwnProperty(\"iss\")) {\r\n this.issuer = this.claims[\"iss\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"oid\")) {\r\n this.objectId = this.claims[\"oid\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"sub\")) {\r\n this.subject = this.claims[\"sub\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"tid\")) {\r\n this.tenantId = this.claims[\"tid\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"ver\")) {\r\n this.version = this.claims[\"ver\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"preferred_username\")) {\r\n this.preferredName = this.claims[\"preferred_username\"];\r\n }\r\n else if (this.claims.hasOwnProperty(\"upn\")) {\r\n this.preferredName = this.claims[\"upn\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"name\")) {\r\n this.name = this.claims[\"name\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"nonce\")) {\r\n this.nonce = this.claims[\"nonce\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"exp\")) {\r\n this.expiration = this.claims[\"exp\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"home_oid\")) {\r\n this.homeObjectId = this.claims[\"home_oid\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"sid\")) {\r\n this.sid = this.claims[\"sid\"];\r\n }\r\n if (this.claims.hasOwnProperty(\"cloud_instance_host_name\")) {\r\n this.cloudInstance = this.claims[\"cloud_instance_host_name\"];\r\n }\r\n /* tslint:enable:no-string-literal */\r\n }\r\n }\r\n catch (e) {\r\n /*\r\n * TODO: This error here won't really every be thrown, since extractIdToken() returns null if the decodeJwt() fails.\r\n * Need to add better error handling here to account for being unable to decode jwts.\r\n */\r\n throw ClientAuthError.createIdTokenParsingError(e);\r\n }\r\n }\r\n return IdToken;\r\n}());\r\nexport { IdToken };\r\n//# sourceMappingURL=IdToken.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar AccessTokenCacheItem = /** @class */ (function () {\r\n function AccessTokenCacheItem(key, value) {\r\n this.key = key;\r\n this.value = value;\r\n }\r\n return AccessTokenCacheItem;\r\n}());\r\nexport { AccessTokenCacheItem };\r\n//# sourceMappingURL=AccessTokenCacheItem.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { AuthError } from \"../error/AuthError\";\r\n/**\r\n * @hidden\r\n */\r\nvar BrowserStorage = /** @class */ (function () {\r\n function BrowserStorage(cacheLocation) {\r\n if (!window) {\r\n throw AuthError.createNoWindowObjectError(\"Browser storage class could not find window object\");\r\n }\r\n var storageSupported = typeof window[cacheLocation] !== \"undefined\" && window[cacheLocation] !== null;\r\n if (!storageSupported) {\r\n throw ClientConfigurationError.createStorageNotSupportedError(cacheLocation);\r\n }\r\n this.cacheLocation = cacheLocation;\r\n }\r\n /**\r\n * add value to storage\r\n * @param key\r\n * @param value\r\n * @param enableCookieStorage\r\n */\r\n BrowserStorage.prototype.setItem = function (key, value, enableCookieStorage) {\r\n window[this.cacheLocation].setItem(key, value);\r\n if (enableCookieStorage) {\r\n this.setItemCookie(key, value);\r\n }\r\n };\r\n /**\r\n * get one item by key from storage\r\n * @param key\r\n * @param enableCookieStorage\r\n */\r\n BrowserStorage.prototype.getItem = function (key, enableCookieStorage) {\r\n if (enableCookieStorage && this.getItemCookie(key)) {\r\n return this.getItemCookie(key);\r\n }\r\n return window[this.cacheLocation].getItem(key);\r\n };\r\n /**\r\n * remove value from storage\r\n * @param key\r\n */\r\n BrowserStorage.prototype.removeItem = function (key) {\r\n return window[this.cacheLocation].removeItem(key);\r\n };\r\n /**\r\n * clear storage (remove all items from it)\r\n */\r\n BrowserStorage.prototype.clear = function () {\r\n return window[this.cacheLocation].clear();\r\n };\r\n /**\r\n * add value to cookies\r\n * @param cName\r\n * @param cValue\r\n * @param expires\r\n */\r\n BrowserStorage.prototype.setItemCookie = function (cName, cValue, expires) {\r\n var cookieStr = encodeURIComponent(cName) + \"=\" + encodeURIComponent(cValue) + \";path=/;\";\r\n if (expires) {\r\n var expireTime = this.getCookieExpirationTime(expires);\r\n cookieStr += \"expires=\" + expireTime + \";\";\r\n }\r\n document.cookie = cookieStr;\r\n };\r\n /**\r\n * get one item by key from cookies\r\n * @param cName\r\n */\r\n BrowserStorage.prototype.getItemCookie = function (cName) {\r\n var name = encodeURIComponent(cName) + \"=\";\r\n var ca = document.cookie.split(\";\");\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) === \" \") {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) === 0) {\r\n return decodeURIComponent(c.substring(name.length, c.length));\r\n }\r\n }\r\n return \"\";\r\n };\r\n /**\r\n * Clear an item in the cookies by key\r\n * @param cName\r\n */\r\n BrowserStorage.prototype.clearItemCookie = function (cName) {\r\n this.setItemCookie(cName, \"\", -1);\r\n };\r\n /**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\r\n BrowserStorage.prototype.getCookieExpirationTime = function (cookieLifeDays) {\r\n var today = new Date();\r\n var expr = new Date(today.getTime() + cookieLifeDays * 24 * 60 * 60 * 1000);\r\n return expr.toUTCString();\r\n };\r\n return BrowserStorage;\r\n}());\r\nexport { BrowserStorage };\r\n//# sourceMappingURL=BrowserStorage.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Constants, PromptState, BlacklistedEQParams } from \"./Constants\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ScopeSet } from \"../ScopeSet\";\r\nimport { StringUtils } from \"./StringUtils\";\r\nimport { CryptoUtils } from \"./CryptoUtils\";\r\nimport { TimeUtils } from \"./TimeUtils\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n/**\r\n * @hidden\r\n */\r\nvar RequestUtils = /** @class */ (function () {\r\n function RequestUtils() {\r\n }\r\n /**\r\n * @ignore\r\n *\r\n * @param request\r\n * @param isLoginCall\r\n * @param cacheStorage\r\n * @param clientId\r\n *\r\n * validates all request parameters and generates a consumable request object\r\n */\r\n RequestUtils.validateRequest = function (request, isLoginCall, clientId, interactionType) {\r\n // Throw error if request is empty for acquire * calls\r\n if (!isLoginCall && !request) {\r\n throw ClientConfigurationError.createEmptyRequestError();\r\n }\r\n var scopes;\r\n var extraQueryParameters;\r\n if (request) {\r\n // if extraScopesToConsent is passed in loginCall, append them to the login request; Validate and filter scopes (the validate function will throw if validation fails)\r\n scopes = isLoginCall ? ScopeSet.appendScopes(request.scopes, request.extraScopesToConsent) : request.scopes;\r\n ScopeSet.validateInputScope(scopes, !isLoginCall);\r\n scopes = ScopeSet.translateClientIdIfSingleScope(scopes, clientId);\r\n // validate prompt parameter\r\n this.validatePromptParameter(request.prompt);\r\n // validate extraQueryParameters\r\n extraQueryParameters = this.validateEQParameters(request.extraQueryParameters, request.claimsRequest);\r\n // validate claimsRequest\r\n this.validateClaimsRequest(request.claimsRequest);\r\n }\r\n // validate and generate state and correlationId\r\n var state = this.validateAndGenerateState(request && request.state, interactionType);\r\n var correlationId = this.validateAndGenerateCorrelationId(request && request.correlationId);\r\n var validatedRequest = tslib_1.__assign({}, request, { extraQueryParameters: extraQueryParameters,\r\n scopes: scopes,\r\n state: state,\r\n correlationId: correlationId });\r\n return validatedRequest;\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * Utility to test if valid prompt value is passed in the request\r\n * @param request\r\n */\r\n RequestUtils.validatePromptParameter = function (prompt) {\r\n if (prompt) {\r\n if ([PromptState.LOGIN, PromptState.SELECT_ACCOUNT, PromptState.CONSENT, PromptState.NONE].indexOf(prompt) < 0) {\r\n throw ClientConfigurationError.createInvalidPromptError(prompt);\r\n }\r\n }\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * Removes unnecessary or duplicate query parameters from extraQueryParameters\r\n * @param request\r\n */\r\n RequestUtils.validateEQParameters = function (extraQueryParameters, claimsRequest) {\r\n var eQParams = tslib_1.__assign({}, extraQueryParameters);\r\n if (!eQParams) {\r\n return null;\r\n }\r\n if (claimsRequest) {\r\n // this.logger.warning(\"Removed duplicate claims from extraQueryParameters. Please use either the claimsRequest field OR pass as extraQueryParameter - not both.\");\r\n delete eQParams[Constants.claims];\r\n }\r\n BlacklistedEQParams.forEach(function (param) {\r\n if (eQParams[param]) {\r\n // this.logger.warning(\"Removed duplicate \" + param + \" from extraQueryParameters. Please use the \" + param + \" field in request object.\");\r\n delete eQParams[param];\r\n }\r\n });\r\n return eQParams;\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * Validates the claims passed in request is a JSON\r\n * TODO: More validation will be added when the server team tells us how they have actually implemented claims\r\n * @param claimsRequest\r\n */\r\n RequestUtils.validateClaimsRequest = function (claimsRequest) {\r\n if (!claimsRequest) {\r\n return;\r\n }\r\n try {\r\n JSON.parse(claimsRequest);\r\n }\r\n catch (e) {\r\n throw ClientConfigurationError.createClaimsRequestParsingError(e);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * generate unique state per request\r\n * @param userState User-provided state value\r\n * @returns State string include library state and user state\r\n */\r\n RequestUtils.validateAndGenerateState = function (userState, interactionType) {\r\n return !StringUtils.isEmpty(userState) ? \"\" + RequestUtils.generateLibraryState(interactionType) + Constants.resourceDelimiter + userState : RequestUtils.generateLibraryState(interactionType);\r\n };\r\n /**\r\n * Generates the state value used by the library.\r\n *\r\n * @returns Base64 encoded string representing the state\r\n */\r\n RequestUtils.generateLibraryState = function (interactionType) {\r\n var stateObject = {\r\n id: CryptoUtils.createNewGuid(),\r\n ts: TimeUtils.now(),\r\n method: interactionType\r\n };\r\n var stateString = JSON.stringify(stateObject);\r\n return CryptoUtils.base64Encode(stateString);\r\n };\r\n /**\r\n * Decodes the state value into a StateObject\r\n *\r\n * @param state State value returned in the request\r\n * @returns Parsed values from the encoded state value\r\n */\r\n RequestUtils.parseLibraryState = function (state) {\r\n var libraryState = decodeURIComponent(state).split(Constants.resourceDelimiter)[0];\r\n if (CryptoUtils.isGuid(libraryState)) {\r\n // If state is guid, assume timestamp is now and is redirect, as redirect should be only method where this can happen.\r\n return {\r\n id: libraryState,\r\n ts: TimeUtils.now(),\r\n method: Constants.interactionTypeRedirect\r\n };\r\n }\r\n try {\r\n var stateString = CryptoUtils.base64Decode(libraryState);\r\n var stateObject = JSON.parse(stateString);\r\n return stateObject;\r\n }\r\n catch (e) {\r\n throw ClientAuthError.createInvalidStateError(state, null);\r\n }\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * validate correlationId and generate if not valid or not set by the user\r\n * @param correlationId\r\n */\r\n RequestUtils.validateAndGenerateCorrelationId = function (correlationId) {\r\n // validate user set correlationId or set one for the user if null\r\n if (correlationId && !CryptoUtils.isGuid(correlationId)) {\r\n throw ClientConfigurationError.createInvalidCorrelationIdError();\r\n }\r\n return CryptoUtils.isGuid(correlationId) ? correlationId : CryptoUtils.createNewGuid();\r\n };\r\n /**\r\n * Create a request signature\r\n * @param request\r\n */\r\n RequestUtils.createRequestSignature = function (request) {\r\n return \"\" + request.scopes.join(\" \").toLowerCase() + Constants.resourceDelimiter + request.authority;\r\n };\r\n return RequestUtils;\r\n}());\r\nexport { RequestUtils };\r\n//# sourceMappingURL=RequestUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Constants, PersistentCacheKeys, TemporaryCacheKeys, ErrorCacheKeys, ServerHashParamKeys } from \"../utils/Constants\";\r\nimport { AccessTokenCacheItem } from \"./AccessTokenCacheItem\";\r\nimport { BrowserStorage } from \"./BrowserStorage\";\r\nimport { RequestUtils } from \"../utils/RequestUtils\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { IdToken } from \"../IdToken\";\r\n/**\r\n * @hidden\r\n */\r\nvar AuthCache = /** @class */ (function (_super) {\r\n tslib_1.__extends(AuthCache, _super);\r\n function AuthCache(clientId, cacheLocation, storeAuthStateInCookie) {\r\n var _this = _super.call(this, cacheLocation) || this;\r\n _this.clientId = clientId;\r\n // This is hardcoded to true for now. We may make this configurable in the future\r\n _this.rollbackEnabled = true;\r\n _this.migrateCacheEntries(storeAuthStateInCookie);\r\n return _this;\r\n }\r\n /**\r\n * Support roll back to old cache schema until the next major release: true by default now\r\n * @param storeAuthStateInCookie\r\n */\r\n AuthCache.prototype.migrateCacheEntries = function (storeAuthStateInCookie) {\r\n var _this = this;\r\n var idTokenKey = Constants.cachePrefix + \".\" + PersistentCacheKeys.IDTOKEN;\r\n var clientInfoKey = Constants.cachePrefix + \".\" + PersistentCacheKeys.CLIENT_INFO;\r\n var errorKey = Constants.cachePrefix + \".\" + ErrorCacheKeys.ERROR;\r\n var errorDescKey = Constants.cachePrefix + \".\" + ErrorCacheKeys.ERROR_DESC;\r\n var idTokenValue = _super.prototype.getItem.call(this, idTokenKey);\r\n var idToken;\r\n if (idTokenValue) {\r\n try {\r\n idToken = new IdToken(idTokenValue);\r\n }\r\n catch (e) {\r\n return;\r\n }\r\n }\r\n if (idToken && idToken.claims && idToken.claims.aud === this.clientId) {\r\n var clientInfoValue = _super.prototype.getItem.call(this, clientInfoKey);\r\n var errorValue = _super.prototype.getItem.call(this, errorKey);\r\n var errorDescValue = _super.prototype.getItem.call(this, errorDescKey);\r\n var values_1 = [idTokenValue, clientInfoValue, errorValue, errorDescValue];\r\n var keysToMigrate = [PersistentCacheKeys.IDTOKEN, PersistentCacheKeys.CLIENT_INFO, ErrorCacheKeys.ERROR, ErrorCacheKeys.ERROR_DESC];\r\n keysToMigrate.forEach(function (cacheKey, index) { return _this.duplicateCacheEntry(cacheKey, values_1[index], storeAuthStateInCookie); });\r\n }\r\n };\r\n /**\r\n * Utility function to help with roll back keys\r\n * @param newKey\r\n * @param value\r\n * @param storeAuthStateInCookie\r\n */\r\n AuthCache.prototype.duplicateCacheEntry = function (newKey, value, storeAuthStateInCookie) {\r\n if (value) {\r\n this.setItem(newKey, value, storeAuthStateInCookie);\r\n }\r\n };\r\n /**\r\n * Prepend msal. to each key; Skip for any JSON object as Key (defined schemas do not need the key appended: AccessToken Keys or the upcoming schema)\r\n * @param key\r\n * @param addInstanceId\r\n */\r\n AuthCache.prototype.generateCacheKey = function (key, addInstanceId) {\r\n try {\r\n // Defined schemas do not need the key appended\r\n JSON.parse(key);\r\n return key;\r\n }\r\n catch (e) {\r\n if (key.indexOf(\"\" + Constants.cachePrefix) === 0 || key.indexOf(Constants.adalIdToken) === 0) {\r\n return key;\r\n }\r\n return addInstanceId ? Constants.cachePrefix + \".\" + this.clientId + \".\" + key : Constants.cachePrefix + \".\" + key;\r\n }\r\n };\r\n /**\r\n * Validates that the input cache key contains the account search terms (clientId and homeAccountIdentifier) and\r\n * then whether or not it contains the \"scopes\", depending on the token type being searched for. With matching account\r\n * search terms, Access Token search tries to match the \"scopes\" keyword, while Id Token search expects \"scopes\" to not be included.\r\n * @param key\r\n * @param clientId\r\n * @param homeAccountIdentifier\r\n * @param tokenType\r\n */\r\n AuthCache.prototype.matchKeyForType = function (key, clientId, homeAccountIdentifier, tokenType) {\r\n // All valid token cache item keys are valid JSON objects, ignore keys that aren't\r\n var parsedKey = StringUtils.validateAndParseJsonCacheKey(key);\r\n if (!parsedKey) {\r\n return null;\r\n }\r\n // Does the cache item match the request account\r\n var accountMatches = key.match(clientId) && key.match(homeAccountIdentifier);\r\n // Does the cache item match the requested token type\r\n var tokenTypeMatches = false;\r\n switch (tokenType) {\r\n case ServerHashParamKeys.ACCESS_TOKEN:\r\n // Cache item is an access token if scopes are included in the cache item key\r\n tokenTypeMatches = !!key.match(Constants.scopes);\r\n break;\r\n case ServerHashParamKeys.ID_TOKEN:\r\n // Cache may be an ID token if scopes are NOT included in the cache item key\r\n tokenTypeMatches = !key.match(Constants.scopes);\r\n break;\r\n }\r\n return (accountMatches && tokenTypeMatches) ? parsedKey : null;\r\n };\r\n /**\r\n * add value to storage\r\n * @param key\r\n * @param value\r\n * @param enableCookieStorage\r\n */\r\n AuthCache.prototype.setItem = function (key, value, enableCookieStorage) {\r\n _super.prototype.setItem.call(this, this.generateCacheKey(key, true), value, enableCookieStorage);\r\n // Values stored in cookies will have rollback disabled to minimize cookie length\r\n if (this.rollbackEnabled && !enableCookieStorage) {\r\n _super.prototype.setItem.call(this, this.generateCacheKey(key, false), value, enableCookieStorage);\r\n }\r\n };\r\n /**\r\n * get one item by key from storage\r\n * @param key\r\n * @param enableCookieStorage\r\n */\r\n AuthCache.prototype.getItem = function (key, enableCookieStorage) {\r\n return _super.prototype.getItem.call(this, this.generateCacheKey(key, true), enableCookieStorage);\r\n };\r\n /**\r\n * remove value from storage\r\n * @param key\r\n */\r\n AuthCache.prototype.removeItem = function (key) {\r\n _super.prototype.removeItem.call(this, this.generateCacheKey(key, true));\r\n if (this.rollbackEnabled) {\r\n _super.prototype.removeItem.call(this, this.generateCacheKey(key, false));\r\n }\r\n };\r\n /**\r\n * Reset the cache items\r\n */\r\n AuthCache.prototype.resetCacheItems = function () {\r\n var storage = window[this.cacheLocation];\r\n var key;\r\n for (key in storage) {\r\n // Check if key contains msal prefix; For now, we are clearing all cache items created by MSAL.js\r\n if (storage.hasOwnProperty(key) && (key.indexOf(Constants.cachePrefix) !== -1)) {\r\n _super.prototype.removeItem.call(this, key);\r\n // TODO: Clear cache based on client id (clarify use cases where this is needed)\r\n }\r\n }\r\n };\r\n /**\r\n * Reset all temporary cache items\r\n */\r\n AuthCache.prototype.resetTempCacheItems = function (state) {\r\n var _this = this;\r\n var stateId = state && RequestUtils.parseLibraryState(state).id;\r\n var isTokenRenewalInProgress = this.tokenRenewalInProgress(state);\r\n var storage = window[this.cacheLocation];\r\n // check state and remove associated cache\r\n if (stateId && !isTokenRenewalInProgress) {\r\n Object.keys(storage).forEach(function (key) {\r\n if (key.indexOf(stateId) !== -1) {\r\n _this.removeItem(key);\r\n _super.prototype.clearItemCookie.call(_this, key);\r\n }\r\n });\r\n }\r\n // delete the interaction status cache\r\n this.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n this.removeItem(TemporaryCacheKeys.REDIRECT_REQUEST);\r\n };\r\n /**\r\n * Set cookies for IE\r\n * @param cName\r\n * @param cValue\r\n * @param expires\r\n */\r\n AuthCache.prototype.setItemCookie = function (cName, cValue, expires) {\r\n _super.prototype.setItemCookie.call(this, this.generateCacheKey(cName, true), cValue, expires);\r\n if (this.rollbackEnabled) {\r\n _super.prototype.setItemCookie.call(this, this.generateCacheKey(cName, false), cValue, expires);\r\n }\r\n };\r\n AuthCache.prototype.clearItemCookie = function (cName) {\r\n _super.prototype.clearItemCookie.call(this, this.generateCacheKey(cName, true));\r\n if (this.rollbackEnabled) {\r\n _super.prototype.clearItemCookie.call(this, this.generateCacheKey(cName, false));\r\n }\r\n };\r\n /**\r\n * get one item by key from cookies\r\n * @param cName\r\n */\r\n AuthCache.prototype.getItemCookie = function (cName) {\r\n return _super.prototype.getItemCookie.call(this, this.generateCacheKey(cName, true));\r\n };\r\n /**\r\n * Get all tokens of a certain type from the cache\r\n * @param clientId\r\n * @param homeAccountIdentifier\r\n * @param tokenType\r\n */\r\n AuthCache.prototype.getAllTokensByType = function (clientId, homeAccountIdentifier, tokenType) {\r\n var _this = this;\r\n var results = Object.keys(window[this.cacheLocation]).reduce(function (tokens, key) {\r\n var matchedTokenKey = _this.matchKeyForType(key, clientId, homeAccountIdentifier, tokenType);\r\n if (matchedTokenKey) {\r\n var value = _this.getItem(key);\r\n if (value) {\r\n try {\r\n var newAccessTokenCacheItem = new AccessTokenCacheItem(matchedTokenKey, JSON.parse(value));\r\n return tokens.concat([newAccessTokenCacheItem]);\r\n }\r\n catch (err) {\r\n // Skip cache items with non-valid JSON values\r\n return tokens;\r\n }\r\n }\r\n }\r\n return tokens;\r\n }, []);\r\n return results;\r\n };\r\n /**\r\n * Get all access tokens in the cache\r\n * @param clientId\r\n * @param homeAccountIdentifier\r\n */\r\n AuthCache.prototype.getAllAccessTokens = function (clientId, homeAccountIdentifier) {\r\n return this.getAllTokensByType(clientId, homeAccountIdentifier, ServerHashParamKeys.ACCESS_TOKEN);\r\n };\r\n /**\r\n * Get all id tokens in the cache in the form of AccessTokenCacheItem objects so they are\r\n * in a normalized format and can make use of the existing cached access token validation logic\r\n */\r\n AuthCache.prototype.getAllIdTokens = function (clientId, homeAccountIdentifier) {\r\n return this.getAllTokensByType(clientId, homeAccountIdentifier, ServerHashParamKeys.ID_TOKEN);\r\n };\r\n /**\r\n * Get all access and ID tokens in the cache\r\n * @param clientId\r\n * @param homeAccountIdentifier\r\n */\r\n AuthCache.prototype.getAllTokens = function (clientId, homeAccountIdentifier) {\r\n var accessTokens = this.getAllAccessTokens(clientId, homeAccountIdentifier);\r\n var idTokens = this.getAllIdTokens(clientId, homeAccountIdentifier);\r\n return accessTokens.concat(idTokens);\r\n };\r\n /**\r\n * Return if the token renewal is still in progress\r\n *\r\n * @param stateValue\r\n */\r\n AuthCache.prototype.tokenRenewalInProgress = function (stateValue) {\r\n var renewStatus = this.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.RENEW_STATUS, stateValue));\r\n return !!(renewStatus && renewStatus === Constants.inProgress);\r\n };\r\n /**\r\n * Clear all cookies\r\n */\r\n AuthCache.prototype.clearMsalCookie = function (state) {\r\n var _this = this;\r\n /*\r\n * If state is truthy, remove values associated with that request.\r\n * Otherwise, remove all MSAL cookies.\r\n */\r\n if (state) {\r\n this.clearItemCookie(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.NONCE_IDTOKEN, state));\r\n this.clearItemCookie(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_LOGIN, state));\r\n this.clearItemCookie(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.LOGIN_REQUEST, state));\r\n this.clearItemCookie(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_ACQ_TOKEN, state));\r\n }\r\n else {\r\n var cookies = document.cookie.split(\";\");\r\n cookies.forEach(function (cookieString) {\r\n var cookieName = cookieString.trim().split(\"=\")[0];\r\n if (cookieName.indexOf(Constants.cachePrefix) > -1) {\r\n _super.prototype.clearItemCookie.call(_this, cookieName);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * Create acquireTokenAccountKey to cache account object\r\n * @param accountId\r\n * @param state\r\n */\r\n AuthCache.generateAcquireTokenAccountKey = function (accountId, state) {\r\n var stateId = RequestUtils.parseLibraryState(state).id;\r\n return \"\" + TemporaryCacheKeys.ACQUIRE_TOKEN_ACCOUNT + Constants.resourceDelimiter + accountId + Constants.resourceDelimiter + stateId;\r\n };\r\n /**\r\n * Create authorityKey to cache authority\r\n * @param state\r\n */\r\n AuthCache.generateAuthorityKey = function (state) {\r\n return AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.AUTHORITY, state);\r\n };\r\n /**\r\n * Generates the cache key for temporary cache items, using request state\r\n * @param tempCacheKey Cache key prefix\r\n * @param state Request state value\r\n */\r\n AuthCache.generateTemporaryCacheKey = function (tempCacheKey, state) {\r\n // Use the state id (a guid), in the interest of shorter key names, which is important for cookies.\r\n var stateId = RequestUtils.parseLibraryState(state).id;\r\n return \"\" + tempCacheKey + Constants.resourceDelimiter + stateId;\r\n };\r\n return AuthCache;\r\n}(BrowserStorage));\r\nexport { AuthCache };\r\n//# sourceMappingURL=AuthCache.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { CryptoUtils } from \"./utils/CryptoUtils\";\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\n/**\r\n * accountIdentifier combination of idToken.uid and idToken.utid\r\n * homeAccountIdentifier combination of clientInfo.uid and clientInfo.utid\r\n * userName idToken.preferred_username\r\n * name idToken.name\r\n * idToken idToken\r\n * sid idToken.sid - session identifier\r\n * environment idtoken.issuer (the authority that issues the token)\r\n */\r\nvar Account = /** @class */ (function () {\r\n /**\r\n * Creates an Account Object\r\n * @praram accountIdentifier\r\n * @param homeAccountIdentifier\r\n * @param userName\r\n * @param name\r\n * @param idToken\r\n * @param sid\r\n * @param environment\r\n */\r\n function Account(accountIdentifier, homeAccountIdentifier, userName, name, idTokenClaims, sid, environment) {\r\n this.accountIdentifier = accountIdentifier;\r\n this.homeAccountIdentifier = homeAccountIdentifier;\r\n this.userName = userName;\r\n this.name = name;\r\n // will be deprecated soon\r\n this.idToken = idTokenClaims;\r\n this.idTokenClaims = idTokenClaims;\r\n this.sid = sid;\r\n this.environment = environment;\r\n }\r\n /**\r\n * @hidden\r\n * @param idToken\r\n * @param clientInfo\r\n */\r\n Account.createAccount = function (idToken, clientInfo) {\r\n // create accountIdentifier\r\n var accountIdentifier = idToken.objectId || idToken.subject;\r\n // create homeAccountIdentifier\r\n var uid = clientInfo ? clientInfo.uid : \"\";\r\n var utid = clientInfo ? clientInfo.utid : \"\";\r\n var homeAccountIdentifier;\r\n if (!StringUtils.isEmpty(uid)) {\r\n homeAccountIdentifier = StringUtils.isEmpty(utid) ? CryptoUtils.base64Encode(uid) : CryptoUtils.base64Encode(uid) + \".\" + CryptoUtils.base64Encode(utid);\r\n }\r\n return new Account(accountIdentifier, homeAccountIdentifier, idToken.preferredName, idToken.name, idToken.claims, idToken.sid, idToken.issuer);\r\n };\r\n /**\r\n * Utils function to compare two Account objects - used to check if the same user account is logged in\r\n *\r\n * @param a1: Account object\r\n * @param a2: Account object\r\n */\r\n Account.compareAccounts = function (a1, a2) {\r\n if (!a1 || !a2) {\r\n return false;\r\n }\r\n if (a1.homeAccountIdentifier && a2.homeAccountIdentifier) {\r\n if (a1.homeAccountIdentifier === a2.homeAccountIdentifier) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n return Account;\r\n}());\r\nexport { Account };\r\n//# sourceMappingURL=Account.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { UrlUtils } from \"./UrlUtils\";\r\nimport { TemporaryCacheKeys, Constants } from \"./Constants\";\r\nimport { TimeUtils } from \"./TimeUtils\";\r\nvar WindowUtils = /** @class */ (function () {\r\n function WindowUtils() {\r\n }\r\n /**\r\n * @hidden\r\n * Checks if the current page is running in an iframe.\r\n * @ignore\r\n */\r\n WindowUtils.isInIframe = function () {\r\n return window.parent !== window;\r\n };\r\n /**\r\n * @hidden\r\n * Check if the current page is running in a popup.\r\n * @ignore\r\n */\r\n WindowUtils.isInPopup = function () {\r\n return !!(window.opener && window.opener !== window);\r\n };\r\n /**\r\n * @hidden\r\n * @param prefix\r\n * @param scopes\r\n * @param authority\r\n */\r\n WindowUtils.generateFrameName = function (prefix, requestSignature) {\r\n return \"\" + prefix + Constants.resourceDelimiter + requestSignature;\r\n };\r\n /**\r\n * @hidden\r\n * Polls an iframe until it loads a url with a hash\r\n * @ignore\r\n */\r\n WindowUtils.monitorIframeForHash = function (contentWindow, timeout, urlNavigate, logger) {\r\n return new Promise(function (resolve, reject) {\r\n /*\r\n * Polling for iframes can be purely timing based,\r\n * since we don't need to account for interaction.\r\n */\r\n var nowMark = TimeUtils.relativeNowMs();\r\n var timeoutMark = nowMark + timeout;\r\n logger.verbose(\"monitorWindowForIframe polling started\");\r\n var intervalId = setInterval(function () {\r\n if (TimeUtils.relativeNowMs() > timeoutMark) {\r\n logger.error(\"monitorIframeForHash unable to find hash in url, timing out\");\r\n logger.errorPii(\"monitorIframeForHash polling timed out for url: \" + urlNavigate);\r\n clearInterval(intervalId);\r\n reject(ClientAuthError.createTokenRenewalTimeoutError());\r\n return;\r\n }\r\n var href;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = contentWindow.location.href;\r\n }\r\n catch (e) { }\r\n if (href && UrlUtils.urlContainsHash(href)) {\r\n logger.verbose(\"monitorIframeForHash found url in hash\");\r\n clearInterval(intervalId);\r\n resolve(contentWindow.location.hash);\r\n }\r\n }, WindowUtils.POLLING_INTERVAL_MS);\r\n });\r\n };\r\n /**\r\n * @hidden\r\n * Polls a popup until it loads a url with a hash\r\n * @ignore\r\n */\r\n WindowUtils.monitorPopupForHash = function (contentWindow, timeout, urlNavigate, logger) {\r\n return new Promise(function (resolve, reject) {\r\n /*\r\n * Polling for popups needs to be tick-based,\r\n * since a non-trivial amount of time can be spent on interaction (which should not count against the timeout).\r\n */\r\n var maxTicks = timeout / WindowUtils.POLLING_INTERVAL_MS;\r\n var ticks = 0;\r\n logger.verbose(\"monitorWindowForHash polling started\");\r\n var intervalId = setInterval(function () {\r\n if (contentWindow.closed) {\r\n logger.error(\"monitorWindowForHash window closed\");\r\n clearInterval(intervalId);\r\n reject(ClientAuthError.createUserCancelledError());\r\n return;\r\n }\r\n var href;\r\n try {\r\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\r\n href = contentWindow.location.href;\r\n }\r\n catch (e) { }\r\n // Don't process blank pages or cross domain\r\n if (!href || href === \"about:blank\") {\r\n return;\r\n }\r\n /*\r\n * Only run clock when we are on same domain for popups\r\n * as popup operations can take a long time.\r\n */\r\n ticks++;\r\n if (href && UrlUtils.urlContainsHash(href)) {\r\n logger.verbose(\"monitorPopupForHash found url in hash\");\r\n clearInterval(intervalId);\r\n var hash = contentWindow.location.hash;\r\n WindowUtils.clearUrlFragment(contentWindow);\r\n resolve(hash);\r\n }\r\n else if (ticks > maxTicks) {\r\n logger.error(\"monitorPopupForHash unable to find hash in url, timing out\");\r\n logger.errorPii(\"monitorPopupForHash polling timed out for url: \" + urlNavigate);\r\n clearInterval(intervalId);\r\n reject(ClientAuthError.createTokenRenewalTimeoutError());\r\n }\r\n }, WindowUtils.POLLING_INTERVAL_MS);\r\n });\r\n };\r\n /**\r\n * @hidden\r\n * Loads iframe with authorization endpoint URL\r\n * @ignore\r\n */\r\n WindowUtils.loadFrame = function (urlNavigate, frameName, timeoutMs, logger) {\r\n var _this = this;\r\n /*\r\n * This trick overcomes iframe navigation in IE\r\n * IE does not load the page consistently in iframe\r\n */\r\n logger.infoPii(\"LoadFrame: \" + frameName);\r\n return new Promise(function (resolve, reject) {\r\n setTimeout(function () {\r\n var frameHandle = _this.loadFrameSync(urlNavigate, frameName, logger);\r\n if (!frameHandle) {\r\n reject(\"Unable to load iframe with name: \" + frameName);\r\n return;\r\n }\r\n resolve(frameHandle);\r\n }, timeoutMs);\r\n });\r\n };\r\n /**\r\n * @hidden\r\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\r\n * @param urlNavigate\r\n * @param frameName\r\n * @param logger\r\n */\r\n WindowUtils.loadFrameSync = function (urlNavigate, frameName, logger) {\r\n var frameHandle = WindowUtils.addHiddenIFrame(frameName, logger);\r\n // returning to handle null in loadFrame, also to avoid null object access errors\r\n if (!frameHandle) {\r\n return null;\r\n }\r\n else if (frameHandle.src === \"\" || frameHandle.src === \"about:blank\") {\r\n frameHandle.src = urlNavigate;\r\n logger.infoPii(\"Frame Name : \" + frameName + \" Navigated to: \" + urlNavigate);\r\n }\r\n return frameHandle;\r\n };\r\n /**\r\n * @hidden\r\n * Adds the hidden iframe for silent token renewal.\r\n * @ignore\r\n */\r\n WindowUtils.addHiddenIFrame = function (iframeId, logger) {\r\n if (typeof iframeId === \"undefined\") {\r\n return null;\r\n }\r\n logger.infoPii(\"Add msal frame to document:\" + iframeId);\r\n var adalFrame = document.getElementById(iframeId);\r\n if (!adalFrame) {\r\n if (document.createElement &&\r\n document.documentElement &&\r\n (window.navigator.userAgent.indexOf(\"MSIE 5.0\") === -1)) {\r\n var ifr = document.createElement(\"iframe\");\r\n ifr.setAttribute(\"id\", iframeId);\r\n ifr.setAttribute(\"aria-hidden\", \"true\");\r\n ifr.style.visibility = \"hidden\";\r\n ifr.style.position = \"absolute\";\r\n ifr.style.width = ifr.style.height = \"0\";\r\n ifr.style.border = \"0\";\r\n ifr.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\r\n adalFrame = document.getElementsByTagName(\"body\")[0].appendChild(ifr);\r\n }\r\n else if (document.body && document.body.insertAdjacentHTML) {\r\n document.body.insertAdjacentHTML(\"beforeend\", \"\");\r\n }\r\n if (window.frames && window.frames[iframeId]) {\r\n adalFrame = window.frames[iframeId];\r\n }\r\n }\r\n return adalFrame;\r\n };\r\n /**\r\n * @hidden\r\n * Removes a hidden iframe from the page.\r\n * @ignore\r\n */\r\n WindowUtils.removeHiddenIframe = function (iframe) {\r\n if (document.body === iframe.parentNode) {\r\n document.body.removeChild(iframe);\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * Find and return the iframe element with the given hash\r\n * @ignore\r\n */\r\n WindowUtils.getIframeWithHash = function (hash) {\r\n var iframes = document.getElementsByTagName(\"iframe\");\r\n var iframeArray = Array.apply(null, Array(iframes.length)).map(function (iframe, index) { return iframes.item(index); }); // eslint-disable-line prefer-spread\r\n return iframeArray.filter(function (iframe) {\r\n try {\r\n return iframe.contentWindow.location.hash === hash;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n })[0];\r\n };\r\n /**\r\n * @hidden\r\n * Returns an array of all the popups opened by MSAL\r\n * @ignore\r\n */\r\n WindowUtils.getPopups = function () {\r\n if (!window.openedWindows) {\r\n window.openedWindows = [];\r\n }\r\n return window.openedWindows;\r\n };\r\n /**\r\n * @hidden\r\n * Find and return the popup with the given hash\r\n * @ignore\r\n */\r\n WindowUtils.getPopUpWithHash = function (hash) {\r\n return WindowUtils.getPopups().filter(function (popup) {\r\n try {\r\n return popup.location.hash === hash;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n })[0];\r\n };\r\n /**\r\n * @hidden\r\n * Add the popup to the known list of popups\r\n * @ignore\r\n */\r\n WindowUtils.trackPopup = function (popup) {\r\n WindowUtils.getPopups().push(popup);\r\n };\r\n /**\r\n * @hidden\r\n * Close all popups\r\n * @ignore\r\n */\r\n WindowUtils.closePopups = function () {\r\n WindowUtils.getPopups().forEach(function (popup) { return popup.close(); });\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * blocks any login/acquireToken calls to reload from within a hidden iframe (generated for silent calls)\r\n */\r\n WindowUtils.blockReloadInHiddenIframes = function () {\r\n // return an error if called from the hidden iframe created by the msal js silent calls\r\n if (UrlUtils.urlContainsHash(window.location.hash) && WindowUtils.isInIframe()) {\r\n throw ClientAuthError.createBlockTokenRequestsInHiddenIframeError();\r\n }\r\n };\r\n /**\r\n *\r\n * @param cacheStorage\r\n */\r\n WindowUtils.checkIfBackButtonIsPressed = function (cacheStorage) {\r\n var redirectCache = cacheStorage.getItem(TemporaryCacheKeys.REDIRECT_REQUEST);\r\n // if redirect request is set and there is no hash\r\n if (redirectCache && !UrlUtils.urlContainsHash(window.location.hash)) {\r\n var splitCache = redirectCache.split(Constants.resourceDelimiter);\r\n splitCache.shift();\r\n var state = splitCache.length > 0 ? splitCache.join(Constants.resourceDelimiter) : null;\r\n cacheStorage.resetTempCacheItems(state);\r\n }\r\n };\r\n /**\r\n * Removes url fragment from browser url\r\n */\r\n WindowUtils.clearUrlFragment = function (contentWindow) {\r\n contentWindow.location.hash = \"\";\r\n // Office.js sets history.replaceState to null\r\n if (typeof contentWindow.history.replaceState === \"function\") {\r\n // Full removes \"#\" from url\r\n contentWindow.history.replaceState(null, null, \"\" + contentWindow.location.pathname + contentWindow.location.search);\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * Interval in milliseconds that we poll a window\r\n * @ignore\r\n */\r\n WindowUtils.POLLING_INTERVAL_MS = 50;\r\n return WindowUtils;\r\n}());\r\nexport { WindowUtils };\r\n//# sourceMappingURL=WindowUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { ResponseTypes, ServerHashParamKeys } from \"./Constants\";\r\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n/**\r\n * @hidden\r\n */\r\nvar ResponseUtils = /** @class */ (function () {\r\n function ResponseUtils() {\r\n }\r\n ResponseUtils.setResponseIdToken = function (originalResponse, idTokenObj) {\r\n if (!originalResponse) {\r\n return null;\r\n }\r\n else if (!idTokenObj) {\r\n return originalResponse;\r\n }\r\n var exp = Number(idTokenObj.expiration);\r\n if (exp && !originalResponse.expiresOn) {\r\n originalResponse.expiresOn = new Date(exp * 1000);\r\n }\r\n return tslib_1.__assign({}, originalResponse, { idToken: idTokenObj, idTokenClaims: idTokenObj.claims, uniqueId: idTokenObj.objectId || idTokenObj.subject, tenantId: idTokenObj.tenantId });\r\n };\r\n ResponseUtils.buildAuthResponse = function (idToken, authResponse, serverAuthenticationRequest, account, scopes, accountState) {\r\n switch (serverAuthenticationRequest.responseType) {\r\n case ResponseTypes.id_token:\r\n authResponse = tslib_1.__assign({}, authResponse, { tokenType: ServerHashParamKeys.ID_TOKEN, account: account, scopes: scopes, accountState: accountState });\r\n authResponse = ResponseUtils.setResponseIdToken(authResponse, idToken);\r\n return (authResponse.idToken) ? authResponse : null;\r\n case ResponseTypes.id_token_token:\r\n authResponse = ResponseUtils.setResponseIdToken(authResponse, idToken);\r\n return (authResponse && authResponse.accessToken && authResponse.idToken) ? authResponse : null;\r\n case ResponseTypes.token:\r\n authResponse = ResponseUtils.setResponseIdToken(authResponse, idToken);\r\n return authResponse;\r\n default:\r\n return null;\r\n }\r\n };\r\n return ResponseUtils;\r\n}());\r\nexport { ResponseUtils };\r\n//# sourceMappingURL=ResponseUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\n/**\r\n * @hidden\r\n */\r\nimport { Authority } from \"./Authority\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nvar AuthorityFactory = /** @class */ (function () {\r\n function AuthorityFactory() {\r\n }\r\n AuthorityFactory.saveMetadataFromNetwork = function (authorityInstance, telemetryManager, correlationId) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var metadata;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, authorityInstance.resolveEndpointsAsync(telemetryManager, correlationId)];\r\n case 1:\r\n metadata = _a.sent();\r\n this.metadataMap.set(authorityInstance.CanonicalAuthority, metadata);\r\n return [2 /*return*/, metadata];\r\n }\r\n });\r\n });\r\n };\r\n AuthorityFactory.getMetadata = function (authorityUrl) {\r\n return this.metadataMap.get(authorityUrl);\r\n };\r\n AuthorityFactory.saveMetadataFromConfig = function (authorityUrl, authorityMetadataJson) {\r\n try {\r\n if (authorityMetadataJson) {\r\n var parsedMetadata = JSON.parse(authorityMetadataJson);\r\n if (!parsedMetadata.authorization_endpoint || !parsedMetadata.end_session_endpoint || !parsedMetadata.issuer) {\r\n throw ClientConfigurationError.createInvalidAuthorityMetadataError();\r\n }\r\n this.metadataMap.set(authorityUrl, {\r\n AuthorizationEndpoint: parsedMetadata.authorization_endpoint,\r\n EndSessionEndpoint: parsedMetadata.end_session_endpoint,\r\n Issuer: parsedMetadata.issuer\r\n });\r\n }\r\n }\r\n catch (e) {\r\n throw ClientConfigurationError.createInvalidAuthorityMetadataError();\r\n }\r\n };\r\n /**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (eg aad, b2c)\r\n */\r\n AuthorityFactory.CreateInstance = function (authorityUrl, validateAuthority, authorityMetadata) {\r\n if (StringUtils.isEmpty(authorityUrl)) {\r\n return null;\r\n }\r\n if (authorityMetadata) {\r\n // todo: log statements\r\n this.saveMetadataFromConfig(authorityUrl, authorityMetadata);\r\n }\r\n return new Authority(authorityUrl, validateAuthority, this.metadataMap.get(authorityUrl));\r\n };\r\n AuthorityFactory.metadataMap = new Map();\r\n return AuthorityFactory;\r\n}());\r\nexport { AuthorityFactory };\r\n//# sourceMappingURL=AuthorityFactory.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { Logger } from \"./Logger\";\r\nimport { UrlUtils } from \"./utils/UrlUtils\";\r\n/**\r\n * Defaults for the Configuration Options\r\n */\r\nvar FRAME_TIMEOUT = 6000;\r\nvar OFFSET = 300;\r\nvar NAVIGATE_FRAME_WAIT = 500;\r\nvar DEFAULT_AUTH_OPTIONS = {\r\n clientId: \"\",\r\n authority: null,\r\n validateAuthority: true,\r\n authorityMetadata: \"\",\r\n knownAuthorities: [],\r\n redirectUri: function () { return UrlUtils.getCurrentUrl(); },\r\n postLogoutRedirectUri: function () { return UrlUtils.getCurrentUrl(); },\r\n navigateToLoginRequestUrl: true\r\n};\r\nvar DEFAULT_CACHE_OPTIONS = {\r\n cacheLocation: \"sessionStorage\",\r\n storeAuthStateInCookie: false\r\n};\r\nvar DEFAULT_SYSTEM_OPTIONS = {\r\n logger: new Logger(null),\r\n loadFrameTimeout: FRAME_TIMEOUT,\r\n tokenRenewalOffsetSeconds: OFFSET,\r\n navigateFrameWait: NAVIGATE_FRAME_WAIT\r\n};\r\nvar DEFAULT_FRAMEWORK_OPTIONS = {\r\n isAngular: false,\r\n unprotectedResources: new Array(),\r\n protectedResourceMap: new Map()\r\n};\r\n/**\r\n * MSAL function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param TAuthOptions\r\n * @param TCacheOptions\r\n * @param TSystemOptions\r\n * @param TFrameworkOptions\r\n * @param TAuthorityDataOptions\r\n *\r\n * @returns TConfiguration object\r\n */\r\nexport function buildConfiguration(_a) {\r\n var auth = _a.auth, _b = _a.cache, cache = _b === void 0 ? {} : _b, _c = _a.system, system = _c === void 0 ? {} : _c, _d = _a.framework, framework = _d === void 0 ? {} : _d;\r\n var overlayedConfig = {\r\n auth: tslib_1.__assign({}, DEFAULT_AUTH_OPTIONS, auth),\r\n cache: tslib_1.__assign({}, DEFAULT_CACHE_OPTIONS, cache),\r\n system: tslib_1.__assign({}, DEFAULT_SYSTEM_OPTIONS, system),\r\n framework: tslib_1.__assign({}, DEFAULT_FRAMEWORK_OPTIONS, framework)\r\n };\r\n return overlayedConfig;\r\n}\r\n//# sourceMappingURL=Configuration.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { AuthError } from \"./AuthError\";\r\nexport var ServerErrorMessage = {\r\n serverUnavailable: {\r\n code: \"server_unavailable\",\r\n desc: \"Server is temporarily unavailable.\"\r\n },\r\n unknownServerError: {\r\n code: \"unknown_server_error\"\r\n },\r\n};\r\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\r\nvar ServerError = /** @class */ (function (_super) {\r\n tslib_1.__extends(ServerError, _super);\r\n function ServerError(errorCode, errorMessage) {\r\n var _this = _super.call(this, errorCode, errorMessage) || this;\r\n _this.name = \"ServerError\";\r\n Object.setPrototypeOf(_this, ServerError.prototype);\r\n return _this;\r\n }\r\n ServerError.createServerUnavailableError = function () {\r\n return new ServerError(ServerErrorMessage.serverUnavailable.code, ServerErrorMessage.serverUnavailable.desc);\r\n };\r\n ServerError.createUnknownServerError = function (errorDesc) {\r\n return new ServerError(ServerErrorMessage.unknownServerError.code, errorDesc);\r\n };\r\n return ServerError;\r\n}(AuthError));\r\nexport { ServerError };\r\n//# sourceMappingURL=ServerError.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { ServerError } from \"./ServerError\";\r\nexport var InteractionRequiredAuthErrorMessage = {\r\n interactionRequired: {\r\n code: \"interaction_required\"\r\n },\r\n consentRequired: {\r\n code: \"consent_required\"\r\n },\r\n loginRequired: {\r\n code: \"login_required\"\r\n },\r\n};\r\n/**\r\n * Error thrown when the user is required to perform an interactive token request.\r\n */\r\nvar InteractionRequiredAuthError = /** @class */ (function (_super) {\r\n tslib_1.__extends(InteractionRequiredAuthError, _super);\r\n function InteractionRequiredAuthError(errorCode, errorMessage) {\r\n var _this = _super.call(this, errorCode, errorMessage) || this;\r\n _this.name = \"InteractionRequiredAuthError\";\r\n Object.setPrototypeOf(_this, InteractionRequiredAuthError.prototype);\r\n return _this;\r\n }\r\n InteractionRequiredAuthError.isInteractionRequiredError = function (errorString) {\r\n var interactionRequiredCodes = [\r\n InteractionRequiredAuthErrorMessage.interactionRequired.code,\r\n InteractionRequiredAuthErrorMessage.consentRequired.code,\r\n InteractionRequiredAuthErrorMessage.loginRequired.code\r\n ];\r\n return errorString && interactionRequiredCodes.indexOf(errorString) > -1;\r\n };\r\n InteractionRequiredAuthError.createLoginRequiredAuthError = function (errorDesc) {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.loginRequired.code, errorDesc);\r\n };\r\n InteractionRequiredAuthError.createInteractionRequiredAuthError = function (errorDesc) {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.interactionRequired.code, errorDesc);\r\n };\r\n InteractionRequiredAuthError.createConsentRequiredAuthError = function (errorDesc) {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.consentRequired.code, errorDesc);\r\n };\r\n return InteractionRequiredAuthError;\r\n}(ServerError));\r\nexport { InteractionRequiredAuthError };\r\n//# sourceMappingURL=InteractionRequiredAuthError.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nexport function buildResponseStateOnly(state) {\r\n return {\r\n uniqueId: \"\",\r\n tenantId: \"\",\r\n tokenType: \"\",\r\n idToken: null,\r\n idTokenClaims: null,\r\n accessToken: \"\",\r\n scopes: null,\r\n expiresOn: null,\r\n account: null,\r\n accountState: state,\r\n fromCache: false\r\n };\r\n}\r\n//# sourceMappingURL=AuthResponse.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nexport var EVENT_NAME_PREFIX = \"msal.\";\r\nexport var EVENT_NAME_KEY = \"event_name\";\r\nexport var START_TIME_KEY = \"start_time\";\r\nexport var ELAPSED_TIME_KEY = \"elapsed_time\";\r\nexport var TELEMETRY_BLOB_EVENT_NAMES = {\r\n MsalCorrelationIdConstStrKey: \"Microsoft.MSAL.correlation_id\",\r\n ApiTelemIdConstStrKey: \"msal.api_telem_id\",\r\n ApiIdConstStrKey: \"msal.api_id\",\r\n BrokerAppConstStrKey: \"Microsoft_MSAL_broker_app\",\r\n CacheEventCountConstStrKey: \"Microsoft_MSAL_cache_event_count\",\r\n HttpEventCountTelemetryBatchKey: \"Microsoft_MSAL_http_event_count\",\r\n IdpConstStrKey: \"Microsoft_MSAL_idp\",\r\n IsSilentTelemetryBatchKey: \"\",\r\n IsSuccessfulConstStrKey: \"Microsoft_MSAL_is_successful\",\r\n ResponseTimeConstStrKey: \"Microsoft_MSAL_response_time\",\r\n TenantIdConstStrKey: \"Microsoft_MSAL_tenant_id\",\r\n UiEventCountTelemetryBatchKey: \"Microsoft_MSAL_ui_event_count\"\r\n};\r\n// This is used to replace the real tenant in telemetry info\r\nexport var TENANT_PLACEHOLDER = \"\";\r\n//# sourceMappingURL=TelemetryConstants.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nvar _a;\r\nimport * as tslib_1 from \"tslib\";\r\nimport TelemetryEvent from \"./TelemetryEvent\";\r\nimport { TELEMETRY_BLOB_EVENT_NAMES } from \"./TelemetryConstants\";\r\nimport { scrubTenantFromUri, hashPersonalIdentifier, prependEventNamePrefix } from \"./TelemetryUtils\";\r\nexport var EVENT_KEYS = {\r\n AUTHORITY: prependEventNamePrefix(\"authority\"),\r\n AUTHORITY_TYPE: prependEventNamePrefix(\"authority_type\"),\r\n PROMPT: prependEventNamePrefix(\"ui_behavior\"),\r\n TENANT_ID: prependEventNamePrefix(\"tenant_id\"),\r\n USER_ID: prependEventNamePrefix(\"user_id\"),\r\n WAS_SUCESSFUL: prependEventNamePrefix(\"was_successful\"),\r\n API_ERROR_CODE: prependEventNamePrefix(\"api_error_code\"),\r\n LOGIN_HINT: prependEventNamePrefix(\"login_hint\")\r\n};\r\nexport var API_CODE;\r\n(function (API_CODE) {\r\n API_CODE[API_CODE[\"AcquireTokenRedirect\"] = 2001] = \"AcquireTokenRedirect\";\r\n API_CODE[API_CODE[\"AcquireTokenSilent\"] = 2002] = \"AcquireTokenSilent\";\r\n API_CODE[API_CODE[\"AcquireTokenPopup\"] = 2003] = \"AcquireTokenPopup\";\r\n API_CODE[API_CODE[\"LoginRedirect\"] = 2004] = \"LoginRedirect\";\r\n API_CODE[API_CODE[\"LoginPopup\"] = 2005] = \"LoginPopup\";\r\n API_CODE[API_CODE[\"Logout\"] = 2006] = \"Logout\";\r\n})(API_CODE || (API_CODE = {}));\r\nexport var API_EVENT_IDENTIFIER;\r\n(function (API_EVENT_IDENTIFIER) {\r\n API_EVENT_IDENTIFIER[\"AcquireTokenRedirect\"] = \"AcquireTokenRedirect\";\r\n API_EVENT_IDENTIFIER[\"AcquireTokenSilent\"] = \"AcquireTokenSilent\";\r\n API_EVENT_IDENTIFIER[\"AcquireTokenPopup\"] = \"AcquireTokenPopup\";\r\n API_EVENT_IDENTIFIER[\"LoginRedirect\"] = \"LoginRedirect\";\r\n API_EVENT_IDENTIFIER[\"LoginPopup\"] = \"LoginPopup\";\r\n API_EVENT_IDENTIFIER[\"Logout\"] = \"Logout\";\r\n})(API_EVENT_IDENTIFIER || (API_EVENT_IDENTIFIER = {}));\r\nvar mapEventIdentiferToCode = (_a = {},\r\n _a[API_EVENT_IDENTIFIER.AcquireTokenSilent] = API_CODE.AcquireTokenSilent,\r\n _a[API_EVENT_IDENTIFIER.AcquireTokenPopup] = API_CODE.AcquireTokenPopup,\r\n _a[API_EVENT_IDENTIFIER.AcquireTokenRedirect] = API_CODE.AcquireTokenRedirect,\r\n _a[API_EVENT_IDENTIFIER.LoginPopup] = API_CODE.LoginPopup,\r\n _a[API_EVENT_IDENTIFIER.LoginRedirect] = API_CODE.LoginRedirect,\r\n _a[API_EVENT_IDENTIFIER.Logout] = API_CODE.Logout,\r\n _a);\r\nvar ApiEvent = /** @class */ (function (_super) {\r\n tslib_1.__extends(ApiEvent, _super);\r\n function ApiEvent(correlationId, piiEnabled, apiEventIdentifier) {\r\n var _this = _super.call(this, prependEventNamePrefix(\"api_event\"), correlationId, apiEventIdentifier) || this;\r\n if (apiEventIdentifier) {\r\n _this.apiCode = mapEventIdentiferToCode[apiEventIdentifier];\r\n _this.apiEventIdentifier = apiEventIdentifier;\r\n }\r\n _this.piiEnabled = piiEnabled;\r\n return _this;\r\n }\r\n Object.defineProperty(ApiEvent.prototype, \"apiEventIdentifier\", {\r\n set: function (apiEventIdentifier) {\r\n this.event[TELEMETRY_BLOB_EVENT_NAMES.ApiTelemIdConstStrKey] = apiEventIdentifier;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"apiCode\", {\r\n set: function (apiCode) {\r\n this.event[TELEMETRY_BLOB_EVENT_NAMES.ApiIdConstStrKey] = apiCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"authority\", {\r\n set: function (uri) {\r\n this.event[EVENT_KEYS.AUTHORITY] = scrubTenantFromUri(uri).toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"apiErrorCode\", {\r\n set: function (errorCode) {\r\n this.event[EVENT_KEYS.API_ERROR_CODE] = errorCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"tenantId\", {\r\n set: function (tenantId) {\r\n this.event[EVENT_KEYS.TENANT_ID] = this.piiEnabled && tenantId ?\r\n hashPersonalIdentifier(tenantId)\r\n : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"accountId\", {\r\n set: function (accountId) {\r\n this.event[EVENT_KEYS.USER_ID] = this.piiEnabled && accountId ?\r\n hashPersonalIdentifier(accountId)\r\n : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"wasSuccessful\", {\r\n get: function () {\r\n return this.event[EVENT_KEYS.WAS_SUCESSFUL] === true;\r\n },\r\n set: function (wasSuccessful) {\r\n this.event[EVENT_KEYS.WAS_SUCESSFUL] = wasSuccessful;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"loginHint\", {\r\n set: function (loginHint) {\r\n this.event[EVENT_KEYS.LOGIN_HINT] = this.piiEnabled && loginHint ?\r\n hashPersonalIdentifier(loginHint)\r\n : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"authorityType\", {\r\n set: function (authorityType) {\r\n this.event[EVENT_KEYS.AUTHORITY_TYPE] = authorityType.toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(ApiEvent.prototype, \"promptType\", {\r\n set: function (promptType) {\r\n this.event[EVENT_KEYS.PROMPT] = promptType.toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return ApiEvent;\r\n}(TelemetryEvent));\r\nexport default ApiEvent;\r\n//# sourceMappingURL=ApiEvent.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { TENANT_PLACEHOLDER, EVENT_NAME_PREFIX } from \"./TelemetryConstants\";\r\nimport { CryptoUtils } from \"../utils/CryptoUtils\";\r\nimport { UrlUtils } from \"../utils/UrlUtils\";\r\nimport { Authority } from \"../authority/Authority\";\r\nexport var scrubTenantFromUri = function (uri) {\r\n var url = UrlUtils.GetUrlComponents(uri);\r\n // validate trusted host\r\n if (Authority.isAdfs(uri)) {\r\n /**\r\n * returning what was passed because the library needs to work with uris that are non\r\n * AAD trusted but passed by users such as B2C or others.\r\n * HTTP Events for instance can take a url to the open id config endpoint\r\n */\r\n return uri;\r\n }\r\n var pathParams = url.PathSegments;\r\n if (pathParams && pathParams.length >= 2) {\r\n var tenantPosition = pathParams[1] === \"tfp\" ? 2 : 1;\r\n if (tenantPosition < pathParams.length) {\r\n pathParams[tenantPosition] = TENANT_PLACEHOLDER;\r\n }\r\n }\r\n return url.Protocol + \"//\" + url.HostNameAndPort + \"/\" + pathParams.join(\"/\");\r\n};\r\nexport var hashPersonalIdentifier = function (valueToHash) {\r\n /*\r\n * TODO sha256 this\r\n * Current test runner is being funny with node libs that are webpacked anyway\r\n * need a different solution\r\n */\r\n return CryptoUtils.base64Encode(valueToHash);\r\n};\r\nexport var prependEventNamePrefix = function (suffix) { return \"\" + EVENT_NAME_PREFIX + (suffix || \"\"); };\r\nexport var supportsBrowserPerformance = function () { return !!(typeof window !== \"undefined\" &&\r\n \"performance\" in window &&\r\n window.performance.mark &&\r\n window.performance.measure); };\r\nexport var endBrowserPerformanceMeasurement = function (measureName, startMark, endMark) {\r\n if (supportsBrowserPerformance()) {\r\n window.performance.mark(endMark);\r\n window.performance.measure(measureName, startMark, endMark);\r\n window.performance.clearMeasures(measureName);\r\n window.performance.clearMarks(startMark);\r\n window.performance.clearMarks(endMark);\r\n }\r\n};\r\nexport var startBrowserPerformanceMeasurement = function (startMark) {\r\n if (supportsBrowserPerformance()) {\r\n window.performance.mark(startMark);\r\n }\r\n};\r\n//# sourceMappingURL=TelemetryUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { TELEMETRY_BLOB_EVENT_NAMES, EVENT_NAME_KEY, START_TIME_KEY, ELAPSED_TIME_KEY } from \"./TelemetryConstants\";\r\nimport { prependEventNamePrefix, startBrowserPerformanceMeasurement, endBrowserPerformanceMeasurement } from \"./TelemetryUtils\";\r\nimport { CryptoUtils } from \"../utils/CryptoUtils\";\r\nvar TelemetryEvent = /** @class */ (function () {\r\n function TelemetryEvent(eventName, correlationId, eventLabel) {\r\n var _a;\r\n this.eventId = CryptoUtils.createNewGuid();\r\n this.label = eventLabel;\r\n this.event = (_a = {},\r\n _a[prependEventNamePrefix(EVENT_NAME_KEY)] = eventName,\r\n _a[prependEventNamePrefix(ELAPSED_TIME_KEY)] = -1,\r\n _a[\"\" + TELEMETRY_BLOB_EVENT_NAMES.MsalCorrelationIdConstStrKey] = correlationId,\r\n _a);\r\n }\r\n TelemetryEvent.prototype.setElapsedTime = function (time) {\r\n this.event[prependEventNamePrefix(ELAPSED_TIME_KEY)] = time;\r\n };\r\n TelemetryEvent.prototype.stop = function () {\r\n // Set duration of event\r\n this.setElapsedTime(+Date.now() - +this.startTimestamp);\r\n endBrowserPerformanceMeasurement(this.displayName, this.perfStartMark, this.perfEndMark);\r\n };\r\n TelemetryEvent.prototype.start = function () {\r\n this.startTimestamp = Date.now();\r\n this.event[prependEventNamePrefix(START_TIME_KEY)] = this.startTimestamp;\r\n startBrowserPerformanceMeasurement(this.perfStartMark);\r\n };\r\n Object.defineProperty(TelemetryEvent.prototype, \"telemetryCorrelationId\", {\r\n get: function () {\r\n return this.event[\"\" + TELEMETRY_BLOB_EVENT_NAMES.MsalCorrelationIdConstStrKey];\r\n },\r\n set: function (value) {\r\n this.event[\"\" + TELEMETRY_BLOB_EVENT_NAMES.MsalCorrelationIdConstStrKey] = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TelemetryEvent.prototype, \"eventName\", {\r\n get: function () {\r\n return this.event[prependEventNamePrefix(EVENT_NAME_KEY)];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TelemetryEvent.prototype.get = function () {\r\n return tslib_1.__assign({}, this.event, { eventId: this.eventId });\r\n };\r\n Object.defineProperty(TelemetryEvent.prototype, \"key\", {\r\n get: function () {\r\n return this.telemetryCorrelationId + \"_\" + this.eventId + \"-\" + this.eventName;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TelemetryEvent.prototype, \"displayName\", {\r\n get: function () {\r\n return \"Msal-\" + this.label + \"-\" + this.telemetryCorrelationId;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TelemetryEvent.prototype, \"perfStartMark\", {\r\n get: function () {\r\n return \"start-\" + this.key;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(TelemetryEvent.prototype, \"perfEndMark\", {\r\n get: function () {\r\n return \"end-\" + this.key;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return TelemetryEvent;\r\n}());\r\nexport default TelemetryEvent;\r\n//# sourceMappingURL=TelemetryEvent.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { TELEMETRY_BLOB_EVENT_NAMES } from \"./TelemetryConstants\";\r\nimport TelemetryEvent from \"./TelemetryEvent\";\r\nimport { prependEventNamePrefix } from \"./TelemetryUtils\";\r\nvar DefaultEvent = /** @class */ (function (_super) {\r\n tslib_1.__extends(DefaultEvent, _super);\r\n // TODO Platform Type\r\n function DefaultEvent(platform, correlationId, clientId, eventCount) {\r\n var _this = _super.call(this, prependEventNamePrefix(\"default_event\"), correlationId, \"DefaultEvent\") || this;\r\n _this.event[prependEventNamePrefix(\"client_id\")] = clientId;\r\n _this.event[prependEventNamePrefix(\"sdk_plaform\")] = platform.sdk;\r\n _this.event[prependEventNamePrefix(\"sdk_version\")] = platform.sdkVersion;\r\n _this.event[prependEventNamePrefix(\"application_name\")] = platform.applicationName;\r\n _this.event[prependEventNamePrefix(\"application_version\")] = platform.applicationVersion;\r\n _this.event[prependEventNamePrefix(\"effective_connection_speed\")] = platform.networkInformation && platform.networkInformation.connectionSpeed;\r\n _this.event[\"\" + TELEMETRY_BLOB_EVENT_NAMES.UiEventCountTelemetryBatchKey] = _this.getEventCount(prependEventNamePrefix(\"ui_event\"), eventCount);\r\n _this.event[\"\" + TELEMETRY_BLOB_EVENT_NAMES.HttpEventCountTelemetryBatchKey] = _this.getEventCount(prependEventNamePrefix(\"http_event\"), eventCount);\r\n _this.event[\"\" + TELEMETRY_BLOB_EVENT_NAMES.CacheEventCountConstStrKey] = _this.getEventCount(prependEventNamePrefix(\"cache_event\"), eventCount);\r\n return _this;\r\n // / Device id?\r\n }\r\n DefaultEvent.prototype.getEventCount = function (eventName, eventCount) {\r\n if (!eventCount[eventName]) {\r\n return 0;\r\n }\r\n return eventCount[eventName];\r\n };\r\n return DefaultEvent;\r\n}(TelemetryEvent));\r\nexport default DefaultEvent;\r\n//# sourceMappingURL=DefaultEvent.js.map","import { __decorate, __param, __awaiter } from 'tslib';\nimport { Injectable, InjectionToken, Inject, NgModule } from '@angular/core';\nimport { BehaviorSubject, from } from 'rxjs';\nimport { filter, map, mergeMap, tap } from 'rxjs/operators';\nimport { UserAgentApplication, UrlUtils, WindowUtils, InteractionRequiredAuthError, ServerHashParamKeys } from 'msal';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { Minimatch } from 'minimatch';\nimport { Location, PlatformLocation, CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/router';\nimport * as ɵngcc2 from '@angular/common';\nlet BroadcastService = class BroadcastService {\r\n constructor() {\r\n this._msalSubject = new BehaviorSubject(1);\r\n this.msalItem$ = this._msalSubject.asObservable();\r\n }\r\n broadcast(type, payload) {\r\n this._msalSubject.next({ type, payload });\r\n }\r\n getMSALSubject() {\r\n return this._msalSubject;\r\n }\r\n getMSALItem() {\r\n return this.msalItem$;\r\n }\r\n subscribe(type, callback) {\r\n return this.msalItem$\r\n .pipe(filter(message => message.type === type), map(message => message.payload))\r\n .subscribe(callback);\r\n }\r\n};\nBroadcastService.ɵfac = function BroadcastService_Factory(t) { return new (t || BroadcastService)(); };\nBroadcastService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BroadcastService, factory: BroadcastService.ɵfac });\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nclass MSALError {\r\n constructor(error, errorDesc, scopes) {\r\n this._error = \"\";\r\n this._errorDesc = \"\";\r\n this._scopes = \"\";\r\n this._error = error;\r\n if (errorDesc) {\r\n this._errorDesc = errorDesc;\r\n }\r\n if (scopes) {\r\n this._scopes = scopes;\r\n }\r\n }\r\n get error() {\r\n return this._error;\r\n }\r\n set error(value) {\r\n this._error = value;\r\n }\r\n get errorDesc() {\r\n return this._errorDesc;\r\n }\r\n set errorDesc(value) {\r\n this._errorDesc = value;\r\n }\r\n get scopes() {\r\n return this._scopes;\r\n }\r\n set scopes(value) {\r\n this._scopes = value;\r\n }\r\n}\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst MSAL_CONFIG = new InjectionToken(\"MSAL_CONFIG\");\r\nconst MSAL_CONFIG_ANGULAR = new InjectionToken(\"MSAL_CONFIG_ANGULAR\");\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst buildMsalConfig = (config) => {\r\n return Object.assign(Object.assign({}, config), { framework: Object.assign(Object.assign({}, config.framework), { isAngular: true }) });\r\n};\r\nconst ɵ0 = buildMsalConfig;\r\nlet MsalService = class MsalService extends UserAgentApplication {\r\n constructor(msalConfig, msalAngularConfig, router, broadcastService) {\r\n super(buildMsalConfig(msalConfig));\r\n this.msalConfig = msalConfig;\r\n this.msalAngularConfig = msalAngularConfig;\r\n this.router = router;\r\n this.broadcastService = broadcastService;\r\n window.addEventListener(\"msal:popUpHashChanged\", () => {\r\n this.getLogger().verbose(\"popUpHashChanged \");\r\n });\r\n window.addEventListener(\"msal:popUpClosed\", (e) => {\r\n const errorParts = e.detail.split(\"|\");\r\n const msalError = new MSALError(errorParts[0], errorParts[1]);\r\n if (this.getLoginInProgress()) {\r\n broadcastService.broadcast(\"msal:loginFailure\", msalError);\r\n this.setloginInProgress(false);\r\n }\r\n else if (this.getAcquireTokenInProgress()) {\r\n broadcastService.broadcast(\"msal:acquireTokenFailure\", msalError);\r\n this.setAcquireTokenInProgress(false);\r\n }\r\n });\r\n }\r\n loginPopup(request) {\r\n return super.loginPopup(request)\r\n .then((authResponse) => {\r\n this.broadcastService.broadcast(\"msal:loginSuccess\", authResponse);\r\n return authResponse;\r\n })\r\n .catch((error) => {\r\n this.broadcastService.broadcast(\"msal:loginFailure\", error);\r\n this.getLogger().error(\"Error during login:\\n\" + error.errorMessage);\r\n throw error;\r\n });\r\n }\r\n ssoSilent(request) {\r\n return super.ssoSilent(request)\r\n .then((authResponse) => {\r\n this.broadcastService.broadcast(\"msal:ssoSuccess\", authResponse);\r\n return authResponse;\r\n })\r\n .catch((error) => {\r\n this.broadcastService.broadcast(\"msal:ssoFailure\", error);\r\n this.getLogger().error(\"Error during login:\\n\" + error.errorMessage);\r\n throw error;\r\n });\r\n }\r\n acquireTokenSilent(request) {\r\n return super.acquireTokenSilent(request)\r\n .then((authResponse) => {\r\n this.broadcastService.broadcast(\"msal:acquireTokenSuccess\", authResponse);\r\n return authResponse;\r\n })\r\n .catch((error) => {\r\n this.broadcastService.broadcast(\"msal:acquireTokenFailure\", error);\r\n this.getLogger().error(\"Error when acquiring token for scopes: \" + request.scopes + \" \" + error);\r\n throw error;\r\n });\r\n }\r\n acquireTokenPopup(request) {\r\n return super.acquireTokenPopup(request)\r\n .then((authResponse) => {\r\n this.broadcastService.broadcast(\"msal:acquireTokenSuccess\", authResponse);\r\n return authResponse;\r\n })\r\n .catch((error) => {\r\n this.broadcastService.broadcast(\"msal:acquireTokenFailure\", error);\r\n this.getLogger().error(\"Error when acquiring token for scopes : \" + request.scopes + \" \" + error);\r\n throw error;\r\n });\r\n }\r\n handleRedirectCallback(authOrTokenCallback, errorReceivedCallback) {\r\n super.handleRedirectCallback((authError, authResponse) => {\r\n if (authError) {\r\n if (!this.getAccount()) {\r\n this.broadcastService.broadcast(\"msal:loginFailure\", authError);\r\n }\r\n else {\r\n this.broadcastService.broadcast(\"msal:acquireTokenFailure\", authError);\r\n }\r\n if (errorReceivedCallback) {\r\n errorReceivedCallback(authError, authResponse.accountState);\r\n }\r\n else {\r\n authOrTokenCallback(authError, authResponse);\r\n }\r\n }\r\n else if (authResponse) {\r\n if (authResponse.tokenType === \"id_token\") {\r\n this.broadcastService.broadcast(\"msal:loginSuccess\", authResponse);\r\n }\r\n else {\r\n this.broadcastService.broadcast(\"msal:acquireTokenSuccess\", authResponse);\r\n }\r\n if (errorReceivedCallback) {\r\n authOrTokenCallback(authResponse);\r\n }\r\n else {\r\n authOrTokenCallback(null, authResponse);\r\n }\r\n }\r\n });\r\n }\r\n clearCacheForScope(accessToken) {\r\n return super.clearCacheForScope(accessToken);\r\n }\r\n getScopesForEndpoint(endpoint) {\r\n if ((this.msalConfig.framework && this.msalConfig.framework.unprotectedResources) || (this.msalAngularConfig && this.msalAngularConfig.unprotectedResources)) {\r\n this.getLogger().info(\"unprotectedResources is deprecated and ignored. msalAngularConfig.protectedResourceMap now supports glob patterns\");\r\n }\r\n const frameworkProtectedResourceMap = this.msalConfig.framework && this.msalConfig.framework.protectedResourceMap;\r\n if (frameworkProtectedResourceMap) {\r\n this.getLogger().info(\"msalConfig.framework.protectedResourceMap is deprecated, use msalAngularConfig.protectedResourceMap\");\r\n }\r\n const protectedResourceMap = frameworkProtectedResourceMap && frameworkProtectedResourceMap.size ? frameworkProtectedResourceMap : new Map(this.msalAngularConfig.protectedResourceMap);\r\n const protectedResourcesArray = Array.from(protectedResourceMap.keys());\r\n const keyMatchesEndpointArray = protectedResourcesArray.filter(key => {\r\n const minimatch = new Minimatch(key);\r\n return minimatch.match(endpoint) || endpoint.indexOf(key) > -1;\r\n });\r\n // process all protected resources and send the first matched resource\r\n if (keyMatchesEndpointArray.length > 0) {\r\n if (keyMatchesEndpointArray.length > 1) {\r\n this.getLogger().warning(\"Multiple entries in protectedResourceMap found for resource. Using first entry.\");\r\n this.getLogger().warningPii(`Multiple entries found for: ${endpoint}`);\r\n }\r\n const keyForEndpoint = keyMatchesEndpointArray[0];\r\n if (keyForEndpoint) {\r\n return protectedResourceMap.get(keyForEndpoint);\r\n }\r\n }\r\n /*\r\n * default resource will be clientid if nothing specified\r\n * App will use idtoken for calls to itself\r\n * check if it's staring from http or https, needs to match with app host\r\n */\r\n if (endpoint.indexOf(\"http://\") > -1 || endpoint.indexOf(\"https://\") > -1) {\r\n if (UrlUtils.getHostFromUri(endpoint) === UrlUtils.getHostFromUri(super.getRedirectUri())) {\r\n return new Array(this.msalConfig.auth.clientId);\r\n }\r\n }\r\n else {\r\n /*\r\n * in angular level, the url for $http interceptor call could be relative url,\r\n * if it's relative call, we'll treat it as app backend call.\r\n */\r\n return new Array(this.msalConfig.auth.clientId);\r\n }\r\n // if not the app's own backend or not a domain listed in the endpoints structure\r\n return null;\r\n }\r\n};\nMsalService.ɵfac = function MsalService_Factory(t) { return new (t || MsalService)(ɵngcc0.ɵɵinject(MSAL_CONFIG), ɵngcc0.ɵɵinject(MSAL_CONFIG_ANGULAR), ɵngcc0.ɵɵinject(ɵngcc1.Router), ɵngcc0.ɵɵinject(BroadcastService)); };\nMsalService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MsalService, factory: MsalService.ɵfac });\r\nMsalService.ctorParameters = () => [\r\n { type: undefined, decorators: [{ type: Inject, args: [MSAL_CONFIG,] }] },\r\n { type: undefined, decorators: [{ type: Inject, args: [MSAL_CONFIG_ANGULAR,] }] },\r\n { type: Router },\r\n { type: BroadcastService }\r\n];\r\nMsalService = __decorate([ __param(0, Inject(MSAL_CONFIG)),\r\n __param(1, Inject(MSAL_CONFIG_ANGULAR))\r\n], MsalService);\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nlet MsalGuard = class MsalGuard {\r\n constructor(msalConfig, msalAngularConfig, authService, router, activatedRoute, location, platformLocation, broadcastService) {\r\n this.msalConfig = msalConfig;\r\n this.msalAngularConfig = msalAngularConfig;\r\n this.authService = authService;\r\n this.router = router;\r\n this.activatedRoute = activatedRoute;\r\n this.location = location;\r\n this.platformLocation = platformLocation;\r\n this.broadcastService = broadcastService;\r\n }\r\n /**\r\n * Builds the absolute url for the destination page\r\n * @param path Relative path of requested page\r\n * @returns Full destination url\r\n */\r\n getDestinationUrl(path) {\r\n // Absolute base url for the application (default to origin if base element not present)\r\n const baseElements = document.getElementsByTagName(\"base\");\r\n const baseUrl = this.location.normalize(baseElements.length ? baseElements[0].href : window.location.origin);\r\n // Path of page (including hash, if using hash routing)\r\n const pathUrl = this.location.prepareExternalUrl(path);\r\n // Hash location strategy\r\n if (pathUrl.startsWith(\"#\")) {\r\n return `${baseUrl}/${pathUrl}`;\r\n }\r\n /*\r\n * If using path location strategy, pathUrl will include the relative portion of the base path (e.g. /base/page).\r\n * Since baseUrl also includes /base, can just concatentate baseUrl + path\r\n */\r\n return `${baseUrl}${path}`;\r\n }\r\n /**\r\n * Interactively prompt the user to login\r\n * @param url Path of the requested page\r\n */\r\n loginInteractively(url) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n if (this.msalAngularConfig.popUp) {\r\n return this.authService.loginPopup({\r\n scopes: this.msalAngularConfig.consentScopes,\r\n extraQueryParameters: this.msalAngularConfig.extraQueryParameters\r\n })\r\n .then(() => true)\r\n .catch(() => false);\r\n }\r\n const redirectStartPage = this.getDestinationUrl(url);\r\n this.authService.loginRedirect({\r\n redirectStartPage,\r\n scopes: this.msalAngularConfig.consentScopes,\r\n extraQueryParameters: this.msalAngularConfig.extraQueryParameters\r\n });\r\n });\r\n }\r\n canActivate(route, state) {\r\n this.authService.getLogger().verbose(\"location change event from old url to new url\");\r\n /*\r\n * If a page with MSAL Guard is set as the redirect for acquireTokenSilent,\r\n * short-circuit to prevent redirecting or popups.\r\n */\r\n if (UrlUtils.urlContainsHash(window.location.hash) && WindowUtils.isInIframe()) {\r\n this.authService.getLogger().warning(\"redirectUri set to page with MSAL Guard. It is recommended to not set redirectUri to a page that requires authentication.\");\r\n return false;\r\n }\r\n if (!this.authService.getAccount()) {\r\n return this.loginInteractively(state.url);\r\n }\r\n return this.authService.acquireTokenSilent({\r\n scopes: [this.msalConfig.auth.clientId]\r\n })\r\n .then(() => true)\r\n .catch((error) => {\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(error.errorCode)) {\r\n this.authService.getLogger().info(\"Interaction required error in MSAL Guard, prompting for interaction.\");\r\n return this.loginInteractively(state.url);\r\n }\r\n this.authService.getLogger().error(`Non-interaction error in MSAL Guard: ${error.errorMessage}`);\r\n throw error;\r\n });\r\n }\r\n};\nMsalGuard.ɵfac = function MsalGuard_Factory(t) { return new (t || MsalGuard)(ɵngcc0.ɵɵinject(MSAL_CONFIG), ɵngcc0.ɵɵinject(MSAL_CONFIG_ANGULAR), ɵngcc0.ɵɵinject(MsalService), ɵngcc0.ɵɵinject(ɵngcc1.Router), ɵngcc0.ɵɵinject(ɵngcc1.ActivatedRoute), ɵngcc0.ɵɵinject(ɵngcc2.Location), ɵngcc0.ɵɵinject(ɵngcc2.PlatformLocation), ɵngcc0.ɵɵinject(BroadcastService)); };\nMsalGuard.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MsalGuard, factory: MsalGuard.ɵfac });\r\nMsalGuard.ctorParameters = () => [\r\n { type: undefined, decorators: [{ type: Inject, args: [MSAL_CONFIG,] }] },\r\n { type: undefined, decorators: [{ type: Inject, args: [MSAL_CONFIG_ANGULAR,] }] },\r\n { type: MsalService },\r\n { type: Router },\r\n { type: ActivatedRoute },\r\n { type: Location },\r\n { type: PlatformLocation },\r\n { type: BroadcastService }\r\n];\r\nMsalGuard = __decorate([ __param(0, Inject(MSAL_CONFIG)),\r\n __param(1, Inject(MSAL_CONFIG_ANGULAR))\r\n], MsalGuard);\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nlet MsalInterceptor = class MsalInterceptor {\r\n constructor(auth, broadcastService) {\r\n this.auth = auth;\r\n this.broadcastService = broadcastService;\r\n }\r\n intercept(req, next) {\r\n const scopes = this.auth.getScopesForEndpoint(req.url);\r\n this.auth.getLogger().verbose(\"Url: \" + req.url + \" maps to scopes: \" + scopes);\r\n // If there are no scopes set for this request, do nothing.\r\n if (!scopes) {\r\n return next.handle(req);\r\n }\r\n let token;\r\n // Acquire a token for this request, and attach as proper auth header.\r\n return from(this.auth.acquireTokenSilent({ scopes })\r\n .then((response) => {\r\n token = response.tokenType === ServerHashParamKeys.ID_TOKEN ? response.idToken.rawIdToken : response.accessToken;\r\n const authHeader = `Bearer ${token}`;\r\n return req.clone({\r\n setHeaders: {\r\n Authorization: authHeader,\r\n }\r\n });\r\n }))\r\n .pipe(mergeMap(nextReq => next.handle(nextReq)), tap(() => { }, err => {\r\n if (err instanceof HttpErrorResponse && err.status === 401) {\r\n this.auth.clearCacheForScope(token);\r\n this.broadcastService.broadcast(\"msal:notAuthorized\", err.message);\r\n }\r\n }));\r\n }\r\n};\nMsalInterceptor.ɵfac = function MsalInterceptor_Factory(t) { return new (t || MsalInterceptor)(ɵngcc0.ɵɵinject(MsalService), ɵngcc0.ɵɵinject(BroadcastService)); };\nMsalInterceptor.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MsalInterceptor, factory: MsalInterceptor.ɵfac });\r\nMsalInterceptor.ctorParameters = () => [\r\n { type: MsalService },\r\n { type: BroadcastService }\r\n];\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nconst defaultMsalAngularConfiguration = {\r\n consentScopes: [],\r\n popUp: false,\r\n extraQueryParameters: {},\r\n unprotectedResources: [],\r\n protectedResourceMap: []\r\n};\n\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nvar MsalModule_1;\r\nlet MsalModule = MsalModule_1 = class MsalModule {\r\n static forRoot(config, angularConfig = defaultMsalAngularConfiguration) {\r\n return {\r\n ngModule: MsalModule_1,\r\n providers: [\r\n {\r\n provide: MSAL_CONFIG,\r\n useValue: config\r\n },\r\n {\r\n provide: MSAL_CONFIG_ANGULAR,\r\n useValue: angularConfig\r\n },\r\n MsalService\r\n ]\r\n };\r\n }\r\n};\nMsalModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MsalModule });\nMsalModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MsalModule_Factory(t) { return new (t || MsalModule)(); }, providers: [MsalGuard, BroadcastService], imports: [[CommonModule]] });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BroadcastService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MsalService, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MSAL_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MSAL_CONFIG_ANGULAR]\n }] }, { type: ɵngcc1.Router }, { type: BroadcastService }]; }, null); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MsalGuard, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [MSAL_CONFIG]\n }] }, { type: undefined, decorators: [{\n type: Inject,\n args: [MSAL_CONFIG_ANGULAR]\n }] }, { type: MsalService }, { type: ɵngcc1.Router }, { type: ɵngcc1.ActivatedRoute }, { type: ɵngcc2.Location }, { type: ɵngcc2.PlatformLocation }, { type: BroadcastService }]; }, null); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MsalInterceptor, [{\n type: Injectable\n }], function () { return [{ type: MsalService }, { type: BroadcastService }]; }, null); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MsalModule, { imports: function () { return [CommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MsalModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule],\n declarations: [],\n providers: [MsalGuard, BroadcastService]\n }]\n }], null, null); })();\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\nexport { BroadcastService, MSAL_CONFIG, MSAL_CONFIG_ANGULAR, MsalGuard, MsalInterceptor, MsalModule, MsalService, defaultMsalAngularConfiguration as ɵa };\n\n//# sourceMappingURL=azure-msal-angular.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport TelemetryEvent from \"./TelemetryEvent\";\r\nimport { scrubTenantFromUri, prependEventNamePrefix } from \"./TelemetryUtils\";\r\nimport { ServerRequestParameters } from \"../ServerRequestParameters\";\r\nexport var EVENT_KEYS = {\r\n HTTP_PATH: prependEventNamePrefix(\"http_path\"),\r\n USER_AGENT: prependEventNamePrefix(\"user_agent\"),\r\n QUERY_PARAMETERS: prependEventNamePrefix(\"query_parameters\"),\r\n API_VERSION: prependEventNamePrefix(\"api_version\"),\r\n RESPONSE_CODE: prependEventNamePrefix(\"response_code\"),\r\n O_AUTH_ERROR_CODE: prependEventNamePrefix(\"oauth_error_code\"),\r\n HTTP_METHOD: prependEventNamePrefix(\"http_method\"),\r\n REQUEST_ID_HEADER: prependEventNamePrefix(\"request_id_header\"),\r\n SPE_INFO: prependEventNamePrefix(\"spe_info\"),\r\n SERVER_ERROR_CODE: prependEventNamePrefix(\"server_error_code\"),\r\n SERVER_SUB_ERROR_CODE: prependEventNamePrefix(\"server_sub_error_code\"),\r\n URL: prependEventNamePrefix(\"url\")\r\n};\r\nvar HttpEvent = /** @class */ (function (_super) {\r\n tslib_1.__extends(HttpEvent, _super);\r\n function HttpEvent(correlationId, eventLabel) {\r\n return _super.call(this, prependEventNamePrefix(\"http_event\"), correlationId, eventLabel) || this;\r\n }\r\n Object.defineProperty(HttpEvent.prototype, \"url\", {\r\n set: function (url) {\r\n var scrubbedUri = scrubTenantFromUri(url);\r\n this.event[EVENT_KEYS.URL] = scrubbedUri && scrubbedUri.toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"httpPath\", {\r\n set: function (httpPath) {\r\n this.event[EVENT_KEYS.HTTP_PATH] = scrubTenantFromUri(httpPath).toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"userAgent\", {\r\n set: function (userAgent) {\r\n this.event[EVENT_KEYS.USER_AGENT] = userAgent;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"queryParams\", {\r\n set: function (queryParams) {\r\n this.event[EVENT_KEYS.QUERY_PARAMETERS] = ServerRequestParameters.generateQueryParametersString(queryParams);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"apiVersion\", {\r\n set: function (apiVersion) {\r\n this.event[EVENT_KEYS.API_VERSION] = apiVersion.toLowerCase();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"httpResponseStatus\", {\r\n set: function (statusCode) {\r\n this.event[EVENT_KEYS.RESPONSE_CODE] = statusCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"oAuthErrorCode\", {\r\n set: function (errorCode) {\r\n this.event[EVENT_KEYS.O_AUTH_ERROR_CODE] = errorCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"httpMethod\", {\r\n set: function (httpMethod) {\r\n this.event[EVENT_KEYS.HTTP_METHOD] = httpMethod;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"requestIdHeader\", {\r\n set: function (requestIdHeader) {\r\n this.event[EVENT_KEYS.REQUEST_ID_HEADER] = requestIdHeader;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"speInfo\", {\r\n /**\r\n * Indicates whether the request was executed on a ring serving SPE traffic.\r\n * An empty string indicates this occurred on an outer ring, and the string \"I\"\r\n * indicates the request occurred on the inner ring\r\n */\r\n set: function (speInfo) {\r\n this.event[EVENT_KEYS.SPE_INFO] = speInfo;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"serverErrorCode\", {\r\n set: function (errorCode) {\r\n this.event[EVENT_KEYS.SERVER_ERROR_CODE] = errorCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(HttpEvent.prototype, \"serverSubErrorCode\", {\r\n set: function (subErrorCode) {\r\n this.event[EVENT_KEYS.SERVER_SUB_ERROR_CODE] = subErrorCode;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return HttpEvent;\r\n}(TelemetryEvent));\r\nexport default HttpEvent;\r\n//# sourceMappingURL=HttpEvent.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport DefaultEvent from \"./DefaultEvent\";\r\nimport { Constants } from \"../utils/Constants\";\r\nimport ApiEvent from \"./ApiEvent\";\r\nimport HttpEvent from \"./HttpEvent\";\r\nimport { version as libraryVersion } from \"../packageMetadata\";\r\nvar TelemetryManager = /** @class */ (function () {\r\n function TelemetryManager(config, telemetryEmitter, logger) {\r\n // correlation Id to list of events\r\n this.completedEvents = {};\r\n // event key to event\r\n this.inProgressEvents = {};\r\n // correlation id to map of eventname to count\r\n this.eventCountByCorrelationId = {};\r\n // Implement after API EVENT\r\n this.onlySendFailureTelemetry = false;\r\n // TODO THROW if bad options\r\n this.telemetryPlatform = tslib_1.__assign({ sdk: Constants.libraryName, sdkVersion: libraryVersion, networkInformation: {\r\n // @ts-ignore\r\n connectionSpeed: typeof navigator !== \"undefined\" && navigator.connection && navigator.connection.effectiveType\r\n } }, config.platform);\r\n this.clientId = config.clientId;\r\n this.onlySendFailureTelemetry = config.onlySendFailureTelemetry;\r\n /*\r\n * TODO, when i get to wiring this through, think about what it means if\r\n * a developer does not implement telem at all, we still instrument, but telemetryEmitter can be\r\n * optional?\r\n */\r\n this.telemetryEmitter = telemetryEmitter;\r\n this.logger = logger;\r\n }\r\n TelemetryManager.getTelemetrymanagerStub = function (clientId, logger) {\r\n var applicationName = \"UnSetStub\";\r\n var applicationVersion = \"0.0\";\r\n var telemetryEmitter = function () { };\r\n var telemetryPlatform = {\r\n applicationName: applicationName,\r\n applicationVersion: applicationVersion\r\n };\r\n var telemetryManagerConfig = {\r\n platform: telemetryPlatform,\r\n clientId: clientId\r\n };\r\n return new this(telemetryManagerConfig, telemetryEmitter, logger);\r\n };\r\n TelemetryManager.prototype.startEvent = function (event) {\r\n this.logger.verbose(\"Telemetry Event started: \" + event.key);\r\n if (!this.telemetryEmitter) {\r\n return;\r\n }\r\n event.start();\r\n this.inProgressEvents[event.key] = event;\r\n };\r\n TelemetryManager.prototype.stopEvent = function (event) {\r\n this.logger.verbose(\"Telemetry Event stopped: \" + event.key);\r\n if (!this.telemetryEmitter || !this.inProgressEvents[event.key]) {\r\n return;\r\n }\r\n event.stop();\r\n this.incrementEventCount(event);\r\n var completedEvents = this.completedEvents[event.telemetryCorrelationId];\r\n this.completedEvents[event.telemetryCorrelationId] = (completedEvents || []).concat([event]);\r\n delete this.inProgressEvents[event.key];\r\n };\r\n TelemetryManager.prototype.flush = function (correlationId) {\r\n var _this = this;\r\n this.logger.verbose(\"Flushing telemetry events: \" + correlationId);\r\n // If there is only unfinished events should this still return them?\r\n if (!this.telemetryEmitter || !this.completedEvents[correlationId]) {\r\n return;\r\n }\r\n var orphanedEvents = this.getOrphanedEvents(correlationId);\r\n orphanedEvents.forEach(function (event) { return _this.incrementEventCount(event); });\r\n var eventsToFlush = this.completedEvents[correlationId].concat(orphanedEvents);\r\n delete this.completedEvents[correlationId];\r\n var eventCountsToFlush = this.eventCountByCorrelationId[correlationId];\r\n delete this.eventCountByCorrelationId[correlationId];\r\n // TODO add funcitonality for onlyFlushFailures after implementing api event? ??\r\n if (!eventsToFlush || !eventsToFlush.length) {\r\n return;\r\n }\r\n var defaultEvent = new DefaultEvent(this.telemetryPlatform, correlationId, this.clientId, eventCountsToFlush);\r\n var eventsWithDefaultEvent = eventsToFlush.concat([defaultEvent]);\r\n this.telemetryEmitter(eventsWithDefaultEvent.map(function (e) { return e.get(); }));\r\n };\r\n TelemetryManager.prototype.createAndStartApiEvent = function (correlationId, apiEventIdentifier) {\r\n var apiEvent = new ApiEvent(correlationId, this.logger.isPiiLoggingEnabled(), apiEventIdentifier);\r\n this.startEvent(apiEvent);\r\n return apiEvent;\r\n };\r\n TelemetryManager.prototype.stopAndFlushApiEvent = function (correlationId, apiEvent, wasSuccessful, errorCode) {\r\n apiEvent.wasSuccessful = wasSuccessful;\r\n if (errorCode) {\r\n apiEvent.apiErrorCode = errorCode;\r\n }\r\n this.stopEvent(apiEvent);\r\n this.flush(correlationId);\r\n };\r\n TelemetryManager.prototype.createAndStartHttpEvent = function (correlation, httpMethod, url, eventLabel) {\r\n var httpEvent = new HttpEvent(correlation, eventLabel);\r\n httpEvent.url = url;\r\n httpEvent.httpMethod = httpMethod;\r\n this.startEvent(httpEvent);\r\n return httpEvent;\r\n };\r\n TelemetryManager.prototype.incrementEventCount = function (event) {\r\n var _a;\r\n /*\r\n * TODO, name cache event different?\r\n * if type is cache event, change name\r\n */\r\n var eventName = event.eventName;\r\n var eventCount = this.eventCountByCorrelationId[event.telemetryCorrelationId];\r\n if (!eventCount) {\r\n this.eventCountByCorrelationId[event.telemetryCorrelationId] = (_a = {},\r\n _a[eventName] = 1,\r\n _a);\r\n }\r\n else {\r\n eventCount[eventName] = eventCount[eventName] ? eventCount[eventName] + 1 : 1;\r\n }\r\n };\r\n TelemetryManager.prototype.getOrphanedEvents = function (correlationId) {\r\n var _this = this;\r\n return Object.keys(this.inProgressEvents)\r\n .reduce(function (memo, eventKey) {\r\n if (eventKey.indexOf(correlationId) !== -1) {\r\n var event_1 = _this.inProgressEvents[eventKey];\r\n delete _this.inProgressEvents[eventKey];\r\n return memo.concat([event_1]);\r\n }\r\n return memo;\r\n }, []);\r\n };\r\n return TelemetryManager;\r\n}());\r\nexport default TelemetryManager;\r\n//# sourceMappingURL=TelemetryManager.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport { ScopeSet } from \"../ScopeSet\";\r\nimport { UrlUtils } from \"./UrlUtils\";\r\n/**\r\n * @hidden\r\n */\r\nvar AuthCacheUtils = /** @class */ (function () {\r\n function AuthCacheUtils() {\r\n }\r\n AuthCacheUtils.filterTokenCacheItemsByScope = function (tokenCacheItems, requestScopes) {\r\n return tokenCacheItems.filter(function (cacheItem) {\r\n var cachedScopes = cacheItem.key.scopes.split(\" \");\r\n var searchScopes = ScopeSet.removeDefaultScopes(requestScopes);\r\n // If requestScopes contain only default scopes search for default scopes otherwise search for everything but default scopes\r\n return searchScopes.length === 0 ? ScopeSet.containsScope(cachedScopes, requestScopes) : ScopeSet.containsScope(cachedScopes, searchScopes);\r\n });\r\n };\r\n AuthCacheUtils.filterTokenCacheItemsByAuthority = function (tokenCacheItems, authority) {\r\n return tokenCacheItems.filter(function (cacheItem) { return UrlUtils.CanonicalizeUri(cacheItem.key.authority) === authority; });\r\n };\r\n AuthCacheUtils.filterTokenCacheItemsByDomain = function (tokenCacheItems, requestDomain) {\r\n return tokenCacheItems.filter(function (cacheItem) {\r\n var cacheItemDomain = UrlUtils.GetUrlComponents(cacheItem.key.authority).HostNameAndPort;\r\n return cacheItemDomain === requestDomain;\r\n });\r\n };\r\n return AuthCacheUtils;\r\n}());\r\nexport { AuthCacheUtils };\r\n//# sourceMappingURL=AuthCacheUtils.js.map","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\nimport * as tslib_1 from \"tslib\";\r\nimport { AccessTokenKey } from \"./cache/AccessTokenKey\";\r\nimport { AccessTokenValue } from \"./cache/AccessTokenValue\";\r\nimport { ServerRequestParameters } from \"./ServerRequestParameters\";\r\nimport { AuthorityType } from \"./authority/Authority\";\r\nimport { ClientInfo } from \"./ClientInfo\";\r\nimport { IdToken } from \"./IdToken\";\r\nimport { AuthCache } from \"./cache/AuthCache\";\r\nimport { Account } from \"./Account\";\r\nimport { ScopeSet } from \"./ScopeSet\";\r\nimport { StringUtils } from \"./utils/StringUtils\";\r\nimport { WindowUtils } from \"./utils/WindowUtils\";\r\nimport { TokenUtils } from \"./utils/TokenUtils\";\r\nimport { TimeUtils } from \"./utils/TimeUtils\";\r\nimport { UrlUtils } from \"./utils/UrlUtils\";\r\nimport { RequestUtils } from \"./utils/RequestUtils\";\r\nimport { ResponseUtils } from \"./utils/ResponseUtils\";\r\nimport { AuthorityFactory } from \"./authority/AuthorityFactory\";\r\nimport { buildConfiguration } from \"./Configuration\";\r\nimport { ClientConfigurationError } from \"./error/ClientConfigurationError\";\r\nimport { AuthError } from \"./error/AuthError\";\r\nimport { ClientAuthError, ClientAuthErrorMessage } from \"./error/ClientAuthError\";\r\nimport { ServerError } from \"./error/ServerError\";\r\nimport { InteractionRequiredAuthError } from \"./error/InteractionRequiredAuthError\";\r\nimport { buildResponseStateOnly } from \"./AuthResponse\";\r\nimport TelemetryManager from \"./telemetry/TelemetryManager\";\r\nimport { API_EVENT_IDENTIFIER } from \"./telemetry/ApiEvent\";\r\nimport { Constants, ServerHashParamKeys, ResponseTypes, TemporaryCacheKeys, PersistentCacheKeys, ErrorCacheKeys, FramePrefix } from \"./utils/Constants\";\r\nimport { CryptoUtils } from \"./utils/CryptoUtils\";\r\nimport { TrustedAuthority } from \"./authority/TrustedAuthority\";\r\nimport { AuthCacheUtils } from \"./utils/AuthCacheUtils\";\r\n// default authority\r\nvar DEFAULT_AUTHORITY = \"https://login.microsoftonline.com/common\";\r\n/**\r\n * UserAgentApplication class\r\n *\r\n * Object Instance that the developer can use to make loginXX OR acquireTokenXX functions\r\n */\r\nvar UserAgentApplication = /** @class */ (function () {\r\n /**\r\n * @constructor\r\n * Constructor for the UserAgentApplication used to instantiate the UserAgentApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application.\r\n * You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/<Enter_the_Tenant_Info_Here>.\r\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n *\r\n *\r\n * In Azure B2C, authority is of the form https://<instance>/tfp/<tenant>/<policyName>/\r\n *\r\n * @param {@link (Configuration:type)} configuration object for the MSAL UserAgentApplication instance\r\n */\r\n function UserAgentApplication(configuration) {\r\n // callbacks for token/error\r\n this.authResponseCallback = null;\r\n this.tokenReceivedCallback = null;\r\n this.errorReceivedCallback = null;\r\n // Set the Configuration\r\n this.config = buildConfiguration(configuration);\r\n this.logger = this.config.system.logger;\r\n this.clientId = this.config.auth.clientId;\r\n this.inCookie = this.config.cache.storeAuthStateInCookie;\r\n this.telemetryManager = this.getTelemetryManagerFromConfig(this.config.system.telemetry, this.clientId);\r\n TrustedAuthority.setTrustedAuthoritiesFromConfig(this.config.auth.validateAuthority, this.config.auth.knownAuthorities);\r\n AuthorityFactory.saveMetadataFromConfig(this.config.auth.authority, this.config.auth.authorityMetadata);\r\n // if no authority is passed, set the default: \"https://login.microsoftonline.com/common\"\r\n this.authority = this.config.auth.authority || DEFAULT_AUTHORITY;\r\n // cache keys msal - typescript throws an error if any value other than \"localStorage\" or \"sessionStorage\" is passed\r\n this.cacheStorage = new AuthCache(this.clientId, this.config.cache.cacheLocation, this.inCookie);\r\n // Initialize window handling code\r\n window.activeRenewals = {};\r\n window.renewStates = [];\r\n window.callbackMappedToRenewStates = {};\r\n window.promiseMappedToRenewStates = {};\r\n window.msal = this;\r\n var urlHash = window.location.hash;\r\n var urlContainsHash = UrlUtils.urlContainsHash(urlHash);\r\n // check if back button is pressed\r\n WindowUtils.checkIfBackButtonIsPressed(this.cacheStorage);\r\n // On the server 302 - Redirect, handle this\r\n if (urlContainsHash) {\r\n var stateInfo = this.getResponseState(urlHash);\r\n if (stateInfo.method === Constants.interactionTypeRedirect) {\r\n this.handleRedirectAuthenticationResponse(urlHash);\r\n }\r\n }\r\n }\r\n Object.defineProperty(UserAgentApplication.prototype, \"authority\", {\r\n /**\r\n * Method to manage the authority URL.\r\n *\r\n * @returns {string} authority\r\n */\r\n get: function () {\r\n return this.authorityInstance.CanonicalAuthority;\r\n },\r\n /**\r\n * setter for the authority URL\r\n * @param {string} authority\r\n */\r\n // If the developer passes an authority, create an instance\r\n set: function (val) {\r\n this.authorityInstance = AuthorityFactory.CreateInstance(val, this.config.auth.validateAuthority);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Get the current authority instance from the MSAL configuration object\r\n *\r\n * @returns {@link Authority} authority instance\r\n */\r\n UserAgentApplication.prototype.getAuthorityInstance = function () {\r\n return this.authorityInstance;\r\n };\r\n UserAgentApplication.prototype.handleRedirectCallback = function (authOrTokenCallback, errorReceivedCallback) {\r\n if (!authOrTokenCallback) {\r\n throw ClientConfigurationError.createInvalidCallbackObjectError(authOrTokenCallback);\r\n }\r\n // Set callbacks\r\n if (errorReceivedCallback) {\r\n this.tokenReceivedCallback = authOrTokenCallback;\r\n this.errorReceivedCallback = errorReceivedCallback;\r\n this.logger.warning(\"This overload for callback is deprecated - please change the format of the callbacks to a single callback as shown: (err: AuthError, response: AuthResponse).\");\r\n }\r\n else {\r\n this.authResponseCallback = authOrTokenCallback;\r\n }\r\n if (this.redirectError) {\r\n this.authErrorHandler(Constants.interactionTypeRedirect, this.redirectError, this.redirectResponse);\r\n }\r\n else if (this.redirectResponse) {\r\n this.authResponseHandler(Constants.interactionTypeRedirect, this.redirectResponse);\r\n }\r\n };\r\n /**\r\n * Public API to verify if the URL contains the hash with known properties\r\n * @param hash\r\n */\r\n UserAgentApplication.prototype.urlContainsHash = function (hash) {\r\n this.logger.verbose(\"UrlContainsHash has been called\");\r\n return UrlUtils.urlContainsHash(hash);\r\n };\r\n UserAgentApplication.prototype.authResponseHandler = function (interactionType, response, resolve) {\r\n this.logger.verbose(\"AuthResponseHandler has been called\");\r\n if (interactionType === Constants.interactionTypeRedirect) {\r\n this.logger.verbose(\"Interaction type is redirect\");\r\n if (this.errorReceivedCallback) {\r\n this.logger.verbose(\"Two callbacks were provided to handleRedirectCallback, calling success callback with response\");\r\n this.tokenReceivedCallback(response);\r\n }\r\n else if (this.authResponseCallback) {\r\n this.logger.verbose(\"One callback was provided to handleRedirectCallback, calling authResponseCallback with response\");\r\n this.authResponseCallback(null, response);\r\n }\r\n }\r\n else if (interactionType === Constants.interactionTypePopup) {\r\n this.logger.verbose(\"Interaction type is popup, resolving\");\r\n resolve(response);\r\n }\r\n else {\r\n throw ClientAuthError.createInvalidInteractionTypeError();\r\n }\r\n };\r\n UserAgentApplication.prototype.authErrorHandler = function (interactionType, authErr, response, reject) {\r\n this.logger.verbose(\"AuthErrorHandler has been called\");\r\n // set interaction_status to complete\r\n this.cacheStorage.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n if (interactionType === Constants.interactionTypeRedirect) {\r\n this.logger.verbose(\"Interaction type is redirect\");\r\n if (this.errorReceivedCallback) {\r\n this.logger.verbose(\"Two callbacks were provided to handleRedirectCallback, calling error callback\");\r\n this.errorReceivedCallback(authErr, response.accountState);\r\n }\r\n else if (this.authResponseCallback) {\r\n this.logger.verbose(\"One callback was provided to handleRedirectCallback, calling authResponseCallback with error\");\r\n this.authResponseCallback(authErr, response);\r\n }\r\n else {\r\n this.logger.verbose(\"handleRedirectCallback has not been called and no callbacks are registered, throwing error\");\r\n throw authErr;\r\n }\r\n }\r\n else if (interactionType === Constants.interactionTypePopup) {\r\n this.logger.verbose(\"Interaction type is popup, rejecting\");\r\n reject(authErr);\r\n }\r\n else {\r\n throw ClientAuthError.createInvalidInteractionTypeError();\r\n }\r\n };\r\n // #endregion\r\n /**\r\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint.\r\n * @param {@link (AuthenticationParameters:type)}\r\n */\r\n UserAgentApplication.prototype.loginRedirect = function (userRequest) {\r\n this.logger.verbose(\"LoginRedirect has been called\");\r\n // validate request\r\n var request = RequestUtils.validateRequest(userRequest, true, this.clientId, Constants.interactionTypeRedirect);\r\n this.acquireTokenInteractive(Constants.interactionTypeRedirect, true, request, null, null);\r\n };\r\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint.\r\n * @param {@link (AuthenticationParameters:type)}\r\n *\r\n * To renew idToken, please pass clientId as the only scope in the Authentication Parameters\r\n */\r\n UserAgentApplication.prototype.acquireTokenRedirect = function (userRequest) {\r\n this.logger.verbose(\"AcquireTokenRedirect has been called\");\r\n // validate request\r\n var request = RequestUtils.validateRequest(userRequest, false, this.clientId, Constants.interactionTypeRedirect);\r\n this.acquireTokenInteractive(Constants.interactionTypeRedirect, false, request, null, null);\r\n };\r\n /**\r\n * Use when initiating the login process via opening a popup window in the user's browser\r\n *\r\n * @param {@link (AuthenticationParameters:type)}\r\n *\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\r\n UserAgentApplication.prototype.loginPopup = function (userRequest) {\r\n var _this = this;\r\n this.logger.verbose(\"LoginPopup has been called\");\r\n // validate request\r\n var request = RequestUtils.validateRequest(userRequest, true, this.clientId, Constants.interactionTypePopup);\r\n var apiEvent = this.telemetryManager.createAndStartApiEvent(request.correlationId, API_EVENT_IDENTIFIER.LoginPopup);\r\n return new Promise(function (resolve, reject) {\r\n _this.acquireTokenInteractive(Constants.interactionTypePopup, true, request, resolve, reject);\r\n })\r\n .then(function (resp) {\r\n _this.logger.verbose(\"Successfully logged in\");\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, true);\r\n return resp;\r\n })\r\n .catch(function (error) {\r\n _this.cacheStorage.resetTempCacheItems(request.state);\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, false, error.errorCode);\r\n throw error;\r\n });\r\n };\r\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\r\n * @param {@link AuthenticationParameters}\r\n *\r\n * To renew idToken, please pass clientId as the only scope in the Authentication Parameters\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\r\n UserAgentApplication.prototype.acquireTokenPopup = function (userRequest) {\r\n var _this = this;\r\n this.logger.verbose(\"AcquireTokenPopup has been called\");\r\n // validate request\r\n var request = RequestUtils.validateRequest(userRequest, false, this.clientId, Constants.interactionTypePopup);\r\n var apiEvent = this.telemetryManager.createAndStartApiEvent(request.correlationId, API_EVENT_IDENTIFIER.AcquireTokenPopup);\r\n return new Promise(function (resolve, reject) {\r\n _this.acquireTokenInteractive(Constants.interactionTypePopup, false, request, resolve, reject);\r\n })\r\n .then(function (resp) {\r\n _this.logger.verbose(\"Successfully acquired token\");\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, true);\r\n return resp;\r\n })\r\n .catch(function (error) {\r\n _this.cacheStorage.resetTempCacheItems(request.state);\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, false, error.errorCode);\r\n throw error;\r\n });\r\n };\r\n // #region Acquire Token\r\n /**\r\n * Use when initiating the login process or when you want to obtain an access_token for your API,\r\n * either by redirecting the user's browser window to the authorization endpoint or via opening a popup window in the user's browser.\r\n * @param {@link (AuthenticationParameters:type)}\r\n *\r\n * To renew idToken, please pass clientId as the only scope in the Authentication Parameters\r\n */\r\n UserAgentApplication.prototype.acquireTokenInteractive = function (interactionType, isLoginCall, request, resolve, reject) {\r\n var _this = this;\r\n this.logger.verbose(\"AcquireTokenInteractive has been called\");\r\n // block the request if made from the hidden iframe\r\n WindowUtils.blockReloadInHiddenIframes();\r\n var interactionProgress = this.cacheStorage.getItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n if (interactionType === Constants.interactionTypeRedirect) {\r\n this.cacheStorage.setItem(TemporaryCacheKeys.REDIRECT_REQUEST, \"\" + Constants.inProgress + Constants.resourceDelimiter + request.state);\r\n }\r\n // If already in progress, do not proceed\r\n if (interactionProgress === Constants.inProgress) {\r\n var thrownError = isLoginCall ? ClientAuthError.createLoginInProgressError() : ClientAuthError.createAcquireTokenInProgressError();\r\n var stateOnlyResponse = buildResponseStateOnly(this.getAccountState(request.state));\r\n this.cacheStorage.resetTempCacheItems(request.state);\r\n this.authErrorHandler(interactionType, thrownError, stateOnlyResponse, reject);\r\n return;\r\n }\r\n // Get the account object if a session exists\r\n var account;\r\n if (request && request.account && !isLoginCall) {\r\n account = request.account;\r\n this.logger.verbose(\"Account set from request\");\r\n }\r\n else {\r\n account = this.getAccount();\r\n this.logger.verbose(\"Account set from MSAL Cache\");\r\n }\r\n // If no session exists, prompt the user to login.\r\n if (!account && !ServerRequestParameters.isSSOParam(request)) {\r\n if (isLoginCall) {\r\n // extract ADAL id_token if exists\r\n var adalIdToken = this.extractADALIdToken();\r\n // silent login if ADAL id_token is retrieved successfully - SSO\r\n if (adalIdToken && !request.scopes) {\r\n this.logger.info(\"ADAL's idToken exists. Extracting login information from ADAL's idToken\");\r\n var tokenRequest = this.buildIDTokenRequest(request);\r\n this.silentLogin = true;\r\n this.acquireTokenSilent(tokenRequest).then(function (response) {\r\n _this.silentLogin = false;\r\n _this.logger.info(\"Unified cache call is successful\");\r\n _this.authResponseHandler(interactionType, response, resolve);\r\n return;\r\n }, function (error) {\r\n _this.silentLogin = false;\r\n _this.logger.error(\"Error occurred during unified cache ATS: \" + error);\r\n // proceed to login since ATS failed\r\n _this.acquireTokenHelper(null, interactionType, isLoginCall, request, resolve, reject);\r\n });\r\n }\r\n // No ADAL token found, proceed to login\r\n else {\r\n this.logger.verbose(\"Login call but no token found, proceed to login\");\r\n this.acquireTokenHelper(null, interactionType, isLoginCall, request, resolve, reject);\r\n }\r\n }\r\n // AcquireToken call, but no account or context given, so throw error\r\n else {\r\n this.logger.verbose(\"AcquireToken call, no context or account given\");\r\n this.logger.info(\"User login is required\");\r\n var stateOnlyResponse = buildResponseStateOnly(this.getAccountState(request.state));\r\n this.cacheStorage.resetTempCacheItems(request.state);\r\n this.authErrorHandler(interactionType, ClientAuthError.createUserLoginRequiredError(), stateOnlyResponse, reject);\r\n return;\r\n }\r\n }\r\n // User session exists\r\n else {\r\n this.logger.verbose(\"User session exists, login not required\");\r\n this.acquireTokenHelper(account, interactionType, isLoginCall, request, resolve, reject);\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n * Helper function to acquireToken\r\n *\r\n */\r\n UserAgentApplication.prototype.acquireTokenHelper = function (account, interactionType, isLoginCall, request, resolve, reject) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var requestSignature, serverAuthenticationRequest, acquireTokenAuthority, popUpWindow, responseType, loginStartPage, urlNavigate, hash, error_1, navigate, err_1;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n this.logger.verbose(\"AcquireTokenHelper has been called\");\r\n this.logger.verbose(\"Interaction type: \" + interactionType + \". isLoginCall: \" + isLoginCall);\r\n // Track the acquireToken progress\r\n this.cacheStorage.setItem(TemporaryCacheKeys.INTERACTION_STATUS, Constants.inProgress);\r\n requestSignature = request.scopes ? request.scopes.join(\" \").toLowerCase() : Constants.oidcScopes.join(\" \");\r\n this.logger.verbosePii(\"Request signature: \" + requestSignature);\r\n acquireTokenAuthority = (request && request.authority) ? AuthorityFactory.CreateInstance(request.authority, this.config.auth.validateAuthority, request.authorityMetadata) : this.authorityInstance;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 11, , 12]);\r\n if (!!acquireTokenAuthority.hasCachedMetadata()) return [3 /*break*/, 3];\r\n this.logger.verbose(\"No cached metadata for authority\");\r\n return [4 /*yield*/, AuthorityFactory.saveMetadataFromNetwork(acquireTokenAuthority, this.telemetryManager, request.correlationId)];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n this.logger.verbose(\"Cached metadata found for authority\");\r\n _a.label = 4;\r\n case 4:\r\n responseType = isLoginCall ? ResponseTypes.id_token : this.getTokenType(account, request.scopes);\r\n loginStartPage = request.redirectStartPage || window.location.href;\r\n serverAuthenticationRequest = new ServerRequestParameters(acquireTokenAuthority, this.clientId, responseType, this.getRedirectUri(request && request.redirectUri), request.scopes, request.state, request.correlationId);\r\n this.logger.verbose(\"Finished building server authentication request\");\r\n this.updateCacheEntries(serverAuthenticationRequest, account, isLoginCall, loginStartPage);\r\n this.logger.verbose(\"Updating cache entries\");\r\n // populate QueryParameters (sid/login_hint) and any other extraQueryParameters set by the developer\r\n serverAuthenticationRequest.populateQueryParams(account, request);\r\n this.logger.verbose(\"Query parameters populated from account\");\r\n urlNavigate = UrlUtils.createNavigateUrl(serverAuthenticationRequest) + Constants.response_mode_fragment;\r\n // set state in cache\r\n if (interactionType === Constants.interactionTypeRedirect) {\r\n if (!isLoginCall) {\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_ACQ_TOKEN, request.state), serverAuthenticationRequest.state, this.inCookie);\r\n this.logger.verbose(\"State cached for redirect\");\r\n this.logger.verbosePii(\"State cached: \" + serverAuthenticationRequest.state);\r\n }\r\n else {\r\n this.logger.verbose(\"Interaction type redirect but login call is true. State not cached\");\r\n }\r\n }\r\n else if (interactionType === Constants.interactionTypePopup) {\r\n window.renewStates.push(serverAuthenticationRequest.state);\r\n window.requestType = isLoginCall ? Constants.login : Constants.renewToken;\r\n this.logger.verbose(\"State saved to window\");\r\n this.logger.verbosePii(\"State saved: \" + serverAuthenticationRequest.state);\r\n // Register callback to capture results from server\r\n this.registerCallback(serverAuthenticationRequest.state, requestSignature, resolve, reject);\r\n }\r\n else {\r\n this.logger.verbose(\"Invalid interaction error. State not cached\");\r\n throw ClientAuthError.createInvalidInteractionTypeError();\r\n }\r\n if (!(interactionType === Constants.interactionTypePopup)) return [3 /*break*/, 9];\r\n this.logger.verbose(\"Interaction type is popup. Generating popup window\");\r\n // Generate a popup window\r\n try {\r\n popUpWindow = this.openPopup(urlNavigate, \"msal\", Constants.popUpWidth, Constants.popUpHeight);\r\n // Push popup window handle onto stack for tracking\r\n WindowUtils.trackPopup(popUpWindow);\r\n }\r\n catch (e) {\r\n this.logger.info(ClientAuthErrorMessage.popUpWindowError.code + \":\" + ClientAuthErrorMessage.popUpWindowError.desc);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR, ClientAuthErrorMessage.popUpWindowError.code);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR_DESC, ClientAuthErrorMessage.popUpWindowError.desc);\r\n if (reject) {\r\n reject(ClientAuthError.createPopupWindowError());\r\n return [2 /*return*/];\r\n }\r\n }\r\n if (!popUpWindow) return [3 /*break*/, 8];\r\n _a.label = 5;\r\n case 5:\r\n _a.trys.push([5, 7, , 8]);\r\n return [4 /*yield*/, WindowUtils.monitorPopupForHash(popUpWindow, this.config.system.loadFrameTimeout, urlNavigate, this.logger)];\r\n case 6:\r\n hash = _a.sent();\r\n this.handleAuthenticationResponse(hash);\r\n // Request completed successfully, set to completed\r\n this.cacheStorage.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n this.logger.info(\"Closing popup window\");\r\n // TODO: Check how this can be extracted for any framework specific code?\r\n if (this.config.framework.isAngular) {\r\n this.broadcast(\"msal:popUpHashChanged\", hash);\r\n }\r\n WindowUtils.closePopups();\r\n return [3 /*break*/, 8];\r\n case 7:\r\n error_1 = _a.sent();\r\n if (reject) {\r\n reject(error_1);\r\n }\r\n if (this.config.framework.isAngular) {\r\n this.broadcast(\"msal:popUpClosed\", error_1.errorCode + Constants.resourceDelimiter + error_1.errorMessage);\r\n }\r\n else {\r\n // Request failed, set to canceled\r\n this.cacheStorage.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n popUpWindow.close();\r\n }\r\n return [3 /*break*/, 8];\r\n case 8: return [3 /*break*/, 10];\r\n case 9:\r\n // If onRedirectNavigate is implemented, invoke it and provide urlNavigate\r\n if (request.onRedirectNavigate) {\r\n this.logger.verbose(\"Invoking onRedirectNavigate callback\");\r\n navigate = request.onRedirectNavigate(urlNavigate);\r\n // Returning false from onRedirectNavigate will stop navigation\r\n if (navigate !== false) {\r\n this.logger.verbose(\"onRedirectNavigate did not return false, navigating\");\r\n this.navigateWindow(urlNavigate);\r\n }\r\n else {\r\n this.logger.verbose(\"onRedirectNavigate returned false, stopping navigation\");\r\n }\r\n }\r\n else {\r\n // Otherwise, perform navigation\r\n this.logger.verbose(\"Navigating window to urlNavigate\");\r\n this.navigateWindow(urlNavigate);\r\n }\r\n _a.label = 10;\r\n case 10: return [3 /*break*/, 12];\r\n case 11:\r\n err_1 = _a.sent();\r\n this.logger.error(err_1);\r\n this.cacheStorage.resetTempCacheItems(request.state);\r\n this.authErrorHandler(interactionType, ClientAuthError.createEndpointResolutionError(err_1.toString), buildResponseStateOnly(request.state), reject);\r\n if (popUpWindow) {\r\n popUpWindow.close();\r\n }\r\n return [3 /*break*/, 12];\r\n case 12: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * API interfacing idToken request when applications already have a session/hint acquired by authorization client applications\r\n * @param request\r\n */\r\n UserAgentApplication.prototype.ssoSilent = function (request) {\r\n this.logger.verbose(\"ssoSilent has been called\");\r\n // throw an error on an empty request\r\n if (!request) {\r\n throw ClientConfigurationError.createEmptyRequestError();\r\n }\r\n // throw an error on no hints passed\r\n if (!request.sid && !request.loginHint) {\r\n throw ClientConfigurationError.createSsoSilentError();\r\n }\r\n return this.acquireTokenSilent(tslib_1.__assign({}, request, { scopes: Constants.oidcScopes }));\r\n };\r\n /**\r\n * Use this function to obtain a token before every call to the API / resource provider\r\n *\r\n * MSAL return's a cached token when available\r\n * Or it send's a request to the STS to obtain a new token using a hidden iframe.\r\n *\r\n * @param {@link AuthenticationParameters}\r\n *\r\n * To renew idToken, please pass clientId as the only scope in the Authentication Parameters\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n *\r\n */\r\n UserAgentApplication.prototype.acquireTokenSilent = function (userRequest) {\r\n var _this = this;\r\n this.logger.verbose(\"AcquireTokenSilent has been called\");\r\n // validate the request\r\n var request = RequestUtils.validateRequest(userRequest, false, this.clientId, Constants.interactionTypeSilent);\r\n var apiEvent = this.telemetryManager.createAndStartApiEvent(request.correlationId, API_EVENT_IDENTIFIER.AcquireTokenSilent);\r\n var requestSignature = RequestUtils.createRequestSignature(request);\r\n return new Promise(function (resolve, reject) { return tslib_1.__awaiter(_this, void 0, void 0, function () {\r\n var scope, account, adalIdToken, responseType, serverAuthenticationRequest, adalIdTokenObject, userContainedClaims, authErr, cacheResultResponse, logMessage, err_2;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n // block the request if made from the hidden iframe\r\n WindowUtils.blockReloadInHiddenIframes();\r\n scope = request.scopes.join(\" \").toLowerCase();\r\n this.logger.verbosePii(\"Serialized scopes: \" + scope);\r\n if (request.account) {\r\n account = request.account;\r\n this.logger.verbose(\"Account set from request\");\r\n }\r\n else {\r\n account = this.getAccount();\r\n this.logger.verbose(\"Account set from MSAL Cache\");\r\n }\r\n adalIdToken = this.cacheStorage.getItem(Constants.adalIdToken);\r\n // In the event of no account being passed in the config, no session id, and no pre-existing adalIdToken, user will need to log in\r\n if (!account && !(request.sid || request.loginHint) && StringUtils.isEmpty(adalIdToken)) {\r\n this.logger.info(\"User login is required\");\r\n // The promise rejects with a UserLoginRequiredError, which should be caught and user should be prompted to log in interactively\r\n return [2 /*return*/, reject(ClientAuthError.createUserLoginRequiredError())];\r\n }\r\n responseType = this.getTokenType(account, request.scopes);\r\n this.logger.verbose(\"Response type: \" + responseType);\r\n serverAuthenticationRequest = new ServerRequestParameters(AuthorityFactory.CreateInstance(request.authority, this.config.auth.validateAuthority, request.authorityMetadata), this.clientId, responseType, this.getRedirectUri(request.redirectUri), request.scopes, request.state, request.correlationId);\r\n this.logger.verbose(\"Finished building server authentication request\");\r\n // populate QueryParameters (sid/login_hint) and any other extraQueryParameters set by the developer\r\n if (ServerRequestParameters.isSSOParam(request) || account) {\r\n serverAuthenticationRequest.populateQueryParams(account, request, null, true);\r\n this.logger.verbose(\"Query parameters populated from existing SSO or account\");\r\n }\r\n // if user didn't pass login_hint/sid and adal's idtoken is present, extract the login_hint from the adalIdToken\r\n else if (!account && !StringUtils.isEmpty(adalIdToken)) {\r\n adalIdTokenObject = TokenUtils.extractIdToken(adalIdToken);\r\n this.logger.verbose(\"ADAL's idToken exists. Extracting login information from ADAL's idToken to populate query parameters\");\r\n serverAuthenticationRequest.populateQueryParams(account, null, adalIdTokenObject, true);\r\n }\r\n else {\r\n this.logger.verbose(\"No additional query parameters added\");\r\n }\r\n userContainedClaims = request.claimsRequest || serverAuthenticationRequest.claimsValue;\r\n // If request.forceRefresh is set to true, force a request for a new token instead of getting it from the cache\r\n if (!userContainedClaims && !request.forceRefresh) {\r\n try {\r\n cacheResultResponse = this.getCachedToken(serverAuthenticationRequest, account);\r\n }\r\n catch (e) {\r\n authErr = e;\r\n }\r\n }\r\n if (!cacheResultResponse) return [3 /*break*/, 1];\r\n this.logger.verbose(\"Token found in cache lookup\");\r\n this.logger.verbosePii(\"Scopes found: \" + JSON.stringify(cacheResultResponse.scopes));\r\n resolve(cacheResultResponse);\r\n return [2 /*return*/, null];\r\n case 1:\r\n if (!authErr) return [3 /*break*/, 2];\r\n this.logger.infoPii(authErr.errorCode + \":\" + authErr.errorMessage);\r\n reject(authErr);\r\n return [2 /*return*/, null];\r\n case 2:\r\n logMessage = void 0;\r\n if (userContainedClaims) {\r\n logMessage = \"Skipped cache lookup since claims were given\";\r\n }\r\n else if (request.forceRefresh) {\r\n logMessage = \"Skipped cache lookup since request.forceRefresh option was set to true\";\r\n }\r\n else {\r\n logMessage = \"No valid token found in cache lookup\";\r\n }\r\n this.logger.verbose(logMessage);\r\n // Cache result can return null if cache is empty. In that case, set authority to default value if no authority is passed to the API.\r\n if (!serverAuthenticationRequest.authorityInstance) {\r\n serverAuthenticationRequest.authorityInstance = request.authority ?\r\n AuthorityFactory.CreateInstance(request.authority, this.config.auth.validateAuthority, request.authorityMetadata)\r\n : this.authorityInstance;\r\n }\r\n this.logger.verbosePii(\"Authority instance: \" + serverAuthenticationRequest.authority);\r\n _a.label = 3;\r\n case 3:\r\n _a.trys.push([3, 7, , 8]);\r\n if (!!serverAuthenticationRequest.authorityInstance.hasCachedMetadata()) return [3 /*break*/, 5];\r\n this.logger.verbose(\"No cached metadata for authority\");\r\n return [4 /*yield*/, AuthorityFactory.saveMetadataFromNetwork(serverAuthenticationRequest.authorityInstance, this.telemetryManager, request.correlationId)];\r\n case 4:\r\n _a.sent();\r\n this.logger.verbose(\"Authority has been updated with endpoint discovery response\");\r\n return [3 /*break*/, 6];\r\n case 5:\r\n this.logger.verbose(\"Cached metadata found for authority\");\r\n _a.label = 6;\r\n case 6:\r\n /*\r\n * refresh attempt with iframe\r\n * Already renewing for this scope, callback when we get the token.\r\n */\r\n if (window.activeRenewals[requestSignature]) {\r\n this.logger.verbose(\"Renewing token in progress. Registering callback\");\r\n // Active renewals contains the state for each renewal.\r\n this.registerCallback(window.activeRenewals[requestSignature], requestSignature, resolve, reject);\r\n }\r\n else {\r\n if (request.scopes && ScopeSet.onlyContainsOidcScopes(request.scopes)) {\r\n /*\r\n * App uses idToken to send to api endpoints\r\n * Default scope is tracked as OIDC scopes to store this token\r\n */\r\n this.logger.verbose(\"OpenID Connect scopes only, renewing idToken\");\r\n this.silentLogin = true;\r\n this.renewIdToken(requestSignature, resolve, reject, account, serverAuthenticationRequest);\r\n }\r\n else {\r\n // renew access token\r\n this.logger.verbose(\"Renewing access token\");\r\n this.renewToken(requestSignature, resolve, reject, account, serverAuthenticationRequest);\r\n }\r\n }\r\n return [3 /*break*/, 8];\r\n case 7:\r\n err_2 = _a.sent();\r\n this.logger.error(err_2);\r\n reject(ClientAuthError.createEndpointResolutionError(err_2.toString()));\r\n return [2 /*return*/, null];\r\n case 8: return [2 /*return*/];\r\n }\r\n });\r\n }); })\r\n .then(function (res) {\r\n _this.logger.verbose(\"Successfully acquired token\");\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, true);\r\n return res;\r\n })\r\n .catch(function (error) {\r\n _this.cacheStorage.resetTempCacheItems(request.state);\r\n _this.telemetryManager.stopAndFlushApiEvent(request.correlationId, apiEvent, false, error.errorCode);\r\n throw error;\r\n });\r\n };\r\n // #endregion\r\n // #region Popup Window Creation\r\n /**\r\n * @hidden\r\n *\r\n * Configures popup window for login.\r\n *\r\n * @param urlNavigate\r\n * @param title\r\n * @param popUpWidth\r\n * @param popUpHeight\r\n * @ignore\r\n * @hidden\r\n */\r\n UserAgentApplication.prototype.openPopup = function (urlNavigate, title, popUpWidth, popUpHeight) {\r\n this.logger.verbose(\"OpenPopup has been called\");\r\n try {\r\n /**\r\n * adding winLeft and winTop to account for dual monitor\r\n * using screenLeft and screenTop for IE8 and earlier\r\n */\r\n var winLeft = window.screenLeft ? window.screenLeft : window.screenX;\r\n var winTop = window.screenTop ? window.screenTop : window.screenY;\r\n /**\r\n * window.innerWidth displays browser window\"s height and width excluding toolbars\r\n * using document.documentElement.clientWidth for IE8 and earlier\r\n */\r\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\r\n var left = ((width / 2) - (popUpWidth / 2)) + winLeft;\r\n var top_1 = ((height / 2) - (popUpHeight / 2)) + winTop;\r\n // open the window\r\n var popupWindow = window.open(urlNavigate, title, \"width=\" + popUpWidth + \", height=\" + popUpHeight + \", top=\" + top_1 + \", left=\" + left + \", scrollbars=yes\");\r\n if (!popupWindow) {\r\n throw ClientAuthError.createPopupWindowError();\r\n }\r\n if (popupWindow.focus) {\r\n popupWindow.focus();\r\n }\r\n return popupWindow;\r\n }\r\n catch (e) {\r\n this.cacheStorage.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n throw ClientAuthError.createPopupWindowError(e.toString());\r\n }\r\n };\r\n // #endregion\r\n // #region Iframe Management\r\n /**\r\n * @hidden\r\n * Calling _loadFrame but with a timeout to signal failure in loadframeStatus. Callbacks are left.\r\n * registered when network errors occur and subsequent token requests for same resource are registered to the pending request.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.loadIframeTimeout = function (urlNavigate, frameName, requestSignature) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var expectedState, iframe, _a, hash, error_2;\r\n return tslib_1.__generator(this, function (_b) {\r\n switch (_b.label) {\r\n case 0:\r\n expectedState = window.activeRenewals[requestSignature];\r\n this.logger.verbosePii(\"Set loading state to pending for: \" + requestSignature + \":\" + expectedState);\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.RENEW_STATUS, expectedState), Constants.inProgress);\r\n if (!this.config.system.navigateFrameWait) return [3 /*break*/, 2];\r\n return [4 /*yield*/, WindowUtils.loadFrame(urlNavigate, frameName, this.config.system.navigateFrameWait, this.logger)];\r\n case 1:\r\n _a = _b.sent();\r\n return [3 /*break*/, 3];\r\n case 2:\r\n _a = WindowUtils.loadFrameSync(urlNavigate, frameName, this.logger);\r\n _b.label = 3;\r\n case 3:\r\n iframe = _a;\r\n _b.label = 4;\r\n case 4:\r\n _b.trys.push([4, 6, , 7]);\r\n return [4 /*yield*/, WindowUtils.monitorIframeForHash(iframe.contentWindow, this.config.system.loadFrameTimeout, urlNavigate, this.logger)];\r\n case 5:\r\n hash = _b.sent();\r\n if (hash) {\r\n this.handleAuthenticationResponse(hash);\r\n }\r\n return [3 /*break*/, 7];\r\n case 6:\r\n error_2 = _b.sent();\r\n if (this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.RENEW_STATUS, expectedState)) === Constants.inProgress) {\r\n // fail the iframe session if it's in pending state\r\n this.logger.verbose(\"Loading frame has timed out after: \" + (this.config.system.loadFrameTimeout / 1000) + \" seconds for scope/authority \" + requestSignature + \":\" + expectedState);\r\n // Error after timeout\r\n if (expectedState && window.callbackMappedToRenewStates[expectedState]) {\r\n window.callbackMappedToRenewStates[expectedState](null, error_2);\r\n }\r\n this.cacheStorage.removeItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.RENEW_STATUS, expectedState));\r\n }\r\n WindowUtils.removeHiddenIframe(iframe);\r\n throw error_2;\r\n case 7:\r\n WindowUtils.removeHiddenIframe(iframe);\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n // #endregion\r\n // #region General Helpers\r\n /**\r\n * @hidden\r\n * Used to redirect the browser to the STS authorization endpoint\r\n * @param {string} urlNavigate - URL of the authorization endpoint\r\n */\r\n UserAgentApplication.prototype.navigateWindow = function (urlNavigate, popupWindow) {\r\n // Navigate if valid URL\r\n if (urlNavigate && !StringUtils.isEmpty(urlNavigate)) {\r\n var navigateWindow = popupWindow ? popupWindow : window;\r\n var logMessage = popupWindow ? \"Navigated Popup window to:\" + urlNavigate : \"Navigate to:\" + urlNavigate;\r\n this.logger.infoPii(logMessage);\r\n navigateWindow.location.assign(urlNavigate);\r\n }\r\n else {\r\n this.logger.info(\"Navigate url is empty\");\r\n throw AuthError.createUnexpectedError(\"Navigate url is empty\");\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * Used to add the developer requested callback to the array of callbacks for the specified scopes. The updated array is stored on the window object\r\n * @param {string} expectedState - Unique state identifier (guid).\r\n * @param {string} scope - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned.\r\n * @param {Function} resolve - The resolve function of the promise object.\r\n * @param {Function} reject - The reject function of the promise object.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.registerCallback = function (expectedState, requestSignature, resolve, reject) {\r\n var _this = this;\r\n // track active renewals\r\n window.activeRenewals[requestSignature] = expectedState;\r\n // initialize callbacks mapped array\r\n if (!window.promiseMappedToRenewStates[expectedState]) {\r\n window.promiseMappedToRenewStates[expectedState] = [];\r\n }\r\n // indexing on the current state, push the callback params to callbacks mapped\r\n window.promiseMappedToRenewStates[expectedState].push({ resolve: resolve, reject: reject });\r\n // Store the server response in the current window??\r\n if (!window.callbackMappedToRenewStates[expectedState]) {\r\n window.callbackMappedToRenewStates[expectedState] = function (response, error) {\r\n // reset active renewals\r\n window.activeRenewals[requestSignature] = null;\r\n // for all promiseMappedtoRenewStates for a given 'state' - call the reject/resolve with error/token respectively\r\n for (var i = 0; i < window.promiseMappedToRenewStates[expectedState].length; ++i) {\r\n try {\r\n if (error) {\r\n window.promiseMappedToRenewStates[expectedState][i].reject(error);\r\n }\r\n else if (response) {\r\n window.promiseMappedToRenewStates[expectedState][i].resolve(response);\r\n }\r\n else {\r\n _this.cacheStorage.resetTempCacheItems(expectedState);\r\n throw AuthError.createUnexpectedError(\"Error and response are both null\");\r\n }\r\n }\r\n catch (e) {\r\n _this.logger.warning(e);\r\n }\r\n }\r\n // reset\r\n window.promiseMappedToRenewStates[expectedState] = null;\r\n window.callbackMappedToRenewStates[expectedState] = null;\r\n };\r\n }\r\n };\r\n // #endregion\r\n // #region Logout\r\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n */\r\n UserAgentApplication.prototype.logout = function (correlationId) {\r\n this.logger.verbose(\"Logout has been called\");\r\n this.logoutAsync(correlationId);\r\n };\r\n /**\r\n * Async version of logout(). Use to log out the current user.\r\n * @param correlationId Request correlationId\r\n */\r\n UserAgentApplication.prototype.logoutAsync = function (correlationId) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var requestCorrelationId, apiEvent, correlationIdParam, postLogoutQueryParam, urlNavigate, error_3;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n requestCorrelationId = correlationId || CryptoUtils.createNewGuid();\r\n apiEvent = this.telemetryManager.createAndStartApiEvent(requestCorrelationId, API_EVENT_IDENTIFIER.Logout);\r\n this.clearCache();\r\n this.account = null;\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 5, , 6]);\r\n if (!!this.authorityInstance.hasCachedMetadata()) return [3 /*break*/, 3];\r\n this.logger.verbose(\"No cached metadata for authority\");\r\n return [4 /*yield*/, AuthorityFactory.saveMetadataFromNetwork(this.authorityInstance, this.telemetryManager, correlationId)];\r\n case 2:\r\n _a.sent();\r\n return [3 /*break*/, 4];\r\n case 3:\r\n this.logger.verbose(\"Cached metadata found for authority\");\r\n _a.label = 4;\r\n case 4:\r\n correlationIdParam = \"client-request-id=\" + requestCorrelationId;\r\n postLogoutQueryParam = void 0;\r\n if (this.getPostLogoutRedirectUri()) {\r\n postLogoutQueryParam = \"&post_logout_redirect_uri=\" + encodeURIComponent(this.getPostLogoutRedirectUri());\r\n this.logger.verbose(\"redirectUri found and set\");\r\n }\r\n else {\r\n postLogoutQueryParam = \"\";\r\n this.logger.verbose(\"No redirectUri set for app. postLogoutQueryParam is empty\");\r\n }\r\n urlNavigate = void 0;\r\n if (this.authorityInstance.EndSessionEndpoint) {\r\n urlNavigate = this.authorityInstance.EndSessionEndpoint + \"?\" + correlationIdParam + postLogoutQueryParam;\r\n this.logger.verbose(\"EndSessionEndpoint found and urlNavigate set\");\r\n this.logger.verbosePii(\"urlNavigate set to: \" + this.authorityInstance.EndSessionEndpoint);\r\n }\r\n else {\r\n urlNavigate = this.authority + \"oauth2/v2.0/logout?\" + correlationIdParam + postLogoutQueryParam;\r\n this.logger.verbose(\"No endpoint, urlNavigate set to default\");\r\n }\r\n this.telemetryManager.stopAndFlushApiEvent(requestCorrelationId, apiEvent, true);\r\n this.logger.verbose(\"Navigating window to urlNavigate\");\r\n this.navigateWindow(urlNavigate);\r\n return [3 /*break*/, 6];\r\n case 5:\r\n error_3 = _a.sent();\r\n this.telemetryManager.stopAndFlushApiEvent(requestCorrelationId, apiEvent, false, error_3.errorCode);\r\n return [3 /*break*/, 6];\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * @hidden\r\n * Clear all access tokens and ID tokens in the cache.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.clearCache = function () {\r\n this.logger.verbose(\"Clearing cache\");\r\n window.renewStates = [];\r\n var tokenCacheItems = this.cacheStorage.getAllTokens(Constants.clientId, Constants.homeAccountIdentifier);\r\n for (var i = 0; i < tokenCacheItems.length; i++) {\r\n this.cacheStorage.removeItem(JSON.stringify(tokenCacheItems[i].key));\r\n }\r\n this.cacheStorage.resetCacheItems();\r\n this.cacheStorage.clearMsalCookie();\r\n this.logger.verbose(\"Cache cleared\");\r\n };\r\n /**\r\n * @hidden\r\n * Clear a given access token from the cache.\r\n *\r\n * @param accessToken\r\n */\r\n UserAgentApplication.prototype.clearCacheForScope = function (accessToken) {\r\n this.logger.verbose(\"Clearing access token from cache\");\r\n var accessTokenItems = this.cacheStorage.getAllAccessTokens(Constants.clientId, Constants.homeAccountIdentifier);\r\n for (var i = 0; i < accessTokenItems.length; i++) {\r\n var token = accessTokenItems[i];\r\n if (token.value.accessToken === accessToken) {\r\n this.cacheStorage.removeItem(JSON.stringify(token.key));\r\n this.logger.verbosePii(\"Access token removed: \" + token.key);\r\n }\r\n }\r\n };\r\n // #endregion\r\n // #region Response\r\n /**\r\n * @hidden\r\n * @ignore\r\n * Checks if the redirect response is received from the STS. In case of redirect, the url fragment has either id_token, access_token or error.\r\n * @param {string} hash - Hash passed from redirect page.\r\n * @returns {Boolean} - true if response contains id_token, access_token or error, false otherwise.\r\n */\r\n UserAgentApplication.prototype.isCallback = function (hash) {\r\n this.logger.info(\"isCallback will be deprecated in favor of urlContainsHash in MSAL.js v2.0.\");\r\n this.logger.verbose(\"isCallback has been called\");\r\n return UrlUtils.urlContainsHash(hash);\r\n };\r\n /**\r\n * @hidden\r\n * Used to call the constructor callback with the token/error\r\n * @param {string} [hash=window.location.hash] - Hash fragment of Url.\r\n */\r\n UserAgentApplication.prototype.processCallBack = function (hash, stateInfo, parentCallback) {\r\n this.logger.info(\"ProcessCallBack has been called. Processing callback from redirect response\");\r\n // get the state info from the hash\r\n if (!stateInfo) {\r\n this.logger.verbose(\"StateInfo is null, getting stateInfo from hash\");\r\n stateInfo = this.getResponseState(hash);\r\n }\r\n var response;\r\n var authErr;\r\n // Save the token info from the hash\r\n try {\r\n response = this.saveTokenFromHash(hash, stateInfo);\r\n }\r\n catch (err) {\r\n authErr = err;\r\n }\r\n try {\r\n // Clear the cookie in the hash\r\n this.cacheStorage.clearMsalCookie(stateInfo.state);\r\n var accountState = this.getAccountState(stateInfo.state);\r\n if (response) {\r\n if ((stateInfo.requestType === Constants.renewToken) || response.accessToken) {\r\n if (window.parent !== window) {\r\n this.logger.verbose(\"Window is in iframe, acquiring token silently\");\r\n }\r\n else {\r\n this.logger.verbose(\"Acquiring token interactive in progress\");\r\n }\r\n this.logger.verbose(\"Response tokenType set to \" + ServerHashParamKeys.ACCESS_TOKEN);\r\n response.tokenType = ServerHashParamKeys.ACCESS_TOKEN;\r\n }\r\n else if (stateInfo.requestType === Constants.login) {\r\n this.logger.verbose(\"Response tokenType set to \" + ServerHashParamKeys.ID_TOKEN);\r\n response.tokenType = ServerHashParamKeys.ID_TOKEN;\r\n }\r\n if (!parentCallback) {\r\n this.logger.verbose(\"Setting redirectResponse\");\r\n this.redirectResponse = response;\r\n return;\r\n }\r\n }\r\n else if (!parentCallback) {\r\n this.logger.verbose(\"Response is null, setting redirectResponse with state\");\r\n this.redirectResponse = buildResponseStateOnly(accountState);\r\n this.redirectError = authErr;\r\n this.cacheStorage.resetTempCacheItems(stateInfo.state);\r\n return;\r\n }\r\n this.logger.verbose(\"Calling callback provided to processCallback\");\r\n parentCallback(response, authErr);\r\n }\r\n catch (err) {\r\n this.logger.error(\"Error occurred in token received callback function: \" + err);\r\n throw ClientAuthError.createErrorInCallbackFunction(err.toString());\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * This method must be called for processing the response received from the STS if using popups or iframes. It extracts the hash, processes the token or error\r\n * information and saves it in the cache. It then resolves the promises with the result.\r\n * @param {string} [hash=window.location.hash] - Hash fragment of Url.\r\n */\r\n UserAgentApplication.prototype.handleAuthenticationResponse = function (hash) {\r\n this.logger.verbose(\"HandleAuthenticationResponse has been called\");\r\n // retrieve the hash\r\n var locationHash = hash || window.location.hash;\r\n // if (window.parent !== window), by using self, window.parent becomes equal to window in getResponseState method specifically\r\n var stateInfo = this.getResponseState(locationHash);\r\n this.logger.verbose(\"Obtained state from response\");\r\n var tokenResponseCallback = window.callbackMappedToRenewStates[stateInfo.state];\r\n this.processCallBack(locationHash, stateInfo, tokenResponseCallback);\r\n };\r\n /**\r\n * @hidden\r\n * This method must be called for processing the response received from the STS when using redirect flows. It extracts the hash, processes the token or error\r\n * information and saves it in the cache. The result can then be accessed by user registered callbacks.\r\n * @param {string} [hash=window.location.hash] - Hash fragment of Url.\r\n */\r\n UserAgentApplication.prototype.handleRedirectAuthenticationResponse = function (hash) {\r\n this.logger.info(\"Returned from redirect url\");\r\n this.logger.verbose(\"HandleRedirectAuthenticationResponse has been called\");\r\n // clear hash from window\r\n WindowUtils.clearUrlFragment(window);\r\n this.logger.verbose(\"Window.location.hash cleared\");\r\n // if (window.parent !== window), by using self, window.parent becomes equal to window in getResponseState method specifically\r\n var stateInfo = this.getResponseState(hash);\r\n // if set to navigate to loginRequest page post login\r\n if (this.config.auth.navigateToLoginRequestUrl && window.parent === window) {\r\n this.logger.verbose(\"Window.parent is equal to window, not in popup or iframe. Navigation to login request url after login turned on\");\r\n var loginRequestUrl = this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.LOGIN_REQUEST, stateInfo.state), this.inCookie);\r\n // Redirect to home page if login request url is null (real null or the string null)\r\n if (!loginRequestUrl || loginRequestUrl === \"null\") {\r\n this.logger.error(\"Unable to get valid login request url from cache, redirecting to home page\");\r\n window.location.assign(\"/\");\r\n return;\r\n }\r\n else {\r\n this.logger.verbose(\"Valid login request url obtained from cache\");\r\n var currentUrl = UrlUtils.removeHashFromUrl(window.location.href);\r\n var finalRedirectUrl = UrlUtils.removeHashFromUrl(loginRequestUrl);\r\n if (currentUrl !== finalRedirectUrl) {\r\n this.logger.verbose(\"Current url is not login request url, navigating\");\r\n this.logger.verbosePii(\"CurrentUrl: \" + currentUrl + \", finalRedirectUrl: \" + finalRedirectUrl);\r\n window.location.assign(\"\" + finalRedirectUrl + hash);\r\n return;\r\n }\r\n else {\r\n this.logger.verbose(\"Current url matches login request url\");\r\n var loginRequestUrlComponents = UrlUtils.GetUrlComponents(loginRequestUrl);\r\n if (loginRequestUrlComponents.Hash) {\r\n this.logger.verbose(\"Login request url contains hash, resetting non-msal hash\");\r\n window.location.hash = loginRequestUrlComponents.Hash;\r\n }\r\n }\r\n }\r\n }\r\n else if (!this.config.auth.navigateToLoginRequestUrl) {\r\n this.logger.verbose(\"Default navigation to start page after login turned off\");\r\n }\r\n this.processCallBack(hash, stateInfo, null);\r\n };\r\n /**\r\n * @hidden\r\n * Creates a stateInfo object from the URL fragment and returns it.\r\n * @param {string} hash - Hash passed from redirect page\r\n * @returns {TokenResponse} an object created from the redirect response from AAD comprising of the keys - parameters, requestType, stateMatch, stateResponse and valid.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.getResponseState = function (hash) {\r\n this.logger.verbose(\"GetResponseState has been called\");\r\n var parameters = UrlUtils.deserializeHash(hash);\r\n var stateResponse;\r\n if (!parameters) {\r\n throw AuthError.createUnexpectedError(\"Hash was not parsed correctly.\");\r\n }\r\n if (parameters.hasOwnProperty(ServerHashParamKeys.STATE)) {\r\n this.logger.verbose(\"Hash contains state. Creating stateInfo object\");\r\n var parsedState = RequestUtils.parseLibraryState(parameters[\"state\"]);\r\n stateResponse = {\r\n requestType: Constants.unknown,\r\n state: parameters[\"state\"],\r\n timestamp: parsedState.ts,\r\n method: parsedState.method,\r\n stateMatch: false\r\n };\r\n }\r\n else {\r\n throw AuthError.createUnexpectedError(\"Hash does not contain state.\");\r\n }\r\n /*\r\n * async calls can fire iframe and login request at the same time if developer does not use the API as expected\r\n * incoming callback needs to be looked up to find the request type\r\n */\r\n // loginRedirect\r\n if (stateResponse.state === this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_LOGIN, stateResponse.state), this.inCookie) || stateResponse.state === this.silentAuthenticationState) {\r\n this.logger.verbose(\"State matches cached state, setting requestType to login\");\r\n stateResponse.requestType = Constants.login;\r\n stateResponse.stateMatch = true;\r\n return stateResponse;\r\n }\r\n // acquireTokenRedirect\r\n else if (stateResponse.state === this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_ACQ_TOKEN, stateResponse.state), this.inCookie)) {\r\n this.logger.verbose(\"State matches cached state, setting requestType to renewToken\");\r\n stateResponse.requestType = Constants.renewToken;\r\n stateResponse.stateMatch = true;\r\n return stateResponse;\r\n }\r\n // external api requests may have many renewtoken requests for different resource\r\n if (!stateResponse.stateMatch) {\r\n this.logger.verbose(\"State does not match cached state, setting requestType to type from window\");\r\n stateResponse.requestType = window.requestType;\r\n var statesInParentContext = window.renewStates;\r\n for (var i = 0; i < statesInParentContext.length; i++) {\r\n if (statesInParentContext[i] === stateResponse.state) {\r\n this.logger.verbose(\"Matching state found for request\");\r\n stateResponse.stateMatch = true;\r\n break;\r\n }\r\n }\r\n if (!stateResponse.stateMatch) {\r\n this.logger.verbose(\"Matching state not found for request\");\r\n }\r\n }\r\n return stateResponse;\r\n };\r\n // #endregion\r\n // #region Token Processing (Extract to TokenProcessing.ts)\r\n /**\r\n * @hidden\r\n * Used to get token for the specified set of scopes from the cache\r\n * @param {@link ServerRequestParameters} - Request sent to the STS to obtain an id_token/access_token\r\n * @param {Account} account - Account for which the scopes were requested\r\n */\r\n UserAgentApplication.prototype.getCachedToken = function (serverAuthenticationRequest, account) {\r\n this.logger.verbose(\"GetCachedToken has been called\");\r\n var scopes = serverAuthenticationRequest.scopes;\r\n /**\r\n * Id Token should be returned in every acquireTokenSilent call. The only exception is a response_type = token\r\n * request when a valid ID Token is not present in the cache.\r\n */\r\n var idToken = this.getCachedIdToken(serverAuthenticationRequest, account);\r\n var authResponse = this.getCachedAccessToken(serverAuthenticationRequest, account, scopes);\r\n var accountState = this.getAccountState(serverAuthenticationRequest.state);\r\n return ResponseUtils.buildAuthResponse(idToken, authResponse, serverAuthenticationRequest, account, scopes, accountState);\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Uses passed in authority to further filter an array of tokenCacheItems until only the token being searched for remains, then returns that tokenCacheItem.\r\n * This method will throw if authority filtering still yields multiple matching tokens and will return null if not tokens match the authority passed in.\r\n *\r\n * @param authority\r\n * @param tokenCacheItems\r\n * @param request\r\n * @param requestScopes\r\n * @param tokenType\r\n */\r\n UserAgentApplication.prototype.getTokenCacheItemByAuthority = function (authority, tokenCacheItems, requestScopes, tokenType) {\r\n var _this = this;\r\n var filteredAuthorityItems;\r\n if (UrlUtils.isCommonAuthority(authority) || UrlUtils.isOrganizationsAuthority(authority) || UrlUtils.isConsumersAuthority(authority)) {\r\n filteredAuthorityItems = AuthCacheUtils.filterTokenCacheItemsByDomain(tokenCacheItems, UrlUtils.GetUrlComponents(authority).HostNameAndPort);\r\n }\r\n else {\r\n filteredAuthorityItems = AuthCacheUtils.filterTokenCacheItemsByAuthority(tokenCacheItems, authority);\r\n }\r\n if (filteredAuthorityItems.length === 1) {\r\n return filteredAuthorityItems[0];\r\n }\r\n else if (filteredAuthorityItems.length > 1) {\r\n this.logger.warning(\"Multiple matching tokens found. Cleaning cache and requesting a new token.\");\r\n filteredAuthorityItems.forEach(function (accessTokenCacheItem) {\r\n _this.cacheStorage.removeItem(JSON.stringify(accessTokenCacheItem.key));\r\n });\r\n return null;\r\n }\r\n else {\r\n this.logger.verbose(\"No matching tokens of type \" + tokenType + \" found\");\r\n return null;\r\n }\r\n };\r\n /**\r\n *\r\n * @hidden\r\n *\r\n * Searches the token cache for an ID Token that matches the request parameter and returns it as an IdToken object.\r\n *\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n */\r\n UserAgentApplication.prototype.getCachedIdToken = function (serverAuthenticationRequest, account) {\r\n this.logger.verbose(\"Getting all cached tokens of type ID Token\");\r\n var idTokenCacheItems = this.cacheStorage.getAllIdTokens(this.clientId, account ? account.homeAccountIdentifier : null);\r\n var matchAuthority = serverAuthenticationRequest.authority || this.authority;\r\n var idTokenCacheItem = this.getTokenCacheItemByAuthority(matchAuthority, idTokenCacheItems, null, ServerHashParamKeys.ID_TOKEN);\r\n if (idTokenCacheItem) {\r\n this.logger.verbose(\"Evaluating ID token found\");\r\n var idTokenIsStillValid = this.evaluateTokenExpiration(idTokenCacheItem);\r\n if (idTokenIsStillValid) {\r\n this.logger.verbose(\"ID token expiration is within offset, using ID token found in cache\");\r\n var idTokenValue = idTokenCacheItem.value;\r\n if (idTokenValue) {\r\n this.logger.verbose(\"ID Token found in cache is valid and unexpired\");\r\n }\r\n else {\r\n this.logger.verbose(\"ID Token found in cache is invalid\");\r\n }\r\n return (idTokenValue) ? new IdToken(idTokenValue.idToken) : null;\r\n }\r\n else {\r\n this.logger.verbose(\"Cached ID token is expired, removing from cache\");\r\n this.cacheStorage.removeItem(JSON.stringify(idTokenCacheItem.key));\r\n return null;\r\n }\r\n }\r\n else {\r\n this.logger.verbose(\"No tokens found\");\r\n return null;\r\n }\r\n };\r\n /**\r\n *\r\n * @hidden\r\n *\r\n * Searches the token cache for an access token that matches the request parameters and returns it as an AuthResponse.\r\n *\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n * @param scopes\r\n */\r\n UserAgentApplication.prototype.getCachedAccessToken = function (serverAuthenticationRequest, account, scopes) {\r\n this.logger.verbose(\"Getting all cached tokens of type Access Token\");\r\n var tokenCacheItems = this.cacheStorage.getAllAccessTokens(this.clientId, account ? account.homeAccountIdentifier : null);\r\n var scopeFilteredTokenCacheItems = AuthCacheUtils.filterTokenCacheItemsByScope(tokenCacheItems, scopes);\r\n var matchAuthority = serverAuthenticationRequest.authority || this.authority;\r\n // serverAuthenticationRequest.authority can only be common or organizations if not null\r\n var accessTokenCacheItem = this.getTokenCacheItemByAuthority(matchAuthority, scopeFilteredTokenCacheItems, scopes, ServerHashParamKeys.ACCESS_TOKEN);\r\n if (!accessTokenCacheItem) {\r\n this.logger.verbose(\"No matching token found when filtering by scope and authority\");\r\n return null;\r\n }\r\n else {\r\n serverAuthenticationRequest.authorityInstance = AuthorityFactory.CreateInstance(accessTokenCacheItem.key.authority, this.config.auth.validateAuthority);\r\n this.logger.verbose(\"Evaluating access token found\");\r\n var tokenIsStillValid = this.evaluateTokenExpiration(accessTokenCacheItem);\r\n // The response value will stay null if token retrieved from the cache is expired, otherwise it will be populated with said token's data\r\n if (tokenIsStillValid) {\r\n this.logger.verbose(\"Access token expiration is within offset, using access token found in cache\");\r\n if (!account) {\r\n account = this.getAccount();\r\n if (!account) {\r\n throw AuthError.createUnexpectedError(\"Account should not be null here.\");\r\n }\r\n }\r\n var aState = this.getAccountState(serverAuthenticationRequest.state);\r\n var response = {\r\n uniqueId: \"\",\r\n tenantId: \"\",\r\n tokenType: ServerHashParamKeys.ACCESS_TOKEN,\r\n idToken: null,\r\n idTokenClaims: null,\r\n accessToken: accessTokenCacheItem.value.accessToken,\r\n scopes: accessTokenCacheItem.key.scopes.split(\" \"),\r\n expiresOn: new Date(Number(accessTokenCacheItem.value.expiresIn) * 1000),\r\n account: account,\r\n accountState: aState,\r\n fromCache: true\r\n };\r\n return response;\r\n }\r\n else {\r\n this.logger.verbose(\"Access token expired, removing from cache\");\r\n this.cacheStorage.removeItem(JSON.stringify(accessTokenCacheItem.key));\r\n return null;\r\n }\r\n }\r\n };\r\n /**\r\n * Returns true if the token passed in is within the acceptable expiration time offset, false if it is expired.\r\n * @param tokenCacheItem\r\n * @param serverAuthenticationRequest\r\n */\r\n UserAgentApplication.prototype.evaluateTokenExpiration = function (tokenCacheItem) {\r\n var expiration = Number(tokenCacheItem.value.expiresIn);\r\n return TokenUtils.validateExpirationIsWithinOffset(expiration, this.config.system.tokenRenewalOffsetSeconds);\r\n };\r\n /**\r\n * @hidden\r\n * Check if ADAL id_token exists and return if exists.\r\n *\r\n */\r\n UserAgentApplication.prototype.extractADALIdToken = function () {\r\n this.logger.verbose(\"ExtractADALIdToken has been called\");\r\n var adalIdToken = this.cacheStorage.getItem(Constants.adalIdToken);\r\n return (!StringUtils.isEmpty(adalIdToken)) ? TokenUtils.extractIdToken(adalIdToken) : null;\r\n };\r\n /**\r\n * @hidden\r\n * Acquires access token using a hidden iframe.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.renewToken = function (requestSignature, resolve, reject, account, serverAuthenticationRequest) {\r\n this.logger.verbose(\"RenewToken has been called\");\r\n this.logger.verbosePii(\"RenewToken scope and authority: \" + requestSignature);\r\n var frameName = WindowUtils.generateFrameName(FramePrefix.TOKEN_FRAME, requestSignature);\r\n WindowUtils.addHiddenIFrame(frameName, this.logger);\r\n this.updateCacheEntries(serverAuthenticationRequest, account, false);\r\n this.logger.verbosePii(\"RenewToken expected state: \" + serverAuthenticationRequest.state);\r\n // Build urlNavigate with \"prompt=none\" and navigate to URL in hidden iFrame\r\n var urlNavigate = UrlUtils.urlRemoveQueryStringParameter(UrlUtils.createNavigateUrl(serverAuthenticationRequest), Constants.prompt) + Constants.prompt_none + Constants.response_mode_fragment;\r\n window.renewStates.push(serverAuthenticationRequest.state);\r\n window.requestType = Constants.renewToken;\r\n this.logger.verbose(\"Set window.renewState and requestType\");\r\n this.registerCallback(serverAuthenticationRequest.state, requestSignature, resolve, reject);\r\n this.logger.infoPii(\"Navigate to: \" + urlNavigate);\r\n this.loadIframeTimeout(urlNavigate, frameName, requestSignature).catch(function (error) { return reject(error); });\r\n };\r\n /**\r\n * @hidden\r\n * Renews idtoken for app's own backend when clientId is passed as a single scope in the scopes array.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.renewIdToken = function (requestSignature, resolve, reject, account, serverAuthenticationRequest) {\r\n this.logger.info(\"RenewIdToken has been called\");\r\n var frameName = WindowUtils.generateFrameName(FramePrefix.ID_TOKEN_FRAME, requestSignature);\r\n WindowUtils.addHiddenIFrame(frameName, this.logger);\r\n this.updateCacheEntries(serverAuthenticationRequest, account, false);\r\n this.logger.verbose(\"RenewIdToken expected state: \" + serverAuthenticationRequest.state);\r\n // Build urlNavigate with \"prompt=none\" and navigate to URL in hidden iFrame\r\n var urlNavigate = UrlUtils.urlRemoveQueryStringParameter(UrlUtils.createNavigateUrl(serverAuthenticationRequest), Constants.prompt) + Constants.prompt_none + Constants.response_mode_fragment;\r\n if (this.silentLogin) {\r\n this.logger.verbose(\"Silent login is true, set silentAuthenticationState\");\r\n window.requestType = Constants.login;\r\n this.silentAuthenticationState = serverAuthenticationRequest.state;\r\n }\r\n else {\r\n this.logger.verbose(\"Not silent login, set window.renewState and requestType\");\r\n window.requestType = Constants.renewToken;\r\n window.renewStates.push(serverAuthenticationRequest.state);\r\n }\r\n // note: scope here is clientId\r\n this.registerCallback(serverAuthenticationRequest.state, requestSignature, resolve, reject);\r\n this.logger.infoPii(\"Navigate to:\\\" \" + urlNavigate);\r\n this.loadIframeTimeout(urlNavigate, frameName, requestSignature).catch(function (error) { return reject(error); });\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * This method builds an Access Token Cache item and saves it to the cache, returning the original\r\n * AuthResponse augmented with a parsed expiresOn attribute.\r\n *\r\n * @param response The AuthResponse object that contains the token to be saved\r\n * @param authority The authority under which the ID token will be cached\r\n * @param scopes The scopes to be added to the cache item key (undefined for ID token cache items)\r\n * @param clientInfo Client Info object that is used to generate the homeAccountIdentifier\r\n * @param expiration Token expiration timestamp\r\n */\r\n UserAgentApplication.prototype.saveToken = function (response, authority, scopes, clientInfo, expiration) {\r\n var accessTokenKey = new AccessTokenKey(authority, this.clientId, scopes, clientInfo.uid, clientInfo.utid);\r\n var accessTokenValue = new AccessTokenValue(response.accessToken, response.idToken.rawIdToken, expiration.toString(), clientInfo.encodeClientInfo());\r\n this.cacheStorage.setItem(JSON.stringify(accessTokenKey), JSON.stringify(accessTokenValue));\r\n if (expiration) {\r\n this.logger.verbose(\"New expiration set for token\");\r\n response.expiresOn = new Date(expiration * 1000);\r\n }\r\n else {\r\n this.logger.error(\"Could not parse expiresIn parameter for access token\");\r\n }\r\n return response;\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * This method sets up the elements of an ID Token cache item and calls saveToken to save it in\r\n * Access Token Cache item format for the client application to use.\r\n *\r\n * @param response The AuthResponse object that will be used to build the cache item\r\n * @param authority The authority under which the ID token will be cached\r\n * @param parameters The response's Hash Params, which contain the ID token returned from the server\r\n * @param clientInfo Client Info object that is used to generate the homeAccountIdentifier\r\n * @param idTokenObj ID Token object from which the ID token's expiration is extracted\r\n */\r\n /* tslint:disable:no-string-literal */\r\n UserAgentApplication.prototype.saveIdToken = function (response, authority, parameters, clientInfo, idTokenObj) {\r\n this.logger.verbose(\"SaveIdToken has been called\");\r\n var idTokenResponse = tslib_1.__assign({}, response);\r\n // Scopes are undefined so they don't show up in ID token cache key\r\n var scopes;\r\n idTokenResponse.scopes = Constants.oidcScopes;\r\n idTokenResponse.accessToken = parameters[ServerHashParamKeys.ID_TOKEN];\r\n var expiration = Number(idTokenObj.expiration);\r\n // Set ID Token item in cache\r\n this.logger.verbose(\"Saving ID token to cache\");\r\n return this.saveToken(idTokenResponse, authority, scopes, clientInfo, expiration);\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * This method sets up the elements of an Access Token cache item and calls saveToken to save it to the cache\r\n *\r\n * @param response The AuthResponse object that will be used to build the cache item\r\n * @param authority The authority under which the access token will be cached\r\n * @param parameters The response's Hash Params, which contain the access token returned from the server\r\n * @param clientInfo Client Info object that is used to generate the homeAccountIdentifier\r\n */\r\n /* tslint:disable:no-string-literal */\r\n UserAgentApplication.prototype.saveAccessToken = function (response, authority, parameters, clientInfo) {\r\n this.logger.verbose(\"SaveAccessToken has been called\");\r\n var accessTokenResponse = tslib_1.__assign({}, response);\r\n // read the scopes\r\n var scope = parameters[ServerHashParamKeys.SCOPE];\r\n var consentedScopes = scope.split(\" \");\r\n // retrieve all access tokens from the cache, remove the dup scopes\r\n var accessTokenCacheItems = this.cacheStorage.getAllAccessTokens(this.clientId, authority);\r\n this.logger.verbose(\"Retrieving all access tokens from cache and removing duplicates\");\r\n for (var i = 0; i < accessTokenCacheItems.length; i++) {\r\n var accessTokenCacheItem = accessTokenCacheItems[i];\r\n if (accessTokenCacheItem.key.homeAccountIdentifier === response.account.homeAccountIdentifier) {\r\n var cachedScopes = accessTokenCacheItem.key.scopes.split(\" \");\r\n if (ScopeSet.isIntersectingScopes(cachedScopes, consentedScopes)) {\r\n this.cacheStorage.removeItem(JSON.stringify(accessTokenCacheItem.key));\r\n }\r\n }\r\n }\r\n accessTokenResponse.accessToken = parameters[ServerHashParamKeys.ACCESS_TOKEN];\r\n accessTokenResponse.scopes = consentedScopes;\r\n var expiresIn = TimeUtils.parseExpiresIn(parameters[ServerHashParamKeys.EXPIRES_IN]);\r\n var parsedState = RequestUtils.parseLibraryState(parameters[ServerHashParamKeys.STATE]);\r\n var expiration = parsedState.ts + expiresIn;\r\n this.logger.verbose(\"Saving access token to cache\");\r\n return this.saveToken(accessTokenResponse, authority, scope, clientInfo, expiration);\r\n };\r\n /**\r\n * @hidden\r\n * Saves token or error received in the response from AAD in the cache. In case of id_token, it also creates the account object.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.saveTokenFromHash = function (hash, stateInfo) {\r\n this.logger.verbose(\"SaveTokenFromHash has been called\");\r\n this.logger.info(\"State status: \" + stateInfo.stateMatch + \"; Request type: \" + stateInfo.requestType);\r\n var response = {\r\n uniqueId: \"\",\r\n tenantId: \"\",\r\n tokenType: \"\",\r\n idToken: null,\r\n idTokenClaims: null,\r\n accessToken: null,\r\n scopes: [],\r\n expiresOn: null,\r\n account: null,\r\n accountState: \"\",\r\n fromCache: false\r\n };\r\n var error;\r\n var hashParams = UrlUtils.deserializeHash(hash);\r\n var authorityKey = \"\";\r\n var acquireTokenAccountKey = \"\";\r\n var idTokenObj = null;\r\n // If server returns an error\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.ERROR_DESCRIPTION) || hashParams.hasOwnProperty(ServerHashParamKeys.ERROR)) {\r\n this.logger.verbose(\"Server returned an error\");\r\n this.logger.infoPii(\"Error : \" + hashParams[ServerHashParamKeys.ERROR] + \"; Error description: \" + hashParams[ServerHashParamKeys.ERROR_DESCRIPTION]);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR, hashParams[ServerHashParamKeys.ERROR]);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR_DESC, hashParams[ServerHashParamKeys.ERROR_DESCRIPTION]);\r\n // login\r\n if (stateInfo.requestType === Constants.login) {\r\n this.logger.verbose(\"RequestType is login, caching login error, generating authorityKey\");\r\n this.cacheStorage.setItem(ErrorCacheKeys.LOGIN_ERROR, hashParams[ServerHashParamKeys.ERROR_DESCRIPTION] + \":\" + hashParams[ServerHashParamKeys.ERROR]);\r\n authorityKey = AuthCache.generateAuthorityKey(stateInfo.state);\r\n }\r\n // acquireToken\r\n if (stateInfo.requestType === Constants.renewToken) {\r\n this.logger.verbose(\"RequestType is renewToken, generating acquireTokenAccountKey\");\r\n authorityKey = AuthCache.generateAuthorityKey(stateInfo.state);\r\n var account = this.getAccount();\r\n var accountId = void 0;\r\n if (account && !StringUtils.isEmpty(account.homeAccountIdentifier)) {\r\n accountId = account.homeAccountIdentifier;\r\n this.logger.verbose(\"AccountId is set\");\r\n }\r\n else {\r\n accountId = Constants.no_account;\r\n this.logger.verbose(\"AccountId is set as no_account\");\r\n }\r\n acquireTokenAccountKey = AuthCache.generateAcquireTokenAccountKey(accountId, stateInfo.state);\r\n }\r\n var hashErr = hashParams[ServerHashParamKeys.ERROR];\r\n var hashErrDesc = hashParams[ServerHashParamKeys.ERROR_DESCRIPTION];\r\n if (InteractionRequiredAuthError.isInteractionRequiredError(hashErr) ||\r\n InteractionRequiredAuthError.isInteractionRequiredError(hashErrDesc)) {\r\n error = new InteractionRequiredAuthError(hashParams[ServerHashParamKeys.ERROR], hashParams[ServerHashParamKeys.ERROR_DESCRIPTION]);\r\n }\r\n else {\r\n error = new ServerError(hashParams[ServerHashParamKeys.ERROR], hashParams[ServerHashParamKeys.ERROR_DESCRIPTION]);\r\n }\r\n }\r\n // If the server returns \"Success\"\r\n else {\r\n this.logger.verbose(\"Server returns success\");\r\n // Verify the state from redirect and record tokens to storage if exists\r\n if (stateInfo.stateMatch) {\r\n this.logger.info(\"State is right\");\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.SESSION_STATE)) {\r\n this.logger.verbose(\"Fragment has session state, caching\");\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.SESSION_STATE, stateInfo.state), hashParams[ServerHashParamKeys.SESSION_STATE]);\r\n }\r\n response.accountState = this.getAccountState(stateInfo.state);\r\n var clientInfo = void 0;\r\n // Process access_token\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.ACCESS_TOKEN)) {\r\n this.logger.info(\"Fragment has access token\");\r\n response.accessToken = hashParams[ServerHashParamKeys.ACCESS_TOKEN];\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.SCOPE)) {\r\n response.scopes = hashParams[ServerHashParamKeys.SCOPE].split(\" \");\r\n }\r\n // retrieve the id_token from response if present\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.ID_TOKEN)) {\r\n this.logger.verbose(\"Fragment has id_token\");\r\n idTokenObj = new IdToken(hashParams[ServerHashParamKeys.ID_TOKEN]);\r\n }\r\n else {\r\n this.logger.verbose(\"No idToken on fragment, getting idToken from cache\");\r\n idTokenObj = new IdToken(this.cacheStorage.getItem(PersistentCacheKeys.IDTOKEN));\r\n }\r\n response = ResponseUtils.setResponseIdToken(response, idTokenObj);\r\n // set authority\r\n var authority = this.populateAuthority(stateInfo.state, this.inCookie, this.cacheStorage, idTokenObj);\r\n this.logger.verbose(\"Got authority from cache\");\r\n // retrieve client_info - if it is not found, generate the uid and utid from idToken\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.CLIENT_INFO)) {\r\n this.logger.verbose(\"Fragment has clientInfo\");\r\n clientInfo = new ClientInfo(hashParams[ServerHashParamKeys.CLIENT_INFO], authority);\r\n }\r\n else if (this.authorityInstance.AuthorityType === AuthorityType.Adfs) {\r\n clientInfo = ClientInfo.createClientInfoFromIdToken(idTokenObj, authority);\r\n }\r\n else {\r\n this.logger.warning(\"ClientInfo not received in the response from AAD\");\r\n }\r\n response.account = Account.createAccount(idTokenObj, clientInfo);\r\n this.logger.verbose(\"Account object created from response\");\r\n var accountKey = void 0;\r\n if (response.account && !StringUtils.isEmpty(response.account.homeAccountIdentifier)) {\r\n this.logger.verbose(\"AccountKey set\");\r\n accountKey = response.account.homeAccountIdentifier;\r\n }\r\n else {\r\n this.logger.verbose(\"AccountKey set as no_account\");\r\n accountKey = Constants.no_account;\r\n }\r\n acquireTokenAccountKey = AuthCache.generateAcquireTokenAccountKey(accountKey, stateInfo.state);\r\n var acquireTokenAccountKey_noaccount = AuthCache.generateAcquireTokenAccountKey(Constants.no_account, stateInfo.state);\r\n this.logger.verbose(\"AcquireTokenAccountKey generated\");\r\n var cachedAccount = this.cacheStorage.getItem(acquireTokenAccountKey);\r\n var acquireTokenAccount = void 0;\r\n // Check with the account in the Cache\r\n if (!StringUtils.isEmpty(cachedAccount)) {\r\n acquireTokenAccount = JSON.parse(cachedAccount);\r\n this.logger.verbose(\"AcquireToken request account retrieved from cache\");\r\n if (response.account && acquireTokenAccount && Account.compareAccounts(response.account, acquireTokenAccount)) {\r\n response = this.saveAccessToken(response, authority, hashParams, clientInfo);\r\n this.logger.info(\"The user object received in the response is the same as the one passed in the acquireToken request\");\r\n }\r\n else {\r\n this.logger.warning(\"The account object created from the response is not the same as the one passed in the acquireToken request\");\r\n }\r\n }\r\n else if (!StringUtils.isEmpty(this.cacheStorage.getItem(acquireTokenAccountKey_noaccount))) {\r\n this.logger.verbose(\"No acquireToken account retrieved from cache\");\r\n response = this.saveAccessToken(response, authority, hashParams, clientInfo);\r\n }\r\n }\r\n // Process id_token\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.ID_TOKEN)) {\r\n this.logger.info(\"Fragment has idToken\");\r\n // set the idToken\r\n idTokenObj = new IdToken(hashParams[ServerHashParamKeys.ID_TOKEN]);\r\n // set authority\r\n var authority = this.populateAuthority(stateInfo.state, this.inCookie, this.cacheStorage, idTokenObj);\r\n response = ResponseUtils.setResponseIdToken(response, idTokenObj);\r\n if (hashParams.hasOwnProperty(ServerHashParamKeys.CLIENT_INFO)) {\r\n this.logger.verbose(\"Fragment has clientInfo\");\r\n clientInfo = new ClientInfo(hashParams[ServerHashParamKeys.CLIENT_INFO], authority);\r\n }\r\n else if (this.authorityInstance.AuthorityType === AuthorityType.Adfs) {\r\n clientInfo = ClientInfo.createClientInfoFromIdToken(idTokenObj, authority);\r\n }\r\n else {\r\n this.logger.warning(\"ClientInfo not received in the response from AAD\");\r\n }\r\n this.account = Account.createAccount(idTokenObj, clientInfo);\r\n response.account = this.account;\r\n this.logger.verbose(\"Account object created from response\");\r\n if (idTokenObj && idTokenObj.nonce) {\r\n this.logger.verbose(\"IdToken has nonce\");\r\n // check nonce integrity if idToken has nonce - throw an error if not matched\r\n var cachedNonce = this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.NONCE_IDTOKEN, stateInfo.state), this.inCookie);\r\n if (idTokenObj.nonce !== cachedNonce) {\r\n this.account = null;\r\n this.cacheStorage.setItem(ErrorCacheKeys.LOGIN_ERROR, \"Nonce Mismatch. Expected Nonce: \" + cachedNonce + \",\" + \"Actual Nonce: \" + idTokenObj.nonce);\r\n this.logger.error(\"Nonce Mismatch. Expected Nonce: \" + cachedNonce + \", Actual Nonce: \" + idTokenObj.nonce);\r\n error = ClientAuthError.createNonceMismatchError(cachedNonce, idTokenObj.nonce);\r\n }\r\n // Save the token\r\n else {\r\n this.logger.verbose(\"Nonce matches, saving idToken to cache\");\r\n this.cacheStorage.setItem(PersistentCacheKeys.IDTOKEN, hashParams[ServerHashParamKeys.ID_TOKEN], this.inCookie);\r\n this.cacheStorage.setItem(PersistentCacheKeys.CLIENT_INFO, clientInfo.encodeClientInfo(), this.inCookie);\r\n // Save idToken as access token item for app itself\r\n this.saveIdToken(response, authority, hashParams, clientInfo, idTokenObj);\r\n }\r\n }\r\n else {\r\n this.logger.verbose(\"No idToken or no nonce. Cache key for Authority set as state\");\r\n authorityKey = stateInfo.state;\r\n acquireTokenAccountKey = stateInfo.state;\r\n this.logger.error(\"Invalid id_token received in the response\");\r\n error = ClientAuthError.createInvalidIdTokenError(idTokenObj);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR, error.errorCode);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR_DESC, error.errorMessage);\r\n }\r\n }\r\n }\r\n // State mismatch - unexpected/invalid state\r\n else {\r\n this.logger.verbose(\"State mismatch\");\r\n authorityKey = stateInfo.state;\r\n acquireTokenAccountKey = stateInfo.state;\r\n var expectedState = this.cacheStorage.getItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_LOGIN, stateInfo.state), this.inCookie);\r\n this.logger.error(\"State Mismatch. Expected State: \" + expectedState + \", Actual State: \" + stateInfo.state);\r\n error = ClientAuthError.createInvalidStateError(stateInfo.state, expectedState);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR, error.errorCode);\r\n this.cacheStorage.setItem(ErrorCacheKeys.ERROR_DESC, error.errorMessage);\r\n }\r\n }\r\n // Set status to completed\r\n this.cacheStorage.removeItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.RENEW_STATUS, stateInfo.state));\r\n this.cacheStorage.resetTempCacheItems(stateInfo.state);\r\n this.logger.verbose(\"Status set to complete, temporary cache cleared\");\r\n // this is required if navigateToLoginRequestUrl=false\r\n if (this.inCookie) {\r\n this.logger.verbose(\"InCookie is true, setting authorityKey in cookie\");\r\n this.cacheStorage.setItemCookie(authorityKey, \"\", -1);\r\n this.cacheStorage.clearMsalCookie(stateInfo.state);\r\n }\r\n if (error) {\r\n // Error case, set status to cancelled\r\n throw error;\r\n }\r\n if (!response) {\r\n throw AuthError.createUnexpectedError(\"Response is null\");\r\n }\r\n return response;\r\n };\r\n /**\r\n * Set Authority when saving Token from the hash\r\n * @param state\r\n * @param inCookie\r\n * @param cacheStorage\r\n * @param idTokenObj\r\n * @param response\r\n */\r\n UserAgentApplication.prototype.populateAuthority = function (state, inCookie, cacheStorage, idTokenObj) {\r\n this.logger.verbose(\"PopulateAuthority has been called\");\r\n var authorityKey = AuthCache.generateAuthorityKey(state);\r\n var cachedAuthority = cacheStorage.getItem(authorityKey, inCookie);\r\n // retrieve the authority from cache and replace with tenantID\r\n return StringUtils.isEmpty(cachedAuthority) ? cachedAuthority : UrlUtils.replaceTenantPath(cachedAuthority, idTokenObj.tenantId);\r\n };\r\n /* tslint:enable:no-string-literal */\r\n // #endregion\r\n // #region Account\r\n /**\r\n * Returns the signed in account\r\n * (the account object is created at the time of successful login)\r\n * or null when no state is found\r\n * @returns {@link Account} - the account object stored in MSAL\r\n */\r\n UserAgentApplication.prototype.getAccount = function () {\r\n // if a session already exists, get the account from the session\r\n if (this.account) {\r\n return this.account;\r\n }\r\n // frame is used to get idToken and populate the account for the given session\r\n var rawIdToken = this.cacheStorage.getItem(PersistentCacheKeys.IDTOKEN, this.inCookie);\r\n var rawClientInfo = this.cacheStorage.getItem(PersistentCacheKeys.CLIENT_INFO, this.inCookie);\r\n if (!StringUtils.isEmpty(rawIdToken) && !StringUtils.isEmpty(rawClientInfo)) {\r\n var idToken = new IdToken(rawIdToken);\r\n var clientInfo = new ClientInfo(rawClientInfo, \"\");\r\n this.account = Account.createAccount(idToken, clientInfo);\r\n return this.account;\r\n }\r\n // if login not yet done, return null\r\n return null;\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Extracts state value from the accountState sent with the authentication request.\r\n * @returns {string} scope.\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.getAccountState = function (state) {\r\n if (state) {\r\n var splitIndex = state.indexOf(Constants.resourceDelimiter);\r\n if (splitIndex > -1 && splitIndex + 1 < state.length) {\r\n return state.substring(splitIndex + 1);\r\n }\r\n }\r\n return state;\r\n };\r\n /**\r\n * Use to get a list of unique accounts in MSAL cache based on homeAccountIdentifier.\r\n *\r\n * @param {@link Array} Account - all unique accounts in MSAL cache.\r\n */\r\n UserAgentApplication.prototype.getAllAccounts = function () {\r\n var accounts = [];\r\n var accessTokenCacheItems = this.cacheStorage.getAllAccessTokens(Constants.clientId, Constants.homeAccountIdentifier);\r\n for (var i = 0; i < accessTokenCacheItems.length; i++) {\r\n var idToken = new IdToken(accessTokenCacheItems[i].value.idToken);\r\n var clientInfo = new ClientInfo(accessTokenCacheItems[i].value.homeAccountIdentifier, \"\");\r\n var account = Account.createAccount(idToken, clientInfo);\r\n accounts.push(account);\r\n }\r\n return this.getUniqueAccounts(accounts);\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Used to filter accounts based on homeAccountIdentifier\r\n * @param {Array} Accounts - accounts saved in the cache\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.getUniqueAccounts = function (accounts) {\r\n if (!accounts || accounts.length <= 1) {\r\n return accounts;\r\n }\r\n var flags = [];\r\n var uniqueAccounts = [];\r\n for (var index = 0; index < accounts.length; ++index) {\r\n if (accounts[index].homeAccountIdentifier && flags.indexOf(accounts[index].homeAccountIdentifier) === -1) {\r\n flags.push(accounts[index].homeAccountIdentifier);\r\n uniqueAccounts.push(accounts[index]);\r\n }\r\n }\r\n return uniqueAccounts;\r\n };\r\n // #endregion\r\n // #region Angular\r\n /**\r\n * @hidden\r\n *\r\n * Broadcast messages - Used only for Angular? *\r\n * @param eventName\r\n * @param data\r\n */\r\n UserAgentApplication.prototype.broadcast = function (eventName, data) {\r\n var evt = new CustomEvent(eventName, { detail: data });\r\n window.dispatchEvent(evt);\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Helper function to retrieve the cached token\r\n *\r\n * @param scopes\r\n * @param {@link Account} account\r\n * @param state\r\n * @return {@link AuthResponse} AuthResponse\r\n */\r\n UserAgentApplication.prototype.getCachedTokenInternal = function (scopes, account, state, correlationId) {\r\n // Get the current session's account object\r\n var accountObject = account || this.getAccount();\r\n if (!accountObject) {\r\n return null;\r\n }\r\n // Construct AuthenticationRequest based on response type; set \"redirectUri\" from the \"request\" which makes this call from Angular - for this.getRedirectUri()\r\n var newAuthority = this.authorityInstance ? this.authorityInstance : AuthorityFactory.CreateInstance(this.authority, this.config.auth.validateAuthority);\r\n var responseType = this.getTokenType(accountObject, scopes);\r\n var serverAuthenticationRequest = new ServerRequestParameters(newAuthority, this.clientId, responseType, this.getRedirectUri(), scopes, state, correlationId);\r\n // get cached token\r\n return this.getCachedToken(serverAuthenticationRequest, account);\r\n };\r\n /**\r\n * @hidden\r\n *\r\n * Get scopes for the Endpoint - Used in Angular to track protected and unprotected resources without interaction from the developer app\r\n * Note: Please check if we need to set the \"redirectUri\" from the \"request\" which makes this call from Angular - for this.getRedirectUri()\r\n *\r\n * @param endpoint\r\n */\r\n UserAgentApplication.prototype.getScopesForEndpoint = function (endpoint) {\r\n // if user specified list of unprotectedResources, no need to send token to these endpoints, return null.\r\n if (this.config.framework.unprotectedResources.length > 0) {\r\n for (var i = 0; i < this.config.framework.unprotectedResources.length; i++) {\r\n if (endpoint.indexOf(this.config.framework.unprotectedResources[i]) > -1) {\r\n return null;\r\n }\r\n }\r\n }\r\n // process all protected resources and send the matched one\r\n if (this.config.framework.protectedResourceMap.size > 0) {\r\n for (var _i = 0, _a = Array.from(this.config.framework.protectedResourceMap.keys()); _i < _a.length; _i++) {\r\n var key = _a[_i];\r\n // configEndpoint is like /api/Todo requested endpoint can be /api/Todo/1\r\n if (endpoint.indexOf(key) > -1) {\r\n return this.config.framework.protectedResourceMap.get(key);\r\n }\r\n }\r\n }\r\n /*\r\n * default resource will be clientid if nothing specified\r\n * App will use idtoken for calls to itself\r\n * check if it's staring from http or https, needs to match with app host\r\n */\r\n if (endpoint.indexOf(\"http://\") > -1 || endpoint.indexOf(\"https://\") > -1) {\r\n if (UrlUtils.getHostFromUri(endpoint) === UrlUtils.getHostFromUri(this.getRedirectUri())) {\r\n return new Array(this.clientId);\r\n }\r\n }\r\n else {\r\n /*\r\n * in angular level, the url for $http interceptor call could be relative url,\r\n * if it's relative call, we'll treat it as app backend call.\r\n */\r\n return new Array(this.clientId);\r\n }\r\n // if not the app's own backend or not a domain listed in the endpoints structure\r\n return null;\r\n };\r\n /**\r\n * Return boolean flag to developer to help inform if login is in progress\r\n * @returns {boolean} true/false\r\n */\r\n UserAgentApplication.prototype.getLoginInProgress = function () {\r\n return this.cacheStorage.getItem(TemporaryCacheKeys.INTERACTION_STATUS) === Constants.inProgress;\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * @param loginInProgress\r\n */\r\n UserAgentApplication.prototype.setInteractionInProgress = function (inProgress) {\r\n if (inProgress) {\r\n this.cacheStorage.setItem(TemporaryCacheKeys.INTERACTION_STATUS, Constants.inProgress);\r\n }\r\n else {\r\n this.cacheStorage.removeItem(TemporaryCacheKeys.INTERACTION_STATUS);\r\n }\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * @param loginInProgress\r\n */\r\n UserAgentApplication.prototype.setloginInProgress = function (loginInProgress) {\r\n this.setInteractionInProgress(loginInProgress);\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * returns the status of acquireTokenInProgress\r\n */\r\n UserAgentApplication.prototype.getAcquireTokenInProgress = function () {\r\n return this.cacheStorage.getItem(TemporaryCacheKeys.INTERACTION_STATUS) === Constants.inProgress;\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * @param acquireTokenInProgress\r\n */\r\n UserAgentApplication.prototype.setAcquireTokenInProgress = function (acquireTokenInProgress) {\r\n this.setInteractionInProgress(acquireTokenInProgress);\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * returns the logger handle\r\n */\r\n UserAgentApplication.prototype.getLogger = function () {\r\n return this.logger;\r\n };\r\n /**\r\n * Sets the logger callback.\r\n * @param logger Logger callback\r\n */\r\n UserAgentApplication.prototype.setLogger = function (logger) {\r\n this.logger = logger;\r\n };\r\n // #endregion\r\n // #region Getters and Setters\r\n /**\r\n * Use to get the redirect uri configured in MSAL or null.\r\n * Evaluates redirectUri if its a function, otherwise simply returns its value.\r\n *\r\n * @returns {string} redirect URL\r\n */\r\n UserAgentApplication.prototype.getRedirectUri = function (reqRedirectUri) {\r\n if (reqRedirectUri) {\r\n return reqRedirectUri;\r\n }\r\n else if (typeof this.config.auth.redirectUri === \"function\") {\r\n return this.config.auth.redirectUri();\r\n }\r\n return this.config.auth.redirectUri;\r\n };\r\n /**\r\n * Use to get the post logout redirect uri configured in MSAL or null.\r\n * Evaluates postLogoutredirectUri if its a function, otherwise simply returns its value.\r\n *\r\n * @returns {string} post logout redirect URL\r\n */\r\n UserAgentApplication.prototype.getPostLogoutRedirectUri = function () {\r\n if (typeof this.config.auth.postLogoutRedirectUri === \"function\") {\r\n return this.config.auth.postLogoutRedirectUri();\r\n }\r\n return this.config.auth.postLogoutRedirectUri;\r\n };\r\n /**\r\n * Use to get the current {@link Configuration} object in MSAL\r\n *\r\n * @returns {@link Configuration}\r\n */\r\n UserAgentApplication.prototype.getCurrentConfiguration = function () {\r\n if (!this.config) {\r\n throw ClientConfigurationError.createNoSetConfigurationError();\r\n }\r\n return this.config;\r\n };\r\n /**\r\n * @ignore\r\n *\r\n * Utils function to create the Authentication\r\n * @param {@link account} account object\r\n * @param scopes\r\n *\r\n * @returns {string} token type: token, id_token or id_token token\r\n *\r\n */\r\n UserAgentApplication.prototype.getTokenType = function (accountObject, scopes) {\r\n var accountsMatch = Account.compareAccounts(accountObject, this.getAccount());\r\n return ServerRequestParameters.determineResponseType(accountsMatch, scopes);\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * Sets the cachekeys for and stores the account information in cache\r\n * @param account\r\n * @param state\r\n * @hidden\r\n */\r\n UserAgentApplication.prototype.setAccountCache = function (account, state) {\r\n // Cache acquireTokenAccountKey\r\n var accountId = account ? this.getAccountId(account) : Constants.no_account;\r\n var acquireTokenAccountKey = AuthCache.generateAcquireTokenAccountKey(accountId, state);\r\n this.cacheStorage.setItem(acquireTokenAccountKey, JSON.stringify(account));\r\n };\r\n /**\r\n * @hidden\r\n * @ignore\r\n *\r\n * Sets the cacheKey for and stores the authority information in cache\r\n * @param state\r\n * @param authority\r\n * @hidden\r\n */\r\n UserAgentApplication.prototype.setAuthorityCache = function (state, authority) {\r\n // Cache authorityKey\r\n var authorityKey = AuthCache.generateAuthorityKey(state);\r\n this.cacheStorage.setItem(authorityKey, UrlUtils.CanonicalizeUri(authority), this.inCookie);\r\n };\r\n /**\r\n * Updates account, authority, and nonce in cache\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n * @hidden\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.updateCacheEntries = function (serverAuthenticationRequest, account, isLoginCall, loginStartPage) {\r\n // Cache Request Originator Page\r\n if (loginStartPage) {\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.LOGIN_REQUEST, serverAuthenticationRequest.state), loginStartPage, this.inCookie);\r\n }\r\n // Cache account and authority\r\n if (isLoginCall) {\r\n // Cache the state\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.STATE_LOGIN, serverAuthenticationRequest.state), serverAuthenticationRequest.state, this.inCookie);\r\n }\r\n else {\r\n this.setAccountCache(account, serverAuthenticationRequest.state);\r\n }\r\n // Cache authorityKey\r\n this.setAuthorityCache(serverAuthenticationRequest.state, serverAuthenticationRequest.authority);\r\n // Cache nonce\r\n this.cacheStorage.setItem(AuthCache.generateTemporaryCacheKey(TemporaryCacheKeys.NONCE_IDTOKEN, serverAuthenticationRequest.state), serverAuthenticationRequest.nonce, this.inCookie);\r\n };\r\n /**\r\n * Returns the unique identifier for the logged in account\r\n * @param account\r\n * @hidden\r\n * @ignore\r\n */\r\n UserAgentApplication.prototype.getAccountId = function (account) {\r\n // return `${account.accountIdentifier}` + Constants.resourceDelimiter + `${account.homeAccountIdentifier}`;\r\n var accountId;\r\n if (!StringUtils.isEmpty(account.homeAccountIdentifier)) {\r\n accountId = account.homeAccountIdentifier;\r\n }\r\n else {\r\n accountId = Constants.no_account;\r\n }\r\n return accountId;\r\n };\r\n /**\r\n * @ignore\r\n * @param extraQueryParameters\r\n *\r\n * Construct 'tokenRequest' from the available data in adalIdToken\r\n */\r\n UserAgentApplication.prototype.buildIDTokenRequest = function (request) {\r\n var tokenRequest = {\r\n scopes: Constants.oidcScopes,\r\n authority: this.authority,\r\n account: this.getAccount(),\r\n extraQueryParameters: request.extraQueryParameters,\r\n correlationId: request.correlationId\r\n };\r\n return tokenRequest;\r\n };\r\n /**\r\n * @ignore\r\n * @param config\r\n * @param clientId\r\n *\r\n * Construct TelemetryManager from Configuration\r\n */\r\n UserAgentApplication.prototype.getTelemetryManagerFromConfig = function (config, clientId) {\r\n if (!config) { // if unset\r\n return TelemetryManager.getTelemetrymanagerStub(clientId, this.logger);\r\n }\r\n // if set then validate\r\n var applicationName = config.applicationName, applicationVersion = config.applicationVersion, telemetryEmitter = config.telemetryEmitter;\r\n if (!applicationName || !applicationVersion || !telemetryEmitter) {\r\n throw ClientConfigurationError.createTelemetryConfigError(config);\r\n }\r\n // if valid then construct\r\n var telemetryPlatform = {\r\n applicationName: applicationName,\r\n applicationVersion: applicationVersion\r\n };\r\n var telemetryManagerConfig = {\r\n platform: telemetryPlatform,\r\n clientId: clientId\r\n };\r\n return new TelemetryManager(telemetryManagerConfig, telemetryEmitter, this.logger);\r\n };\r\n return UserAgentApplication;\r\n}());\r\nexport { UserAgentApplication };\r\n//# sourceMappingURL=UserAgentApplication.js.map","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { InjectionToken, Injectable, EventEmitter, Component, ElementRef, HostBinding, Output, Input, isDevMode, Directive, NgZone, Renderer2, Optional, Inject, forwardRef, NgModule } from '@angular/core';\nimport { filter, debounceTime, take } from 'rxjs/operators';\nimport { fromEvent } from 'rxjs';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Obsolete. Provide the TooltipSettings class instead.\n *\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\n\nvar I18N_0;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.tooltip.closeTitle\n */ \n const MSG_EXTERNAL_1245147641110884896$$DIST_FESM2015_INDEX_JS_1 = goog.getMsg(\"Close\");\n I18N_0 = MSG_EXTERNAL_1245147641110884896$$DIST_FESM2015_INDEX_JS_1;\n}\nelse {\n I18N_0 = $localize `:kendo.tooltip.closeTitle|The title of the close button␟de53b3f74f2d4a81b5c3f54c0ac1269cb017bd4f␟1245147641110884896:Close`;\n}\nconst _c2 = [\"closeTitle\", I18N_0];\nfunction TooltipContentComponent_div_3_ng_template_1_Template(rf, ctx) { }\nconst _c3 = function (a0, a1) { return { $implicit: a0, anchor: a1 }; };\nfunction TooltipContentComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 7);\n ɵngcc0.ɵɵtemplate(1, TooltipContentComponent_div_3_ng_template_1_Template, 0, 0, \"ng-template\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r253 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r253.titleTemplate)(\"ngTemplateOutlet\", ctx_r253.titleTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(3, _c3, ctx_r253.anchor, ctx_r253.anchor));\n} }\nfunction TooltipContentComponent_ng_template_4_Template(rf, ctx) { }\nfunction TooltipContentComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r255 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r255.templateString, \" \");\n} }\nfunction TooltipContentComponent_div_6_Template(rf, ctx) { if (rf & 1) {\n const _r260 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 8);\n ɵngcc0.ɵɵlistener(\"click\", function TooltipContentComponent_div_6_Template_div_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r260); const ctx_r259 = ɵngcc0.ɵɵnextContext(); return ctx_r259.onCloseClick($event); });\n ɵngcc0.ɵɵelement(1, \"a\", 9);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r256 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r256.closeButtonTitle);\n} }\nfunction TooltipContentComponent_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 10);\n} if (rf & 2) {\n const ctx_r257 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r257.calloutPositionClass());\n} }\nconst TOOLTIP_SETTINGS = new InjectionToken('kendo-ui-tooltip-settings');\n/**\n * Provides a global configuration for the Kendo UI Tooltip. Once injected through\n * the `AppComponent` constructor, the configuration properties can be overridden.\n *\n * @example\n * ```ts-no-run\n * import { TooltipSettings } from '@progress/kendo-angular-tooltip';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
\n * \n *
`,\n * providers: [{\n * provide: TooltipSettings,\n * useFactory: (): TooltipSettings => ({\n * // Override default values of tooltips if wanted\n * position: 'right'\n * })\n * }]\n * })\n * export class AppComponent { }\n * ```\n */\nclass TooltipSettings {\n}\nTooltipSettings.ɵfac = function TooltipSettings_Factory(t) { return new (t || TooltipSettings)(); };\nTooltipSettings.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: TooltipSettings, factory: TooltipSettings.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TooltipSettings, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @hidden\n */\nfunction align(position, offset) {\n let anchorAlign = {};\n let popupAlign = {};\n let popupMargin = {};\n switch (position) {\n case 'top':\n anchorAlign = { horizontal: 'center', vertical: 'top' };\n popupAlign = { horizontal: 'center', vertical: 'bottom' };\n popupMargin = { horizontal: 0, vertical: offset };\n break;\n case 'bottom':\n anchorAlign = { horizontal: 'center', vertical: 'bottom' };\n popupAlign = { horizontal: 'center', vertical: 'top' };\n popupMargin = { horizontal: 0, vertical: offset };\n break;\n case 'right':\n anchorAlign = { horizontal: 'right', vertical: 'center' };\n popupAlign = { horizontal: 'left', vertical: 'center' };\n popupMargin = { horizontal: offset, vertical: 0 };\n break;\n case 'left':\n anchorAlign = { horizontal: 'left', vertical: 'center' };\n popupAlign = { horizontal: 'right', vertical: 'center' };\n popupMargin = { horizontal: offset, vertical: 0 };\n break;\n default: break;\n }\n return {\n anchorAlign,\n popupAlign,\n popupMargin\n };\n}\n/**\n * @hidden\n */\nfunction collision(inputcollision, position) {\n if (inputcollision) {\n return inputcollision;\n }\n if (position === 'top' || position === 'bottom') {\n return { horizontal: 'fit', vertical: 'flip' };\n }\n return { horizontal: 'flip', vertical: 'fit' };\n}\nfunction isDocumentNode(container) {\n return container.nodeType === 9;\n}\n/**\n * @hidden\n */\nfunction closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n const matches = Element.prototype.matches ?\n (el, sel) => el.matches(sel)\n : (el, sel) => el.msMatchesSelector(sel);\n let node = element;\n while (node && !isDocumentNode(node)) {\n if (matches(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n}\n/**\n * @hidden\n */\nfunction contains(container, child) {\n if (!container) {\n return false;\n }\n if (isDocumentNode(container)) {\n return false;\n }\n if (container.contains) {\n return container.contains(child);\n }\n if (container.compareDocumentPosition) {\n // tslint:disable-next-line\n return !!(container.compareDocumentPosition(child) & Node.DOCUMENT_POSITION_CONTAINED_BY);\n }\n}\n/**\n * @hidden\n */\nconst hasParent = (node, parent) => {\n while (node && node !== parent) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nfunction getCenterOffset(item, dir, size) {\n const rect = item.getBoundingClientRect();\n return rect[dir] + (rect[size] / 2);\n}\n/**\n * @hidden\n */\nfunction containsItem(collection, item) {\n return collection.indexOf(item) !== -1;\n}\n\n/**\n * @hidden\n */\nclass TooltipContentComponent {\n constructor(content, localizationService) {\n this.content = content;\n this.localizationService = localizationService;\n this.close = new EventEmitter();\n this.tooltipWidth = null;\n this.tooltipHeight = null;\n this.callout = true;\n this.calloutStyles = (position, calloutSize, isFlip) => {\n const styles = {};\n const isVertical = position === 'top' || position === 'bottom';\n const flipDeg = '180deg';\n const zeroDeg = '0deg';\n if (!isFlip) {\n styles.transform = isVertical ? `rotateX(${zeroDeg})` : `rotateY(${zeroDeg})`;\n return styles;\n }\n if (position === 'top') {\n styles.bottom = 'unset';\n }\n else if (position === 'bottom') {\n styles.top = 'unset';\n }\n else if (position === 'left') {\n styles.right = 'unset';\n }\n else if (position === 'right') {\n styles.left = 'unset';\n }\n styles[position] = `${-calloutSize}px`;\n styles.transform = isVertical ? `rotateX(${flipDeg})` : `rotateY(${flipDeg})`;\n return styles;\n };\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get cssClasses() {\n return 'k-widget k-tooltip';\n }\n get className() {\n return this.closable;\n }\n get cssPosition() {\n return 'relative';\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n get closeButtonTitle() {\n return this.closeTitle || this.localizationService.get('closeTitle');\n }\n calloutPositionClass() {\n return {\n 'top': 'k-callout-s',\n 'left': 'k-callout-e',\n 'bottom': 'k-callout-n',\n 'right': 'k-callout-w'\n }[this.position];\n }\n onCloseClick(event) {\n event.preventDefault();\n this.close.emit();\n }\n updateCalloutPosition(position, isFlip) {\n if (!this.callout) {\n return;\n }\n const callout = this.content.nativeElement.querySelector('.k-callout');\n const isVertical = position === 'top' || position === 'bottom';\n const size = isVertical ? 'width' : 'height';\n const dir = isVertical ? 'left' : 'top';\n const offsetProperty = isVertical ? 'marginLeft' : 'marginTop';\n const calloutSize = callout.getBoundingClientRect()[size];\n const anchorCenter = getCenterOffset(this.anchor.nativeElement, dir, size);\n const contentCenter = getCenterOffset(this.content.nativeElement, dir, size);\n const diff = Math.abs(contentCenter - anchorCenter);\n if (diff > 1 || diff === 0 || Math.round(diff) === 0) {\n const newMargin = contentCenter - anchorCenter + (calloutSize / 2);\n callout.style[offsetProperty] = `${-newMargin}px`;\n }\n const calloutStyles = this.calloutStyles(position, calloutSize, isFlip);\n Object.keys(calloutStyles).forEach((style) => {\n callout.style[style] = calloutStyles[style];\n });\n }\n}\nTooltipContentComponent.ɵfac = function TooltipContentComponent_Factory(t) { return new (t || TooltipContentComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nTooltipContentComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TooltipContentComponent, selectors: [[\"kendo-tooltip\"]], hostVars: 11, hostBindings: function TooltipContentComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassMap(ctx.cssClasses);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.tooltipWidth, \"px\")(\"height\", ctx.tooltipHeight, \"px\")(\"position\", ctx.cssPosition);\n ɵngcc0.ɵɵclassProp(\"k-tooltip-closable\", ctx.className);\n } }, inputs: { tooltipWidth: \"tooltipWidth\", tooltipHeight: \"tooltipHeight\", titleTemplate: \"titleTemplate\", anchor: \"anchor\", closable: \"closable\", templateRef: \"templateRef\", templateString: \"templateString\" }, outputs: { close: \"close\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tooltip'\n }\n ])], decls: 8, vars: 10, consts: [[\"kendoTooltipLocalizedMessages\", \"\", 6, \"closeTitle\"], [1, \"k-tooltip-content\"], [\"class\", \"k-tooltip-title\", 4, \"ngIf\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"ngIf\"], [\"class\", \"k-tooltip-button\", 3, \"click\", 4, \"ngIf\"], [\"class\", \"k-callout\", 3, \"ngClass\", 4, \"ngIf\"], [1, \"k-tooltip-title\"], [1, \"k-tooltip-button\", 3, \"click\"], [\"href\", \"#\", 1, \"k-icon\", \"k-i-close\"], [1, \"k-callout\", 3, \"ngClass\"]], template: function TooltipContentComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c2);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1);\n ɵngcc0.ɵɵtemplate(3, TooltipContentComponent_div_3_Template, 2, 6, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, TooltipContentComponent_ng_template_4_Template, 0, 0, \"ng-template\", 3);\n ɵngcc0.ɵɵtemplate(5, TooltipContentComponent_ng_template_5_Template, 1, 1, \"ng-template\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, TooltipContentComponent_div_6_Template, 2, 1, \"div\", 5);\n ɵngcc0.ɵɵtemplate(7, TooltipContentComponent_div_7_Template, 1, 1, \"div\", 6);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.titleTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.templateRef)(\"ngTemplateOutlet\", ctx.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(7, _c3, ctx.anchor, ctx.anchor));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.templateString);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.closable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.callout);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgClass]; }, encapsulation: 2 });\n/** @nocollapse */\nTooltipContentComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: LocalizationService }\n];\nTooltipContentComponent.propDecorators = {\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n close: [{ type: Output }],\n cssClasses: [{ type: HostBinding, args: ['class',] }],\n className: [{ type: HostBinding, args: ['class.k-tooltip-closable',] }],\n cssPosition: [{ type: HostBinding, args: ['style.position',] }],\n tooltipWidth: [{ type: HostBinding, args: ['style.width.px',] }, { type: Input }],\n tooltipHeight: [{ type: HostBinding, args: ['style.height.px',] }, { type: Input }],\n titleTemplate: [{ type: Input }],\n anchor: [{ type: Input }],\n closable: [{ type: Input }],\n templateRef: [{ type: Input }],\n templateString: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TooltipContentComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-tooltip',\n template: `\n \n \n\n
\n
\n \n \n
\n\n \n \n \n {{ templateString }}\n \n
\n\n
\n \n
\n\n
\n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tooltip'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }]; }, { close: [{\n type: Output\n }], tooltipWidth: [{\n type: HostBinding,\n args: ['style.width.px']\n }, {\n type: Input\n }], tooltipHeight: [{\n type: HostBinding,\n args: ['style.height.px']\n }, {\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], cssClasses: [{\n type: HostBinding,\n args: ['class']\n }], className: [{\n type: HostBinding,\n args: ['class.k-tooltip-closable']\n }], cssPosition: [{\n type: HostBinding,\n args: ['style.position']\n }], titleTemplate: [{\n type: Input\n }], anchor: [{\n type: Input\n }], closable: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], templateString: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the [Kendo UI Tooltip directive for Angular]({% slug overview_tooltip %}).\n * Used to display additional information that is related to an element.\n *\n * @example\n * ```ts-no-run\n *
\n * foo\n *
\n * ```\n */\nclass TooltipDirective {\n constructor(tooltipWrapper, ngZone, renderer, popupService, settings, legacySettings) {\n this.tooltipWrapper = tooltipWrapper;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.popupService = popupService;\n /**\n * Specifies a selector for elements within a container which will display a tooltip\n * ([see example]({% slug anchorelements_tooltip %})). The possible values include any\n * DOM `selector`. The default value is `[title]`.\n */\n this.filter = '[title]';\n /**\n * Specifies the position of the Tooltip that is relative to the\n * anchor element ([see example]({% slug positioning_tooltip %})).\n *\n * The possible values are:\n * * `top` (default)\n * * `bottom`\n * * `left`\n * * `right`\n */\n this.position = 'top';\n /**\n * Specifies the delay in milliseconds before the Tooltip is shown.\n * * `100` (default) milliseconds.\n */\n this.showAfter = 100;\n /**\n * Specifies if the Тooltip will display a callout arrow.\n *\n * The possible values are:\n * * `true` (default)\n * * `false`\n */\n this.callout = true;\n /**\n * Specifies if the Тooltip will display a **Close** button\n * ([see example]({% slug closable_tooltip %})).\n *\n * The possible values are:\n * * `true`\n * * `false`\n */\n this.closable = false;\n /**\n * Specifies the offset in pixels between the Tooltip and the anchor. Defaults to `6` pixels.\n * If the `callout` property is set to `true`, the offset is rendered from the callout arrow.\n * If the `callout` property is set to `false`, the offset is rendered from the content of the Tooltip.\n */\n this.offset = 6;\n this.anchor = null;\n this.validPositions = ['top', 'bottom', 'right', 'left'];\n this.validShowOptions = ['hover', 'click', 'none'];\n Object.assign(this, settings, legacySettings);\n this.ngZone.runOutsideAngular(() => {\n const wrapper = this.tooltipWrapper.nativeElement;\n this.anchorTitleSubscription = fromEvent(wrapper, 'mouseover')\n .pipe(filter(() => this.filter !== ''))\n .subscribe((e) => {\n const filterElement = closest(e.target, this.filter);\n if (filterElement) {\n this.hideElementTitle({ nativeElement: filterElement });\n }\n });\n this.mouseOverSubscription = fromEvent(wrapper, 'mouseover')\n .pipe(debounceTime(100), filter(() => this.filter !== ''))\n .subscribe(e => this.onMouseOver(e));\n this.mouseOutSubscription = fromEvent(wrapper, 'mouseout')\n .pipe(debounceTime(100))\n .subscribe(e => this.onMouseOut(e));\n });\n }\n /**\n * Sets the content of the Tooltip as a template reference\n * ([see example]({% slug templates_tooltip %})).\n */\n set tooltipTemplate(value) {\n this.template = value;\n }\n get tooltipTemplate() { return this.template; }\n /**\n * Shows the Tooltip.\n * @param anchor— ElementRef|Element.\n * Specifies the element that will be used as an anchor. The Tooltip opens relative to that element.\n */\n show(anchor) {\n if (this.popupRef) {\n return;\n }\n if (anchor instanceof Element) {\n anchor = { nativeElement: anchor };\n }\n this.anchor = anchor;\n if (this.showOn === 'hover') {\n if (this.popupRef) {\n return;\n }\n clearTimeout(this.showTimeout);\n this.showTimeout = window.setTimeout(() => this.showContent(this.anchor), this.showAfter);\n }\n else {\n this.hideElementTitle(this.anchor);\n this.showContent(this.anchor);\n }\n }\n /**\n * Hides the Tooltip.\n */\n hide() {\n clearTimeout(this.showTimeout);\n const anchor = this.anchor && this.anchor.nativeElement;\n if (anchor && anchor.getAttribute('data-title')) {\n if (!anchor.getAttribute('title')) {\n anchor.setAttribute('title', anchor.getAttribute('data-title'));\n }\n anchor.setAttribute('data-title', '');\n }\n if (this.popupMouseOutSubscription) {\n this.popupMouseOutSubscription.unsubscribe();\n }\n if (this.closeClickSubscription) {\n this.closeClickSubscription.unsubscribe();\n }\n this.closePopup();\n }\n /**\n * Toggle visibility of the Tooltip.\n *\n * @param anchor— ElementRef|Element. Specifies the element that will be used as an anchor.\n * @param show— Optional. Boolean. Specifies if the Tooltip will be rendered.\n */\n toggle(anchor, show) {\n const previousAnchor = this.anchor && this.anchor.nativeElement;\n if (anchor instanceof Element) {\n anchor = { nativeElement: anchor };\n }\n if (previousAnchor !== anchor.nativeElement) {\n this.hide();\n }\n if (previousAnchor === anchor.nativeElement && this.showOn === 'click') {\n this.hide();\n }\n if (typeof show === 'undefined') {\n show = !this.popupRef;\n }\n if (show) {\n this.show(anchor);\n }\n else {\n this.hide();\n }\n }\n ngOnInit() {\n if (this.showOn === undefined) {\n this.showOn = 'hover';\n }\n this.verifyProperties();\n }\n ngOnChanges(changes) {\n if (changes.showOn) {\n this.subscribeClick();\n }\n }\n ngAfterViewChecked() {\n if (!this.popupRef) {\n return;\n }\n if (this.anchor &&\n !hasParent(this.anchor.nativeElement || this.anchor, this.tooltipWrapper.nativeElement)) {\n this.anchor = null;\n this.hide();\n }\n }\n ngOnDestroy() {\n this.hide();\n this.template = null;\n this.anchorTitleSubscription.unsubscribe();\n this.mouseOverSubscription.unsubscribe();\n this.mouseOutSubscription.unsubscribe();\n if (this.mouseClickSubscription) {\n this.mouseClickSubscription.unsubscribe();\n }\n if (this.popupPositionChangeSubscription) {\n this.popupPositionChangeSubscription.unsubscribe();\n }\n if (this.popupMouseOutSubscription) {\n this.popupMouseOutSubscription.unsubscribe();\n }\n }\n showContent(anchorRef) {\n if (!anchorRef.nativeElement.getAttribute('data-title') && !this.template) {\n return;\n }\n this.ngZone.run(() => {\n this.openPopup(anchorRef);\n this.bindContent(this.popupRef.content, anchorRef);\n });\n this.popupRef.popupAnchorViewportLeave\n .pipe(take(1))\n .subscribe(() => this.hide());\n }\n bindContent(contentComponent, anchorRef) {\n const content = contentComponent.instance;\n this.closeClickSubscription = content.close\n .subscribe(() => { this.hide(); });\n if (!this.template) {\n content.templateString = this.anchor.nativeElement.getAttribute('data-title');\n }\n else {\n content.templateRef = this.template;\n }\n if (this.titleTemplate) {\n content.titleTemplate = this.titleTemplate;\n }\n content.closeTitle = this.closeTitle;\n content.anchor = anchorRef;\n content.callout = this.callout;\n content.closable = this.closable;\n content.position = this.position;\n content.tooltipWidth = this.tooltipWidth;\n content.tooltipHeight = this.tooltipHeight;\n this.popupRef.content.changeDetectorRef.detectChanges();\n }\n hideElementTitle(elementRef) {\n const element = elementRef.nativeElement;\n if (element.getAttribute('title')) {\n element.setAttribute('data-title', element.getAttribute('title'));\n element.setAttribute('title', '');\n }\n }\n openPopup(anchorRef) {\n const alignSettings = align(this.position, this.offset);\n const anchorAlign = alignSettings.anchorAlign;\n const popupAlign = alignSettings.popupAlign;\n const popupMargin = alignSettings.popupMargin;\n this.popupRef = this.popupService.open({\n anchor: anchorRef,\n anchorAlign,\n animate: false,\n content: TooltipContentComponent,\n collision: collision(this.collision, this.position),\n margin: popupMargin,\n popupAlign,\n popupClass: 'k-popup-transparent'\n });\n this.renderer.addClass(this.popupRef.popupElement, 'k-tooltip-wrapper');\n if (this.tooltipClass) {\n this.renderer.addClass(this.popupRef.popupElement, this.tooltipClass);\n }\n const popupInstance = this.popupRef.content.instance;\n if (popupInstance.callout) {\n this.popupPositionChangeSubscription = this.popupRef.popupPositionChange\n .subscribe(({ flip }) => {\n const isFlip = flip.horizontal === true || flip.vertical === true;\n popupInstance.updateCalloutPosition(this.position, isFlip);\n });\n }\n if (this.showOn === 'hover') {\n this.ngZone.runOutsideAngular(() => {\n const popup = this.popupRef.popupElement;\n this.popupMouseOutSubscription = fromEvent(popup, 'mouseout')\n .subscribe((e) => this.onMouseOut(e));\n });\n }\n }\n closePopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n if (this.popupPositionChangeSubscription) {\n this.popupPositionChangeSubscription.unsubscribe();\n }\n }\n subscribeClick() {\n if (this.mouseClickSubscription) {\n this.mouseClickSubscription.unsubscribe();\n }\n if (this.showOn === 'click') {\n this.mouseClickSubscription = fromEvent(document, 'click')\n .pipe(filter(() => this.filter !== ''))\n .subscribe(e => this.onMouseClick(e, this.tooltipWrapper.nativeElement));\n }\n }\n onMouseClick(e, wrapper) {\n const target = e.target;\n const filterElement = closest(target, this.filter);\n const popup = this.popupRef && this.popupRef.popupElement;\n if (popup) {\n if (popup.contains(target)) {\n return;\n }\n if (this.closable) {\n return;\n }\n }\n if (wrapper.contains(target) && filterElement) {\n this.toggle(filterElement, true);\n }\n else if (popup) {\n this.hide();\n }\n }\n onMouseOver(e) {\n const filterElement = closest(e.target, this.filter);\n if (this.showOn !== 'hover') {\n return;\n }\n if (filterElement) {\n this.toggle(filterElement, true);\n }\n }\n onMouseOut(e) {\n if (this.showOn !== 'hover') {\n return;\n }\n if (this.closable) {\n return;\n }\n const popup = this.popupRef && this.popupRef.popupElement;\n const relatedTarget = e.relatedTarget;\n if (relatedTarget && this.anchor && contains(this.anchor.nativeElement, relatedTarget)) {\n return;\n }\n if (relatedTarget && contains(popup, relatedTarget)) {\n return;\n }\n this.hide();\n }\n verifyProperties() {\n if (!isDevMode()) {\n return;\n }\n if (!containsItem(this.validPositions, this.position)) {\n throw new Error(`Invalid value provided for position property.The available options are 'top', 'bottom', 'left', or 'right'.`);\n }\n if (!containsItem(this.validShowOptions, this.showOn)) {\n throw new Error(`Invalid value provided for showOn property.The available options are 'hover' or 'none'.`);\n }\n }\n}\nTooltipDirective.ɵfac = function TooltipDirective_Factory(t) { return new (t || TooltipDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(TooltipSettings, 8), ɵngcc0.ɵɵdirectiveInject(TOOLTIP_SETTINGS, 8)); };\nTooltipDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TooltipDirective, selectors: [[\"\", \"kendoTooltip\", \"\"]], inputs: { filter: \"filter\", position: \"position\", showAfter: \"showAfter\", callout: \"callout\", closable: \"closable\", offset: \"offset\", tooltipTemplate: \"tooltipTemplate\", showOn: \"showOn\", titleTemplate: \"titleTemplate\", tooltipWidth: \"tooltipWidth\", tooltipHeight: \"tooltipHeight\", tooltipClass: \"tooltipClass\", collision: \"collision\", closeTitle: \"closeTitle\" }, exportAs: [\"kendoTooltip\"], features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nTooltipDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 },\n { type: PopupService },\n { type: TooltipSettings, decorators: [{ type: Optional }] },\n { type: TooltipSettings, decorators: [{ type: Optional }, { type: Inject, args: [TOOLTIP_SETTINGS,] }] }\n];\nTooltipDirective.propDecorators = {\n filter: [{ type: Input }],\n position: [{ type: Input }],\n titleTemplate: [{ type: Input }],\n showOn: [{ type: Input }],\n showAfter: [{ type: Input }],\n callout: [{ type: Input }],\n closable: [{ type: Input }],\n offset: [{ type: Input }],\n tooltipWidth: [{ type: Input }],\n tooltipHeight: [{ type: Input }],\n tooltipClass: [{ type: Input }],\n collision: [{ type: Input }],\n closeTitle: [{ type: Input }],\n tooltipTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TooltipDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTooltip]',\n exportAs: 'kendoTooltip'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc3.PopupService }, { type: TooltipSettings, decorators: [{\n type: Optional\n }] }, { type: TooltipSettings, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOOLTIP_SETTINGS]\n }] }]; }, { filter: [{\n type: Input\n }], position: [{\n type: Input\n }], showAfter: [{\n type: Input\n }], callout: [{\n type: Input\n }], closable: [{\n type: Input\n }], offset: [{\n type: Input\n }], tooltipTemplate: [{\n type: Input\n }], showOn: [{\n type: Input\n }], titleTemplate: [{\n type: Input\n }], tooltipWidth: [{\n type: Input\n }], tooltipHeight: [{\n type: Input\n }], tooltipClass: [{\n type: Input\n }], collision: [{\n type: Input\n }], closeTitle: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends ComponentMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoTooltipLocalizedMessages\", \"\"]], inputs: { closeTitle: \"closeTitle\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ComponentMessages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\nLocalizedMessagesDirective.propDecorators = {\n closeTitle: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: ComponentMessages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `[kendoTooltipLocalizedMessages]`\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { closeTitle: [{\n type: Input\n }] }); })();\n\nconst COMPONENT_DIRECTIVES = [TooltipDirective, TooltipContentComponent, LocalizedMessagesDirective];\nconst COMPONENT_MODULES = [PopupModule];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Tooltip component.\n *\n * The package exports:\n * - `KendoTooltipDirective`—The Tooltip directive class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Tooltip module\n * import { TooltipModule } from '@progress/kendo-angular-tooltip';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * _@NgModule{{\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, TooltipModule], // import TooltipModule module\n * bootstrap: [AppComponent]\n * }}\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n * ```\n */\nclass TooltipModule {\n}\nTooltipModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TooltipModule });\nTooltipModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TooltipModule_Factory(t) { return new (t || TooltipModule)(); }, imports: [[CommonModule, ...COMPONENT_MODULES]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TooltipModule, { declarations: function () { return [TooltipDirective,\n TooltipContentComponent,\n LocalizedMessagesDirective]; }, imports: function () { return [CommonModule,\n PopupModule]; }, exports: function () { return [TooltipDirective,\n TooltipContentComponent,\n LocalizedMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TooltipModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n entryComponents: [TooltipContentComponent],\n imports: [CommonModule, ...COMPONENT_MODULES],\n exports: [COMPONENT_DIRECTIVES]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { LocalizedMessagesDirective, TooltipContentComponent, TooltipDirective, TooltipModule, TooltipSettings, TOOLTIP_SETTINGS };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUpBNkNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztxaUJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OzswQkFRRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qIENvcHlyaWdodCDCqSAyMDIwIFByb2dyZXNzIFNvZnR3YXJlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBMaWNlbnNlZCB1bmRlciBjb21tZXJjaWFsIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLm1kIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIE91dHB1dCwgSW5wdXQsIGlzRGV2TW9kZSwgRGlyZWN0aXZlLCBOZ1pvbmUsIFJlbmRlcmVyMiwgT3B0aW9uYWwsIEluamVjdCwgZm9yd2FyZFJlZiwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgZGVib3VuY2VUaW1lLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQb3B1cFNlcnZpY2UsIFBvcHVwTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItcG9wdXAnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSwgTDEwTl9QUkVGSVgsIENvbXBvbmVudE1lc3NhZ2VzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vKipcbiAqIE9ic29sZXRlLiBQcm92aWRlIHRoZSBUb29sdGlwU2V0dGluZ3MgY2xhc3MgaW5zdGVhZC5cbiAqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFRPT0xUSVBfU0VUVElOR1MgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ2tlbmRvLXVpLXRvb2x0aXAtc2V0dGluZ3MnKTtcbi8qKlxuICogUHJvdmlkZXMgYSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIEtlbmRvIFVJIFRvb2x0aXAuIE9uY2UgaW5qZWN0ZWQgdGhyb3VnaFxuICogdGhlIGBBcHBDb21wb25lbnRgIGNvbnN0cnVjdG9yLCB0aGUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGNhbiBiZSBvdmVycmlkZGVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIGltcG9ydCB7IFRvb2x0aXBTZXR0aW5ncyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRvb2x0aXAnO1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgIDxkaXYga2VuZG9Ub29sdGlwPlxuICogICAgICAgICAgPGJ1dHRvbiB0aXRsZT1cIlNhdmVzIHRoZSBjdXJyZW50IGRvY3VtZW50XCI+U2F2ZTwvYnV0dG9uPlxuICogICAgICA8L2Rpdj5gLFxuICogICAgcHJvdmlkZXJzOiBbe1xuICogICAgICAgIHByb3ZpZGU6IFRvb2x0aXBTZXR0aW5ncyxcbiAqICAgICAgICB1c2VGYWN0b3J5OiAoKTogVG9vbHRpcFNldHRpbmdzID0+ICh7XG4gKiAgICAgICAgICAvLyBPdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBvZiB0b29sdGlwcyBpZiB3YW50ZWRcbiAqICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnXG4gKiAgICAgICAgfSlcbiAqICAgIH1dXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBUb29sdGlwU2V0dGluZ3Mge1xufVxuVG9vbHRpcFNldHRpbmdzLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gYWxpZ24ocG9zaXRpb24sIG9mZnNldCkge1xuICAgIGxldCBhbmNob3JBbGlnbiA9IHt9O1xuICAgIGxldCBwb3B1cEFsaWduID0ge307XG4gICAgbGV0IHBvcHVwTWFyZ2luID0ge307XG4gICAgc3dpdGNoIChwb3NpdGlvbikge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgYW5jaG9yQWxpZ24gPSB7IGhvcml6b250YWw6ICdjZW50ZXInLCB2ZXJ0aWNhbDogJ3RvcCcgfTtcbiAgICAgICAgICAgIHBvcHVwQWxpZ24gPSB7IGhvcml6b250YWw6ICdjZW50ZXInLCB2ZXJ0aWNhbDogJ2JvdHRvbScgfTtcbiAgICAgICAgICAgIHBvcHVwTWFyZ2luID0geyBob3Jpem9udGFsOiAwLCB2ZXJ0aWNhbDogb2Zmc2V0IH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIGFuY2hvckFsaWduID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICdib3R0b20nIH07XG4gICAgICAgICAgICBwb3B1cEFsaWduID0geyBob3Jpem9udGFsOiAnY2VudGVyJywgdmVydGljYWw6ICd0b3AnIH07XG4gICAgICAgICAgICBwb3B1cE1hcmdpbiA9IHsgaG9yaXpvbnRhbDogMCwgdmVydGljYWw6IG9mZnNldCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgIGFuY2hvckFsaWduID0geyBob3Jpem9udGFsOiAncmlnaHQnLCB2ZXJ0aWNhbDogJ2NlbnRlcicgfTtcbiAgICAgICAgICAgIHBvcHVwQWxpZ24gPSB7IGhvcml6b250YWw6ICdsZWZ0JywgdmVydGljYWw6ICdjZW50ZXInIH07XG4gICAgICAgICAgICBwb3B1cE1hcmdpbiA9IHsgaG9yaXpvbnRhbDogb2Zmc2V0LCB2ZXJ0aWNhbDogMCB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgICAgYW5jaG9yQWxpZ24gPSB7IGhvcml6b250YWw6ICdsZWZ0JywgdmVydGljYWw6ICdjZW50ZXInIH07XG4gICAgICAgICAgICBwb3B1cEFsaWduID0geyBob3Jpem9udGFsOiAncmlnaHQnLCB2ZXJ0aWNhbDogJ2NlbnRlcicgfTtcbiAgICAgICAgICAgIHBvcHVwTWFyZ2luID0geyBob3Jpem9udGFsOiBvZmZzZXQsIHZlcnRpY2FsOiAwIH07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogYnJlYWs7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGFuY2hvckFsaWduLFxuICAgICAgICBwb3B1cEFsaWduLFxuICAgICAgICBwb3B1cE1hcmdpblxuICAgIH07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY29sbGlzaW9uKGlucHV0Y29sbGlzaW9uLCBwb3NpdGlvbikge1xuICAgIGlmIChpbnB1dGNvbGxpc2lvbikge1xuICAgICAgICByZXR1cm4gaW5wdXRjb2xsaXNpb247XG4gICAgfVxuICAgIGlmIChwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgIHJldHVybiB7IGhvcml6b250YWw6ICdmaXQnLCB2ZXJ0aWNhbDogJ2ZsaXAnIH07XG4gICAgfVxuICAgIHJldHVybiB7IGhvcml6b250YWw6ICdmbGlwJywgdmVydGljYWw6ICdmaXQnIH07XG59XG5mdW5jdGlvbiBpc0RvY3VtZW50Tm9kZShjb250YWluZXIpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLm5vZGVUeXBlID09PSA5O1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNsb3Nlc3QoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBpZiAoZWxlbWVudC5jbG9zZXN0KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCBtYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcyA/XG4gICAgICAgIChlbCwgc2VsKSA9PiBlbC5tYXRjaGVzKHNlbClcbiAgICAgICAgOiAoZWwsIHNlbCkgPT4gZWwubXNNYXRjaGVzU2VsZWN0b3Ioc2VsKTtcbiAgICBsZXQgbm9kZSA9IGVsZW1lbnQ7XG4gICAgd2hpbGUgKG5vZGUgJiYgIWlzRG9jdW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgIGlmIChtYXRjaGVzKG5vZGUsIHNlbGVjdG9yKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnMoY29udGFpbmVyLCBjaGlsZCkge1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGlzRG9jdW1lbnROb2RlKGNvbnRhaW5lcikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyLmNvbnRhaW5zKSB7XG4gICAgICAgIHJldHVybiBjb250YWluZXIuY29udGFpbnMoY2hpbGQpO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gISEoY29udGFpbmVyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGNoaWxkKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTkVEX0JZKTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzUGFyZW50ID0gKG5vZGUsIHBhcmVudCkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IHBhcmVudCkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2VudGVyT2Zmc2V0KGl0ZW0sIGRpciwgc2l6ZSkge1xuICAgIGNvbnN0IHJlY3QgPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiByZWN0W2Rpcl0gKyAocmVjdFtzaXplXSAvIDIpO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zSXRlbShjb2xsZWN0aW9uLCBpdGVtKSB7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUb29sdGlwQ29udGVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoY29udGVudCwgbG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRvb2x0aXBXaWR0aCA9IG51bGw7XG4gICAgICAgIHRoaXMudG9vbHRpcEhlaWdodCA9IG51bGw7XG4gICAgICAgIHRoaXMuY2FsbG91dCA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbG91dFN0eWxlcyA9IChwb3NpdGlvbiwgY2FsbG91dFNpemUsIGlzRmxpcCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3R5bGVzID0ge307XG4gICAgICAgICAgICBjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09ICd0b3AnIHx8IHBvc2l0aW9uID09PSAnYm90dG9tJztcbiAgICAgICAgICAgIGNvbnN0IGZsaXBEZWcgPSAnMTgwZGVnJztcbiAgICAgICAgICAgIGNvbnN0IHplcm9EZWcgPSAnMGRlZyc7XG4gICAgICAgICAgICBpZiAoIWlzRmxpcCkge1xuICAgICAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBpc1ZlcnRpY2FsID8gYHJvdGF0ZVgoJHt6ZXJvRGVnfSlgIDogYHJvdGF0ZVkoJHt6ZXJvRGVnfSlgO1xuICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVzLmJvdHRvbSA9ICd1bnNldCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChwb3NpdGlvbiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMudG9wID0gJ3Vuc2V0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHBvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMucmlnaHQgPSAndW5zZXQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocG9zaXRpb24gPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgICAgICBzdHlsZXMubGVmdCA9ICd1bnNldCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHlsZXNbcG9zaXRpb25dID0gYCR7LWNhbGxvdXRTaXplfXB4YDtcbiAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSBpc1ZlcnRpY2FsID8gYHJvdGF0ZVgoJHtmbGlwRGVnfSlgIDogYHJvdGF0ZVkoJHtmbGlwRGVnfSlgO1xuICAgICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb25TZXJ2aWNlLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIGdldCBjc3NDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gJ2std2lkZ2V0IGstdG9vbHRpcCc7XG4gICAgfVxuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb3NhYmxlO1xuICAgIH1cbiAgICBnZXQgY3NzUG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiAncmVsYXRpdmUnO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJyk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY2xvc2VCdXR0b25UaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VUaXRsZSB8fCB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KCdjbG9zZVRpdGxlJyk7XG4gICAgfVxuICAgIGNhbGxvdXRQb3NpdGlvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ3RvcCc6ICdrLWNhbGxvdXQtcycsXG4gICAgICAgICAgICAnbGVmdCc6ICdrLWNhbGxvdXQtZScsXG4gICAgICAgICAgICAnYm90dG9tJzogJ2stY2FsbG91dC1uJyxcbiAgICAgICAgICAgICdyaWdodCc6ICdrLWNhbGxvdXQtdydcbiAgICAgICAgfVt0aGlzLnBvc2l0aW9uXTtcbiAgICB9XG4gICAgb25DbG9zZUNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICB1cGRhdGVDYWxsb3V0UG9zaXRpb24ocG9zaXRpb24sIGlzRmxpcCkge1xuICAgICAgICBpZiAoIXRoaXMuY2FsbG91dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbGxvdXQgPSB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuay1jYWxsb3V0Jyk7XG4gICAgICAgIGNvbnN0IGlzVmVydGljYWwgPSBwb3NpdGlvbiA9PT0gJ3RvcCcgfHwgcG9zaXRpb24gPT09ICdib3R0b20nO1xuICAgICAgICBjb25zdCBzaXplID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgZGlyID0gaXNWZXJ0aWNhbCA/ICdsZWZ0JyA6ICd0b3AnO1xuICAgICAgICBjb25zdCBvZmZzZXRQcm9wZXJ0eSA9IGlzVmVydGljYWwgPyAnbWFyZ2luTGVmdCcgOiAnbWFyZ2luVG9wJztcbiAgICAgICAgY29uc3QgY2FsbG91dFNpemUgPSBjYWxsb3V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3NpemVdO1xuICAgICAgICBjb25zdCBhbmNob3JDZW50ZXIgPSBnZXRDZW50ZXJPZmZzZXQodGhpcy5hbmNob3IubmF0aXZlRWxlbWVudCwgZGlyLCBzaXplKTtcbiAgICAgICAgY29uc3QgY29udGVudENlbnRlciA9IGdldENlbnRlck9mZnNldCh0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudCwgZGlyLCBzaXplKTtcbiAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGNvbnRlbnRDZW50ZXIgLSBhbmNob3JDZW50ZXIpO1xuICAgICAgICBpZiAoZGlmZiA+IDEgfHwgZGlmZiA9PT0gMCB8fCBNYXRoLnJvdW5kKGRpZmYpID09PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdNYXJnaW4gPSBjb250ZW50Q2VudGVyIC0gYW5jaG9yQ2VudGVyICsgKGNhbGxvdXRTaXplIC8gMik7XG4gICAgICAgICAgICBjYWxsb3V0LnN0eWxlW29mZnNldFByb3BlcnR5XSA9IGAkey1uZXdNYXJnaW59cHhgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbGxvdXRTdHlsZXMgPSB0aGlzLmNhbGxvdXRTdHlsZXMocG9zaXRpb24sIGNhbGxvdXRTaXplLCBpc0ZsaXApO1xuICAgICAgICBPYmplY3Qua2V5cyhjYWxsb3V0U3R5bGVzKS5mb3JFYWNoKChzdHlsZSkgPT4ge1xuICAgICAgICAgICAgY2FsbG91dC5zdHlsZVtzdHlsZV0gPSBjYWxsb3V0U3R5bGVzW3N0eWxlXTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuVG9vbHRpcENvbnRlbnRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRvb2x0aXAnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9Ub29sdGlwTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tY2xvc2VUaXRsZT1cImtlbmRvLnRvb2x0aXAuY2xvc2VUaXRsZXxUaGUgdGl0bGUgb2YgdGhlIGNsb3NlIGJ1dHRvblwiXG4gICAgICAgICAgICBjbG9zZVRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLXRvb2x0aXAtY29udGVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstdG9vbHRpcC10aXRsZVwiICpuZ0lmPVwidGl0bGVUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdJZl09XCJ0aXRsZVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGl0bGVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYW5jaG9yLCBhbmNob3I6IGFuY2hvciB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdJZl09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogYW5jaG9yLCBhbmNob3I6IGFuY2hvciB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgW25nSWZdPVwidGVtcGxhdGVTdHJpbmdcIj5cbiAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZVN0cmluZyB9fVxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiAqbmdJZj1cImNsb3NhYmxlXCIgY2xhc3M9XCJrLXRvb2x0aXAtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygkZXZlbnQpXCI+XG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiay1pY29uIGstaS1jbG9zZVwiIFthdHRyLnRpdGxlXT1cImNsb3NlQnV0dG9uVGl0bGVcIj48L2E+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWNhbGxvdXRcIiAqbmdJZj1cImNhbGxvdXRcIiBbbmdDbGFzc109XCJjYWxsb3V0UG9zaXRpb25DbGFzcygpXCI+PC9kaXY+XG4gICAgYCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLnRvb2x0aXAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRvb2x0aXBDb250ZW50Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuVG9vbHRpcENvbnRlbnRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNzc0NsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzJyxdIH1dLFxuICAgIGNsYXNzTmFtZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10b29sdGlwLWNsb3NhYmxlJyxdIH1dLFxuICAgIGNzc1Bvc2l0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5wb3NpdGlvbicsXSB9XSxcbiAgICB0b29sdGlwV2lkdGg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLndpZHRoLnB4JyxdIH0sIHsgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9vbHRpcEhlaWdodDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuaGVpZ2h0LnB4JyxdIH0sIHsgdHlwZTogSW5wdXQgfV0sXG4gICAgdGl0bGVUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYW5jaG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbG9zYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlU3RyaW5nOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgVG9vbHRpcCBkaXJlY3RpdmUgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfdG9vbHRpcCAlfSkuXG4gKiBVc2VkIHRvIGRpc3BsYXkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGF0ZWQgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtbm8tcnVuXG4gKiA8ZGl2IGtlbmRvVG9vbHRpcD5cbiAqICAgIDxhIHRpdGxlPVwiVG9vbHRpcCB0aXRsZVwiIGhyZWY9XCJmb29cIj5mb288L2E+XG4gKiA8L2Rpdj5cbiAqIGBgYFxuICovXG5jbGFzcyBUb29sdGlwRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0b29sdGlwV3JhcHBlciwgbmdab25lLCByZW5kZXJlciwgcG9wdXBTZXJ2aWNlLCBzZXR0aW5ncywgbGVnYWN5U2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy50b29sdGlwV3JhcHBlciA9IHRvb2x0aXBXcmFwcGVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBhIHNlbGVjdG9yIGZvciBlbGVtZW50cyB3aXRoaW4gYSBjb250YWluZXIgd2hpY2ggd2lsbCBkaXNwbGF5IGEgdG9vbHRpcFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFuY2hvcmVsZW1lbnRzX3Rvb2x0aXAgJX0pKS4gVGhlIHBvc3NpYmxlIHZhbHVlcyBpbmNsdWRlIGFueVxuICAgICAgICAgKiBET00gYHNlbGVjdG9yYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYFt0aXRsZV1gLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXIgPSAnW3RpdGxlXSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBUb29sdGlwIHRoYXQgaXMgcmVsYXRpdmUgdG8gdGhlXG4gICAgICAgICAqIGFuY2hvciBlbGVtZW50IChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcG9zaXRpb25pbmdfdG9vbHRpcCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBgdG9wYCAoZGVmYXVsdClcbiAgICAgICAgICogKiBgYm90dG9tYFxuICAgICAgICAgKiAqIGBsZWZ0YFxuICAgICAgICAgKiAqIGByaWdodGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgVG9vbHRpcCBpcyBzaG93bi5cbiAgICAgICAgICogKiBgMTAwYCAoZGVmYXVsdCkgbWlsbGlzZWNvbmRzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zaG93QWZ0ZXIgPSAxMDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlINCib29sdGlwIHdpbGwgZGlzcGxheSBhIGNhbGxvdXQgYXJyb3cuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIGB0cnVlYCAoZGVmYXVsdClcbiAgICAgICAgICogKiBgZmFsc2VgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbGxvdXQgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSDQom9vbHRpcCB3aWxsIGRpc3BsYXkgYSAqKkNsb3NlKiogYnV0dG9uXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgY2xvc2FibGVfdG9vbHRpcCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBgdHJ1ZWBcbiAgICAgICAgICogKiBgZmFsc2VgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG9mZnNldCBpbiBwaXhlbHMgYmV0d2VlbiB0aGUgVG9vbHRpcCBhbmQgdGhlIGFuY2hvci4gRGVmYXVsdHMgdG8gYDZgIHBpeGVscy5cbiAgICAgICAgICogSWYgdGhlIGBjYWxsb3V0YCBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgb2Zmc2V0IGlzIHJlbmRlcmVkIGZyb20gdGhlIGNhbGxvdXQgYXJyb3cuXG4gICAgICAgICAqIElmIHRoZSBgY2FsbG91dGAgcHJvcGVydHkgaXMgc2V0IHRvIGBmYWxzZWAsIHRoZSBvZmZzZXQgaXMgcmVuZGVyZWQgZnJvbSB0aGUgY29udGVudCBvZiB0aGUgVG9vbHRpcC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub2Zmc2V0ID0gNjtcbiAgICAgICAgdGhpcy5hbmNob3IgPSBudWxsO1xuICAgICAgICB0aGlzLnZhbGlkUG9zaXRpb25zID0gWyd0b3AnLCAnYm90dG9tJywgJ3JpZ2h0JywgJ2xlZnQnXTtcbiAgICAgICAgdGhpcy52YWxpZFNob3dPcHRpb25zID0gWydob3ZlcicsICdjbGljaycsICdub25lJ107XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgc2V0dGluZ3MsIGxlZ2FjeVNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMudG9vbHRpcFdyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYW5jaG9yVGl0bGVTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQod3JhcHBlciwgJ21vdXNlb3ZlcicpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuZmlsdGVyICE9PSAnJykpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckVsZW1lbnQgPSBjbG9zZXN0KGUudGFyZ2V0LCB0aGlzLmZpbHRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRWxlbWVudFRpdGxlKHsgbmF0aXZlRWxlbWVudDogZmlsdGVyRWxlbWVudCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubW91c2VPdmVyU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdyYXBwZXIsICdtb3VzZW92ZXInKVxuICAgICAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCBmaWx0ZXIoKCkgPT4gdGhpcy5maWx0ZXIgIT09ICcnKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKGUgPT4gdGhpcy5vbk1vdXNlT3ZlcihlKSk7XG4gICAgICAgICAgICB0aGlzLm1vdXNlT3V0U3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdyYXBwZXIsICdtb3VzZW91dCcpXG4gICAgICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHRoaXMub25Nb3VzZU91dChlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBjb250ZW50IG9mIHRoZSBUb29sdGlwIGFzIGEgdGVtcGxhdGUgcmVmZXJlbmNlXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB0ZW1wbGF0ZXNfdG9vbHRpcCAlfSkpLlxuICAgICAqL1xuICAgIHNldCB0b29sdGlwVGVtcGxhdGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdG9vbHRpcFRlbXBsYXRlKCkgeyByZXR1cm4gdGhpcy50ZW1wbGF0ZTsgfVxuICAgIC8qKlxuICAgICAqIFNob3dzIHRoZSBUb29sdGlwLlxuICAgICAqIEBwYXJhbSBhbmNob3ImbWRhc2g7IEVsZW1lbnRSZWZ8RWxlbWVudC5cbiAgICAgKiBTcGVjaWZpZXMgdGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgYW4gYW5jaG9yLiBUaGUgVG9vbHRpcCBvcGVucyByZWxhdGl2ZSB0byB0aGF0IGVsZW1lbnQuXG4gICAgICovXG4gICAgc2hvdyhhbmNob3IpIHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW5jaG9yIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICAgICAgICAgICAgYW5jaG9yID0geyBuYXRpdmVFbGVtZW50OiBhbmNob3IgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFuY2hvciA9IGFuY2hvcjtcbiAgICAgICAgaWYgKHRoaXMuc2hvd09uID09PSAnaG92ZXInKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dDb250ZW50KHRoaXMuYW5jaG9yKSwgdGhpcy5zaG93QWZ0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oaWRlRWxlbWVudFRpdGxlKHRoaXMuYW5jaG9yKTtcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbnRlbnQodGhpcy5hbmNob3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEhpZGVzIHRoZSBUb29sdGlwLlxuICAgICAqL1xuICAgIGhpZGUoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0KTtcbiAgICAgICAgY29uc3QgYW5jaG9yID0gdGhpcy5hbmNob3IgJiYgdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGFuY2hvciAmJiBhbmNob3IuZ2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJykpIHtcbiAgICAgICAgICAgIGlmICghYW5jaG9yLmdldEF0dHJpYnV0ZSgndGl0bGUnKSkge1xuICAgICAgICAgICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgYW5jaG9yLmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFuY2hvci5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGl0bGUnLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9wdXBNb3VzZU91dFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cE1vdXNlT3V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2xvc2VDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNsaWNrU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZVBvcHVwKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZSB2aXNpYmlsaXR5IG9mIHRoZSBUb29sdGlwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFuY2hvciZtZGFzaDsgRWxlbWVudFJlZnxFbGVtZW50LiBTcGVjaWZpZXMgdGhlIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgYW4gYW5jaG9yLlxuICAgICAqIEBwYXJhbSBzaG93Jm1kYXNoOyBPcHRpb25hbC4gQm9vbGVhbi4gU3BlY2lmaWVzIGlmIHRoZSBUb29sdGlwIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICovXG4gICAgdG9nZ2xlKGFuY2hvciwgc2hvdykge1xuICAgICAgICBjb25zdCBwcmV2aW91c0FuY2hvciA9IHRoaXMuYW5jaG9yICYmIHRoaXMuYW5jaG9yLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChhbmNob3IgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgICAgICBhbmNob3IgPSB7IG5hdGl2ZUVsZW1lbnQ6IGFuY2hvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2aW91c0FuY2hvciAhPT0gYW5jaG9yLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2aW91c0FuY2hvciA9PT0gYW5jaG9yLm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5zaG93T24gPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHNob3cgPSAhdGhpcy5wb3B1cFJlZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdykge1xuICAgICAgICAgICAgdGhpcy5zaG93KGFuY2hvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd09uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd09uID0gJ2hvdmVyJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZlcmlmeVByb3BlcnRpZXMoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5zaG93T24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlQ2xpY2soKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFuY2hvciAmJlxuICAgICAgICAgICAgIWhhc1BhcmVudCh0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50IHx8IHRoaXMuYW5jaG9yLCB0aGlzLnRvb2x0aXBXcmFwcGVyLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmFuY2hvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBudWxsO1xuICAgICAgICB0aGlzLmFuY2hvclRpdGxlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubW91c2VPdmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubW91c2VPdXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMubW91c2VDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUNsaWNrU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9wdXBQb3NpdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFBvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9wdXBNb3VzZU91dFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cE1vdXNlT3V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvd0NvbnRlbnQoYW5jaG9yUmVmKSB7XG4gICAgICAgIGlmICghYW5jaG9yUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJykgJiYgIXRoaXMudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoYW5jaG9yUmVmKTtcbiAgICAgICAgICAgIHRoaXMuYmluZENvbnRlbnQodGhpcy5wb3B1cFJlZi5jb250ZW50LCBhbmNob3JSZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEFuY2hvclZpZXdwb3J0TGVhdmVcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGlkZSgpKTtcbiAgICB9XG4gICAgYmluZENvbnRlbnQoY29udGVudENvbXBvbmVudCwgYW5jaG9yUmVmKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBjb250ZW50Q29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICB0aGlzLmNsb3NlQ2xpY2tTdWJzY3JpcHRpb24gPSBjb250ZW50LmNsb3NlXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5oaWRlKCk7IH0pO1xuICAgICAgICBpZiAoIXRoaXMudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIGNvbnRlbnQudGVtcGxhdGVTdHJpbmcgPSB0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10aXRsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29udGVudC50ZW1wbGF0ZVJlZiA9IHRoaXMudGVtcGxhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGl0bGVUZW1wbGF0ZSkge1xuICAgICAgICAgICAgY29udGVudC50aXRsZVRlbXBsYXRlID0gdGhpcy50aXRsZVRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQuY2xvc2VUaXRsZSA9IHRoaXMuY2xvc2VUaXRsZTtcbiAgICAgICAgY29udGVudC5hbmNob3IgPSBhbmNob3JSZWY7XG4gICAgICAgIGNvbnRlbnQuY2FsbG91dCA9IHRoaXMuY2FsbG91dDtcbiAgICAgICAgY29udGVudC5jbG9zYWJsZSA9IHRoaXMuY2xvc2FibGU7XG4gICAgICAgIGNvbnRlbnQucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgICBjb250ZW50LnRvb2x0aXBXaWR0aCA9IHRoaXMudG9vbHRpcFdpZHRoO1xuICAgICAgICBjb250ZW50LnRvb2x0aXBIZWlnaHQgPSB0aGlzLnRvb2x0aXBIZWlnaHQ7XG4gICAgICAgIHRoaXMucG9wdXBSZWYuY29udGVudC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGhpZGVFbGVtZW50VGl0bGUoZWxlbWVudFJlZikge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpIHtcbiAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRpdGxlJywgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJykpO1xuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RpdGxlJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9wZW5Qb3B1cChhbmNob3JSZWYpIHtcbiAgICAgICAgY29uc3QgYWxpZ25TZXR0aW5ncyA9IGFsaWduKHRoaXMucG9zaXRpb24sIHRoaXMub2Zmc2V0KTtcbiAgICAgICAgY29uc3QgYW5jaG9yQWxpZ24gPSBhbGlnblNldHRpbmdzLmFuY2hvckFsaWduO1xuICAgICAgICBjb25zdCBwb3B1cEFsaWduID0gYWxpZ25TZXR0aW5ncy5wb3B1cEFsaWduO1xuICAgICAgICBjb25zdCBwb3B1cE1hcmdpbiA9IGFsaWduU2V0dGluZ3MucG9wdXBNYXJnaW47XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLnBvcHVwU2VydmljZS5vcGVuKHtcbiAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yUmVmLFxuICAgICAgICAgICAgYW5jaG9yQWxpZ24sXG4gICAgICAgICAgICBhbmltYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IFRvb2x0aXBDb250ZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgY29sbGlzaW9uOiBjb2xsaXNpb24odGhpcy5jb2xsaXNpb24sIHRoaXMucG9zaXRpb24pLFxuICAgICAgICAgICAgbWFyZ2luOiBwb3B1cE1hcmdpbixcbiAgICAgICAgICAgIHBvcHVwQWxpZ24sXG4gICAgICAgICAgICBwb3B1cENsYXNzOiAnay1wb3B1cC10cmFuc3BhcmVudCdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQsICdrLXRvb2x0aXAtd3JhcHBlcicpO1xuICAgICAgICBpZiAodGhpcy50b29sdGlwQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQsIHRoaXMudG9vbHRpcENsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwb3B1cEluc3RhbmNlID0gdGhpcy5wb3B1cFJlZi5jb250ZW50Lmluc3RhbmNlO1xuICAgICAgICBpZiAocG9wdXBJbnN0YW5jZS5jYWxsb3V0KSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnBvcHVwUmVmLnBvcHVwUG9zaXRpb25DaGFuZ2VcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGZsaXAgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmxpcCA9IGZsaXAuaG9yaXpvbnRhbCA9PT0gdHJ1ZSB8fCBmbGlwLnZlcnRpY2FsID09PSB0cnVlO1xuICAgICAgICAgICAgICAgIHBvcHVwSW5zdGFuY2UudXBkYXRlQ2FsbG91dFBvc2l0aW9uKHRoaXMucG9zaXRpb24sIGlzRmxpcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG93T24gPT09ICdob3ZlcicpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3B1cCA9IHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMucG9wdXBNb3VzZU91dFN1YnNjcmlwdGlvbiA9IGZyb21FdmVudChwb3B1cCwgJ21vdXNlb3V0JylcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5vbk1vdXNlT3V0KGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsb3NlUG9wdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3B1cFBvc2l0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUG9zaXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdWJzY3JpYmVDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMubW91c2VDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUNsaWNrU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvd09uID09PSAnY2xpY2snKSB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlQ2xpY2tTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMuZmlsdGVyICE9PSAnJykpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHRoaXMub25Nb3VzZUNsaWNrKGUsIHRoaXMudG9vbHRpcFdyYXBwZXIubmF0aXZlRWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uTW91c2VDbGljayhlLCB3cmFwcGVyKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gY2xvc2VzdCh0YXJnZXQsIHRoaXMuZmlsdGVyKTtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLnBvcHVwUmVmICYmIHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50O1xuICAgICAgICBpZiAocG9wdXApIHtcbiAgICAgICAgICAgIGlmIChwb3B1cC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2FibGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdyYXBwZXIuY29udGFpbnModGFyZ2V0KSAmJiBmaWx0ZXJFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmaWx0ZXJFbGVtZW50LCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Nb3VzZU92ZXIoZSkge1xuICAgICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gY2xvc2VzdChlLnRhcmdldCwgdGhpcy5maWx0ZXIpO1xuICAgICAgICBpZiAodGhpcy5zaG93T24gIT09ICdob3ZlcicpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGUoZmlsdGVyRWxlbWVudCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Nb3VzZU91dChlKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dPbiAhPT0gJ2hvdmVyJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLnBvcHVwUmVmICYmIHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50O1xuICAgICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gZS5yZWxhdGVkVGFyZ2V0O1xuICAgICAgICBpZiAocmVsYXRlZFRhcmdldCAmJiB0aGlzLmFuY2hvciAmJiBjb250YWlucyh0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LCByZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZWxhdGVkVGFyZ2V0ICYmIGNvbnRhaW5zKHBvcHVwLCByZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgICB2ZXJpZnlQcm9wZXJ0aWVzKCkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb250YWluc0l0ZW0odGhpcy52YWxpZFBvc2l0aW9ucywgdGhpcy5wb3NpdGlvbikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2YWx1ZSBwcm92aWRlZCBmb3IgcG9zaXRpb24gcHJvcGVydHkuVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSAndG9wJywgJ2JvdHRvbScsICdsZWZ0Jywgb3IgJ3JpZ2h0Jy5gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbnRhaW5zSXRlbSh0aGlzLnZhbGlkU2hvd09wdGlvbnMsIHRoaXMuc2hvd09uKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhbHVlIHByb3ZpZGVkIGZvciBzaG93T24gcHJvcGVydHkuVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZSAnaG92ZXInIG9yICdub25lJy5gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblRvb2x0aXBEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1Rvb2x0aXBdJyxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvVG9vbHRpcCdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVG9vbHRpcERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFRvb2x0aXBTZXR0aW5ncywgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfSxcbiAgICB7IHR5cGU6IFRvb2x0aXBTZXR0aW5ncywgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtUT09MVElQX1NFVFRJTkdTLF0gfV0gfVxuXTtcblRvb2x0aXBEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3NpdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGl0bGVUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2hvd09uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzaG93QWZ0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbGxvdXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNsb3NhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvZmZzZXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvb2x0aXBXaWR0aDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9vbHRpcEhlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9vbHRpcENsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2xsaXNpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNsb3NlVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvb2x0aXBUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29tcG9uZW50TWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IGBba2VuZG9Ub29sdGlwTG9jYWxpemVkTWVzc2FnZXNdYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNsb3NlVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBDT01QT05FTlRfRElSRUNUSVZFUyA9IFtUb29sdGlwRGlyZWN0aXZlLCBUb29sdGlwQ29udGVudENvbXBvbmVudCwgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmVdO1xuY29uc3QgQ09NUE9ORU5UX01PRFVMRVMgPSBbUG9wdXBNb2R1bGVdO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgVG9vbHRpcCBjb21wb25lbnQuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYEtlbmRvVG9vbHRpcERpcmVjdGl2ZWAmbWRhc2g7VGhlIFRvb2x0aXAgZGlyZWN0aXZlIGNsYXNzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIFRvb2x0aXAgbW9kdWxlXG4gKiBpbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdG9vbHRpcCc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogX0BOZ01vZHVsZXt7XG4gKiAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIFRvb2x0aXBNb2R1bGVdLCAvLyBpbXBvcnQgVG9vbHRpcE1vZHVsZSBtb2R1bGVcbiAqICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH19XG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqIGBgYFxuICovXG5jbGFzcyBUb29sdGlwTW9kdWxlIHtcbn1cblRvb2x0aXBNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBlbnRyeUNvbXBvbmVudHM6IFtUb29sdGlwQ29udGVudENvbXBvbmVudF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgLi4uQ09NUE9ORU5UX01PRFVMRVNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtDT01QT05FTlRfRElSRUNUSVZFU11cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgeyBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgVG9vbHRpcENvbnRlbnRDb21wb25lbnQsIFRvb2x0aXBEaXJlY3RpdmUsIFRvb2x0aXBNb2R1bGUsIFRvb2x0aXBTZXR0aW5ncywgVE9PTFRJUF9TRVRUSU5HUyB9O1xuIl19","import {Component, Input, OnInit} from '@angular/core';\nimport {Router, ActivatedRoute} from '@angular/router';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-tool-selector',\n templateUrl: './tool-selector.component.html',\n styleUrls: ['./tool-selector.component.scss']\n})\nexport class ToolSelectorComponent implements OnInit {\n @Input() selectedOption = ToolSelectionOptions.mycrl;\n\n toolOptions = [\n {\n key: ToolSelectionOptions.mycrl,\n title: 'MyCRL',\n icon: '',\n tooltip: '',\n routerLink: '/'\n },\n {\n key: ToolSelectionOptions.ct,\n title: 'Always ON Customer Health',\n icon: '',\n tooltip: '',\n routerLink: '/aoh'\n },\n {\n key: ToolSelectionOptions.alerts,\n title: 'Predictive Alerts',\n icon: '',\n tooltip: '',\n routerLink: '/alerts'\n },\n {\n key: ToolSelectionOptions.gsalerts,\n title: 'Global Alerts',\n icon: '',\n tooltip: '',\n routerLink: '/gsalerts'\n },\n {\n key: ToolSelectionOptions.businessreview,\n title: 'Business Review',\n icon: '',\n tooltip: '',\n routerLink: '/businessReview'\n }\n ];\n\n constructor(private router: Router, private route: ActivatedRoute) {}\n\n ngOnInit(): void {\n }\n\n getToolOption(key) {\n for (const option of this.toolOptions) {\n if (option.key === key) {\n return option;\n }\n }\n return null;\n }\n\n valueChange(value) {\n const toolOption = this.getToolOption(value);\n this.router.navigate([toolOption.routerLink], {relativeTo: this.route});\n }\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Injectable, EventEmitter, Directive, ElementRef, Renderer2, Optional, NgZone, Input, Output, HostBinding, HostListener, isDevMode, Component, ContentChildren, NgModule, TemplateRef, ViewContainerRef, InjectionToken, Inject, ChangeDetectorRef, ContentChild, ViewChild } from '@angular/core';\nimport { BehaviorSubject, Subject, fromEvent, merge } from 'rxjs';\nimport { Keys, isChanged, isDocumentAvailable, hasObservers, guid } from '@progress/kendo-angular-common';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { filter } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\n\nconst _c0 = [[[\"\", \"kendoButton\", \"\"]]];\nconst _c1 = [\"[kendoButton]\"];\nfunction ListComponent_li_1_1_ng_template_0_Template(rf, ctx) { }\nconst _c2 = function (a0, a1) { return { templateRef: a0, $implicit: a1 }; };\nfunction ListComponent_li_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction2(1, _c2, ctx_r3.itemTemplate == null ? null : ctx_r3.itemTemplate.templateRef, dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_span_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r7 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r7.getIconClasses(dataItem_r1));\n} }\nfunction ListComponent_li_1_ng_template_2_img_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"img\", 9);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"src\", dataItem_r1.imageUrl, ɵngcc0.ɵɵsanitizeUrl);\n} }\nfunction ListComponent_li_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_li_1_ng_template_2_span_0_Template, 1, 1, \"span\", 6);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_ng_template_2_img_1_Template, 1, 1, \"img\", 7);\n ɵngcc0.ɵɵtext(2);\n} if (rf & 2) {\n const dataItem_r1 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.icon || dataItem_r1.iconClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", dataItem_r1.imageUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r4.getText(dataItem_r1), \" \");\n} }\nconst _c3 = function (a1) { return { \"k-item\": true, \"k-state-disabled\": a1 }; };\nfunction ListComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r13 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function ListComponent_li_1_Template_li_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const index_r2 = ctx.index; const ctx_r12 = ɵngcc0.ɵɵnextContext(); return ctx_r12.onClick(index_r2); })(\"blur\", function ListComponent_li_1_Template_li_blur_0_listener() { ɵngcc0.ɵɵrestoreView(_r13); const ctx_r14 = ɵngcc0.ɵɵnextContext(); return ctx_r14.onBlur(); });\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_1_Template, 1, 4, undefined, 3);\n ɵngcc0.ɵɵtemplate(2, ListComponent_li_1_ng_template_2_Template, 3, 3, \"ng-template\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const dataItem_r1 = ctx.$implicit;\n const index_r2 = ctx.index;\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"index\", index_r2)(\"ngClass\", ɵngcc0.ɵɵpureFunction1(5, _c3, dataItem_r1.disabled));\n ɵngcc0.ɵɵattribute(\"aria-disabled\", dataItem_r1.disabled ? true : false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r0.itemTemplate == null ? null : ctx_r0.itemTemplate.templateRef));\n} }\nconst _c4 = [\"button\"];\nconst _c5 = [\"arrowButton\"];\nconst _c6 = [\"popupTemplate\"];\nconst _c7 = [\"container\"];\nfunction SplitButtonComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {\n const _r21 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 6);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r20 = ɵngcc0.ɵɵnextContext(); return ctx_r20.onItemClick($event); })(\"keydown\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r22 = ɵngcc0.ɵɵnextContext(); return ctx_r22.keyDownHandler($event); })(\"keypress\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r23 = ɵngcc0.ɵɵnextContext(); return ctx_r23.keyPressHandler($event); })(\"keyup\", function SplitButtonComponent_ng_template_6_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r21); const ctx_r24 = ɵngcc0.ɵɵnextContext(); return ctx_r24.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r18 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r18.listId)(\"data\", ctx_r18.data)(\"textField\", ctx_r18.textField)(\"itemTemplate\", ctx_r18.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r18.dir);\n} }\nconst _c8 = [\"*\"];\nconst _c9 = [\"buttonList\"];\nfunction DropDownButtonComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r31 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-button-list\", 4, 5);\n ɵngcc0.ɵɵlistener(\"onItemClick\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_onItemClick_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r30 = ɵngcc0.ɵɵnextContext(); return ctx_r30.onItemClick($event); })(\"keydown\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r32 = ɵngcc0.ɵɵnextContext(); return ctx_r32.keyDownHandler($event); })(\"keypress\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keypress_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r33 = ɵngcc0.ɵɵnextContext(); return ctx_r33.keyPressHandler($event); })(\"keyup\", function DropDownButtonComponent_ng_template_3_Template_kendo_button_list_keyup_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r31); const ctx_r34 = ɵngcc0.ɵɵnextContext(); return ctx_r34.keyUpHandler($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r27 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"id\", ctx_r27.listId)(\"data\", ctx_r27.data)(\"textField\", ctx_r27.textField)(\"itemTemplate\", ctx_r27.itemTemplate);\n ɵngcc0.ɵɵattribute(\"dir\", ctx_r27.dir);\n} }\nfunction ChipComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} if (rf & 2) {\n const ctx_r35 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r35.selectedIconClasses);\n} }\nfunction ChipComponent_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 8);\n} if (rf & 2) {\n const ctx_r36 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r36.iconClasses);\n} }\nfunction ChipComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 9);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r37 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r37.label, \" \");\n} }\nfunction ChipComponent_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!label\"]);\n} }\nfunction ChipComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r41 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵlistener(\"click\", function ChipComponent_span_6_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r41); const ctx_r40 = ɵngcc0.ɵɵnextContext(); return ctx_r40.onRemoveClick($event); });\n ɵngcc0.ɵɵelement(1, \"span\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r39 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r39.removeIconClasses);\n} }\nclass KendoButtonService {\n constructor() {\n this.buttonLookChange = new BehaviorSubject('default');\n this.buttonClicked = new Subject();\n this.buttonClicked$ = this.buttonClicked.asObservable();\n }\n click(button) {\n this.buttonClicked.next(button);\n }\n setButtonLook(look) {\n this.buttonLookChange.next(look);\n }\n}\nKendoButtonService.ɵfac = function KendoButtonService_Factory(t) { return new (t || KendoButtonService)(); };\nKendoButtonService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: KendoButtonService, factory: KendoButtonService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(KendoButtonService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst SPAN_TAG_NAME = 'SPAN';\n/**\n * Represents the Kendo UI Button component for Angular.\n */\nclass ButtonDirective {\n constructor(element, renderer, service, localization, ngZone) {\n this.service = service;\n this.ngZone = ngZone;\n /**\n * Provides visual styling that indicates if the Button is active.\n * By default, `toggleable` is set to `false`.\n */\n this.toggleable = false;\n /**\n * Adds visual weight to the Button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug appearance_button %})).\n *\n * The available values are:\n * * [`ButtonLook`]({% slug api_buttons_buttonlook %}) = `flat` | `outline`\n * * `clear`\n */\n this.look = 'default';\n /**\n * @hidden\n */\n this.role = 'button';\n /**\n * Fires each time the selected state of a toggleable button is changed.\n *\n * The event argument is the new selected state (boolean).\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks the button.\n */\n this.click = new EventEmitter();\n this.isDisabled = false;\n this.isIcon = false;\n this.isIconClass = false;\n this._focused = false;\n this.domEvents = [];\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.element = element.nativeElement;\n this.renderer = renderer;\n }\n /**\n * Backwards-compatible alias\n *\n * @hidden\n */\n get togglable() {\n return this.toggleable;\n }\n /**\n * @hidden\n */\n set togglable(value) {\n this.toggleable = value;\n }\n /**\n * Sets the selected state of the Button.\n */\n get selected() {\n return this._selected || false;\n }\n set selected(value) {\n this._selected = value;\n }\n /**\n * @hidden\n */\n set tabIndex(index) {\n this.element.tabIndex = index;\n }\n get tabIndex() {\n return this.element.tabIndex;\n }\n /**\n * Defines the name for an existing icon in a Kendo UI theme.\n * The icon is rendered inside the Button by a `span.k-icon` element.\n */\n set icon(icon) {\n if (icon) {\n this.iconSetter(icon, () => {\n this.isIcon = true;\n const classes = 'k-icon k-i-' + icon;\n this.addIcon(classes);\n });\n }\n else {\n this.isIcon = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a CSS class—or multiple classes separated by spaces—\n * which are applied to a `span` element inside the Button. Allows the usage of custom icons.\n */\n set iconClass(iconClassName) {\n if (iconClassName) {\n this.iconSetter(iconClassName, () => {\n this.isIconClass = true;\n this.addIcon(iconClassName);\n });\n }\n else {\n this.isIconClass = false;\n this.updateIconNode();\n }\n }\n /**\n * Defines a URL which is used for an `img` element inside the Button.\n * The URL can be relative or absolute. If relative, it is evaluated with relation to the web page URL.\n */\n set imageUrl(imageUrl) {\n if (imageUrl) {\n this.iconSetter(imageUrl, this.addImgIcon.bind(this));\n }\n else {\n this.removeImageNode();\n }\n }\n /**\n * If set to `true`, it disables the Button.\n */\n set disabled(disabled) {\n this.isDisabled = disabled;\n this.renderer.setProperty(this.element, 'disabled', disabled);\n }\n get disabled() {\n return this.isDisabled;\n }\n set isFocused(isFocused) {\n this.toggleClass('k-state-focused', isFocused);\n this._focused = isFocused;\n }\n get isFocused() {\n return this._focused;\n }\n get classButton() {\n return true;\n }\n get classPrimary() {\n return this.primary;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get isClear() {\n return this.look === 'clear';\n }\n get roleSetter() {\n return this.role;\n }\n get classDisabled() {\n return this.isDisabled;\n }\n get classActive() {\n return this.selected;\n }\n get getDirection() {\n return this.direction;\n }\n /**\n * @hidden\n */\n onFocus() {\n this.isFocused = true;\n }\n /**\n * @hidden\n */\n onBlur() {\n this.isFocused = false;\n }\n ngOnInit() {\n const isSpan = this.element.tagName === SPAN_TAG_NAME;\n if (this.service) {\n this.buttonLookChangeSubscription = this.service.buttonLookChange\n .pipe(filter((look) => look !== 'default'))\n .subscribe((look) => this.look = look);\n }\n if (!this.element.hasAttribute('role') && this.togglable) {\n this.toggleAriaPressed(this.toggleable);\n }\n if (this.role) {\n this.setAttribute('role', this.role);\n }\n this.ngZone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element, 'click', this._onButtonClick.bind(this)));\n this.domEvents.push(this.renderer.listen(this.element, 'keydown', (event) => {\n if (isSpan && (event.keyCode === Keys.Space || event.keyCode === Keys.Enter)) {\n this.click.emit(event);\n this._onButtonClick();\n }\n }));\n });\n }\n ngOnChanges(change) {\n if (isChanged('togglable', change) || isChanged('toggleable', change)) {\n this.toggleAriaPressed(this.toggleable);\n }\n }\n ngAfterViewChecked() {\n this.setIconTextClasses();\n }\n ngOnDestroy() {\n this.imageNode = null;\n this.iconNode = null;\n this.renderer = null;\n this.localizationChangeSubscription.unsubscribe();\n if (this.service && this.buttonLookChangeSubscription) {\n this.buttonLookChangeSubscription.unsubscribe();\n }\n clearTimeout(this.deferTimeout);\n this.domEvents.forEach(unbindHandler => unbindHandler());\n }\n /**\n * Focuses the Button component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.focus();\n this.isFocused = true;\n }\n }\n /**\n * Blurs the Button component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.blur();\n this.isFocused = false;\n }\n }\n /**\n * @hidden\n */\n setAttribute(attribute, value) {\n this.renderer.setAttribute(this.element, attribute, value);\n }\n /**\n * @hidden\n */\n removeAttribute(attribute) {\n this.renderer.removeAttribute(this.element, attribute);\n }\n /**\n * @hidden\n *\n * Internal setter that triggers selectedChange\n */\n setSelected(value) {\n const changed = this.selected !== value;\n this.selected = value;\n this.setAttribute('aria-pressed', this.selected.toString());\n this.toggleClass('k-state-active', this.selected);\n if (changed && hasObservers(this.selectedChange)) {\n this.ngZone.run(() => {\n this.selectedChange.emit(value);\n });\n }\n }\n toggleAriaPressed(shouldSet) {\n if (!isDocumentAvailable()) {\n return;\n }\n if (shouldSet) {\n this.setAttribute('aria-pressed', this.selected.toString());\n }\n else {\n this.removeAttribute('aria-pressed');\n }\n }\n hasText() {\n if (isDocumentAvailable()) {\n return String(this.element.textContent).trim().length > 0;\n }\n else {\n return false;\n }\n }\n addImgIcon(imageUrl) {\n let renderer = this.renderer;\n if (this.imageNode) {\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n }\n else if (isDocumentAvailable()) {\n this.imageNode = renderer.createElement('img');\n renderer.setProperty(this.imageNode, 'src', imageUrl);\n renderer.setProperty(this.imageNode, 'className', 'k-image');\n renderer.setAttribute(this.imageNode, 'role', 'presentation');\n this.prependChild(this.imageNode);\n }\n }\n addIcon(classNames) {\n let renderer = this.renderer;\n if (this.iconNode) {\n renderer.setProperty(this.iconNode, 'className', classNames);\n }\n else if (isDocumentAvailable()) {\n this.iconNode = renderer.createElement('span');\n renderer.setProperty(this.iconNode, 'className', classNames);\n renderer.setAttribute(this.iconNode, 'role', 'presentation');\n this.prependChild(this.iconNode);\n }\n }\n prependChild(node) {\n this.defer(() => {\n if (this.renderer && node !== this.element.firstChild) {\n this.renderer.insertBefore(this.element, node, this.element.firstChild);\n }\n });\n }\n defer(callback) {\n this.ngZone.runOutsideAngular(() => {\n this.deferTimeout = setTimeout(callback, 0);\n });\n }\n iconSetter(icon, insertIcon) {\n if (icon) {\n insertIcon(icon);\n }\n this.setIconTextClasses();\n }\n removeImageNode() {\n if (this.imageNode && this.renderer.parentNode(this.imageNode)) {\n this.renderer.removeChild(this.element, this.imageNode);\n this.imageNode = null;\n }\n }\n removeIconNode() {\n if (this.iconNode && this.renderer.parentNode(this.iconNode)) {\n this.renderer.removeChild(this.element, this.iconNode);\n this.iconNode = null;\n }\n }\n updateIconNode() {\n if (!this.isIcon && !this.isIconClass) {\n this.removeIconNode();\n }\n }\n setIconTextClasses() {\n const hasIcon = this.isIcon || this.isIconClass || this.imageNode;\n const hasText = this.hasText();\n this.toggleClass('k-button-icon', hasIcon && !hasText);\n this.toggleClass('k-button-icontext', hasIcon && hasText);\n }\n toggleClass(className, add) {\n if (add) {\n this.renderer.addClass(this.element, className);\n }\n else {\n this.renderer.removeClass(this.element, className);\n }\n }\n _onButtonClick() {\n if (!this.disabled && this.service) {\n this.ngZone.run(() => {\n this.service.click(this);\n });\n }\n if (this.togglable && !this.service) {\n this.setSelected(!this.selected);\n }\n }\n}\nButtonDirective.ɵfac = function ButtonDirective_Factory(t) { return new (t || ButtonDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(KendoButtonService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nButtonDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ButtonDirective, selectors: [[\"button\", \"kendoButton\", \"\"], [\"span\", \"kendoButton\", \"\"]], hostVars: 19, hostBindings: function ButtonDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"focus\", function ButtonDirective_focus_HostBindingHandler() { return ctx.onFocus(); })(\"blur\", function ButtonDirective_blur_HostBindingHandler() { return ctx.onBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleSetter)(\"aria-disabled\", ctx.classDisabled)(\"dir\", ctx.getDirection);\n ɵngcc0.ɵɵclassProp(\"k-button\", ctx.classButton)(\"k-primary\", ctx.classPrimary)(\"k-flat\", ctx.isFlat)(\"k-bare\", ctx.isBare)(\"k-outline\", ctx.isOutline)(\"k-button-clear\", ctx.isClear)(\"k-state-disabled\", ctx.classDisabled)(\"k-state-active\", ctx.classActive);\n } }, inputs: { toggleable: \"toggleable\", primary: \"primary\", look: \"look\", role: \"role\", togglable: \"togglable\", selected: \"selected\", tabIndex: \"tabIndex\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\" }, outputs: { selectedChange: \"selectedChange\", click: \"click\" }, exportAs: [\"kendoButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nButtonDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: KendoButtonService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nButtonDirective.propDecorators = {\n toggleable: [{ type: Input }],\n togglable: [{ type: Input }],\n primary: [{ type: Input }],\n look: [{ type: Input }],\n selected: [{ type: Input }],\n tabIndex: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n disabled: [{ type: Input }],\n role: [{ type: Input }],\n selectedChange: [{ type: Output }],\n click: [{ type: Output }],\n classButton: [{ type: HostBinding, args: ['class.k-button',] }],\n classPrimary: [{ type: HostBinding, args: ['class.k-primary',] }],\n isFlat: [{ type: HostBinding, args: ['class.k-flat',] }],\n isBare: [{ type: HostBinding, args: ['class.k-bare',] }],\n isOutline: [{ type: HostBinding, args: ['class.k-outline',] }],\n isClear: [{ type: HostBinding, args: ['class.k-button-clear',] }],\n roleSetter: [{ type: HostBinding, args: ['attr.role',] }],\n classDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }],\n classActive: [{ type: HostBinding, args: ['class.k-state-active',] }],\n getDirection: [{ type: HostBinding, args: ['attr.dir',] }],\n onFocus: [{ type: HostListener, args: ['focus',] }],\n onBlur: [{ type: HostListener, args: ['blur',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoButton',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoButton], span[kendoButton]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: KendoButtonService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { toggleable: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], role: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], click: [{\n type: Output\n }], togglable: [{\n type: Input\n }], selected: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], classButton: [{\n type: HostBinding,\n args: ['class.k-button']\n }], classPrimary: [{\n type: HostBinding,\n args: ['class.k-primary']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-outline']\n }], isClear: [{\n type: HostBinding,\n args: ['class.k-button-clear']\n }], roleSetter: [{\n type: HostBinding,\n args: ['attr.role']\n }], classDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], classActive: [{\n type: HostBinding,\n args: ['class.k-state-active']\n }], getDirection: [{\n type: HostBinding,\n args: ['attr.dir']\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], onBlur: [{\n type: HostListener,\n args: ['blur']\n }] }); })();\n\n/* tslint:disable:no-null-keyword */\n/* tslint:disable:no-bitwise */\nconst resolvedPromise = Promise.resolve(null);\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst tick = (f) => (resolvedPromise.then(f));\n/**\n * @hidden\n */\nfunction isDocumentNode(container) {\n return container.nodeType === 9;\n}\n/**\n * @hidden\n */\nfunction closest(element, selector) {\n if (element.closest) {\n return element.closest(selector);\n }\n const matches = Element.prototype.matches ?\n (el, sel) => el.matches(sel)\n : (el, sel) => el.msMatchesSelector(sel);\n let node = element;\n while (node && !isDocumentNode(node)) {\n if (matches(node, selector)) {\n return node;\n }\n node = node.parentNode;\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst tabindex = 'tabindex';\n/**\n * Represents the Kendo UI ButtonGroup component for Angular.\n */\nclass ButtonGroupComponent {\n constructor(service, localization, element) {\n this.service = service;\n this.element = element;\n /**\n * By default, the selection mode of the ButtonGroup is set to `multiple`.\n */\n this.selection = 'multiple';\n /**\n * Changes the visual appearance by using alternative styling options\n * ([more information and examples]({% slug styling_buttongroup %})).\n * The `look` property of the ButtonGroup takes precedence over the `look` property\n * of the individual buttons that are part of the group.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Fires every time keyboard navigation occurs.\n */\n this.navigate = new EventEmitter();\n this._tabIndex = 0;\n this.currentTabIndex = 0;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n set tabIndex(value) {\n this._tabIndex = value;\n this.currentTabIndex = value;\n }\n get tabIndex() {\n return this._tabIndex;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get stretchedClass() {\n return !!this.width;\n }\n get isFlat() {\n return this.look === 'flat';\n }\n get isBare() {\n return this.look === 'bare';\n }\n get isOutline() {\n return this.look === 'outline';\n }\n get getRole() {\n return this.isSelectionSingle() ? 'radiogroup' : 'group';\n }\n get dir() {\n return this.direction;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get wrapperWidth() {\n return this.width;\n }\n get wrapperTabIndex() {\n return this.disabled ? undefined : this.currentTabIndex;\n }\n /**\n * @hidden\n */\n keydown(event) {\n if (!this.disabled) {\n this.navigateFocus(event);\n }\n }\n /**\n * @hidden\n */\n onFocus() {\n this.currentTabIndex = -1;\n const focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const index = focusedIndex === -1 ? 0 : focusedIndex;\n this.focus(this.buttons.filter((_current, i) => {\n return i === index;\n }));\n }\n /**\n * @hidden\n */\n focusout(event) {\n if (event.relatedTarget && event.relatedTarget.parentNode !== this.element.nativeElement) {\n this.defocus(this.buttons.toArray());\n this.currentTabIndex = this.tabIndex;\n }\n }\n ngOnInit() {\n this.service.setButtonLook(this.look);\n this.subscription = this.service.buttonClicked$.subscribe((button) => {\n let newSelectionValue;\n if (this.isSelectionSingle()) {\n newSelectionValue = true;\n this.deactivate(this.buttons.filter(current => current !== button));\n }\n else {\n this.defocus(this.buttons.toArray());\n newSelectionValue = !button.selected;\n }\n if (button.togglable) {\n button.setSelected(newSelectionValue);\n }\n button.setAttribute(tabindex, \"0\");\n });\n }\n ngOnChanges(change) {\n if (isChanged('disabled', change)) {\n this.buttons.forEach((button) => {\n if (isPresent(this.disabled)) {\n button.disabled = this.disabled;\n }\n });\n }\n }\n ngAfterContentInit() {\n this.buttons.forEach((button) => {\n if (button.selected) {\n button.setAttribute(tabindex, \"0\");\n }\n else {\n button.setAttribute(tabindex, \"-1\");\n }\n });\n }\n ngAfterViewChecked() {\n if (this.buttons.length) {\n this.buttons.first.renderer.addClass(this.buttons.first.element, 'k-group-start');\n this.buttons.last.renderer.addClass(this.buttons.last.element, 'k-group-end');\n }\n }\n ngOnDestroy() {\n this.subscription.unsubscribe();\n this.localizationChangeSubscription.unsubscribe();\n }\n ngAfterContentChecked() {\n this.verifySettings();\n }\n navigateFocus(event) {\n let focusedIndex = this.buttons.toArray().findIndex(current => current.element.tabIndex !== -1);\n const firstIndex = 0;\n const lastIndex = this.buttons.length - 1;\n const eventArgs = new PreventableEvent();\n if (event.keyCode === Keys.ArrowRight && focusedIndex < lastIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex + 1;\n }));\n }\n }\n if (event.keyCode === Keys.ArrowLeft && focusedIndex > firstIndex) {\n this.navigate.emit(eventArgs);\n if (!eventArgs.isDefaultPrevented()) {\n this.defocus(this.buttons.toArray());\n this.focus(this.buttons.filter((_current, index) => {\n return index === focusedIndex - 1;\n }));\n }\n }\n }\n deactivate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(false);\n button.setAttribute(tabindex, \"-1\");\n });\n }\n activate(buttons) {\n buttons.forEach((button) => {\n button.setSelected(true);\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n defocus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"-1\");\n });\n }\n focus(buttons) {\n buttons.forEach((button) => {\n button.setAttribute(tabindex, \"0\");\n button.focus();\n });\n }\n verifySettings() {\n if (isDevMode()) {\n if (this.isSelectionSingle() && this.buttons.filter(button => button.selected).length > 1) {\n throw new Error('Having multiple selected buttons with single selection mode is not supported');\n }\n }\n }\n isSelectionSingle() {\n return this.selection === 'single';\n }\n}\nButtonGroupComponent.ɵfac = function ButtonGroupComponent_Factory(t) { return new (t || ButtonGroupComponent)(ɵngcc0.ɵɵdirectiveInject(KendoButtonService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nButtonGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ButtonGroupComponent, selectors: [[\"kendo-buttongroup\"]], contentQueries: function ButtonGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonDirective, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttons = _t);\n } }, hostVars: 18, hostBindings: function ButtonGroupComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function ButtonGroupComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"focus\", function ButtonGroupComponent_focus_HostBindingHandler() { return ctx.onFocus(); })(\"focusout\", function ButtonGroupComponent_focusout_HostBindingHandler($event) { return ctx.focusout($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.getRole)(\"dir\", ctx.dir)(\"aria-disabled\", ctx.ariaDisabled)(\"tabindex\", ctx.wrapperTabIndex);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.wrapperWidth);\n ɵngcc0.ɵɵclassProp(\"k-button-group\", ctx.wrapperClass)(\"k-state-disabled\", ctx.disabledClass)(\"k-button-group-stretched\", ctx.stretchedClass)(\"k-button-group-flat\", ctx.isFlat)(\"k-button-group-bare\", ctx.isBare)(\"k-button-group-outline\", ctx.isOutline);\n } }, inputs: { selection: \"selection\", look: \"look\", tabIndex: \"tabIndex\", disabled: \"disabled\", width: \"width\" }, outputs: { navigate: \"navigate\" }, exportAs: [\"kendoButtonGroup\"], features: [ɵngcc0.ɵɵProvidersFeature([\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c1, decls: 1, vars: 0, template: function ButtonGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c0);\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nButtonGroupComponent.ctorParameters = () => [\n { type: KendoButtonService },\n { type: LocalizationService },\n { type: ElementRef }\n];\nButtonGroupComponent.propDecorators = {\n disabled: [{ type: Input, args: ['disabled',] }],\n selection: [{ type: Input, args: ['selection',] }],\n width: [{ type: Input, args: ['width',] }],\n look: [{ type: Input }],\n tabIndex: [{ type: Input }],\n navigate: [{ type: Output }],\n buttons: [{ type: ContentChildren, args: [ButtonDirective,] }],\n wrapperClass: [{ type: HostBinding, args: ['class.k-button-group',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n stretchedClass: [{ type: HostBinding, args: ['class.k-button-group-stretched',] }],\n isFlat: [{ type: HostBinding, args: ['class.k-button-group-flat',] }],\n isBare: [{ type: HostBinding, args: ['class.k-button-group-bare',] }],\n isOutline: [{ type: HostBinding, args: ['class.k-button-group-outline',] }],\n getRole: [{ type: HostBinding, args: ['attr.role',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }],\n wrapperWidth: [{ type: HostBinding, args: ['style.width',] }],\n wrapperTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n onFocus: [{ type: HostListener, args: ['focus',] }],\n focusout: [{ type: HostListener, args: ['focusout', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonGroupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoButtonGroup',\n providers: [\n KendoButtonService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.buttongroup'\n }\n ],\n selector: 'kendo-buttongroup',\n template: `\n \n `\n }]\n }], function () { return [{ type: KendoButtonService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ElementRef }]; }, { selection: [{\n type: Input,\n args: ['selection']\n }], look: [{\n type: Input\n }], navigate: [{\n type: Output\n }], tabIndex: [{\n type: Input\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-button-group']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-button-group-stretched']\n }], isFlat: [{\n type: HostBinding,\n args: ['class.k-button-group-flat']\n }], isBare: [{\n type: HostBinding,\n args: ['class.k-button-group-bare']\n }], isOutline: [{\n type: HostBinding,\n args: ['class.k-button-group-outline']\n }], getRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], wrapperWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], wrapperTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onFocus: [{\n type: HostListener,\n args: ['focus']\n }], focusout: [{\n type: HostListener,\n args: ['focusout', ['$event']]\n }], disabled: [{\n type: Input,\n args: ['disabled']\n }], width: [{\n type: Input,\n args: ['width']\n }], buttons: [{\n type: ContentChildren,\n args: [ButtonDirective]\n }] }); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Button directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Button module\n * import { ButtonModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonModule], // import Button module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonModule {\n}\nButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonModule });\nButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonModule_Factory(t) { return new (t || ButtonModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonModule, { declarations: [ButtonDirective], exports: [ButtonDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonDirective],\n exports: [ButtonDirective]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `ButtonGroupComponent`—The ButtonGroupComponent component class.\n */\nclass ButtonGroupModule {\n}\nButtonGroupModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonGroupModule });\nButtonGroupModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonGroupModule_Factory(t) { return new (t || ButtonGroupModule)(); }, imports: [[CommonModule, ButtonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonGroupModule, { declarations: function () { return [ButtonGroupComponent]; }, imports: function () { return [CommonModule,\n ButtonModule]; }, exports: function () { return [ButtonGroupComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonGroupModule, [{\n type: NgModule,\n args: [{\n declarations: [ButtonGroupComponent],\n exports: [ButtonGroupComponent],\n imports: [CommonModule, ButtonModule]\n }]\n }], null, null); })();\n\n/* tslint:disable:directive-selector-name */\n/**\n * Used for rendering the list item content.\n *\n * To define the item template, nest a `` tag with the `kendoItemTemplate` directive inside the component tag.\n *\n * For the DropDownButton, use the `kendoDropDownButtonItemTemplate` directive.\n * For the SplitButton, use the `kendoSplitButtonItemTemplate` directive.\n *\n * The template context is set to the current component. To get a reference to the current data item, use the `let-dataItem` directive.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * {{dataItem}} option\n * \n * \n * \n * \n * {{dataItem}} option\n * \n * \n * `\n * })\n * class AppComponent {\n * public listItems: Array = [{\n * text: 'item1',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }, {\n * text: 'item2',\n * icon: 'refresh',\n * disabled: false,\n * click: (dataItem: any) => {\n * //action\n * }\n * }]\n * }\n * ```\n *\n * For more examples, refer to the article on the [DropDownList templates]({% slug overview_ddl %}#templates).\n */\nclass ButtonItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nButtonItemTemplateDirective.ɵfac = function ButtonItemTemplateDirective_Factory(t) { return new (t || ButtonItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nButtonItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ButtonItemTemplateDirective, selectors: [[\"\", \"kendoDropDownButtonItemTemplate\", \"\"], [\"\", \"kendoSplitButtonItemTemplate\", \"\"]] });\n/** @nocollapse */\nButtonItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropDownButtonItemTemplate],[kendoSplitButtonItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ListComponent {\n constructor() {\n this.onItemClick = new EventEmitter();\n this.onItemBlur = new EventEmitter();\n }\n getText(dataItem) {\n if (dataItem) {\n return this.textField ? dataItem[this.textField] : dataItem.text || dataItem;\n }\n return undefined;\n }\n getIconClasses(dataItem) {\n const icon = dataItem.icon ? 'k-icon k-i-' + dataItem.icon : undefined;\n const classes = {};\n classes[icon || dataItem.iconClass] = true;\n return classes;\n }\n onClick(index) {\n this.onItemClick.emit(index);\n }\n onBlur() {\n this.onItemBlur.emit();\n }\n}\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(); };\nListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-button-list\"]], inputs: { data: \"data\", textField: \"textField\", itemTemplate: \"itemTemplate\" }, outputs: { onItemClick: \"onItemClick\", onItemBlur: \"onItemBlur\" }, decls: 2, vars: 1, consts: [[\"unselectable\", \"on\", 1, \"k-list\", \"k-reset\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"menuitem\", \"unselectable\", \"on\", \"tabindex\", \"-1\", \"kendoButtonFocusable\", \"\", 3, \"index\", \"ngClass\", \"click\", \"blur\"], [4, \"ngIf\"], [3, \"ngIf\"], [3, \"templateContext\"], [3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-image\", \"alt\", \"\", 3, \"src\", 4, \"ngIf\"], [3, \"ngClass\"], [\"alt\", \"\", 1, \"k-image\", 3, \"src\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, ListComponent_li_1_Template, 3, 7, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: function () { return [ɵngcc2.NgForOf, FocusableDirective, ɵngcc2.NgClass, ɵngcc2.NgIf, TemplateContextDirective]; }, encapsulation: 2 });\nListComponent.propDecorators = {\n data: [{ type: Input }],\n textField: [{ type: Input }],\n itemTemplate: [{ type: Input }],\n onItemClick: [{ type: Output }],\n onItemBlur: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-button-list',\n template: `\n
    \n
  • \n \n \n \n \n \n {{ getText(dataItem) }}\n \n
  • \n
\n `\n }]\n }], function () { return []; }, { onItemClick: [{\n type: Output\n }], onItemBlur: [{\n type: Output\n }], data: [{\n type: Input\n }], textField: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FocusService {\n constructor() {\n this.onFocus = new EventEmitter();\n }\n isFocused(index) {\n return index === this.focused;\n }\n focus(index) {\n if (this.isFocused(index)) {\n return;\n }\n this.focused = index;\n this.onFocus.emit(index);\n }\n resetFocus() {\n this.focused = -1;\n }\n get focused() {\n return this.focusedIndex;\n }\n set focused(index) {\n this.focusedIndex = index;\n this.onFocus.emit(index);\n }\n}\nFocusService.ɵfac = function FocusService_Factory(t) { return new (t || FocusService)(); };\nFocusService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusService, factory: FocusService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass FocusableDirective {\n constructor(focusService, elementRef) {\n this.focusService = focusService;\n this.element = elementRef.nativeElement;\n this.subscribeEvents();\n }\n get focusedClassName() {\n return this.focusService.isFocused(this.index);\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.unsubscribeEvents();\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.focusSubscription = this.focusService.onFocus.subscribe((index) => {\n if (this.index === index) {\n this.element.focus();\n }\n });\n }\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n if (this.focusSubscription) {\n this.focusSubscription.unsubscribe();\n }\n }\n}\nFocusableDirective.ɵfac = function FocusableDirective_Factory(t) { return new (t || FocusableDirective)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nFocusableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FocusableDirective, selectors: [[\"\", \"kendoButtonFocusable\", \"\"]], hostVars: 2, hostBindings: function FocusableDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focusedClassName);\n } }, inputs: { index: \"index\" } });\n/** @nocollapse */\nFocusableDirective.ctorParameters = () => [\n { type: FocusService },\n { type: ElementRef }\n];\nFocusableDirective.propDecorators = {\n index: [{ type: Input }],\n focusedClassName: [{ type: HostBinding, args: ['class.k-state-focused',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoButtonFocusable]'\n }]\n }], function () { return [{ type: FocusService }, { type: ɵngcc0.ElementRef }]; }, { focusedClassName: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], index: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n}\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n/** @nocollapse */\nTemplateContextDirective.ctorParameters = () => [\n { type: ViewContainerRef }\n];\nTemplateContextDirective.propDecorators = {\n templateContext: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n\nconst EXPORTED_DIRECTIVES = [\n ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective\n];\n/**\n * @hidden\n */\nclass ListModule {\n}\nListModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ListModule });\nListModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ListModule_Factory(t) { return new (t || ListModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ListModule, { declarations: function () { return [ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ListComponent,\n FocusableDirective,\n ButtonItemTemplateDirective,\n TemplateContextDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListModule, [{\n type: NgModule,\n args: [{\n declarations: [EXPORTED_DIRECTIVES],\n exports: [EXPORTED_DIRECTIVES],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nvar KeyEvents;\n(function (KeyEvents) {\n KeyEvents[KeyEvents[\"keydown\"] = 0] = \"keydown\";\n KeyEvents[KeyEvents[\"keypress\"] = 1] = \"keypress\";\n KeyEvents[KeyEvents[\"keyup\"] = 2] = \"keyup\";\n})(KeyEvents || (KeyEvents = {}));\n\n/**\n * @hidden\n */\nvar NavigationAction;\n(function (NavigationAction) {\n NavigationAction[NavigationAction[\"Undefined\"] = 0] = \"Undefined\";\n NavigationAction[NavigationAction[\"Open\"] = 1] = \"Open\";\n NavigationAction[NavigationAction[\"Close\"] = 2] = \"Close\";\n NavigationAction[NavigationAction[\"Enter\"] = 3] = \"Enter\";\n NavigationAction[NavigationAction[\"EnterPress\"] = 4] = \"EnterPress\";\n NavigationAction[NavigationAction[\"EnterUp\"] = 5] = \"EnterUp\";\n NavigationAction[NavigationAction[\"Tab\"] = 6] = \"Tab\";\n NavigationAction[NavigationAction[\"Esc\"] = 7] = \"Esc\";\n NavigationAction[NavigationAction[\"Navigate\"] = 8] = \"Navigate\";\n})(NavigationAction || (NavigationAction = {}));\n\n/* tslint:disable:deprecation */\n/**\n * @hidden\n */\nclass ListButton {\n constructor(focusService, navigationService, wrapperRef, _zone, localization, cdr) {\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapperRef = wrapperRef;\n this._zone = _zone;\n this.cdr = cdr;\n this._open = false;\n this._disabled = false;\n this._active = false;\n this._popupSettings = { animate: true, popupClass: '' };\n this.listId = guid();\n this._isFocused = false;\n this.focusService = focusService;\n this.navigationService = navigationService;\n this.wrapper = wrapperRef.nativeElement;\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr'));\n this.subscribeEvents();\n }\n get popupClasses() {\n const popupClasses = ['k-list-container', 'k-reset', 'k-group'];\n if (this._popupSettings.popupClass) {\n popupClasses.push(this._popupSettings.popupClass);\n }\n return popupClasses.join(' ');\n }\n get openState() {\n return this._open;\n }\n set openState(open) {\n this._open = open;\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n if (this._disabled) {\n return;\n }\n this.openState = !this.openState;\n if (!this.openState) {\n this.focusService.focus(-1);\n }\n }\n /**\n * @hidden\n */\n onItemClick(index) {\n this.emitItemClickHandler(index);\n setTimeout(() => this.focusWrapper(), 1);\n }\n ngOnDestroy() {\n this.openState = false;\n this.unsubscribeEvents();\n clearTimeout(this.focusFirstTimeout);\n clearTimeout(this.blurTimeout);\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.subscribeListItemFocusEvent();\n this.subscribeComponentBlurredEvent();\n this.subscribeNavigationEvents();\n }\n subscribeListItemFocusEvent() {\n this.focusSubscription = this.focusService.onFocus.subscribe(() => {\n this._isFocused = true;\n });\n }\n subscribeComponentBlurredEvent() {\n this._zone.runOutsideAngular(() => {\n this.tabSubscription = this.navigationService.tab.pipe(filter(() => this._isFocused)).subscribe(this.handleTab.bind(this));\n this.componentBlurredSubscription = fromEvent(document, 'click')\n .pipe(filter((event) => !this.wrapperContains(event.target)), filter(() => this._isFocused))\n .subscribe(() => this._zone.run(() => this.blurWrapper()));\n });\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate.subscribe(this.focusService.focus.bind(this.focusService));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(() => {\n this.enterHandler();\n this.focusWrapper();\n });\n this.openSubscription = this.navigationService.open.subscribe(() => {\n if (!this._open) {\n this.togglePopupVisibility();\n this.focusFirstItem();\n }\n else {\n this.focusWrapper();\n }\n });\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(() => this.focusWrapper());\n }\n enterHandler() { } // tslint:disable-line\n unsubscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.unsubscribe(this.componentBlurredSubscription);\n this.unsubscribe(this.focusSubscription);\n this.unsubscribe(this.navigationSubscription);\n this.unsubscribe(this.enterPressSubscription);\n this.unsubscribe(this.enterUpSubscription);\n this.unsubscribe(this.openSubscription);\n this.unsubscribe(this.closeSubscription);\n this.unsubscribe(this.tabSubscription);\n }\n unsubscribe(subscription) {\n if (subscription) {\n subscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n keyDownHandler(event) {\n this.keyHandler(event);\n }\n /**\n * @hidden\n */\n keyPressHandler(event) {\n this.keyHandler(event, KeyEvents.keypress);\n }\n /**\n * @hidden\n */\n keyUpHandler(event) {\n this.keyHandler(event, KeyEvents.keyup);\n }\n /**\n * @hidden\n */\n keyHandler(event, keyEvent) {\n if (this._disabled) {\n return;\n }\n let focused = this.focusService.focused || 0;\n const eventData = event;\n const action = this.navigationService.process({\n altKey: eventData.altKey,\n current: focused,\n keyCode: eventData.keyCode,\n keyEvent: keyEvent,\n max: this._data ? this._data.length - 1 : 0,\n min: 0\n });\n if (action !== NavigationAction.Undefined &&\n action !== NavigationAction.Tab &&\n (action !== NavigationAction.Enter || (action === NavigationAction.Enter && this._open))) {\n if (event.keyCode === Keys.Space && action === NavigationAction.EnterUp) {\n this._open = false;\n }\n else {\n eventData.preventDefault();\n }\n }\n }\n emitItemClickHandler(index) {\n const dataItem = this._data[index];\n if (this._itemClick) {\n this._itemClick.emit(dataItem);\n }\n if (dataItem && dataItem.click && !dataItem.disabled) {\n dataItem.click(dataItem);\n }\n }\n focusFirstItem() {\n if (this._data && isPresent(this._data[0])) {\n this.focusFirstTimeout = setTimeout(() => this.focusService.focus(0), 1);\n }\n }\n focusWrapper() {\n if (this._open) {\n this.togglePopupVisibility();\n this.focusButton();\n }\n }\n wrapperContains(element) {\n return this.wrapper === element || this.wrapper.contains(element);\n }\n blurWrapper(emit = true) {\n if (this._open) {\n this.togglePopupVisibility();\n }\n this._isFocused = false;\n if (emit) {\n this._blur.emit();\n this.cdr.markForCheck();\n }\n }\n focusButton() {\n if (this.button) {\n this.button.nativeElement.focus();\n }\n }\n handleTab() {\n this.focusButton();\n this.blurWrapper(false);\n }\n}\nListButton.ɵfac = function ListButton_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nListButton.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ListButton });\n\n\n/**\n * @hidden\n */\nconst NAVIGATION_CONFIG = new InjectionToken('navigation.config');\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(config) {\n this.navigate = new EventEmitter();\n this.open = new EventEmitter();\n this.close = new EventEmitter();\n this.enter = new EventEmitter();\n this.enterpress = new EventEmitter();\n this.enterup = new EventEmitter();\n this.tab = new EventEmitter();\n this.esc = new EventEmitter();\n this.useLeftRightArrows = config.useLeftRightArrows;\n }\n process(args) {\n const keyCode = args.keyCode;\n const keyEvent = args.keyEvent;\n let index;\n let action = NavigationAction.Undefined;\n if (keyEvent === KeyEvents.keypress) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterPress;\n }\n }\n else if (keyEvent === KeyEvents.keyup) {\n if (this.isEnter(keyCode)) {\n action = NavigationAction.EnterUp;\n }\n }\n else {\n if (args.altKey && keyCode === Keys.ArrowDown) {\n action = NavigationAction.Open;\n }\n else if (args.altKey && keyCode === Keys.ArrowUp) {\n action = NavigationAction.Close;\n }\n else if (this.isEnter(keyCode)) {\n action = NavigationAction.Enter;\n }\n else if (keyCode === Keys.Escape) {\n action = NavigationAction.Esc;\n }\n else if (keyCode === Keys.Tab) {\n action = NavigationAction.Tab;\n }\n else if (keyCode === Keys.ArrowUp || (this.useLeftRightArrows && keyCode === Keys.ArrowLeft)) {\n index = this.next({\n current: args.current,\n start: args.max,\n end: args.min,\n step: -1\n });\n action = NavigationAction.Navigate;\n }\n else if (keyCode === Keys.ArrowDown || (this.useLeftRightArrows && keyCode === Keys.ArrowRight)) {\n index = this.next({\n current: args.current,\n start: args.min,\n end: args.max,\n step: 1\n });\n action = NavigationAction.Navigate;\n }\n }\n if (action !== NavigationAction.Undefined) {\n this[NavigationAction[action].toLowerCase()].emit(index);\n }\n return action;\n }\n isEnter(keyCode) {\n return keyCode === Keys.Enter || keyCode === Keys.Space;\n }\n next(args) {\n if (!isPresent(args.current)) {\n return args.start;\n }\n else {\n return args.current !== args.end ? args.current + args.step : args.end;\n }\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(NAVIGATION_CONFIG)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [NAVIGATION_CONFIG,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [NAVIGATION_CONFIG]\n }] }]; }, null); })();\n\n/* tslint:disable:no-access-missing-member */\nconst NAVIGATION_SETTINGS = {\n useLeftRightArrows: true\n};\nconst ɵ0 = NAVIGATION_SETTINGS;\nconst NAVIGATION_SETTINGS_PROVIDER = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0\n};\n/**\n * Represents the Kendo UI SplitButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * Paste\n * `\n * })\n *\n * class AppComponent {\n * public data: Array = [{\n * text: 'Keep Text Only',\n * icon: 'paste-plain-text',\n * click: () => { console.log('Keep Text Only click handler'); }\n * }, {\n * text: 'Paste as HTML',\n * icon: 'paste-as-html'\n * }, {\n * text: 'Paste Markdown',\n * icon: 'paste-markdown'\n * }, {\n * text: 'Set Default Paste'\n * }];\n *\n * public onSplitButtonClick(dataItem: any): void {\n * console.log('Paste');\n * }\n *\n * public onSplitButtonItemClick(dataItem: any): void {\n * if (dataItem) {\n * console.log(dataItem.text);\n * }\n * }\n * }\n * ```\n */\nclass SplitButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Sets the text of the SplitButton.\n */\n this.text = '';\n /**\n * Defines an icon to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.icon = '';\n /**\n * Defines an icon with a custom CSS class to be rendered next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.iconClass = '';\n /**\n * Defines the location of an image to be displayed next to the button text\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n this.imageUrl = '';\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Specifies the name of the [font icon]({% slug icons %}#toc-list-of-font-icons) that will\n * be rendered for the button which opens the popup.\n */\n this.arrowButtonIcon = 'arrow-s';\n /**\n * Fires each time the user clicks the main button.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonClick(): void {\n * console.log('SplitButton click');\n * }\n * }\n * ```\n *\n */\n this.buttonClick = new EventEmitter();\n /**\n * Fires each time the user clicks on the drop-down list. The event data contains the data item bound to the clicked list item.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * Reply\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = ['Reply All', 'Forward', 'Reply & Delete'];\n *\n * public onSplitButtonItemClick(dataItem?: string): void {\n * if (dataItem) {\n * console.log(dataItem);\n * }\n * }\n * }\n * ```\n *\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the SplitButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the SplitButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n this.listId = guid();\n /**\n * @hidden\n */\n this.activeArrow = false;\n this.buttonText = '';\n this.lockFocus = false;\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * When set to `true`, disables a SplitButton item\n * ([see example]({% slug databinding_splitbutton %}#toc-arrays-of-complex-data)).\n */\n set disabled(value) {\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Configures the popup of the SplitButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the data of the SplitButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n if (!this._data) {\n this.data = [];\n }\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? -1 : this.tabIndex;\n }\n set isFocused(value) {\n this._isFocused = value;\n }\n get isFocused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get ariaLabel() {\n return `${this.buttonText} splitbutton`;\n }\n /**\n * @hidden\n */\n onButtonFocus() {\n if (!this.isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n onArrowButtonClick() {\n this.lockFocus = true;\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n toggleButtonActiveState(enable) {\n this._active = enable;\n }\n /**\n * @hidden\n */\n toggleArrowButtonActiveState(enable) {\n this.activeArrow = enable;\n }\n /**\n * @hidden\n */\n onButtonClick() {\n this.lockFocus = true;\n this.buttonClick.emit();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen && !this.lockFocus) {\n this.blurWrapper();\n }\n this.lockFocus = false;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this._active = false;\n if (event.keyCode !== Keys.Space) {\n this.keyUpHandler(event);\n }\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.updateButtonText();\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.hasOwnProperty('text')) {\n this.updateButtonText();\n }\n }\n /**\n * @hidden\n */\n togglePopupVisibility() {\n super.togglePopupVisibility();\n if (isDocumentAvailable() && this.lockFocus) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return (this.wrapper === element || this.wrapper.contains(element) || (this.popupRef && this.popupRef.popupElement.contains(element)));\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the SplitButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the SplitButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => this._toggle(open === undefined ? !this._open : open));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n enterHandler() {\n if (this.disabled) {\n return;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n else {\n this.buttonClick.emit();\n }\n }\n updateButtonText() {\n if (isDocumentAvailable()) {\n let innerText = this.wrapper.innerText\n .split('\\n')\n .join('')\n .trim();\n //setTimout is needed because of `Expression has changed after it was checked.` error;\n setTimeout(() => (this.buttonText = innerText), 0);\n }\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.containerRef : appendTo;\n }\n _toggle(open) {\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => (this.openState = false));\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n}\nSplitButtonComponent.ɵfac = function SplitButtonComponent_Factory(t) { return new (t || SplitButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSplitButtonComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SplitButtonComponent, selectors: [[\"kendo-splitbutton\"]], contentQueries: function SplitButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function SplitButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c4, true);\n ɵngcc0.ɵɵstaticViewQuery(_c5, true, ElementRef);\n ɵngcc0.ɵɵstaticViewQuery(_c6, true);\n ɵngcc0.ɵɵstaticViewQuery(_c7, true, ViewContainerRef);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.arrowButton = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.containerRef = _t.first);\n } }, hostVars: 9, hostBindings: function SplitButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function SplitButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function SplitButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function SplitButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.isFocused)(\"k-widget\", ctx.widgetClasses)(\"k-split-button\", ctx.widgetClasses)(\"k-button-group\", ctx.widgetClasses);\n } }, inputs: { text: \"text\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", look: \"look\", tabIndex: \"tabIndex\", arrowButtonIcon: \"arrowButtonIcon\", disabled: \"disabled\", popupSettings: \"popupSettings\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\", arrowButtonClass: \"arrowButtonClass\" }, outputs: { buttonClick: \"buttonClick\", itemClick: \"itemClick\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendoSplitButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c8, decls: 10, vars: 22, consts: [[\"kendoButton\", \"\", \"role\", \"listbox\", \"type\", \"button\", 3, \"look\", \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"focus\", \"click\", \"blur\", \"mousedown\", \"mouseup\"], [\"button\", \"\"], [\"kendoButton\", \"\", \"type\", \"button\", 3, \"disabled\", \"icon\", \"look\", \"tabindex\", \"ngClass\", \"click\", \"mousedown\", \"mouseup\"], [\"arrowButton\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"]], template: function SplitButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"focus\", function SplitButtonComponent_Template_button_focus_0_listener() { return ctx.onButtonFocus(); })(\"click\", function SplitButtonComponent_Template_button_click_0_listener() { return ctx.onButtonClick(); })(\"blur\", function SplitButtonComponent_Template_button_blur_0_listener() { return ctx.onButtonBlur(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_0_listener() { return ctx.toggleButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_0_listener() { return ctx.toggleButtonActiveState(false); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵprojection(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"button\", 2, 3);\n ɵngcc0.ɵɵlistener(\"click\", function SplitButtonComponent_Template_button_click_4_listener() { return ctx.onArrowButtonClick(); })(\"mousedown\", function SplitButtonComponent_Template_button_mousedown_4_listener() { return ctx.toggleArrowButtonActiveState(true); })(\"mouseup\", function SplitButtonComponent_Template_button_mouseup_4_listener() { return ctx.toggleArrowButtonActiveState(false); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, SplitButtonComponent_ng_template_6_Template, 1, 5, \"ng-template\", null, 4, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(8, null, 5);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"look\", ctx.look)(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId)(\"aria-label\", ctx.ariaLabel);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \"\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.activeArrow);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled)(\"icon\", ctx.arrowButtonIcon)(\"look\", ctx.look)(\"tabindex\", 0 - 1)(\"ngClass\", ctx.arrowButtonClass);\n } }, directives: [ButtonDirective, ɵngcc2.NgClass, ListComponent], encapsulation: 2 });\n/** @nocollapse */\nSplitButtonComponent.ctorParameters = () => [\n { type: FocusService },\n { type: NavigationService },\n { type: ElementRef },\n { type: NgZone },\n { type: PopupService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nSplitButtonComponent.propDecorators = {\n text: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n look: [{ type: Input }],\n disabled: [{ type: Input }],\n popupSettings: [{ type: Input }],\n tabIndex: [{ type: Input }],\n textField: [{ type: Input }],\n data: [{ type: Input }],\n buttonClass: [{ type: Input }],\n arrowButtonClass: [{ type: Input }],\n arrowButtonIcon: [{ type: Input }],\n buttonClick: [{ type: Output }],\n itemClick: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n itemTemplate: [{ type: ContentChild, args: [ButtonItemTemplateDirective,] }],\n button: [{ type: ViewChild, args: ['button', { static: true },] }],\n arrowButton: [{ type: ViewChild, args: ['arrowButton', { static: true, read: ElementRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { static: true },] }],\n containerRef: [{ type: ViewChild, args: ['container', { read: ViewContainerRef, static: true },] }],\n isFocused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n widgetClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-split-button',] }, { type: HostBinding, args: ['class.k-button-group',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n keypress: [{ type: HostListener, args: ['keypress', ['$event'],] }],\n keyup: [{ type: HostListener, args: ['keyup', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.splitbutton'\n }\n ],\n selector: 'kendo-splitbutton',\n template: `\n \n {{ text }}\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { text: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], arrowButtonIcon: [{\n type: Input\n }], buttonClick: [{\n type: Output\n }], itemClick: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], disabled: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], data: [{\n type: Input\n }], isFocused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-split-button']\n }, {\n type: HostBinding,\n args: ['class.k-button-group']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], arrowButtonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], arrowButton: [{\n type: ViewChild,\n args: ['arrowButton', { static: true, read: ElementRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], containerRef: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `SplitButtonComponent`—The SplitButtonComponent component class.\n */\nclass SplitButtonModule {\n}\nSplitButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SplitButtonModule });\nSplitButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SplitButtonModule_Factory(t) { return new (t || SplitButtonModule)(); }, imports: [[CommonModule, PopupModule, ButtonModule, ListModule],\n ListModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SplitButtonModule, { declarations: function () { return [SplitButtonComponent]; }, imports: function () { return [CommonModule, PopupModule,\n ButtonModule,\n ListModule]; }, exports: function () { return [SplitButtonComponent,\n ListModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [SplitButtonComponent],\n exports: [SplitButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ButtonModule, ListModule]\n }]\n }], null, null); })();\n\n/* tslint:disable:no-access-missing-member */\nconst NAVIGATION_SETTINGS$1 = {\n useLeftRightArrows: true\n};\nconst ɵ0$1 = NAVIGATION_SETTINGS$1;\nconst NAVIGATION_SETTINGS_PROVIDER$1 = {\n provide: NAVIGATION_CONFIG,\n useValue: ɵ0$1\n};\n/**\n * Represents the Kendo UI DropDownButton component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * User Settings\n * \n * `\n * })\n * class AppComponent {\n * public data: Array = [{\n * text: 'My Profile'\n * }, {\n * text: 'Friend Requests'\n * }, {\n * text: 'Account Settings'\n * }, {\n * text: 'Support'\n * }, {\n * text: 'Log Out'\n * }];\n * }\n * ```\n */\nclass DropDownButtonComponent extends ListButton {\n constructor(focusService, navigationService, wrapperRef, zone, popupService, elRef, localization, cdr) {\n super(focusService, navigationService, wrapperRef, zone, localization, cdr);\n this.popupService = popupService;\n this.elRef = elRef;\n /**\n * Defines the name of an existing icon in a Kendo UI theme.\n */\n this.icon = '';\n /**\n * Defines the list of CSS classes which are used for styling the Button with custom icons.\n */\n this.iconClass = '';\n /**\n * Defines a URL for styling the button with a custom image.\n */\n this.imageUrl = '';\n /**\n * Adds visual weight to the default button and makes it primary.\n */\n this.primary = false;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `flat`\n * * `outline`\n */\n this.look = 'default';\n /**\n * Specifies the [`tabIndex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the component.\n */\n this.tabIndex = 0;\n /**\n * Fires each time the user clicks on a drop-down list item. The event data contains the data item bound to the clicked list item.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the DropDownButton gets focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the DropDownButton gets blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n this.listId = guid();\n this._itemClick = this.itemClick;\n this._blur = this.onBlur;\n }\n /**\n * Configures the popup of the DropDownButton.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n * - `appendTo: \"root\" | \"component\" | ViewContainerRef`—Specifies the component to which the popup will be appended.\n * - `align: \"left\" | \"center\" | \"right\"`—Specifies the alignment of the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({ animate: true, popupClass: '' }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Sets the disabled state of the DropDownButton.\n */\n set disabled(value) {\n if (value && this.openState) {\n this.openState = false;\n }\n this._disabled = value;\n }\n get disabled() {\n return this._disabled;\n }\n /**\n * Sets or gets the data of the DropDownButton.\n *\n * > The data has to be provided in an array-like list.\n */\n set data(data) {\n this._data = data || [];\n }\n get data() {\n return this._data;\n }\n /**\n * @hidden\n */\n set openState(open) {\n if (this.disabled) {\n return;\n }\n const eventArgs = new PreventableEvent();\n if (open) {\n this.open.emit(eventArgs);\n }\n else {\n this.close.emit(eventArgs);\n }\n if (eventArgs.isDefaultPrevented()) {\n return;\n }\n this._toggle(open);\n }\n /**\n * @hidden\n */\n get openState() {\n return this._open;\n }\n /**\n * @hidden\n */\n get componentTabIndex() {\n return this.disabled ? (-1) : this.tabIndex;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get focused() {\n return this._isFocused && !this._disabled;\n }\n get widgetClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n get active() {\n return this._active;\n }\n /**\n * @hidden\n */\n keydown(event) {\n this.keyDownHandler(event);\n if (event.keyCode === Keys.Space) {\n this._active = true;\n }\n }\n /**\n * @hidden\n */\n keypress(event) {\n this.keyPressHandler(event);\n }\n /**\n * @hidden\n */\n keyup(event) {\n this.keyUpHandler(event);\n this._active = false;\n }\n /**\n * @hidden\n */\n mousedown(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = true;\n }\n /**\n * @hidden\n */\n mouseup(event) {\n if (this._disabled) {\n event.preventDefault();\n }\n this._active = false;\n }\n /**\n * @hidden\n */\n openPopup() {\n this.togglePopupVisibility();\n }\n /**\n * @hidden\n */\n onButtonBlur() {\n if (!this.isOpen) {\n this.blurWrapper();\n }\n }\n /**\n * @hidden\n */\n get anchorAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'bottom' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * @hidden\n */\n get popupAlign() {\n let align = { horizontal: this.popupSettings.align || 'left', vertical: 'top' };\n if (this.direction === 'rtl' && !isPresent(this.popupSettings.align)) {\n align.horizontal = 'right';\n }\n return align;\n }\n /**\n * Focuses the DropDownButton component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n /**\n * Blurs the DropDownButton component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.button.nativeElement.blur();\n this.blurWrapper();\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n this.destroyPopup();\n }\n /**\n * Toggles the visibility of the popup.\n * If the `toggle` method is used to open or close the popup, the `open` and `close` events will not be fired.\n *\n * @param open - The state of the popup.\n */\n toggle(open) {\n if (this.disabled) {\n return;\n }\n tick(() => (this._toggle((open === undefined) ? !this._open : open)));\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.openState;\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (!this._disabled && !this._isFocused) {\n this._isFocused = true;\n this.onFocus.emit();\n }\n }\n /**\n * @hidden\n */\n wrapperContains(element) {\n return this.wrapper === element\n || this.wrapper.contains(element)\n || (this.popupRef && this.popupRef.popupElement.contains(element));\n }\n subscribeNavigationEvents() {\n this.navigationSubscription = this.navigationService.navigate\n .subscribe(this.onArrowKeyNavigate.bind(this));\n this.enterUpSubscription = this.navigationService.enterup.subscribe(this.onNavigationEnterUp.bind(this));\n this.openSubscription = this.navigationService.open.subscribe(this.onNavigationOpen.bind(this));\n this.closeSubscription = merge(this.navigationService.close, this.navigationService.esc).subscribe(this.onNavigationClose.bind(this));\n }\n onNavigationEnterUp() {\n if (!this._disabled && !this.openState) {\n this._active = false;\n }\n if (this.openState) {\n let focused = this.focusService.focused;\n if (isPresent(focused) && focused !== -1) {\n this.emitItemClickHandler(focused);\n }\n }\n this.togglePopupVisibility();\n if (!this.openState && isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n onNavigationOpen() {\n if (!this._disabled && !this.openState) {\n this.togglePopupVisibility();\n }\n }\n onNavigationClose() {\n if (this.openState) {\n this.togglePopupVisibility();\n if (isDocumentAvailable()) {\n this.button.nativeElement.focus();\n }\n }\n }\n onArrowKeyNavigate(index) {\n this.focusService.focus(index);\n }\n _toggle(open) {\n if (this._open === open) {\n return;\n }\n this._open = open;\n this.destroyPopup();\n if (this._open) {\n this.createPopup();\n }\n }\n createPopup() {\n this.popupRef = this.popupService.open({\n anchor: this.elRef,\n anchorAlign: this.anchorAlign,\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: this.popupAlign,\n popupClass: this.popupClasses\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.openState = false);\n this.popupRef.popupOpen.subscribe(this.focusFirstItem.bind(this));\n }\n destroyPopup() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n}\nDropDownButtonComponent.ɵfac = function DropDownButtonComponent_Factory(t) { return new (t || DropDownButtonComponent)(ɵngcc0.ɵɵdirectiveInject(FocusService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDropDownButtonComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DropDownButtonComponent, selectors: [[\"kendo-dropdownbutton\"]], contentQueries: function DropDownButtonComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ButtonItemTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, viewQuery: function DropDownButtonComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c4, true);\n ɵngcc0.ɵɵstaticViewQuery(_c9, true);\n ɵngcc0.ɵɵstaticViewQuery(_c6, true);\n ɵngcc0.ɵɵstaticViewQuery(_c7, true, ViewContainerRef);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.button = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.buttonList = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n } }, hostVars: 7, hostBindings: function DropDownButtonComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function DropDownButtonComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keypress\", function DropDownButtonComponent_keypress_HostBindingHandler($event) { return ctx.keypress($event); })(\"keyup\", function DropDownButtonComponent_keyup_HostBindingHandler($event) { return ctx.keyup($event); })(\"mousedown\", function DropDownButtonComponent_mousedown_HostBindingHandler($event) { return ctx.mousedown($event); })(\"mouseup\", function DropDownButtonComponent_mouseup_HostBindingHandler($event) { return ctx.mouseup($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focused)(\"k-widget\", ctx.widgetClasses)(\"k-dropdown-button\", ctx.widgetClasses);\n } }, inputs: { icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", primary: \"primary\", look: \"look\", tabIndex: \"tabIndex\", popupSettings: \"popupSettings\", disabled: \"disabled\", data: \"data\", textField: \"textField\", buttonClass: \"buttonClass\" }, outputs: { itemClick: \"itemClick\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendoDropDownButton\"], features: [ɵngcc0.ɵɵProvidersFeature([\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c8, decls: 7, vars: 14, consts: [[\"kendoButton\", \"\", \"role\", \"menu\", \"type\", \"button\", 3, \"tabindex\", \"disabled\", \"icon\", \"iconClass\", \"imageUrl\", \"ngClass\", \"look\", \"primary\", \"click\", \"focus\", \"blur\"], [\"button\", \"\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"id\", \"data\", \"textField\", \"itemTemplate\", \"onItemClick\", \"keydown\", \"keypress\", \"keyup\"], [\"buttonList\", \"\"]], template: function DropDownButtonComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function DropDownButtonComponent_Template_button_click_0_listener() { return ctx.openPopup(); })(\"focus\", function DropDownButtonComponent_Template_button_focus_0_listener() { return ctx.handleFocus(); })(\"blur\", function DropDownButtonComponent_Template_button_blur_0_listener() { return ctx.onButtonBlur(); });\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, DropDownButtonComponent_ng_template_3_Template, 2, 5, \"ng-template\", null, 2, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementContainer(5, null, 3);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx.active);\n ɵngcc0.ɵɵproperty(\"tabindex\", ctx.componentTabIndex)(\"disabled\", ctx.disabled)(\"icon\", ctx.icon)(\"iconClass\", ctx.iconClass)(\"imageUrl\", ctx.imageUrl)(\"ngClass\", ctx.buttonClass)(\"look\", ctx.look)(\"primary\", ctx.primary);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabled)(\"aria-expanded\", ctx.openState)(\"aria-haspopup\", true)(\"aria-owns\", ctx.listId);\n } }, directives: [ButtonDirective, ɵngcc2.NgClass, ListComponent], encapsulation: 2 });\n/** @nocollapse */\nDropDownButtonComponent.ctorParameters = () => [\n { type: FocusService },\n { type: NavigationService },\n { type: ElementRef },\n { type: NgZone },\n { type: PopupService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nDropDownButtonComponent.propDecorators = {\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n popupSettings: [{ type: Input }],\n textField: [{ type: Input }],\n disabled: [{ type: Input }],\n data: [{ type: Input }],\n primary: [{ type: Input }],\n look: [{ type: Input }],\n buttonClass: [{ type: Input }],\n tabIndex: [{ type: Input }],\n itemClick: [{ type: Output }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n focused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n widgetClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-dropdown-button',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n itemTemplate: [{ type: ContentChild, args: [ButtonItemTemplateDirective,] }],\n button: [{ type: ViewChild, args: ['button', { static: true },] }],\n buttonList: [{ type: ViewChild, args: ['buttonList', { static: true },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { static: true },] }],\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef, static: true },] }],\n keydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n keypress: [{ type: HostListener, args: ['keypress', ['$event'],] }],\n keyup: [{ type: HostListener, args: ['keyup', ['$event'],] }],\n mousedown: [{ type: HostListener, args: ['mousedown', ['$event'],] }],\n mouseup: [{ type: HostListener, args: ['mouseup', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropDownButtonComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDropDownButton',\n providers: [\n FocusService,\n NavigationService,\n NAVIGATION_SETTINGS_PROVIDER$1,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dropdownbutton'\n }\n ],\n selector: 'kendo-dropdownbutton',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FocusService }, { type: NavigationService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], primary: [{\n type: Input\n }], look: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], itemClick: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], popupSettings: [{\n type: Input\n }], disabled: [{\n type: Input\n }], data: [{\n type: Input\n }], focused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], widgetClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dropdown-button']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], keydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], keypress: [{\n type: HostListener,\n args: ['keypress', ['$event']]\n }], keyup: [{\n type: HostListener,\n args: ['keyup', ['$event']]\n }], mousedown: [{\n type: HostListener,\n args: ['mousedown', ['$event']]\n }], mouseup: [{\n type: HostListener,\n args: ['mouseup', ['$event']]\n }], textField: [{\n type: Input\n }], buttonClass: [{\n type: Input\n }], itemTemplate: [{\n type: ContentChild,\n args: [ButtonItemTemplateDirective]\n }], button: [{\n type: ViewChild,\n args: ['button', { static: true }]\n }], buttonList: [{\n type: ViewChild,\n args: ['buttonList', { static: true }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { static: true }]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef, static: true }]\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `DropDownButtonComponent`—The DropDownButtonComponent component class.\n */\nclass DropDownButtonModule {\n}\nDropDownButtonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DropDownButtonModule });\nDropDownButtonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DropDownButtonModule_Factory(t) { return new (t || DropDownButtonModule)(); }, imports: [[CommonModule, PopupModule, ListModule, ButtonModule],\n ListModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DropDownButtonModule, { declarations: function () { return [DropDownButtonComponent]; }, imports: function () { return [CommonModule, PopupModule,\n ListModule,\n ButtonModule]; }, exports: function () { return [DropDownButtonComponent,\n ListModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropDownButtonModule, [{\n type: NgModule,\n args: [{\n declarations: [DropDownButtonComponent],\n exports: [DropDownButtonComponent, ListModule],\n imports: [CommonModule, PopupModule, ListModule, ButtonModule]\n }]\n }], null, null); })();\n\n/**\n * Displays a Chip that represents an input, attribute or an action.\n */\nclass ChipComponent {\n constructor(element, renderer, ngZone, localizationService) {\n this.element = element;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localizationService = localizationService;\n /**\n * Changes the visual appearance by using alternative styling options.\n *\n * The available values are:\n * * `filled`\n * * `outlined`\n */\n this.look = 'filled';\n /**\n * Specifies the selected state of the Chip.\n */\n this.selected = false;\n /**\n * Specifies if the Chip will be removable or not.\n * If the property is set to `true`, the Chip renders a remove icon.\n */\n this.removable = false;\n /**\n * Specifies the Chip type.\n *\n * The possible values are:\n * - `none` (default)\n * - `success`\n * - `error`\n * - `warning`\n * - `info`\n */\n this.type = 'none';\n /**\n * If set to `true`, the Chip will be disabled.\n */\n this.disabled = false;\n /**\n * Fires each time the user clicks the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.tabIndex = 0;\n this.hostClass = true;\n this.focused = false;\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get outlineClass() {\n return this.look === 'outlined';\n }\n get filledClass() {\n return this.look === 'filled';\n }\n get hasIconClass() {\n return this.icon || this.iconClass ? true : false;\n }\n get disabledClass() {\n return this.disabled;\n }\n get selectedClass() {\n return this.selected;\n }\n get focusedClass() {\n return this.focused;\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n if (this.detachDomEvents) {\n this.detachDomEvents();\n }\n }\n ngAfterViewInit() {\n const chip = this.element.nativeElement;\n const typeClass = this.typeClass();\n if (this.type !== 'none') {\n this.renderer.addClass(chip, typeClass);\n }\n this.attachElementEventHandlers(chip);\n }\n /**\n * @hidden\n */\n get iconClasses() {\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n if (this.iconClass) {\n return `${this.iconClass}`;\n }\n }\n /**\n * @hidden\n */\n get selectedIconClasses() {\n if (this.selectedIcon) {\n return `${this.selectedIcon}`;\n }\n return `k-icon k-i-check`;\n }\n /**\n * @hidden\n */\n get removeIconClasses() {\n if (this.removeIcon) {\n return `${this.removeIcon}`;\n }\n return `k-icon k-i-close-circle`;\n }\n /**\n * @hidden\n */\n typeClass() {\n return {\n 'none': '',\n 'success': 'k-chip-success',\n 'warning': 'k-chip-warning',\n 'error': 'k-chip-error',\n 'info': 'k-chip-info'\n }[this.type];\n }\n /**\n * Focuses the Chip component.\n */\n focus() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.focus();\n }\n }\n /**\n * Blurs the Chip component.\n */\n blur() {\n if (isDocumentAvailable()) {\n this.element.nativeElement.blur();\n }\n }\n /**\n * @hidden\n */\n onRemoveClick(e) {\n if (this.removable) {\n this.remove.emit({ sender: this, originalEvent: e });\n }\n }\n attachElementEventHandlers(chip) {\n this.ngZone.runOutsideAngular(() => {\n const focusListener = this.renderer.listen(chip, 'focus', () => {\n this.renderer.addClass(chip, 'k-chip-focused');\n });\n const blurListener = this.renderer.listen(chip, 'blur', () => {\n this.renderer.removeClass(chip, 'k-chip-focused');\n });\n this.detachDomEvents = () => {\n focusListener();\n blurListener();\n };\n });\n }\n}\nChipComponent.ɵfac = function ChipComponent_Factory(t) { return new (t || ChipComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChipComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ChipComponent, selectors: [[\"kendo-chip\"]], hostVars: 16, hostBindings: function ChipComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndex)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-chip\", ctx.hostClass)(\"k-chip-outline\", ctx.outlineClass)(\"k-chip-filled\", ctx.filledClass)(\"k-chip-has-icon\", ctx.hasIconClass)(\"k-chip-disabled\", ctx.disabledClass)(\"k-chip-selected\", ctx.selectedClass)(\"k-chip-focused\", ctx.focusedClass);\n } }, inputs: { look: \"look\", selected: \"selected\", removable: \"removable\", type: \"type\", disabled: \"disabled\", label: \"label\", icon: \"icon\", iconClass: \"iconClass\", selectedIcon: \"selectedIcon\", removeIcon: \"removeIcon\" }, outputs: { remove: \"remove\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ])], ngContentSelectors: _c8, decls: 7, vars: 5, consts: [[1, \"k-selected-icon-wrapper\"], [\"class\", \"k-selected-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-chip-icon\", 3, \"ngClass\", 4, \"ngIf\"], [1, \"k-chip-content\"], [\"class\", \"k-chip-label\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-remove-icon\", 3, \"click\", 4, \"ngIf\"], [1, \"k-selected-icon\", 3, \"ngClass\"], [1, \"k-chip-icon\", 3, \"ngClass\"], [1, \"k-chip-label\"], [1, \"k-remove-icon\", 3, \"click\"], [3, \"ngClass\"]], template: function ChipComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, ChipComponent_span_1_Template, 1, 1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ChipComponent_span_2_Template, 1, 1, \"span\", 2);\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtemplate(4, ChipComponent_span_4_Template, 2, 1, \"span\", 4);\n ɵngcc0.ɵɵtemplate(5, ChipComponent_5_Template, 1, 0, undefined, 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(6, ChipComponent_span_6_Template, 2, 1, \"span\", 6);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.selected);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon || ctx.iconClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.label);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.removable);\n } }, directives: [ɵngcc2.NgIf, ɵngcc2.NgClass], encapsulation: 2 });\n/** @nocollapse */\nChipComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone },\n { type: LocalizationService }\n];\nChipComponent.propDecorators = {\n look: [{ type: Input }],\n label: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n selected: [{ type: Input }],\n selectedIcon: [{ type: Input }],\n removable: [{ type: Input }],\n removeIcon: [{ type: Input }],\n type: [{ type: Input }],\n disabled: [{ type: Input }],\n remove: [{ type: Output }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n hostClass: [{ type: HostBinding, args: ['class.k-chip',] }],\n outlineClass: [{ type: HostBinding, args: ['class.k-chip-outline',] }],\n filledClass: [{ type: HostBinding, args: ['class.k-chip-filled',] }],\n hasIconClass: [{ type: HostBinding, args: ['class.k-chip-has-icon',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-chip-disabled',] }],\n selectedClass: [{ type: HostBinding, args: ['class.k-chip-selected',] }],\n focusedClass: [{ type: HostBinding, args: ['class.k-chip-focused',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip',\n template: `\n \n \n \n \n\n \n \n\n \n \n {{ label }}\n \n \n \n\n \n \n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc1.LocalizationService }]; }, { look: [{\n type: Input\n }], selected: [{\n type: Input\n }], removable: [{\n type: Input\n }], type: [{\n type: Input\n }], disabled: [{\n type: Input\n }], remove: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-chip']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], outlineClass: [{\n type: HostBinding,\n args: ['class.k-chip-outline']\n }], filledClass: [{\n type: HostBinding,\n args: ['class.k-chip-filled']\n }], hasIconClass: [{\n type: HostBinding,\n args: ['class.k-chip-has-icon']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-chip-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['class.k-chip-selected']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-chip-focused']\n }], label: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], selectedIcon: [{\n type: Input\n }], removeIcon: [{\n type: Input\n }] }); })();\n\nclass ChipListComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClass = true;\n /**\n * Sets the selection mode of the ChipList.\n *\n * The available values are:\n * * `none` (default)\n * * `single`\n * * `multiple`\n */\n this.selection = 'none';\n /**\n * Fires each time when the ChipList selection is changed.\n */\n this.selectedChange = new EventEmitter();\n /**\n * Fires each time the user clicks on the remove icon of the Chip.\n */\n this.remove = new EventEmitter();\n this.direction = localizationService.rtl ? 'rtl' : 'ltr';\n }\n get single() {\n return this.selection === 'single';\n }\n get multiple() {\n return this.selection === 'multiple';\n }\n /**\n * @hidden\n */\n onClick($event) {\n const target = $event.target;\n const isRemoveClicked = closest(target, '.k-remove-icon');\n const clickedChip = closest(target, '.k-chip');\n const chip = this.chips.find((chip) => clickedChip === chip.element.nativeElement);\n if (isRemoveClicked && clickedChip) {\n const removeEventArgs = { sender: this, originalEvent: $event, removedChip: chip };\n this.remove.emit(removeEventArgs);\n }\n if (this.selection !== 'none' && clickedChip && !isRemoveClicked) {\n this.setSelection(chip);\n }\n }\n ngOnInit() {\n this.dynamicRTLSubscription = this.localizationService.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n selectedChips() {\n return this.chips.reduce((acc, cur, idx) => { return cur.selected ? acc.concat(idx) : acc; }, []);\n }\n /**\n * Updates the selection on click of a Chip. Emits events.\n */\n setSelection(chip) {\n if (this.selection === 'single') {\n this.clearSelection(chip);\n }\n chip.selected = !chip.selected;\n this.selectedChange.emit(this.selectedChips());\n }\n clearSelection(chip) {\n this.chips.forEach((c) => {\n if (chip !== c) {\n c.selected = false;\n }\n });\n }\n}\nChipListComponent.ɵfac = function ChipListComponent_Factory(t) { return new (t || ChipListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChipListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ChipListComponent, selectors: [[\"kendo-chip-list\"]], contentQueries: function ChipListComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ChipComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.chips = _t);\n } }, hostVars: 7, hostBindings: function ChipListComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ChipListComponent_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-chip-list\", ctx.hostClass)(\"k-selection-single\", ctx.single)(\"k-selection-multiple\", ctx.multiple);\n } }, inputs: { selection: \"selection\" }, outputs: { selectedChange: \"selectedChange\", remove: \"remove\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ])], ngContentSelectors: _c8, decls: 1, vars: 0, template: function ChipListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nChipListComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nChipListComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-chip-list',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n selection: [{ type: Input }],\n selectedChange: [{ type: Output }],\n remove: [{ type: Output }],\n chips: [{ type: ContentChildren, args: [ChipComponent,] }],\n single: [{ type: HostBinding, args: ['class.k-selection-single',] }],\n multiple: [{ type: HostBinding, args: ['class.k-selection-multiple',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-chip-list',\n template: `\n \n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chip-list'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-chip-list']\n }], selection: [{\n type: Input\n }], selectedChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], single: [{\n type: HostBinding,\n args: ['class.k-selection-single']\n }], multiple: [{\n type: HostBinding,\n args: ['class.k-selection-multiple']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], chips: [{\n type: ContentChildren,\n args: [ChipComponent]\n }] }); })();\n\nconst exportedModules = [\n ChipComponent,\n ChipListComponent\n];\nconst declarations = [\n ...exportedModules\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Chip and ChipList components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Chip module\n * import { ChipModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ChipModule], // import Chip module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * ```\n */\nclass ChipModule {\n}\nChipModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ChipModule });\nChipModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ChipModule_Factory(t) { return new (t || ChipModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ChipModule, { declarations: function () { return [ChipComponent,\n ChipListComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ChipComponent,\n ChipListComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChipModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmodules'] }})\n * definition for the Buttons components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Buttons module\n * import { ButtonsModule } from '@progress/kendo-angular-buttons';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ButtonsModule], // import Buttons module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ButtonsModule {\n}\nButtonsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ButtonsModule });\nButtonsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ButtonsModule_Factory(t) { return new (t || ButtonsModule)(); }, imports: [ButtonGroupModule,\n ButtonModule,\n SplitButtonModule,\n DropDownButtonModule,\n ChipModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ButtonsModule, { exports: [ButtonGroupModule,\n ButtonModule,\n SplitButtonModule,\n DropDownButtonModule,\n ChipModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ButtonsModule, [{\n type: NgModule,\n args: [{\n exports: [ButtonGroupModule, ButtonModule, SplitButtonModule, DropDownButtonModule, ChipModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { KendoButtonService, FocusService, FocusableDirective, ButtonItemTemplateDirective, ListButton, ListComponent, ListModule, TemplateContextDirective, NAVIGATION_CONFIG, NavigationService, ButtonDirective, ButtonDirective as Button, ButtonGroupComponent, ButtonGroupComponent as ButtonGroup, ButtonGroupModule, ButtonModule, ButtonsModule, SplitButtonComponent, SplitButtonComponent as SplitButton, SplitButtonModule, DropDownButtonComponent, DropDownButtonComponent as DropDownButton, DropDownButtonModule, ChipComponent, ChipListComponent, ChipModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs0Q0FhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQWlCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzBCQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VNQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OEpBcUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozt1Q0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VMQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7bUhBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzJGQXlFRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyRkF3REU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3dFQXlDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzZCQWVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OzswQkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4qIENvcHlyaWdodCDCqSAyMDIwIFByb2dyZXNzIFNvZnR3YXJlIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuKiBMaWNlbnNlZCB1bmRlciBjb21tZXJjaWFsIGxpY2Vuc2UuIFNlZSBMSUNFTlNFLm1kIGluIHRoZSBwcm9qZWN0IHJvb3QgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbmltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE9wdGlvbmFsLCBOZ1pvbmUsIElucHV0LCBPdXRwdXQsIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIGlzRGV2TW9kZSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIE5nTW9kdWxlLCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZiwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEtleXMsIGlzQ2hhbmdlZCwgaXNEb2N1bWVudEF2YWlsYWJsZSwgaGFzT2JzZXJ2ZXJzLCBndWlkIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIEwxME5fUFJFRklYIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUG9wdXBTZXJ2aWNlLCBQb3B1cE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXBvcHVwJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEtlbmRvQnV0dG9uU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uTG9va0NoYW5nZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoJ2RlZmF1bHQnKTtcbiAgICAgICAgdGhpcy5idXR0b25DbGlja2VkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5idXR0b25DbGlja2VkJCA9IHRoaXMuYnV0dG9uQ2xpY2tlZC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgY2xpY2soYnV0dG9uKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQ2xpY2tlZC5uZXh0KGJ1dHRvbik7XG4gICAgfVxuICAgIHNldEJ1dHRvbkxvb2sobG9vaykge1xuICAgICAgICB0aGlzLmJ1dHRvbkxvb2tDaGFuZ2UubmV4dChsb29rKTtcbiAgICB9XG59XG5LZW5kb0J1dHRvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbmNvbnN0IFNQQU5fVEFHX05BTUUgPSAnU1BBTic7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIEJ1dHRvbiBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKi9cbmNsYXNzIEJ1dHRvbkRpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgcmVuZGVyZXIsIHNlcnZpY2UsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICAvKipcbiAgICAgICAgICogUHJvdmlkZXMgdmlzdWFsIHN0eWxpbmcgdGhhdCBpbmRpY2F0ZXMgaWYgdGhlIEJ1dHRvbiBpcyBhY3RpdmUuXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIGB0b2dnbGVhYmxlYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG9nZ2xlYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQWRkcyB2aXN1YWwgd2VpZ2h0IHRvIHRoZSBCdXR0b24gYW5kIG1ha2VzIGl0IHByaW1hcnkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByaW1hcnkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoYW5nZXMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIGJ5IHVzaW5nIGFsdGVybmF0aXZlIHN0eWxpbmcgb3B0aW9uc1xuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzXSh7JSBzbHVnIGFwcGVhcmFuY2VfYnV0dG9uICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBbYEJ1dHRvbkxvb2tgXSh7JSBzbHVnIGFwaV9idXR0b25zX2J1dHRvbmxvb2sgJX0pID0gYGZsYXRgIHwgYG91dGxpbmVgXG4gICAgICAgICAqICogYGNsZWFyYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb29rID0gJ2RlZmF1bHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIGEgdG9nZ2xlYWJsZSBidXR0b24gaXMgY2hhbmdlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGV2ZW50IGFyZ3VtZW50IGlzIHRoZSBuZXcgc2VsZWN0ZWQgc3RhdGUgKGJvb2xlYW4pLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBjbGlja3MgdGhlIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzSWNvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzSWNvbkNsYXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBsb2NhbGl6YXRpb24ucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSBsb2NhbGl6YXRpb24uY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHRvZ2dsYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlYWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB0b2dnbGFibGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy50b2dnbGVhYmxlID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNlbGVjdGVkIHN0YXRlIG9mIHRoZSBCdXR0b24uXG4gICAgICovXG4gICAgZ2V0IHNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQgfHwgZmFsc2U7XG4gICAgfVxuICAgIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KGluZGV4KSB7XG4gICAgICAgIHRoaXMuZWxlbWVudC50YWJJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQudGFiSW5kZXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG5hbWUgZm9yIGFuIGV4aXN0aW5nIGljb24gaW4gYSBLZW5kbyBVSSB0aGVtZS5cbiAgICAgKiBUaGUgaWNvbiBpcyByZW5kZXJlZCBpbnNpZGUgdGhlIEJ1dHRvbiBieSBhIGBzcGFuLmstaWNvbmAgZWxlbWVudC5cbiAgICAgKi9cbiAgICBzZXQgaWNvbihpY29uKSB7XG4gICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICB0aGlzLmljb25TZXR0ZXIoaWNvbiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNJY29uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc2VzID0gJ2staWNvbiBrLWktJyArIGljb247XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJY29uKGNsYXNzZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzSWNvbiA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJY29uTm9kZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBDU1MgY2xhc3MmbWRhc2g7b3IgbXVsdGlwbGUgY2xhc3NlcyBzZXBhcmF0ZWQgYnkgc3BhY2VzJm1kYXNoO1xuICAgICAqIHdoaWNoIGFyZSBhcHBsaWVkIHRvIGEgYHNwYW5gIGVsZW1lbnQgaW5zaWRlIHRoZSBCdXR0b24uIEFsbG93cyB0aGUgdXNhZ2Ugb2YgY3VzdG9tIGljb25zLlxuICAgICAqL1xuICAgIHNldCBpY29uQ2xhc3MoaWNvbkNsYXNzTmFtZSkge1xuICAgICAgICBpZiAoaWNvbkNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5pY29uU2V0dGVyKGljb25DbGFzc05hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzSWNvbkNsYXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEljb24oaWNvbkNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNJY29uQ2xhc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSWNvbk5vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGEgVVJMIHdoaWNoIGlzIHVzZWQgZm9yIGFuIGBpbWdgIGVsZW1lbnQgaW5zaWRlIHRoZSBCdXR0b24uXG4gICAgICogVGhlIFVSTCBjYW4gYmUgcmVsYXRpdmUgb3IgYWJzb2x1dGUuIElmIHJlbGF0aXZlLCBpdCBpcyBldmFsdWF0ZWQgd2l0aCByZWxhdGlvbiB0byB0aGUgd2ViIHBhZ2UgVVJMLlxuICAgICAqL1xuICAgIHNldCBpbWFnZVVybChpbWFnZVVybCkge1xuICAgICAgICBpZiAoaW1hZ2VVcmwpIHtcbiAgICAgICAgICAgIHRoaXMuaWNvblNldHRlcihpbWFnZVVybCwgdGhpcy5hZGRJbWdJY29uLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJbWFnZU5vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCBpdCBkaXNhYmxlcyB0aGUgQnV0dG9uLlxuICAgICAqL1xuICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmlzRGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsZW1lbnQsICdkaXNhYmxlZCcsIGRpc2FibGVkKTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0Rpc2FibGVkO1xuICAgIH1cbiAgICBzZXQgaXNGb2N1c2VkKGlzRm9jdXNlZCkge1xuICAgICAgICB0aGlzLnRvZ2dsZUNsYXNzKCdrLXN0YXRlLWZvY3VzZWQnLCBpc0ZvY3VzZWQpO1xuICAgICAgICB0aGlzLl9mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgIH1cbiAgICBnZXQgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9jdXNlZDtcbiAgICB9XG4gICAgZ2V0IGNsYXNzQnV0dG9uKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGNsYXNzUHJpbWFyeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbWFyeTtcbiAgICB9XG4gICAgZ2V0IGlzRmxhdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vayA9PT0gJ2ZsYXQnO1xuICAgIH1cbiAgICBnZXQgaXNCYXJlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnYmFyZSc7XG4gICAgfVxuICAgIGdldCBpc091dGxpbmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdvdXRsaW5lJztcbiAgICB9XG4gICAgZ2V0IGlzQ2xlYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdjbGVhcic7XG4gICAgfVxuICAgIGdldCByb2xlU2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb2xlO1xuICAgIH1cbiAgICBnZXQgY2xhc3NEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IGNsYXNzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gICAgZ2V0IGdldERpcmVjdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25CbHVyKCkge1xuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgY29uc3QgaXNTcGFuID0gdGhpcy5lbGVtZW50LnRhZ05hbWUgPT09IFNQQU5fVEFHX05BTUU7XG4gICAgICAgIGlmICh0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uTG9va0NoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5idXR0b25Mb29rQ2hhbmdlXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChsb29rKSA9PiBsb29rICE9PSAnZGVmYXVsdCcpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGxvb2spID0+IHRoaXMubG9vayA9IGxvb2spO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50Lmhhc0F0dHJpYnV0ZSgncm9sZScpICYmIHRoaXMudG9nZ2xhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUFyaWFQcmVzc2VkKHRoaXMudG9nZ2xlYWJsZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm9sZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCB0aGlzLnJvbGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCAnY2xpY2snLCB0aGlzLl9vbkJ1dHRvbkNsaWNrLmJpbmQodGhpcykpKTtcbiAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50LCAna2V5ZG93bicsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1NwYW4gJiYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMuU3BhY2UgfHwgZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5FbnRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGljay5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25CdXR0b25DbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZSkge1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKCd0b2dnbGFibGUnLCBjaGFuZ2UpIHx8IGlzQ2hhbmdlZCgndG9nZ2xlYWJsZScsIGNoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQXJpYVByZXNzZWQodGhpcy50b2dnbGVhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuc2V0SWNvblRleHRDbGFzc2VzKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmltYWdlTm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMuaWNvbk5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZSAmJiB0aGlzLmJ1dHRvbkxvb2tDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uTG9va0NoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlZmVyVGltZW91dCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5iaW5kSGFuZGxlciA9PiB1bmJpbmRIYW5kbGVyKCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBCdXR0b24gY29tcG9uZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgQnV0dG9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCBhdHRyaWJ1dGUsIHZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50LCBhdHRyaWJ1dGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBJbnRlcm5hbCBzZXR0ZXIgdGhhdCB0cmlnZ2VycyBzZWxlY3RlZENoYW5nZVxuICAgICAqL1xuICAgIHNldFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnNlbGVjdGVkICE9PSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZCA9IHZhbHVlO1xuICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5zZWxlY3RlZC50b1N0cmluZygpKTtcbiAgICAgICAgdGhpcy50b2dnbGVDbGFzcygnay1zdGF0ZS1hY3RpdmUnLCB0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgaWYgKGNoYW5nZWQgJiYgaGFzT2JzZXJ2ZXJzKHRoaXMuc2VsZWN0ZWRDaGFuZ2UpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b2dnbGVBcmlhUHJlc3NlZChzaG91bGRTZXQpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkU2V0KSB7XG4gICAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5zZWxlY3RlZC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXByZXNzZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNUZXh0KCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMuZWxlbWVudC50ZXh0Q29udGVudCkudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWRkSW1nSWNvbihpbWFnZVVybCkge1xuICAgICAgICBsZXQgcmVuZGVyZXIgPSB0aGlzLnJlbmRlcmVyO1xuICAgICAgICBpZiAodGhpcy5pbWFnZU5vZGUpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW1hZ2VOb2RlLCAnc3JjJywgaW1hZ2VVcmwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5pbWFnZU5vZGUgPSByZW5kZXJlci5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaW1hZ2VOb2RlLCAnc3JjJywgaW1hZ2VVcmwpO1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5pbWFnZU5vZGUsICdjbGFzc05hbWUnLCAnay1pbWFnZScpO1xuICAgICAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuaW1hZ2VOb2RlLCAncm9sZScsICdwcmVzZW50YXRpb24nKTtcbiAgICAgICAgICAgIHRoaXMucHJlcGVuZENoaWxkKHRoaXMuaW1hZ2VOb2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGRJY29uKGNsYXNzTmFtZXMpIHtcbiAgICAgICAgbGV0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlcjtcbiAgICAgICAgaWYgKHRoaXMuaWNvbk5vZGUpIHtcbiAgICAgICAgICAgIHJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuaWNvbk5vZGUsICdjbGFzc05hbWUnLCBjbGFzc05hbWVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaWNvbk5vZGUgPSByZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmljb25Ob2RlLCAnY2xhc3NOYW1lJywgY2xhc3NOYW1lcyk7XG4gICAgICAgICAgICByZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5pY29uTm9kZSwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLnByZXBlbmRDaGlsZCh0aGlzLmljb25Ob2RlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwcmVwZW5kQ2hpbGQobm9kZSkge1xuICAgICAgICB0aGlzLmRlZmVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlcmVyICYmIG5vZGUgIT09IHRoaXMuZWxlbWVudC5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50LCBub2RlLCB0aGlzLmVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkZWZlcihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlZmVyVGltZW91dCA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWNvblNldHRlcihpY29uLCBpbnNlcnRJY29uKSB7XG4gICAgICAgIGlmIChpY29uKSB7XG4gICAgICAgICAgICBpbnNlcnRJY29uKGljb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0SWNvblRleHRDbGFzc2VzKCk7XG4gICAgfVxuICAgIHJlbW92ZUltYWdlTm9kZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VOb2RlICYmIHRoaXMucmVuZGVyZXIucGFyZW50Tm9kZSh0aGlzLmltYWdlTm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50LCB0aGlzLmltYWdlTm9kZSk7XG4gICAgICAgICAgICB0aGlzLmltYWdlTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVtb3ZlSWNvbk5vZGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmljb25Ob2RlICYmIHRoaXMucmVuZGVyZXIucGFyZW50Tm9kZSh0aGlzLmljb25Ob2RlKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnQsIHRoaXMuaWNvbk5vZGUpO1xuICAgICAgICAgICAgdGhpcy5pY29uTm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlSWNvbk5vZGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ljb24gJiYgIXRoaXMuaXNJY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlSWNvbk5vZGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRJY29uVGV4dENsYXNzZXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0ljb24gPSB0aGlzLmlzSWNvbiB8fCB0aGlzLmlzSWNvbkNsYXNzIHx8IHRoaXMuaW1hZ2VOb2RlO1xuICAgICAgICBjb25zdCBoYXNUZXh0ID0gdGhpcy5oYXNUZXh0KCk7XG4gICAgICAgIHRoaXMudG9nZ2xlQ2xhc3MoJ2stYnV0dG9uLWljb24nLCBoYXNJY29uICYmICFoYXNUZXh0KTtcbiAgICAgICAgdGhpcy50b2dnbGVDbGFzcygnay1idXR0b24taWNvbnRleHQnLCBoYXNJY29uICYmIGhhc1RleHQpO1xuICAgIH1cbiAgICB0b2dnbGVDbGFzcyhjbGFzc05hbWUsIGFkZCkge1xuICAgICAgICBpZiAoYWRkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9vbkJ1dHRvbkNsaWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5jbGljayh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRvZ2dsYWJsZSAmJiAhdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKCF0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkJ1dHRvbkRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9CdXR0b24nLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbltrZW5kb0J1dHRvbl0sIHNwYW5ba2VuZG9CdXR0b25dJyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJ1dHRvbkRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogS2VuZG9CdXR0b25TZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5CdXR0b25EaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdG9nZ2xlYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9nZ2xhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwcmltYXJ5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb29rOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW1hZ2VVcmw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb2xlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsaWNrOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xhc3NCdXR0b246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uJyxdIH1dLFxuICAgIGNsYXNzUHJpbWFyeTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1wcmltYXJ5JyxdIH1dLFxuICAgIGlzRmxhdDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1mbGF0JyxdIH1dLFxuICAgIGlzQmFyZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1iYXJlJyxdIH1dLFxuICAgIGlzT3V0bGluZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1vdXRsaW5lJyxdIH1dLFxuICAgIGlzQ2xlYXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uLWNsZWFyJyxdIH1dLFxuICAgIHJvbGVTZXR0ZXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIucm9sZScsXSB9XSxcbiAgICBjbGFzc0Rpc2FibGVkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtZGlzYWJsZWQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dLFxuICAgIGNsYXNzQWN0aXZlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWFjdGl2ZScsXSB9XSxcbiAgICBnZXREaXJlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydibHVyJyxdIH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1udWxsLWtleXdvcmQgKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgKi9cbmNvbnN0IHJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1ByZXNlbnQgPSAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdGljayA9IChmKSA9PiAocmVzb2x2ZWRQcm9taXNlLnRoZW4oZikpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGlzRG9jdW1lbnROb2RlKGNvbnRhaW5lcikge1xuICAgIHJldHVybiBjb250YWluZXIubm9kZVR5cGUgPT09IDk7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY2xvc2VzdChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGlmIChlbGVtZW50LmNsb3Nlc3QpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID9cbiAgICAgICAgKGVsLCBzZWwpID0+IGVsLm1hdGNoZXMoc2VsKVxuICAgICAgICA6IChlbCwgc2VsKSA9PiBlbC5tc01hdGNoZXNTZWxlY3RvcihzZWwpO1xuICAgIGxldCBub2RlID0gZWxlbWVudDtcbiAgICB3aGlsZSAobm9kZSAmJiAhaXNEb2N1bWVudE5vZGUobm9kZSkpIHtcbiAgICAgICAgaWYgKG1hdGNoZXMobm9kZSwgc2VsZWN0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGEgc3BlY2lmaWVkIGV2ZW50LlxuICAgICAqIEluIHRoaXMgd2F5LCB0aGUgc291cmNlIGNvbXBvbmVudCBzdXBwcmVzc2VzIHRoZSBidWlsdC1pbiBiZWhhdmlvciB0aGF0IGZvbGxvd3MgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSBldmVudCBpcyBwcmV2ZW50ZWQgYnkgYW55IG9mIGl0cyBzdWJzY3JpYmVycywgcmV0dXJucyBgdHJ1ZWAuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGRlZmF1bHQgYWN0aW9uIHdhcyBwcmV2ZW50ZWQuIE90aGVyd2lzZSwgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqL1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmVudGVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRhYmluZGV4ID0gJ3RhYmluZGV4Jztcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgQnV0dG9uR3JvdXAgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICovXG5jbGFzcyBCdXR0b25Hcm91cENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSwgbG9jYWxpemF0aW9uLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgc2VsZWN0aW9uIG1vZGUgb2YgdGhlIEJ1dHRvbkdyb3VwIGlzIHNldCB0byBgbXVsdGlwbGVgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSAnbXVsdGlwbGUnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2hhbmdlcyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UgYnkgdXNpbmcgYWx0ZXJuYXRpdmUgc3R5bGluZyBvcHRpb25zXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXNdKHslIHNsdWcgc3R5bGluZ19idXR0b25ncm91cCAlfSkpLlxuICAgICAgICAgKiBUaGUgYGxvb2tgIHByb3BlcnR5IG9mIHRoZSBCdXR0b25Hcm91cCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlIGBsb29rYCBwcm9wZXJ0eVxuICAgICAgICAgKiBvZiB0aGUgaW5kaXZpZHVhbCBidXR0b25zIHRoYXQgYXJlIHBhcnQgb2YgdGhlIGdyb3VwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogYGZsYXRgXG4gICAgICAgICAqICogYG91dGxpbmVgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvb2sgPSAnZGVmYXVsdCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBldmVyeSB0aW1lIGtleWJvYXJkIG5hdmlnYXRpb24gb2NjdXJzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5fdGFiSW5kZXggPSAwO1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWJJbmRleCA9IDA7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gbG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiSW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHNldCB0YWJJbmRleCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl90YWJJbmRleCA9IHZhbHVlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUYWJJbmRleCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHdyYXBwZXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IHN0cmV0Y2hlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLndpZHRoO1xuICAgIH1cbiAgICBnZXQgaXNGbGF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnZmxhdCc7XG4gICAgfVxuICAgIGdldCBpc0JhcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdiYXJlJztcbiAgICB9XG4gICAgZ2V0IGlzT3V0bGluZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vayA9PT0gJ291dGxpbmUnO1xuICAgIH1cbiAgICBnZXQgZ2V0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTZWxlY3Rpb25TaW5nbGUoKSA/ICdyYWRpb2dyb3VwJyA6ICdncm91cCc7XG4gICAgfVxuICAgIGdldCBkaXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgICB9XG4gICAgZ2V0IGFyaWFEaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCB3cmFwcGVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cbiAgICBnZXQgd3JhcHBlclRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHRoaXMuY3VycmVudFRhYkluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVGb2N1cyhldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRhYkluZGV4ID0gLTE7XG4gICAgICAgIGNvbnN0IGZvY3VzZWRJbmRleCA9IHRoaXMuYnV0dG9ucy50b0FycmF5KCkuZmluZEluZGV4KGN1cnJlbnQgPT4gY3VycmVudC5lbGVtZW50LnRhYkluZGV4ICE9PSAtMSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZm9jdXNlZEluZGV4ID09PSAtMSA/IDAgOiBmb2N1c2VkSW5kZXg7XG4gICAgICAgIHRoaXMuZm9jdXModGhpcy5idXR0b25zLmZpbHRlcigoX2N1cnJlbnQsIGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpID09PSBpbmRleDtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZm9jdXNvdXQoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC5wYXJlbnROb2RlICE9PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWZvY3VzKHRoaXMuYnV0dG9ucy50b0FycmF5KCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGFiSW5kZXggPSB0aGlzLnRhYkluZGV4O1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc2V0QnV0dG9uTG9vayh0aGlzLmxvb2spO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5idXR0b25DbGlja2VkJC5zdWJzY3JpYmUoKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgbGV0IG5ld1NlbGVjdGlvblZhbHVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25TaW5nbGUoKSkge1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGUodGhpcy5idXR0b25zLmZpbHRlcihjdXJyZW50ID0+IGN1cnJlbnQgIT09IGJ1dHRvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZvY3VzKHRoaXMuYnV0dG9ucy50b0FycmF5KCkpO1xuICAgICAgICAgICAgICAgIG5ld1NlbGVjdGlvblZhbHVlID0gIWJ1dHRvbi5zZWxlY3RlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidXR0b24udG9nZ2xhYmxlKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldFNlbGVjdGVkKG5ld1NlbGVjdGlvblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiMFwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZSkge1xuICAgICAgICBpZiAoaXNDaGFuZ2VkKCdkaXNhYmxlZCcsIGNoYW5nZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLmJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoYnV0dG9uLnNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSh0YWJpbmRleCwgXCIwXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSh0YWJpbmRleCwgXCItMVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5maXJzdC5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmJ1dHRvbnMuZmlyc3QuZWxlbWVudCwgJ2stZ3JvdXAtc3RhcnQnKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9ucy5sYXN0LnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuYnV0dG9ucy5sYXN0LmVsZW1lbnQsICdrLWdyb3VwLWVuZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5U2V0dGluZ3MoKTtcbiAgICB9XG4gICAgbmF2aWdhdGVGb2N1cyhldmVudCkge1xuICAgICAgICBsZXQgZm9jdXNlZEluZGV4ID0gdGhpcy5idXR0b25zLnRvQXJyYXkoKS5maW5kSW5kZXgoY3VycmVudCA9PiBjdXJyZW50LmVsZW1lbnQudGFiSW5kZXggIT09IC0xKTtcbiAgICAgICAgY29uc3QgZmlyc3RJbmRleCA9IDA7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuYnV0dG9ucy5sZW5ndGggLSAxO1xuICAgICAgICBjb25zdCBldmVudEFyZ3MgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5BcnJvd1JpZ2h0ICYmIGZvY3VzZWRJbmRleCA8IGxhc3RJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgICAgICBpZiAoIWV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmb2N1cyh0aGlzLmJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKHRoaXMuYnV0dG9ucy5maWx0ZXIoKF9jdXJyZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IGZvY3VzZWRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLkFycm93TGVmdCAmJiBmb2N1c2VkSW5kZXggPiBmaXJzdEluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgICAgIGlmICghZXZlbnRBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZvY3VzKHRoaXMuYnV0dG9ucy50b0FycmF5KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXModGhpcy5idXR0b25zLmZpbHRlcigoX2N1cnJlbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gZm9jdXNlZEluZGV4IC0gMTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGVhY3RpdmF0ZShidXR0b25zKSB7XG4gICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBidXR0b24uc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSh0YWJpbmRleCwgXCItMVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFjdGl2YXRlKGJ1dHRvbnMpIHtcbiAgICAgICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICAgICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUodGFiaW5kZXgsIFwiMFwiKTtcbiAgICAgICAgICAgIGJ1dHRvbi5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVmb2N1cyhidXR0b25zKSB7XG4gICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBidXR0b24uc2V0QXR0cmlidXRlKHRhYmluZGV4LCBcIi0xXCIpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZm9jdXMoYnV0dG9ucykge1xuICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgYnV0dG9uLnNldEF0dHJpYnV0ZSh0YWJpbmRleCwgXCIwXCIpO1xuICAgICAgICAgICAgYnV0dG9uLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2ZXJpZnlTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGlvblNpbmdsZSgpICYmIHRoaXMuYnV0dG9ucy5maWx0ZXIoYnV0dG9uID0+IGJ1dHRvbi5zZWxlY3RlZCkubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGF2aW5nIG11bHRpcGxlIHNlbGVjdGVkIGJ1dHRvbnMgd2l0aCBzaW5nbGUgc2VsZWN0aW9uIG1vZGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzU2VsZWN0aW9uU2luZ2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24gPT09ICdzaW5nbGUnO1xuICAgIH1cbn1cbkJ1dHRvbkdyb3VwQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0J1dHRvbkdyb3VwJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgS2VuZG9CdXR0b25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uYnV0dG9uZ3JvdXAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tYnV0dG9uZ3JvdXAnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltrZW5kb0J1dHRvbl1cIj48L25nLWNvbnRlbnQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5CdXR0b25Hcm91cENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEtlbmRvQnV0dG9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9XG5dO1xuQnV0dG9uR3JvdXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2Rpc2FibGVkJyxdIH1dLFxuICAgIHNlbGVjdGlvbjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnc2VsZWN0aW9uJyxdIH1dLFxuICAgIHdpZHRoOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWyd3aWR0aCcsXSB9XSxcbiAgICBsb29rOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbmF2aWdhdGU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBidXR0b25zOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtCdXR0b25EaXJlY3RpdmUsXSB9XSxcbiAgICB3cmFwcGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uLWdyb3VwJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgc3RyZXRjaGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uLWdyb3VwLXN0cmV0Y2hlZCcsXSB9XSxcbiAgICBpc0ZsYXQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYnV0dG9uLWdyb3VwLWZsYXQnLF0gfV0sXG4gICAgaXNCYXJlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1ncm91cC1iYXJlJyxdIH1dLFxuICAgIGlzT3V0bGluZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1idXR0b24tZ3JvdXAtb3V0bGluZScsXSB9XSxcbiAgICBnZXRSb2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgZGlyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBhcmlhRGlzYWJsZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1kaXNhYmxlZCcsXSB9XSxcbiAgICB3cmFwcGVyV2lkdGg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLndpZHRoJyxdIH1dLFxuICAgIHdyYXBwZXJUYWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50YWJpbmRleCcsXSB9XSxcbiAgICBrZXlkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5ZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgZm9jdXNvdXQ6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydmb2N1c291dCcsIFsnJGV2ZW50J10sXSB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlcyddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIEJ1dHRvbiBkaXJlY3RpdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgQnV0dG9uIG1vZHVsZVxuICogaW1wb3J0IHsgQnV0dG9uTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9ucyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIEJ1dHRvbk1vZHVsZV0sIC8vIGltcG9ydCBCdXR0b24gbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBCdXR0b25Nb2R1bGUge1xufVxuQnV0dG9uTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtCdXR0b25EaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtCdXR0b25EaXJlY3RpdmVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFRoZSBleHBvcnRlZCBwYWNrYWdlIG1vZHVsZS5cbiAqXG4gKiBUaGUgcGFja2FnZSBleHBvcnRzOlxuICogLSBgQnV0dG9uR3JvdXBDb21wb25lbnRgJm1kYXNoO1RoZSBCdXR0b25Hcm91cENvbXBvbmVudCBjb21wb25lbnQgY2xhc3MuXG4gKi9cbmNsYXNzIEJ1dHRvbkdyb3VwTW9kdWxlIHtcbn1cbkJ1dHRvbkdyb3VwTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtCdXR0b25Hcm91cENvbXBvbmVudF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0J1dHRvbkdyb3VwQ29tcG9uZW50XSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBCdXR0b25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOmRpcmVjdGl2ZS1zZWxlY3Rvci1uYW1lICovXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgbGlzdCBpdGVtIGNvbnRlbnQuXG4gKlxuICogVG8gZGVmaW5lIHRoZSBpdGVtIHRlbXBsYXRlLCBuZXN0IGEgYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG88Q29tcG9uZW50TmFtZT5JdGVtVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuXG4gKlxuICogRm9yIHRoZSBEcm9wRG93bkJ1dHRvbiwgdXNlIHRoZSBga2VuZG9Ecm9wRG93bkJ1dHRvbkl0ZW1UZW1wbGF0ZWAgZGlyZWN0aXZlLlxuICogRm9yIHRoZSBTcGxpdEJ1dHRvbiwgdXNlIHRoZSBga2VuZG9TcGxpdEJ1dHRvbkl0ZW1UZW1wbGF0ZWAgZGlyZWN0aXZlLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRhIGl0ZW0sIHVzZSB0aGUgYGxldC1kYXRhSXRlbWAgZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tc3BsaXRidXR0b24gW2RhdGFdPVwibGlzdEl0ZW1zXCI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9TcGxpdEJ1dHRvbkl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gKiAgICAgIDxzcGFuPnt7ZGF0YUl0ZW19fSBvcHRpb248L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tc3BsaXRidXR0b24+XG4gKiAgPGtlbmRvLWRyb3Bkb3duYnV0dG9uIFtkYXRhXT1cImxpc3RJdGVtc1wiPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvRHJvcERvd25CdXR0b25JdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICA8c3Bhbj57e2RhdGFJdGVtfX0gb3B0aW9uPC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWRyb3Bkb3duYnV0dG9uPlxuICogYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBsaXN0SXRlbXM6IEFycmF5PGFueT4gPSBbe1xuICogICAgICB0ZXh0OiAnaXRlbTEnLFxuICogICAgICBpY29uOiAncmVmcmVzaCcsXG4gKiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAqICAgICAgY2xpY2s6IChkYXRhSXRlbTogYW55KSA9PiB7XG4gKiAgICAgICAgICAvL2FjdGlvblxuICogICAgICB9XG4gKiAgfSwge1xuICogICAgICB0ZXh0OiAnaXRlbTInLFxuICogICAgICBpY29uOiAncmVmcmVzaCcsXG4gKiAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAqICAgICAgY2xpY2s6IChkYXRhSXRlbTogYW55KSA9PiB7XG4gKiAgICAgICAgICAvL2FjdGlvblxuICogICAgICB9XG4gKiAgfV1cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiB0aGUgW0Ryb3BEb3duTGlzdCB0ZW1wbGF0ZXNdKHslIHNsdWcgb3ZlcnZpZXdfZGRsICV9I3RlbXBsYXRlcykuXG4gKi9cbmNsYXNzIEJ1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkJ1dHRvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJvcERvd25CdXR0b25JdGVtVGVtcGxhdGVdLFtrZW5kb1NwbGl0QnV0dG9uSXRlbVRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQnV0dG9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLm9uSXRlbUJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIGdldFRleHQoZGF0YUl0ZW0pIHtcbiAgICAgICAgaWYgKGRhdGFJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0RmllbGQgPyBkYXRhSXRlbVt0aGlzLnRleHRGaWVsZF0gOiBkYXRhSXRlbS50ZXh0IHx8IGRhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldEljb25DbGFzc2VzKGRhdGFJdGVtKSB7XG4gICAgICAgIGNvbnN0IGljb24gPSBkYXRhSXRlbS5pY29uID8gJ2staWNvbiBrLWktJyArIGRhdGFJdGVtLmljb24gOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSB7fTtcbiAgICAgICAgY2xhc3Nlc1tpY29uIHx8IGRhdGFJdGVtLmljb25DbGFzc10gPSB0cnVlO1xuICAgICAgICByZXR1cm4gY2xhc3NlcztcbiAgICB9XG4gICAgb25DbGljayhpbmRleCkge1xuICAgICAgICB0aGlzLm9uSXRlbUNsaWNrLmVtaXQoaW5kZXgpO1xuICAgIH1cbiAgICBvbkJsdXIoKSB7XG4gICAgICAgIHRoaXMub25JdGVtQmx1ci5lbWl0KCk7XG4gICAgfVxufVxuTGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tYnV0dG9uLWxpc3QnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDx1bCBjbGFzcz1cImstbGlzdCBrLXJlc2V0XCIgdW5zZWxlY3RhYmxlPVwib25cIj5cbiAgICAgICAgICAgIDxsaSByb2xlPVwibWVudWl0ZW1cIiB1bnNlbGVjdGFibGU9XCJvblwiIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIGtlbmRvQnV0dG9uRm9jdXNhYmxlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGFJdGVtIG9mIGRhdGE7IGxldCBpbmRleCA9IGluZGV4O1wiXG4gICAgICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2staXRlbSc6IHRydWUsICdrLXN0YXRlLWRpc2FibGVkJzogZGF0YUl0ZW0uZGlzYWJsZWR9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljayhpbmRleClcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRhdGFJdGVtLmRpc2FibGVkID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXRlbVRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGl0ZW1UZW1wbGF0ZT8udGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGRhdGFJdGVtXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXRlbVRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhSXRlbS5pY29uIHx8IGRhdGFJdGVtLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRJY29uQ2xhc3NlcyhkYXRhSXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGFJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1pbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImRhdGFJdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0VGV4dChkYXRhSXRlbSkgfX1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkxpc3RDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGV4dEZpZWxkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpdGVtVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9uSXRlbUNsaWNrOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb25JdGVtQmx1cjogW3sgdHlwZTogT3V0cHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRm9jdXNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBpc0ZvY3VzZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSB0aGlzLmZvY3VzZWQ7XG4gICAgfVxuICAgIGZvY3VzKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmlzRm9jdXNlZChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzZWQgPSBpbmRleDtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoaW5kZXgpO1xuICAgIH1cbiAgICByZXNldEZvY3VzKCkge1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSAtMTtcbiAgICB9XG4gICAgZ2V0IGZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzZWRJbmRleDtcbiAgICB9XG4gICAgc2V0IGZvY3VzZWQoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoaW5kZXgpO1xuICAgIH1cbn1cbkZvY3VzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZvY3VzYWJsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZm9jdXNTZXJ2aWNlLCBlbGVtZW50UmVmKSB7XG4gICAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlID0gZm9jdXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuICAgIGdldCBmb2N1c2VkQ2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c1NlcnZpY2UuaXNGb2N1c2VkKHRoaXMuaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVFdmVudHMoKTtcbiAgICB9XG4gICAgc3Vic2NyaWJlRXZlbnRzKCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24gPSB0aGlzLmZvY3VzU2VydmljZS5vbkZvY3VzLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9jdXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkZvY3VzYWJsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQnV0dG9uRm9jdXNhYmxlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRm9jdXNhYmxlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRm9jdXNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5Gb2N1c2FibGVEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWRDbGFzc05hbWU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZm9jdXNlZCcsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3Iodmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSB2aWV3Q29udGFpbmVyUmVmO1xuICAgIH1cbiAgICBzZXQgdGVtcGxhdGVDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0ZWRWaWV3UmVmKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYucmVtb3ZlKHRoaXMudmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMuaW5zZXJ0ZWRWaWV3UmVmKSk7XG4gICAgICAgICAgICB0aGlzLmluc2VydGVkVmlld1JlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29udGV4dC50ZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRlZFZpZXdSZWYgPSB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KGNvbnRleHQudGVtcGxhdGVSZWYsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxufVxuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdbdGVtcGxhdGVDb250ZXh0XScgLy8gdHNsaW50OmRpc2FibGUtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiB9XG5dO1xuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRlbXBsYXRlQ29udGV4dDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IEVYUE9SVEVEX0RJUkVDVElWRVMgPSBbXG4gICAgTGlzdENvbXBvbmVudCxcbiAgICBGb2N1c2FibGVEaXJlY3RpdmUsXG4gICAgQnV0dG9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMaXN0TW9kdWxlIHtcbn1cbkxpc3RNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0VYUE9SVEVEX0RJUkVDVElWRVNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtFWFBPUlRFRF9ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEtleUV2ZW50cztcbihmdW5jdGlvbiAoS2V5RXZlbnRzKSB7XG4gICAgS2V5RXZlbnRzW0tleUV2ZW50c1tcImtleWRvd25cIl0gPSAwXSA9IFwia2V5ZG93blwiO1xuICAgIEtleUV2ZW50c1tLZXlFdmVudHNbXCJrZXlwcmVzc1wiXSA9IDFdID0gXCJrZXlwcmVzc1wiO1xuICAgIEtleUV2ZW50c1tLZXlFdmVudHNbXCJrZXl1cFwiXSA9IDJdID0gXCJrZXl1cFwiO1xufSkoS2V5RXZlbnRzIHx8IChLZXlFdmVudHMgPSB7fSkpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIE5hdmlnYXRpb25BY3Rpb247XG4oZnVuY3Rpb24gKE5hdmlnYXRpb25BY3Rpb24pIHtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJVbmRlZmluZWRcIl0gPSAwXSA9IFwiVW5kZWZpbmVkXCI7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiT3BlblwiXSA9IDFdID0gXCJPcGVuXCI7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiQ2xvc2VcIl0gPSAyXSA9IFwiQ2xvc2VcIjtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJFbnRlclwiXSA9IDNdID0gXCJFbnRlclwiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIkVudGVyUHJlc3NcIl0gPSA0XSA9IFwiRW50ZXJQcmVzc1wiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIkVudGVyVXBcIl0gPSA1XSA9IFwiRW50ZXJVcFwiO1xuICAgIE5hdmlnYXRpb25BY3Rpb25bTmF2aWdhdGlvbkFjdGlvbltcIlRhYlwiXSA9IDZdID0gXCJUYWJcIjtcbiAgICBOYXZpZ2F0aW9uQWN0aW9uW05hdmlnYXRpb25BY3Rpb25bXCJFc2NcIl0gPSA3XSA9IFwiRXNjXCI7XG4gICAgTmF2aWdhdGlvbkFjdGlvbltOYXZpZ2F0aW9uQWN0aW9uW1wiTmF2aWdhdGVcIl0gPSA4XSA9IFwiTmF2aWdhdGVcIjtcbn0pKE5hdmlnYXRpb25BY3Rpb24gfHwgKE5hdmlnYXRpb25BY3Rpb24gPSB7fSkpO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpkZXByZWNhdGlvbiAqL1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExpc3RCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGZvY3VzU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UsIHdyYXBwZXJSZWYsIF96b25lLCBsb2NhbGl6YXRpb24sIGNkcikge1xuICAgICAgICB0aGlzLmZvY3VzU2VydmljZSA9IGZvY3VzU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLndyYXBwZXJSZWYgPSB3cmFwcGVyUmVmO1xuICAgICAgICB0aGlzLl96b25lID0gX3pvbmU7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLl9vcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0geyBhbmltYXRlOiB0cnVlLCBwb3B1cENsYXNzOiAnJyB9O1xuICAgICAgICB0aGlzLmxpc3RJZCA9IGd1aWQoKTtcbiAgICAgICAgdGhpcy5faXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9jdXNTZXJ2aWNlID0gZm9jdXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IHdyYXBwZXJSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSBsb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+ICh0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cicpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwQ2xhc3NlcygpIHtcbiAgICAgICAgY29uc3QgcG9wdXBDbGFzc2VzID0gWydrLWxpc3QtY29udGFpbmVyJywgJ2stcmVzZXQnLCAnay1ncm91cCddO1xuICAgICAgICBpZiAodGhpcy5fcG9wdXBTZXR0aW5ncy5wb3B1cENsYXNzKSB7XG4gICAgICAgICAgICBwb3B1cENsYXNzZXMucHVzaCh0aGlzLl9wb3B1cFNldHRpbmdzLnBvcHVwQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1cENsYXNzZXMuam9pbignICcpO1xuICAgIH1cbiAgICBnZXQgb3BlblN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgICB9XG4gICAgc2V0IG9wZW5TdGF0ZShvcGVuKSB7XG4gICAgICAgIHRoaXMuX29wZW4gPSBvcGVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCkge1xuICAgICAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5TdGF0ZSA9ICF0aGlzLm9wZW5TdGF0ZTtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXMoLTEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkl0ZW1DbGljayhpbmRleCkge1xuICAgICAgICB0aGlzLmVtaXRJdGVtQ2xpY2tIYW5kbGVyKGluZGV4KTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzV3JhcHBlcigpLCAxKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVFdmVudHMoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZm9jdXNGaXJzdFRpbWVvdXQpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdWJzY3JpYmVFdmVudHMoKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVMaXN0SXRlbUZvY3VzRXZlbnQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVDb21wb25lbnRCbHVycmVkRXZlbnQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVOYXZpZ2F0aW9uRXZlbnRzKCk7XG4gICAgfVxuICAgIHN1YnNjcmliZUxpc3RJdGVtRm9jdXNFdmVudCgpIHtcbiAgICAgICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9jdXNTZXJ2aWNlLm9uRm9jdXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdWJzY3JpYmVDb21wb25lbnRCbHVycmVkRXZlbnQoKSB7XG4gICAgICAgIHRoaXMuX3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJTdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnRhYi5waXBlKGZpbHRlcigoKSA9PiB0aGlzLl9pc0ZvY3VzZWQpKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVUYWIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudEJsdXJyZWRTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQoZG9jdW1lbnQsICdjbGljaycpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gIXRoaXMud3JhcHBlckNvbnRhaW5zKGV2ZW50LnRhcmdldCkpLCBmaWx0ZXIoKCkgPT4gdGhpcy5faXNGb2N1c2VkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3pvbmUucnVuKCgpID0+IHRoaXMuYmx1cldyYXBwZXIoKSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3Vic2NyaWJlTmF2aWdhdGlvbkV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZS5zdWJzY3JpYmUodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXMuYmluZCh0aGlzLmZvY3VzU2VydmljZSkpO1xuICAgICAgICB0aGlzLmVudGVyVXBTdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVudGVydXAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXJIYW5kbGVyKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzV3JhcHBlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5vcGVuLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdEl0ZW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNXcmFwcGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNsb3NlU3Vic2NyaXB0aW9uID0gbWVyZ2UodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jbG9zZSwgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5lc2MpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmZvY3VzV3JhcHBlcigpKTtcbiAgICB9XG4gICAgZW50ZXJIYW5kbGVyKCkgeyB9IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICB1bnN1YnNjcmliZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMuY29tcG9uZW50Qmx1cnJlZFN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5mb2N1c1N1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5uYXZpZ2F0aW9uU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzLmVudGVyUHJlc3NTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKHRoaXMuZW50ZXJVcFN1YnNjcmlwdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUodGhpcy5vcGVuU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzLmNsb3NlU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSh0aGlzLnRhYlN1YnNjcmlwdGlvbik7XG4gICAgfVxuICAgIHVuc3Vic2NyaWJlKHN1YnNjcmlwdGlvbikge1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5RG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXlIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleVByZXNzSGFuZGxlcihldmVudCkge1xuICAgICAgICB0aGlzLmtleUhhbmRsZXIoZXZlbnQsIEtleUV2ZW50cy5rZXlwcmVzcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXlVcEhhbmRsZXIoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5rZXlIYW5kbGVyKGV2ZW50LCBLZXlFdmVudHMua2V5dXApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5SGFuZGxlcihldmVudCwga2V5RXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZvY3VzZWQgPSB0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkIHx8IDA7XG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnByb2Nlc3Moe1xuICAgICAgICAgICAgYWx0S2V5OiBldmVudERhdGEuYWx0S2V5LFxuICAgICAgICAgICAgY3VycmVudDogZm9jdXNlZCxcbiAgICAgICAgICAgIGtleUNvZGU6IGV2ZW50RGF0YS5rZXlDb2RlLFxuICAgICAgICAgICAga2V5RXZlbnQ6IGtleUV2ZW50LFxuICAgICAgICAgICAgbWF4OiB0aGlzLl9kYXRhID8gdGhpcy5fZGF0YS5sZW5ndGggLSAxIDogMCxcbiAgICAgICAgICAgIG1pbjogMFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFjdGlvbiAhPT0gTmF2aWdhdGlvbkFjdGlvbi5VbmRlZmluZWQgJiZcbiAgICAgICAgICAgIGFjdGlvbiAhPT0gTmF2aWdhdGlvbkFjdGlvbi5UYWIgJiZcbiAgICAgICAgICAgIChhY3Rpb24gIT09IE5hdmlnYXRpb25BY3Rpb24uRW50ZXIgfHwgKGFjdGlvbiA9PT0gTmF2aWdhdGlvbkFjdGlvbi5FbnRlciAmJiB0aGlzLl9vcGVuKSkpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLlNwYWNlICYmIGFjdGlvbiA9PT0gTmF2aWdhdGlvbkFjdGlvbi5FbnRlclVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXZlbnREYXRhLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEl0ZW1DbGlja0hhbmRsZXIoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgZGF0YUl0ZW0gPSB0aGlzLl9kYXRhW2luZGV4XTtcbiAgICAgICAgaWYgKHRoaXMuX2l0ZW1DbGljaykge1xuICAgICAgICAgICAgdGhpcy5faXRlbUNsaWNrLmVtaXQoZGF0YUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhSXRlbSAmJiBkYXRhSXRlbS5jbGljayAmJiAhZGF0YUl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGFJdGVtLmNsaWNrKGRhdGFJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb2N1c0ZpcnN0SXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RhdGEgJiYgaXNQcmVzZW50KHRoaXMuX2RhdGFbMF0pKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzRmlyc3RUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzU2VydmljZS5mb2N1cygwKSwgMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNXcmFwcGVyKCkge1xuICAgICAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNCdXR0b24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB3cmFwcGVyQ29udGFpbnMoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy53cmFwcGVyID09PSBlbGVtZW50IHx8IHRoaXMud3JhcHBlci5jb250YWlucyhlbGVtZW50KTtcbiAgICB9XG4gICAgYmx1cldyYXBwZXIoZW1pdCA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIGlmIChlbWl0KSB7XG4gICAgICAgICAgICB0aGlzLl9ibHVyLmVtaXQoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvY3VzQnV0dG9uKCkge1xuICAgICAgICBpZiAodGhpcy5idXR0b24pIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVUYWIoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNCdXR0b24oKTtcbiAgICAgICAgdGhpcy5ibHVyV3JhcHBlcihmYWxzZSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTkFWSUdBVElPTl9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ25hdmlnYXRpb24uY29uZmlnJyk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5lbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5lbnRlcnByZXNzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmVudGVydXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmVzYyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy51c2VMZWZ0UmlnaHRBcnJvd3MgPSBjb25maWcudXNlTGVmdFJpZ2h0QXJyb3dzO1xuICAgIH1cbiAgICBwcm9jZXNzKGFyZ3MpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGFyZ3Mua2V5Q29kZTtcbiAgICAgICAgY29uc3Qga2V5RXZlbnQgPSBhcmdzLmtleUV2ZW50O1xuICAgICAgICBsZXQgaW5kZXg7XG4gICAgICAgIGxldCBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLlVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGtleUV2ZW50ID09PSBLZXlFdmVudHMua2V5cHJlc3MpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRW50ZXIoa2V5Q29kZSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLkVudGVyUHJlc3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5RXZlbnQgPT09IEtleUV2ZW50cy5rZXl1cCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFbnRlcihrZXlDb2RlKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uRW50ZXJVcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChhcmdzLmFsdEtleSAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93RG93bikge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uT3BlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3MuYWx0S2V5ICYmIGtleUNvZGUgPT09IEtleXMuQXJyb3dVcCkge1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uQ2xvc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmlzRW50ZXIoa2V5Q29kZSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLkVudGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24gPSBOYXZpZ2F0aW9uQWN0aW9uLkVzYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleUNvZGUgPT09IEtleXMuVGFiKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5UYWI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93VXAgfHwgKHRoaXMudXNlTGVmdFJpZ2h0QXJyb3dzICYmIGtleUNvZGUgPT09IEtleXMuQXJyb3dMZWZ0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gdGhpcy5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudDogYXJncy5jdXJyZW50LFxuICAgICAgICAgICAgICAgICAgICBzdGFydDogYXJncy5tYXgsXG4gICAgICAgICAgICAgICAgICAgIGVuZDogYXJncy5taW4sXG4gICAgICAgICAgICAgICAgICAgIHN0ZXA6IC0xXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWN0aW9uID0gTmF2aWdhdGlvbkFjdGlvbi5OYXZpZ2F0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleUNvZGUgPT09IEtleXMuQXJyb3dEb3duIHx8ICh0aGlzLnVzZUxlZnRSaWdodEFycm93cyAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93UmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSB0aGlzLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50OiBhcmdzLmN1cnJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBhcmdzLm1pbixcbiAgICAgICAgICAgICAgICAgICAgZW5kOiBhcmdzLm1heCxcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFjdGlvbiA9IE5hdmlnYXRpb25BY3Rpb24uTmF2aWdhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbiAhPT0gTmF2aWdhdGlvbkFjdGlvbi5VbmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXNbTmF2aWdhdGlvbkFjdGlvblthY3Rpb25dLnRvTG93ZXJDYXNlKCldLmVtaXQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgfVxuICAgIGlzRW50ZXIoa2V5Q29kZSkge1xuICAgICAgICByZXR1cm4ga2V5Q29kZSA9PT0gS2V5cy5FbnRlciB8fCBrZXlDb2RlID09PSBLZXlzLlNwYWNlO1xuICAgIH1cbiAgICBuZXh0KGFyZ3MpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoYXJncy5jdXJyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Muc3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5jdXJyZW50ICE9PSBhcmdzLmVuZCA/IGFyZ3MuY3VycmVudCArIGFyZ3Muc3RlcCA6IGFyZ3MuZW5kO1xuICAgICAgICB9XG4gICAgfVxufVxuTmF2aWdhdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk5hdmlnYXRpb25TZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtOQVZJR0FUSU9OX0NPTkZJRyxdIH1dIH1cbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlciAqL1xuY29uc3QgTkFWSUdBVElPTl9TRVRUSU5HUyA9IHtcbiAgICB1c2VMZWZ0UmlnaHRBcnJvd3M6IHRydWVcbn07XG5jb25zdCDJtTAgPSBOQVZJR0FUSU9OX1NFVFRJTkdTO1xuY29uc3QgTkFWSUdBVElPTl9TRVRUSU5HU19QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBOQVZJR0FUSU9OX0NPTkZJRyxcbiAgICB1c2VWYWx1ZTogybUwXG59O1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBLZW5kbyBVSSBTcGxpdEJ1dHRvbiBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1zcGxpdGJ1dHRvbiBbZGF0YV09XCJkYXRhXCIgW2ljb25dPVwiJ3Bhc3RlJ1wiXG4gKiAgICAgIChpdGVtQ2xpY2spPVwib25TcGxpdEJ1dHRvbkl0ZW1DbGljaygkZXZlbnQpXCJcbiAqICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uU3BsaXRCdXR0b25DbGljaygpXCI+UGFzdGU8L2tlbmRvLXNwbGl0YnV0dG9uPlxuICogYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogQXJyYXk8YW55PiA9IFt7XG4gKiAgICAgICB0ZXh0OiAnS2VlcCBUZXh0IE9ubHknLFxuICogICAgICAgaWNvbjogJ3Bhc3RlLXBsYWluLXRleHQnLFxuICogICAgICAgY2xpY2s6ICgpID0+IHsgY29uc29sZS5sb2coJ0tlZXAgVGV4dCBPbmx5IGNsaWNrIGhhbmRsZXInKTsgfVxuICogICB9LCB7XG4gKiAgICAgICB0ZXh0OiAnUGFzdGUgYXMgSFRNTCcsXG4gKiAgICAgICBpY29uOiAncGFzdGUtYXMtaHRtbCdcbiAqICAgfSwge1xuICogICAgICAgdGV4dDogJ1Bhc3RlIE1hcmtkb3duJyxcbiAqICAgICAgIGljb246ICdwYXN0ZS1tYXJrZG93bidcbiAqICAgfSwge1xuICogICAgICAgdGV4dDogJ1NldCBEZWZhdWx0IFBhc3RlJ1xuICogICB9XTtcbiAqXG4gKiAgIHB1YmxpYyBvblNwbGl0QnV0dG9uQ2xpY2soZGF0YUl0ZW06IGFueSk6IHZvaWQge1xuICogICAgICAgY29uc29sZS5sb2coJ1Bhc3RlJyk7XG4gKiAgIH1cbiAqXG4gKiAgIHB1YmxpYyBvblNwbGl0QnV0dG9uSXRlbUNsaWNrKGRhdGFJdGVtOiBhbnkpOiB2b2lkIHtcbiAqICAgICAgIGlmIChkYXRhSXRlbSkge1xuICogICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGFJdGVtLnRleHQpO1xuICogICAgICAgfVxuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgU3BsaXRCdXR0b25Db21wb25lbnQgZXh0ZW5kcyBMaXN0QnV0dG9uIHtcbiAgICBjb25zdHJ1Y3Rvcihmb2N1c1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCB3cmFwcGVyUmVmLCB6b25lLCBwb3B1cFNlcnZpY2UsIGVsUmVmLCBsb2NhbGl6YXRpb24sIGNkcikge1xuICAgICAgICBzdXBlcihmb2N1c1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCB3cmFwcGVyUmVmLCB6b25lLCBsb2NhbGl6YXRpb24sIGNkcik7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsUmVmID0gZWxSZWY7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSB0ZXh0IG9mIHRoZSBTcGxpdEJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGV4dCA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyBhbiBpY29uIHRvIGJlIHJlbmRlcmVkIG5leHQgdG8gdGhlIGJ1dHRvbiB0ZXh0XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfc3BsaXRidXR0b24gJX0jdG9jLWFycmF5cy1vZi1jb21wbGV4LWRhdGEpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWNvbiA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyBhbiBpY29uIHdpdGggYSBjdXN0b20gQ1NTIGNsYXNzIHRvIGJlIHJlbmRlcmVkIG5leHQgdG8gdGhlIGJ1dHRvbiB0ZXh0XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfc3BsaXRidXR0b24gJX0jdG9jLWFycmF5cy1vZi1jb21wbGV4LWRhdGEpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBsb2NhdGlvbiBvZiBhbiBpbWFnZSB0byBiZSBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgYnV0dG9uIHRleHRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRhYmluZGluZ19zcGxpdGJ1dHRvbiAlfSN0b2MtYXJyYXlzLW9mLWNvbXBsZXgtZGF0YSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbWFnZVVybCA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2hhbmdlcyB0aGUgdmlzdWFsIGFwcGVhcmFuY2UgYnkgdXNpbmcgYWx0ZXJuYXRpdmUgc3R5bGluZyBvcHRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogYGZsYXRgXG4gICAgICAgICAqICogYG91dGxpbmVgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvb2sgPSAnZGVmYXVsdCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiSW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJJbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIFtmb250IGljb25dKHslIHNsdWcgaWNvbnMgJX0jdG9jLWxpc3Qtb2YtZm9udC1pY29ucykgdGhhdCB3aWxsXG4gICAgICAgICAqIGJlIHJlbmRlcmVkIGZvciB0aGUgYnV0dG9uIHdoaWNoIG9wZW5zIHRoZSBwb3B1cC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXJyb3dCdXR0b25JY29uID0gJ2Fycm93LXMnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGNsaWNrcyB0aGUgbWFpbiBidXR0b24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgICAgICAgPGtlbmRvLXNwbGl0YnV0dG9uIChidXR0b25DbGljayk9XCJvblNwbGl0QnV0dG9uQ2xpY2soKVwiIFtkYXRhXT1cImRhdGFcIj5cbiAgICAgICAgICogICAgICAgICAgICBSZXBseVxuICAgICAgICAgKiAgICAgICAgPC9rZW5kby1zcGxpdGJ1dHRvbj5cbiAgICAgICAgICogICAgYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgICBwdWJsaWMgZGF0YTogQXJyYXk8YW55PiA9IFsnUmVwbHkgQWxsJywgJ0ZvcndhcmQnLCAnUmVwbHkgJiBEZWxldGUnXTtcbiAgICAgICAgICpcbiAgICAgICAgICogICAgcHVibGljIG9uU3BsaXRCdXR0b25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZygnU3BsaXRCdXR0b24gY2xpY2snKTtcbiAgICAgICAgICogICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5idXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBjbGlja3Mgb24gdGhlIGRyb3AtZG93biBsaXN0LiBUaGUgZXZlbnQgZGF0YSBjb250YWlucyB0aGUgZGF0YSBpdGVtIGJvdW5kIHRvIHRoZSBjbGlja2VkIGxpc3QgaXRlbS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgICAgICAgPGtlbmRvLXNwbGl0YnV0dG9uIChpdGVtQ2xpY2spPVwib25TcGxpdEJ1dHRvbkl0ZW1DbGljaygkZXZlbnQpXCIgW2RhdGFdPVwiZGF0YVwiPlxuICAgICAgICAgKiAgICAgICAgICBSZXBseVxuICAgICAgICAgKiAgICAgIDwva2VuZG8tc3BsaXRidXR0b24+XG4gICAgICAgICAqICAgIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICAgcHVibGljIGRhdGE6IEFycmF5PGFueT4gPSBbJ1JlcGx5IEFsbCcsICdGb3J3YXJkJywgJ1JlcGx5ICYgRGVsZXRlJ107XG4gICAgICAgICAqXG4gICAgICAgICAqICAgcHVibGljIG9uU3BsaXRCdXR0b25JdGVtQ2xpY2soZGF0YUl0ZW0/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgICogICAgICAgIGlmIChkYXRhSXRlbSkge1xuICAgICAgICAgKiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGFJdGVtKTtcbiAgICAgICAgICogICAgICAgfVxuICAgICAgICAgKiAgICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLml0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgU3BsaXRCdXR0b24gZ2V0cyBmb2N1c2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBTcGxpdEJ1dHRvbiBnZXRzIGJsdXJyZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gb3Blbi5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBjbG9zZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIGNsb3NlLlxuICAgICAgICAgKiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLiBJZiB5b3UgY2FuY2VsIHRoZSBldmVudCwgdGhlIHBvcHVwIHdpbGwgcmVtYWluIG9wZW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmxpc3RJZCA9IGd1aWQoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlQXJyb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gJyc7XG4gICAgICAgIHRoaXMubG9ja0ZvY3VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2l0ZW1DbGljayA9IHRoaXMuaXRlbUNsaWNrO1xuICAgICAgICB0aGlzLl9ibHVyID0gdGhpcy5vbkJsdXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZGlzYWJsZXMgYSBTcGxpdEJ1dHRvbiBpdGVtXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRhYmluZGluZ19zcGxpdGJ1dHRvbiAlfSN0b2MtYXJyYXlzLW9mLWNvbXBsZXgtZGF0YSkpLlxuICAgICAqL1xuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgcG9wdXAgb2YgdGhlIFNwbGl0QnV0dG9uLlxuICAgICAqXG4gICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgKiAtIGBhbmltYXRlOiBCb29sZWFuYCZtZGFzaDtDb250cm9scyB0aGUgcG9wdXAgYW5pbWF0aW9uLiBCeSBkZWZhdWx0LCB0aGUgb3BlbiBhbmQgY2xvc2UgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZC5cbiAgICAgKiAtIGBwb3B1cENsYXNzOiBTdHJpbmdgJm1kYXNoO1NwZWNpZmllcyBhIGxpc3Qgb2YgQ1NTIGNsYXNzZXMgdGhhdCBhcmUgdXNlZCB0byBzdHlsZSB0aGUgcG9wdXAuXG4gICAgICogLSBgYXBwZW5kVG86IFwicm9vdFwiIHwgXCJjb21wb25lbnRcIiB8IFZpZXdDb250YWluZXJSZWZgJm1kYXNoO1NwZWNpZmllcyB0aGUgY29tcG9uZW50IHRvIHdoaWNoIHRoZSBwb3B1cCB3aWxsIGJlIGFwcGVuZGVkLlxuICAgICAqIC0gYGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCIgfCBcInJpZ2h0XCJgJm1kYXNoO1NwZWNpZmllcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBzZXQgcG9wdXBTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7IGFuaW1hdGU6IHRydWUsIHBvcHVwQ2xhc3M6ICcnIH0sIHNldHRpbmdzKTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFNldHRpbmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRhIG9mIHRoZSBTcGxpdEJ1dHRvbi5cbiAgICAgKlxuICAgICAqID4gVGhlIGRhdGEgaGFzIHRvIGJlIHByb3ZpZGVkIGluIGFuIGFycmF5LWxpa2UgbGlzdC5cbiAgICAgKi9cbiAgICBzZXQgZGF0YShkYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhIHx8IFtdO1xuICAgIH1cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBvcGVuU3RhdGUob3Blbikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uZW1pdChldmVudEFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RvZ2dsZShvcGVuKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBvcGVuU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb21wb25lbnRUYWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMudGFiSW5kZXg7XG4gICAgfVxuICAgIHNldCBpc0ZvY3VzZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faXNGb2N1c2VkID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBpc0ZvY3VzZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0ZvY3VzZWQgJiYgIXRoaXMuX2Rpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgd2lkZ2V0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBkaXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBhcmlhTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmJ1dHRvblRleHR9IHNwbGl0YnV0dG9uYDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQnV0dG9uRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkFycm93QnV0dG9uQ2xpY2soKSB7XG4gICAgICAgIHRoaXMubG9ja0ZvY3VzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvZ2dsZUJ1dHRvbkFjdGl2ZVN0YXRlKGVuYWJsZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBlbmFibGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGVBcnJvd0J1dHRvbkFjdGl2ZVN0YXRlKGVuYWJsZSkge1xuICAgICAgICB0aGlzLmFjdGl2ZUFycm93ID0gZW5hYmxlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25CdXR0b25DbGljaygpIHtcbiAgICAgICAgdGhpcy5sb2NrRm9jdXMgPSB0cnVlO1xuICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQnV0dG9uQmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiAmJiAhdGhpcy5sb2NrRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuYmx1cldyYXBwZXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvY2tGb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudCkge1xuICAgICAgICB0aGlzLmtleURvd25IYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMuU3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50KSB7XG4gICAgICAgIHRoaXMua2V5UHJlc3NIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSAhPT0gS2V5cy5TcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5rZXlVcEhhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uVGV4dCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgndGV4dCcpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlUG9wdXBWaXNpYmlsaXR5KCkge1xuICAgICAgICBzdXBlci50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSAmJiB0aGlzLmxvY2tGb2N1cykge1xuICAgICAgICAgICAgdGhpcy5idXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cmFwcGVyQ29udGFpbnMoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gKHRoaXMud3JhcHBlciA9PT0gZWxlbWVudCB8fCB0aGlzLndyYXBwZXIuY29udGFpbnMoZWxlbWVudCkgfHwgKHRoaXMucG9wdXBSZWYgJiYgdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuY29udGFpbnMoZWxlbWVudCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBhbmNob3JBbGlnbigpIHtcbiAgICAgICAgbGV0IGFsaWduID0geyBob3Jpem9udGFsOiB0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24gfHwgJ2xlZnQnLCB2ZXJ0aWNhbDogJ2JvdHRvbScgfTtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyAmJiAhaXNQcmVzZW50KHRoaXMucG9wdXBTZXR0aW5ncy5hbGlnbikpIHtcbiAgICAgICAgICAgIGFsaWduLmhvcml6b250YWwgPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBwb3B1cEFsaWduKCkge1xuICAgICAgICBsZXQgYWxpZ24gPSB7IGhvcml6b250YWw6IHRoaXMucG9wdXBTZXR0aW5ncy5hbGlnbiB8fCAnbGVmdCcsIHZlcnRpY2FsOiAndG9wJyB9O1xuICAgICAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICdydGwnICYmICFpc1ByZXNlbnQodGhpcy5wb3B1cFNldHRpbmdzLmFsaWduKSkge1xuICAgICAgICAgICAgYWxpZ24uaG9yaXpvbnRhbCA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFsaWduO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBTcGxpdEJ1dHRvbiBjb21wb25lbnQuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgU3BsaXRCdXR0b24gY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5ibHVyV3JhcHBlcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lQb3B1cCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBwb3B1cC5cbiAgICAgKiBJZiB0aGUgYHRvZ2dsZWAgbWV0aG9kIGlzIHVzZWQgdG8gb3BlbiBvciBjbG9zZSB0aGUgcG9wdXAsIHRoZSBgb3BlbmAgYW5kIGBjbG9zZWAgZXZlbnRzIHdpbGwgbm90IGJlIGZpcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIG9wZW4gLSBUaGUgc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHRvZ2dsZShvcGVuKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGljaygoKSA9PiB0aGlzLl90b2dnbGUob3BlbiA9PT0gdW5kZWZpbmVkID8gIXRoaXMuX29wZW4gOiBvcGVuKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgb3BlbiBzdGF0ZSBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZ2V0IGlzT3BlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlblN0YXRlO1xuICAgIH1cbiAgICBlbnRlckhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3BlblN0YXRlKSB7XG4gICAgICAgICAgICBsZXQgZm9jdXNlZCA9IHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KGZvY3VzZWQpICYmIGZvY3VzZWQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0SXRlbUNsaWNrSGFuZGxlcihmb2N1c2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUJ1dHRvblRleHQoKSB7XG4gICAgICAgIGlmIChpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIGxldCBpbm5lclRleHQgPSB0aGlzLndyYXBwZXIuaW5uZXJUZXh0XG4gICAgICAgICAgICAgICAgLnNwbGl0KCdcXG4nKVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICAvL3NldFRpbW91dCBpcyBuZWVkZWQgYmVjYXVzZSBvZiBgRXhwcmVzc2lvbiBoYXMgY2hhbmdlZCBhZnRlciBpdCB3YXMgY2hlY2tlZC5gIGVycm9yO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5idXR0b25UZXh0ID0gaW5uZXJUZXh0KSwgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFwcGVuZFRvKCkge1xuICAgICAgICBjb25zdCB7IGFwcGVuZFRvIH0gPSB0aGlzLnBvcHVwU2V0dGluZ3M7XG4gICAgICAgIGlmICghYXBwZW5kVG8gfHwgYXBwZW5kVG8gPT09ICdyb290Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwZW5kVG8gPT09ICdjb21wb25lbnQnID8gdGhpcy5jb250YWluZXJSZWYgOiBhcHBlbmRUbztcbiAgICB9XG4gICAgX3RvZ2dsZShvcGVuKSB7XG4gICAgICAgIHRoaXMuX29wZW4gPSBvcGVuO1xuICAgICAgICB0aGlzLmRlc3Ryb3lQb3B1cCgpO1xuICAgICAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQb3B1cCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZVBvcHVwKCkge1xuICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3Blbih7XG4gICAgICAgICAgICBhbmNob3I6IHRoaXMuZWxSZWYsXG4gICAgICAgICAgICBhbmNob3JBbGlnbjogdGhpcy5hbmNob3JBbGlnbixcbiAgICAgICAgICAgIGFuaW1hdGU6IHRoaXMucG9wdXBTZXR0aW5ncy5hbmltYXRlLFxuICAgICAgICAgICAgYXBwZW5kVG86IHRoaXMuYXBwZW5kVG8sXG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLnBvcHVwVGVtcGxhdGUsXG4gICAgICAgICAgICBwb3B1cEFsaWduOiB0aGlzLnBvcHVwQWxpZ24sXG4gICAgICAgICAgICBwb3B1cENsYXNzOiB0aGlzLnBvcHVwQ2xhc3Nlc1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUuc3Vic2NyaWJlKCgpID0+ICh0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBPcGVuLnN1YnNjcmliZSh0aGlzLmZvY3VzRmlyc3RJdGVtLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBkZXN0cm95UG9wdXAoKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblNwbGl0QnV0dG9uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1NwbGl0QnV0dG9uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgRm9jdXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTkFWSUdBVElPTl9TRVRUSU5HU19QUk9WSURFUixcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLnNwbGl0YnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXNwbGl0YnV0dG9uJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBrZW5kb0J1dHRvblxuICAgICAgICAgICAgI2J1dHRvblxuICAgICAgICAgICAgcm9sZT1cImxpc3Rib3hcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBbbG9va109XCJsb29rXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJjb21wb25lbnRUYWJJbmRleFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwiaWNvblwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYWN0aXZlXCJcbiAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiaWNvbkNsYXNzXCJcbiAgICAgICAgICAgIFtpbWFnZVVybF09XCJpbWFnZVVybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25CdXR0b25Gb2N1cygpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CdXR0b25CbHVyKClcIlxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJ0b2dnbGVCdXR0b25BY3RpdmVTdGF0ZSh0cnVlKVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJ0b2dnbGVCdXR0b25BY3RpdmVTdGF0ZShmYWxzZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5TdGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImxpc3RJZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IHRleHQgfX08bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBrZW5kb0J1dHRvblxuICAgICAgICAgICAgI2Fycm93QnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWFjdGl2ZV09XCJhY3RpdmVBcnJvd1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwiYXJyb3dCdXR0b25JY29uXCJcbiAgICAgICAgICAgIFtsb29rXT1cImxvb2tcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImFycm93QnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXJyb3dCdXR0b25DbGljaygpXCJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwidG9nZ2xlQXJyb3dCdXR0b25BY3RpdmVTdGF0ZSh0cnVlKVwiXG4gICAgICAgICAgICAobW91c2V1cCk9XCJ0b2dnbGVBcnJvd0J1dHRvbkFjdGl2ZVN0YXRlKGZhbHNlKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwb3B1cFRlbXBsYXRlPlxuICAgICAgICAgICAgPGtlbmRvLWJ1dHRvbi1saXN0XG4gICAgICAgICAgICAgICAgW2lkXT1cImxpc3RJZFwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJ0ZXh0RmllbGRcIlxuICAgICAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAob25JdGVtQ2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwia2V5RG93bkhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleXByZXNzKT1cImtleVByZXNzSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5dXApPVwia2V5VXBIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpcl09XCJkaXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1idXR0b24tbGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3BsaXRCdXR0b25Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGb2N1c1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblNwbGl0QnV0dG9uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRleHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW1hZ2VVcmw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvb2s6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3B1cFNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGV4dEZpZWxkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBidXR0b25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXJyb3dCdXR0b25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXJyb3dCdXR0b25JY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBidXR0b25DbGljazogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGl0ZW1DbGljazogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIG9wZW46IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGl0ZW1UZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQnV0dG9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgYnV0dG9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYnV0dG9uJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGFycm93QnV0dG9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYXJyb3dCdXR0b24nLCB7IHN0YXRpYzogdHJ1ZSwgcmVhZDogRWxlbWVudFJlZiB9LF0gfV0sXG4gICAgcG9wdXBUZW1wbGF0ZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3BvcHVwVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgY29udGFpbmVyUmVmOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGlzRm9jdXNlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1mb2N1c2VkJyxdIH1dLFxuICAgIHdpZGdldENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zcGxpdC1idXR0b24nLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWJ1dHRvbi1ncm91cCcsXSB9XSxcbiAgICBkaXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIGtleWRvd246IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydrZXlkb3duJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIGtleXByZXNzOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5cHJlc3MnLCBbJyRldmVudCddLF0gfV0sXG4gICAga2V5dXA6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydrZXl1cCcsIFsnJGV2ZW50J10sXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBTcGxpdEJ1dHRvbkNvbXBvbmVudGAmbWRhc2g7VGhlIFNwbGl0QnV0dG9uQ29tcG9uZW50IGNvbXBvbmVudCBjbGFzcy5cbiAqL1xuY2xhc3MgU3BsaXRCdXR0b25Nb2R1bGUge1xufVxuU3BsaXRCdXR0b25Nb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1NwbGl0QnV0dG9uQ29tcG9uZW50XSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbU3BsaXRCdXR0b25Db21wb25lbnQsIExpc3RNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFBvcHVwTW9kdWxlLCBCdXR0b25Nb2R1bGUsIExpc3RNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlciAqL1xuY29uc3QgTkFWSUdBVElPTl9TRVRUSU5HUyQxID0ge1xuICAgIHVzZUxlZnRSaWdodEFycm93czogdHJ1ZVxufTtcbmNvbnN0IMm1MCQxID0gTkFWSUdBVElPTl9TRVRUSU5HUyQxO1xuY29uc3QgTkFWSUdBVElPTl9TRVRUSU5HU19QUk9WSURFUiQxID0ge1xuICAgIHByb3ZpZGU6IE5BVklHQVRJT05fQ09ORklHLFxuICAgIHVzZVZhbHVlOiDJtTAkMVxufTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgRHJvcERvd25CdXR0b24gY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tZHJvcGRvd25idXR0b24gW2RhdGFdPVwiZGF0YVwiPlxuICogICAgVXNlciBTZXR0aW5nc1xuICogIDwva2VuZG8tZHJvcGRvd25idXR0b24+XG4gKiBgXG4gKiB9KVxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IEFycmF5PGFueT4gPSBbe1xuICogICAgICAgdGV4dDogJ015IFByb2ZpbGUnXG4gKiAgIH0sIHtcbiAqICAgICAgIHRleHQ6ICdGcmllbmQgUmVxdWVzdHMnXG4gKiAgIH0sIHtcbiAqICAgICAgIHRleHQ6ICdBY2NvdW50IFNldHRpbmdzJ1xuICogICB9LCB7XG4gKiAgICAgICB0ZXh0OiAnU3VwcG9ydCdcbiAqICAgfSwge1xuICogICAgICAgdGV4dDogJ0xvZyBPdXQnXG4gKiAgIH1dO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIERyb3BEb3duQnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgTGlzdEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZm9jdXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgd3JhcHBlclJlZiwgem9uZSwgcG9wdXBTZXJ2aWNlLCBlbFJlZiwgbG9jYWxpemF0aW9uLCBjZHIpIHtcbiAgICAgICAgc3VwZXIoZm9jdXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgd3JhcHBlclJlZiwgem9uZSwgbG9jYWxpemF0aW9uLCBjZHIpO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5lbFJlZiA9IGVsUmVmO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBpY29uIGluIGEgS2VuZG8gVUkgdGhlbWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmljb24gPSAnJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGxpc3Qgb2YgQ1NTIGNsYXNzZXMgd2hpY2ggYXJlIHVzZWQgZm9yIHN0eWxpbmcgdGhlIEJ1dHRvbiB3aXRoIGN1c3RvbSBpY29ucy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaWNvbkNsYXNzID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIGEgVVJMIGZvciBzdHlsaW5nIHRoZSBidXR0b24gd2l0aCBhIGN1c3RvbSBpbWFnZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW1hZ2VVcmwgPSAnJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkZHMgdmlzdWFsIHdlaWdodCB0byB0aGUgZGVmYXVsdCBidXR0b24gYW5kIG1ha2VzIGl0IHByaW1hcnkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByaW1hcnkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENoYW5nZXMgdGhlIHZpc3VhbCBhcHBlYXJhbmNlIGJ5IHVzaW5nIGFsdGVybmF0aXZlIHN0eWxpbmcgb3B0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGF2YWlsYWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIGBmbGF0YFxuICAgICAgICAgKiAqIGBvdXRsaW5lYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb29rID0gJ2RlZmF1bHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBbYHRhYkluZGV4YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9HbG9iYWxfYXR0cmlidXRlcy90YWJpbmRleCkgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGNsaWNrcyBvbiBhIGRyb3AtZG93biBsaXN0IGl0ZW0uIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIHRoZSBkYXRhIGl0ZW0gYm91bmQgdG8gdGhlIGNsaWNrZWQgbGlzdCBpdGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBvcGVuLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgRHJvcERvd25CdXR0b24gZ2V0cyBmb2N1c2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBEcm9wRG93bkJ1dHRvbiBnZXRzIGJsdXJyZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgdGhpcy5saXN0SWQgPSBndWlkKCk7XG4gICAgICAgIHRoaXMuX2l0ZW1DbGljayA9IHRoaXMuaXRlbUNsaWNrO1xuICAgICAgICB0aGlzLl9ibHVyID0gdGhpcy5vbkJsdXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIHBvcHVwIG9mIHRoZSBEcm9wRG93bkJ1dHRvbi5cbiAgICAgKlxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICogLSBgYW5pbWF0ZTogQm9vbGVhbmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGFuaW1hdGlvbi4gQnkgZGVmYXVsdCwgdGhlIG9wZW4gYW5kIGNsb3NlIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAgICogLSBgcG9wdXBDbGFzczogU3RyaW5nYCZtZGFzaDtTcGVjaWZpZXMgYSBsaXN0IG9mIENTUyBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgdG8gc3R5bGUgdGhlIHBvcHVwLlxuICAgICAqIC0gYGFwcGVuZFRvOiBcInJvb3RcIiB8IFwiY29tcG9uZW50XCIgfCBWaWV3Q29udGFpbmVyUmVmYCZtZGFzaDtTcGVjaWZpZXMgdGhlIGNvbXBvbmVudCB0byB3aGljaCB0aGUgcG9wdXAgd2lsbCBiZSBhcHBlbmRlZC5cbiAgICAgKiAtIGBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiIHwgXCJyaWdodFwiYCZtZGFzaDtTcGVjaWZpZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgc2V0IHBvcHVwU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oeyBhbmltYXRlOiB0cnVlLCBwb3B1cENsYXNzOiAnJyB9LCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIGdldCBwb3B1cFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBTZXR0aW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIERyb3BEb3duQnV0dG9uLlxuICAgICAqL1xuICAgIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgJiYgdGhpcy5vcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMub3BlblN0YXRlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgZGF0YSBvZiB0aGUgRHJvcERvd25CdXR0b24uXG4gICAgICpcbiAgICAgKiA+IFRoZSBkYXRhIGhhcyB0byBiZSBwcm92aWRlZCBpbiBhbiBhcnJheS1saWtlIGxpc3QuXG4gICAgICovXG4gICAgc2V0IGRhdGEoZGF0YSkge1xuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YSB8fCBbXTtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IG9wZW5TdGF0ZShvcGVuKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnRBcmdzID0gbmV3IFByZXZlbnRhYmxlRXZlbnQoKTtcbiAgICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3Blbi5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoZXZlbnRBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnRBcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdG9nZ2xlKG9wZW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG9wZW5TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29tcG9uZW50VGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkID8gKC0xKSA6IHRoaXMudGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCBhcHBlbmRUbygpIHtcbiAgICAgICAgY29uc3QgeyBhcHBlbmRUbyB9ID0gdGhpcy5wb3B1cFNldHRpbmdzO1xuICAgICAgICBpZiAoIWFwcGVuZFRvIHx8IGFwcGVuZFRvID09PSAncm9vdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwcGVuZFRvID09PSAnY29tcG9uZW50JyA/IHRoaXMuY29udGFpbmVyIDogYXBwZW5kVG87XG4gICAgfVxuICAgIGdldCBmb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNGb2N1c2VkICYmICF0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IHdpZGdldENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAga2V5ZG93bihldmVudCkge1xuICAgICAgICB0aGlzLmtleURvd25IYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMuU3BhY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleXByZXNzKGV2ZW50KSB7XG4gICAgICAgIHRoaXMua2V5UHJlc3NIYW5kbGVyKGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtleXVwKGV2ZW50KSB7XG4gICAgICAgIHRoaXMua2V5VXBIYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtb3VzZWRvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtb3VzZXVwKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9wZW5Qb3B1cCgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQnV0dG9uQmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5ibHVyV3JhcHBlcigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYW5jaG9yQWxpZ24oKSB7XG4gICAgICAgIGxldCBhbGlnbiA9IHsgaG9yaXpvbnRhbDogdGhpcy5wb3B1cFNldHRpbmdzLmFsaWduIHx8ICdsZWZ0JywgdmVydGljYWw6ICdib3R0b20nIH07XG4gICAgICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcgJiYgIWlzUHJlc2VudCh0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24pKSB7XG4gICAgICAgICAgICBhbGlnbi5ob3Jpem9udGFsID0gJ3JpZ2h0JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWxpZ247XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcG9wdXBBbGlnbigpIHtcbiAgICAgICAgbGV0IGFsaWduID0geyBob3Jpem9udGFsOiB0aGlzLnBvcHVwU2V0dGluZ3MuYWxpZ24gfHwgJ2xlZnQnLCB2ZXJ0aWNhbDogJ3RvcCcgfTtcbiAgICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAncnRsJyAmJiAhaXNQcmVzZW50KHRoaXMucG9wdXBTZXR0aW5ncy5hbGlnbikpIHtcbiAgICAgICAgICAgIGFsaWduLmhvcml6b250YWwgPSAncmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGlnbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgRHJvcERvd25CdXR0b24gY29tcG9uZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIERyb3BEb3duQnV0dG9uIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbi5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmx1cldyYXBwZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcG9wdXAuXG4gICAgICogSWYgdGhlIGB0b2dnbGVgIG1ldGhvZCBpcyB1c2VkIHRvIG9wZW4gb3IgY2xvc2UgdGhlIHBvcHVwLCB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyB3aWxsIG5vdCBiZSBmaXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcGVuIC0gVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUob3Blbikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRpY2soKCkgPT4gKHRoaXMuX3RvZ2dsZSgob3BlbiA9PT0gdW5kZWZpbmVkKSA/ICF0aGlzLl9vcGVuIDogb3BlbikpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBvcGVuIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcGVuU3RhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiAhdGhpcy5faXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JhcHBlckNvbnRhaW5zKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlciA9PT0gZWxlbWVudFxuICAgICAgICAgICAgfHwgdGhpcy53cmFwcGVyLmNvbnRhaW5zKGVsZW1lbnQpXG4gICAgICAgICAgICB8fCAodGhpcy5wb3B1cFJlZiAmJiB0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudC5jb250YWlucyhlbGVtZW50KSk7XG4gICAgfVxuICAgIHN1YnNjcmliZU5hdmlnYXRpb25FdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UubmF2aWdhdGVcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5vbkFycm93S2V5TmF2aWdhdGUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZW50ZXJVcFN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZW50ZXJ1cC5zdWJzY3JpYmUodGhpcy5vbk5hdmlnYXRpb25FbnRlclVwLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLm9wZW5TdWJzY3JpcHRpb24gPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm9wZW4uc3Vic2NyaWJlKHRoaXMub25OYXZpZ2F0aW9uT3Blbi5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5jbG9zZVN1YnNjcmlwdGlvbiA9IG1lcmdlKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY2xvc2UsIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZXNjKS5zdWJzY3JpYmUodGhpcy5vbk5hdmlnYXRpb25DbG9zZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgb25OYXZpZ2F0aW9uRW50ZXJVcCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiAhdGhpcy5vcGVuU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wZW5TdGF0ZSkge1xuICAgICAgICAgICAgbGV0IGZvY3VzZWQgPSB0aGlzLmZvY3VzU2VydmljZS5mb2N1c2VkO1xuICAgICAgICAgICAgaWYgKGlzUHJlc2VudChmb2N1c2VkKSAmJiBmb2N1c2VkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEl0ZW1DbGlja0hhbmRsZXIoZm9jdXNlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgaWYgKCF0aGlzLm9wZW5TdGF0ZSAmJiBpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbk5hdmlnYXRpb25PcGVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmICF0aGlzLm9wZW5TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cFZpc2liaWxpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbk5hdmlnYXRpb25DbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3BlblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwVmlzaWJpbGl0eSgpO1xuICAgICAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkFycm93S2V5TmF2aWdhdGUoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5mb2N1c1NlcnZpY2UuZm9jdXMoaW5kZXgpO1xuICAgIH1cbiAgICBfdG9nZ2xlKG9wZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX29wZW4gPT09IG9wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcGVuID0gb3BlbjtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICAgICAgaWYgKHRoaXMuX29wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjcmVhdGVQb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgYW5jaG9yOiB0aGlzLmVsUmVmLFxuICAgICAgICAgICAgYW5jaG9yQWxpZ246IHRoaXMuYW5jaG9yQWxpZ24sXG4gICAgICAgICAgICBhbmltYXRlOiB0aGlzLnBvcHVwU2V0dGluZ3MuYW5pbWF0ZSxcbiAgICAgICAgICAgIGFwcGVuZFRvOiB0aGlzLmFwcGVuZFRvLFxuICAgICAgICAgICAgY29udGVudDogdGhpcy5wb3B1cFRlbXBsYXRlLFxuICAgICAgICAgICAgcG9wdXBBbGlnbjogdGhpcy5wb3B1cEFsaWduLFxuICAgICAgICAgICAgcG9wdXBDbGFzczogdGhpcy5wb3B1cENsYXNzZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYucG9wdXBBbmNob3JWaWV3cG9ydExlYXZlLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9wZW5TdGF0ZSA9IGZhbHNlKTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cE9wZW4uc3Vic2NyaWJlKHRoaXMuZm9jdXNGaXJzdEl0ZW0uYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGRlc3Ryb3lQb3B1cCgpIHtcbiAgICAgICAgaWYgKHRoaXMucG9wdXBSZWYpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuRHJvcERvd25CdXR0b25Db21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvRHJvcERvd25CdXR0b24nLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBGb2N1c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBOQVZJR0FUSU9OX1NFVFRJTkdTX1BST1ZJREVSJDEsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5kcm9wZG93bmJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kcm9wZG93bmJ1dHRvbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGJ1dHRvbiBrZW5kb0J1dHRvbiAjYnV0dG9uXG4gICAgICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJjb21wb25lbnRUYWJJbmRleFwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYWN0aXZlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbaWNvbl09XCJpY29uXCJcbiAgICAgICAgICAgIFtpY29uQ2xhc3NdPVwiaWNvbkNsYXNzXCJcbiAgICAgICAgICAgIFtpbWFnZVVybF09XCJpbWFnZVVybFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJidXR0b25DbGFzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib3BlblBvcHVwKClcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImhhbmRsZUZvY3VzKClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25CdXR0b25CbHVyKClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5TdGF0ZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cInRydWVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1vd25zXT1cImxpc3RJZFwiXG4gICAgICAgICAgICBbbG9va109XCJsb29rXCJcbiAgICAgICAgICAgIFtwcmltYXJ5XT1cInByaW1hcnlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwb3B1cFRlbXBsYXRlPlxuICAgICAgICAgICAgPGtlbmRvLWJ1dHRvbi1saXN0XG4gICAgICAgICAgICAgICAgI2J1dHRvbkxpc3RcbiAgICAgICAgICAgICAgICBbaWRdPVwibGlzdElkXCJcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cInRleHRGaWVsZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIChvbkl0ZW1DbGljayk9XCJvbkl0ZW1DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlEb3duSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwia2V5UHJlc3NIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXl1cCk9XCJrZXlVcEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlyXT1cImRpclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2tlbmRvLWJ1dHRvbi1saXN0PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Ecm9wRG93bkJ1dHRvbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZvY3VzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuRHJvcERvd25CdXR0b25Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWNvbkNsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbWFnZVVybDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcG9wdXBTZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGV4dEZpZWxkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcHJpbWFyeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9vazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYnV0dG9uQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpdGVtQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvcGVuOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICBmb2N1c2VkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWZvY3VzZWQnLF0gfV0sXG4gICAgd2lkZ2V0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRyb3Bkb3duLWJ1dHRvbicsXSB9XSxcbiAgICBkaXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIGl0ZW1UZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQnV0dG9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgYnV0dG9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYnV0dG9uJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGJ1dHRvbkxpc3Q6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydidXR0b25MaXN0JywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHBvcHVwVGVtcGxhdGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydwb3B1cFRlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGNvbnRhaW5lcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBrZXlkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5ZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBrZXlwcmVzczogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleXByZXNzJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIGtleXVwOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5dXAnLCBbJyRldmVudCddLF0gfV0sXG4gICAgbW91c2Vkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnbW91c2Vkb3duJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIG1vdXNldXA6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydtb3VzZXVwJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYERyb3BEb3duQnV0dG9uQ29tcG9uZW50YCZtZGFzaDtUaGUgRHJvcERvd25CdXR0b25Db21wb25lbnQgY29tcG9uZW50IGNsYXNzLlxuICovXG5jbGFzcyBEcm9wRG93bkJ1dHRvbk1vZHVsZSB7XG59XG5Ecm9wRG93bkJ1dHRvbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbRHJvcERvd25CdXR0b25Db21wb25lbnRdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtEcm9wRG93bkJ1dHRvbkNvbXBvbmVudCwgTGlzdE1vZHVsZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUG9wdXBNb2R1bGUsIExpc3RNb2R1bGUsIEJ1dHRvbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBEaXNwbGF5cyBhIENoaXAgdGhhdCByZXByZXNlbnRzIGFuIGlucHV0LCBhdHRyaWJ1dGUgb3IgYW4gYWN0aW9uLlxuICovXG5jbGFzcyBDaGlwQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCByZW5kZXJlciwgbmdab25lLCBsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZSA9IGxvY2FsaXphdGlvblNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBDaGFuZ2VzIHRoZSB2aXN1YWwgYXBwZWFyYW5jZSBieSB1c2luZyBhbHRlcm5hdGl2ZSBzdHlsaW5nIG9wdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBgZmlsbGVkYFxuICAgICAgICAgKiAqIGBvdXRsaW5lZGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubG9vayA9ICdmaWxsZWQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBzZWxlY3RlZCBzdGF0ZSBvZiB0aGUgQ2hpcC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgQ2hpcCB3aWxsIGJlIHJlbW92YWJsZSBvciBub3QuXG4gICAgICAgICAqIElmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgdG8gYHRydWVgLCB0aGUgQ2hpcCByZW5kZXJzIGEgcmVtb3ZlIGljb24uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbW92YWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBDaGlwIHR5cGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAtIGBub25lYCAoZGVmYXVsdClcbiAgICAgICAgICogLSBgc3VjY2Vzc2BcbiAgICAgICAgICogLSBgZXJyb3JgXG4gICAgICAgICAqIC0gYHdhcm5pbmdgXG4gICAgICAgICAqIC0gYGluZm9gXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnR5cGUgPSAnbm9uZSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgQ2hpcCB3aWxsIGJlIGRpc2FibGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGNsaWNrcyB0aGUgcmVtb3ZlIGljb24gb2YgdGhlIENoaXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy50YWJJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gbG9jYWxpemF0aW9uU2VydmljZS5ydGwgPyAncnRsJyA6ICdsdHInO1xuICAgIH1cbiAgICBnZXQgb3V0bGluZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb29rID09PSAnb3V0bGluZWQnO1xuICAgIH1cbiAgICBnZXQgZmlsbGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvb2sgPT09ICdmaWxsZWQnO1xuICAgIH1cbiAgICBnZXQgaGFzSWNvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pY29uIHx8IHRoaXMuaWNvbkNsYXNzID8gdHJ1ZSA6IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBzZWxlY3RlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gICAgZ2V0IGZvY3VzZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGV0YWNoRG9tRXZlbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaERvbUV2ZW50cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgY2hpcCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0eXBlQ2xhc3MgPSB0aGlzLnR5cGVDbGFzcygpO1xuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoY2hpcCwgdHlwZUNsYXNzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF0dGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKGNoaXApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGljb25DbGFzc2VzKCkge1xuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gYGstaWNvbiBrLWktJHt0aGlzLmljb259YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmljb25DbGFzc31gO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc2VsZWN0ZWRJY29uQ2xhc3NlcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5zZWxlY3RlZEljb259YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGstaWNvbiBrLWktY2hlY2tgO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHJlbW92ZUljb25DbGFzc2VzKCkge1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVJY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7dGhpcy5yZW1vdmVJY29ufWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGBrLWljb24gay1pLWNsb3NlLWNpcmNsZWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0eXBlQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnbm9uZSc6ICcnLFxuICAgICAgICAgICAgJ3N1Y2Nlc3MnOiAnay1jaGlwLXN1Y2Nlc3MnLFxuICAgICAgICAgICAgJ3dhcm5pbmcnOiAnay1jaGlwLXdhcm5pbmcnLFxuICAgICAgICAgICAgJ2Vycm9yJzogJ2stY2hpcC1lcnJvcicsXG4gICAgICAgICAgICAnaW5mbyc6ICdrLWNoaXAtaW5mbydcbiAgICAgICAgfVt0aGlzLnR5cGVdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBDaGlwIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgQ2hpcCBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgaWYgKGlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblJlbW92ZUNsaWNrKGUpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KHsgc2VuZGVyOiB0aGlzLCBvcmlnaW5hbEV2ZW50OiBlIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0dGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKGNoaXApIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9jdXNMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKGNoaXAsICdmb2N1cycsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGNoaXAsICdrLWNoaXAtZm9jdXNlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBibHVyTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihjaGlwLCAnYmx1cicsICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGNoaXAsICdrLWNoaXAtZm9jdXNlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRldGFjaERvbUV2ZW50cyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb2N1c0xpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgYmx1ckxpc3RlbmVyKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5DaGlwQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jaGlwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cImstc2VsZWN0ZWQtaWNvbi13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstc2VsZWN0ZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic2VsZWN0ZWRJY29uQ2xhc3Nlc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cImljb24gfHwgaWNvbkNsYXNzXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1jaGlwLWljb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzZXNcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cImstY2hpcC1jb250ZW50XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstY2hpcC1sYWJlbFwiICpuZ0lmPVwibGFiZWxcIj5cbiAgICAgICAgICAgICAgICB7eyBsYWJlbCB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhbGFiZWxcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8c3BhbiAqbmdJZj1cInJlbW92YWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImstcmVtb3ZlLWljb25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cInJlbW92ZUljb25DbGFzc2VzXCI+PC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgYCxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmNoaXAnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNoaXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQ2hpcENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBsb29rOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWNvbkNsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWRJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW1vdmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlbW92ZUljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHR5cGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW1vdmU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50YWJpbmRleCcsXSB9XSxcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hpcCcsXSB9XSxcbiAgICBvdXRsaW5lQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hpcC1vdXRsaW5lJyxdIH1dLFxuICAgIGZpbGxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAtZmlsbGVkJyxdIH1dLFxuICAgIGhhc0ljb25DbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jaGlwLWhhcy1pY29uJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2hpcC1kaXNhYmxlZCcsXSB9XSxcbiAgICBzZWxlY3RlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAtc2VsZWN0ZWQnLF0gfV0sXG4gICAgZm9jdXNlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNoaXAtZm9jdXNlZCcsXSB9XSxcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dXG59O1xuXG5jbGFzcyBDaGlwTGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBzZWxlY3Rpb24gbW9kZSBvZiB0aGUgQ2hpcExpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBhdmFpbGFibGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBgbm9uZWAgKGRlZmF1bHQpXG4gICAgICAgICAqICogYHNpbmdsZWBcbiAgICAgICAgICogKiBgbXVsdGlwbGVgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9ICdub25lJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB3aGVuIHRoZSBDaGlwTGlzdCBzZWxlY3Rpb24gaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSByZW1vdmUgaWNvbiBvZiB0aGUgQ2hpcC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGxvY2FsaXphdGlvblNlcnZpY2UucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICB9XG4gICAgZ2V0IHNpbmdsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uID09PSAnc2luZ2xlJztcbiAgICB9XG4gICAgZ2V0IG11bHRpcGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24gPT09ICdtdWx0aXBsZSc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKCRldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSAkZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb25zdCBpc1JlbW92ZUNsaWNrZWQgPSBjbG9zZXN0KHRhcmdldCwgJy5rLXJlbW92ZS1pY29uJyk7XG4gICAgICAgIGNvbnN0IGNsaWNrZWRDaGlwID0gY2xvc2VzdCh0YXJnZXQsICcuay1jaGlwJyk7XG4gICAgICAgIGNvbnN0IGNoaXAgPSB0aGlzLmNoaXBzLmZpbmQoKGNoaXApID0+IGNsaWNrZWRDaGlwID09PSBjaGlwLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChpc1JlbW92ZUNsaWNrZWQgJiYgY2xpY2tlZENoaXApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZUV2ZW50QXJncyA9IHsgc2VuZGVyOiB0aGlzLCBvcmlnaW5hbEV2ZW50OiAkZXZlbnQsIHJlbW92ZWRDaGlwOiBjaGlwIH07XG4gICAgICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KHJlbW92ZUV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnbm9uZScgJiYgY2xpY2tlZENoaXAgJiYgIWlzUmVtb3ZlQ2xpY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24oY2hpcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZWN0ZWRDaGlwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpcHMucmVkdWNlKChhY2MsIGN1ciwgaWR4KSA9PiB7IHJldHVybiBjdXIuc2VsZWN0ZWQgPyBhY2MuY29uY2F0KGlkeCkgOiBhY2M7IH0sIFtdKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgc2VsZWN0aW9uIG9uIGNsaWNrIG9mIGEgQ2hpcC4gRW1pdHMgZXZlbnRzLlxuICAgICAqL1xuICAgIHNldFNlbGVjdGlvbihjaGlwKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oY2hpcCk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpcC5zZWxlY3RlZCA9ICFjaGlwLnNlbGVjdGVkO1xuICAgICAgICB0aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZENoaXBzKCkpO1xuICAgIH1cbiAgICBjbGVhclNlbGVjdGlvbihjaGlwKSB7XG4gICAgICAgIHRoaXMuY2hpcHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgICAgaWYgKGNoaXAgIT09IGMpIHtcbiAgICAgICAgICAgICAgICBjLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkNoaXBMaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jaGlwLWxpc3QnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uY2hpcC1saXN0J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DaGlwTGlzdENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkNoaXBMaXN0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jaGlwLWxpc3QnLF0gfV0sXG4gICAgZGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBzZWxlY3Rpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGVkQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcmVtb3ZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2hpcHM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NoaXBDb21wb25lbnQsXSB9XSxcbiAgICBzaW5nbGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2VsZWN0aW9uLXNpbmdsZScsXSB9XSxcbiAgICBtdWx0aXBsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zZWxlY3Rpb24tbXVsdGlwbGUnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMgPSBbXG4gICAgQ2hpcENvbXBvbmVudCxcbiAgICBDaGlwTGlzdENvbXBvbmVudFxuXTtcbmNvbnN0IGRlY2xhcmF0aW9ucyA9IFtcbiAgICAuLi5leHBvcnRlZE1vZHVsZXNcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBDaGlwIGFuZCBDaGlwTGlzdCBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIENoaXAgbW9kdWxlXG4gKiBpbXBvcnQgeyBDaGlwTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9ucyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIENoaXBNb2R1bGVdLCAvLyBpbXBvcnQgQ2hpcCBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDaGlwTW9kdWxlIHtcbn1cbkNoaXBNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9uc10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlc10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlcyddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIEJ1dHRvbnMgY29tcG9uZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBCdXR0b25zIG1vZHVsZVxuICogaW1wb3J0IHsgQnV0dG9uc01vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWJ1dHRvbnMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBCdXR0b25zTW9kdWxlXSwgLy8gaW1wb3J0IEJ1dHRvbnMgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBCdXR0b25zTW9kdWxlIHtcbn1cbkJ1dHRvbnNNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtCdXR0b25Hcm91cE1vZHVsZSwgQnV0dG9uTW9kdWxlLCBTcGxpdEJ1dHRvbk1vZHVsZSwgRHJvcERvd25CdXR0b25Nb2R1bGUsIENoaXBNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0IHsgS2VuZG9CdXR0b25TZXJ2aWNlLCBGb2N1c1NlcnZpY2UsIEZvY3VzYWJsZURpcmVjdGl2ZSwgQnV0dG9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLCBMaXN0QnV0dG9uLCBMaXN0Q29tcG9uZW50LCBMaXN0TW9kdWxlLCBUZW1wbGF0ZUNvbnRleHREaXJlY3RpdmUsIE5BVklHQVRJT05fQ09ORklHLCBOYXZpZ2F0aW9uU2VydmljZSwgQnV0dG9uRGlyZWN0aXZlLCBCdXR0b25EaXJlY3RpdmUgYXMgQnV0dG9uLCBCdXR0b25Hcm91cENvbXBvbmVudCwgQnV0dG9uR3JvdXBDb21wb25lbnQgYXMgQnV0dG9uR3JvdXAsIEJ1dHRvbkdyb3VwTW9kdWxlLCBCdXR0b25Nb2R1bGUsIEJ1dHRvbnNNb2R1bGUsIFNwbGl0QnV0dG9uQ29tcG9uZW50LCBTcGxpdEJ1dHRvbkNvbXBvbmVudCBhcyBTcGxpdEJ1dHRvbiwgU3BsaXRCdXR0b25Nb2R1bGUsIERyb3BEb3duQnV0dG9uQ29tcG9uZW50LCBEcm9wRG93bkJ1dHRvbkNvbXBvbmVudCBhcyBEcm9wRG93bkJ1dHRvbiwgRHJvcERvd25CdXR0b25Nb2R1bGUsIENoaXBDb21wb25lbnQsIENoaXBMaXN0Q29tcG9uZW50LCBDaGlwTW9kdWxlIH07XG4iXX0=","
\n \n
","\n Global Service/Vendor Links\n\n\n \n","import { Component, OnInit, Input, ViewChild, ElementRef, HostListener } from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {faBookmark} from '@fortawesome/free-solid-svg-icons';\nimport {AuthenticationService} from '../../authentication/authentication.service';\n\n@Component({\n selector: 'app-bookmarks',\n templateUrl: './bookmarks.component.html',\n styleUrls: ['./bookmarks.component.scss']\n})\nexport class BookmarksComponent implements OnInit {\n faBookmark = faBookmark;\n RequestState = RequestState;\n @Input() displayTitles;\n\n bkMenuViable = false;\n anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n popupAlign = { horizontal: 'left', vertical: 'top' };\n collision = { horizontal: 'fit', vertical: 'fit' };\n\n @ViewChild('bkanchor') public anchor: ElementRef;\n @ViewChild('bkpopup', { read: ElementRef }) public popup: ElementRef;\n\n apiRoute = '/links/en-US-US';\n requestHandler;\n apiState;\n data = [];\n\n constructor(\n private apiService: ApiService,\n private authService: AuthenticationService\n ) { }\n\n ngOnInit(): void {\n this.authService.onAuth(() => {\n this.requestHandler = this.apiService.get(this.apiRoute);\n this.requestHandler.sendRequest(this.apiRoute, []);\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const bookmarks = JSON.parse(response.body);\n\n const links = bookmarks.globallink;\n links.sort(this.sortBookmarks);\n\n this.data = links;\n }\n });\n });\n }\n\n sortBookmarks(i, j) {\n const iValue = i.displayname.toUpperCase();\n const jValue = j.displayname.toUpperCase();\n let compare = 0;\n if (iValue > jValue) {\n compare = 1;\n } else if (iValue < jValue) {\n compare = -1;\n }\n return compare;\n }\n\n onToggle(): void {\n this.bkMenuViable = !this.bkMenuViable;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.bkMenuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if ((this.bkMenuViable && !this.contains(event.target)) || (!this.bkMenuViable && this.contains(event.target))) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Directive, ElementRef, Renderer2, NgZone, Input, HostBinding, forwardRef, Component, NgModule, EventEmitter, isDevMode, ChangeDetectorRef, ContentChild, ViewChild } from '@angular/core';\nimport { isDocumentAvailable, guid, KendoInput } from '@progress/kendo-angular-common';\nimport { ComponentMessages, LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { CommonModule } from '@angular/common';\nimport { NgControl } from '@angular/forms';\nimport { Observable, Subscription } from 'rxjs';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\n\nvar I18N_0;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the optional segment of a FloatingLabel component\n * @meaning kendo.floatinglabel.optional\n */ \n const MSG_EXTERNAL_356911862062553631$$DIST_FESM2015_INDEX_JS_1 = goog.getMsg(\"Optional\");\n I18N_0 = MSG_EXTERNAL_356911862062553631$$DIST_FESM2015_INDEX_JS_1;\n}\nelse {\n I18N_0 = $localize `:kendo.floatinglabel.optional|The text for the optional segment of a FloatingLabel component␟d6b1dd6fb7530bd600b430042425d10b22163d1f␟356911862062553631:Optional`;\n}\nconst _c2 = [\"optional\", I18N_0];\nfunction FloatingLabelComponent_label_3_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r225 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\"(\", ctx_r225.textFor(\"optional\"), \")\");\n} }\nfunction FloatingLabelComponent_label_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"label\", 2);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵtemplate(2, FloatingLabelComponent_label_3_span_2_Template, 2, 1, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r224 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"for\", ctx_r224.id);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r224.labelId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r224.text, \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r224.optional);\n} }\nconst _c3 = [\"*\"];\nvar I18N_4;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the optional segment of a Label component\n * @meaning kendo.label.optional\n */ \n const MSG_EXTERNAL_3476218486854814180$$DIST_FESM2015_INDEX_JS_5 = goog.getMsg(\"Optional\");\n I18N_4 = MSG_EXTERNAL_3476218486854814180$$DIST_FESM2015_INDEX_JS_5;\n}\nelse {\n I18N_4 = $localize `:kendo.label.optional|The text for the optional segment of a Label component␟a1cd4a8f359a22151d7e73f2887fbb2967cd389a␟3476218486854814180:Optional`;\n}\nconst _c6 = [\"optional\", I18N_4];\nfunction LabelComponent_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r226 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\"(\", ctx_r226.textFor(\"optional\"), \")\");\n} }\nconst isUploadComponent = (component) => component.wrapper && component.wrapper.tagName === 'KENDO-UPLOAD';\n/**\n * @hidden\n */\nconst getNativeInputContent = (element) => element.querySelector('kendo-label > input, kendo-label > textarea, kendo-label > select');\n/**\n * @hidden\n */\nconst isActiveCheckboxOrRadio = (component) => component instanceof HTMLInputElement && /^(checkbox|radio)$/.test(component.type) && !component.hidden;\n/**\n * @hidden\n */\nconst isNestedOrAssociated = (component, label) => component.parentElement === label || label.hasAttribute('for');\n/**\n * @hidden\n */\nconst shouldClickComponent = (component, label) => isActiveCheckboxOrRadio(component) && !isNestedOrAssociated(component, label);\n/**\n * @hidden\n */\nconst getRootElement = (element) => {\n if (!element) {\n return null;\n }\n let rootElement = element;\n while (rootElement.parentElement) {\n rootElement = rootElement.parentElement;\n }\n return rootElement;\n};\n\n/**\n * Represents the [Kendo UI Label directive for Angular]({% slug overview_label %}).\n * The Label associates a focusable Angular component or an HTML element\n * with a `label` tag by using the `[for]` property binding.\n *\n * To associate a component by using the `label` element, either:\n * * Set the `[for]` property binding to a\n * [template reference variable]({{ site.data.urls.angular['templatesyntax'] }}#template-reference-variables--var-), or\n * * Set the `[for]` property binding to an `id` HTML string value.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
\n *
\n * \n * \n *
\n *\n *
\n * \n * \n *
\n *
\n * `\n * })\n * class AppComponent { }\n * ```\n */\nclass LabelDirective {\n constructor(label, renderer, zone) {\n this.label = label;\n this.renderer = renderer;\n this.zone = zone;\n this.labelClass = true;\n this.handleClick = () => {\n const component = this.getFocusableComponent();\n if (!component) {\n return;\n }\n if (isUploadComponent(component)) {\n component.fileSelect.nativeElement.click();\n }\n if (component.focus) {\n component.focus();\n }\n // https://www.w3.org/TR/html52/sec-forms.html#labelable-element\n if (shouldClickComponent(component, this.label.nativeElement)) {\n component.click();\n }\n };\n }\n get labelFor() {\n if (typeof this.for === 'string') {\n return this.for;\n }\n if (!isDocumentAvailable()) {\n return null;\n }\n const component = this.getFocusableComponent() || {};\n return component.focusableId || component.id || null;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.setAriaLabelledby();\n this.zone.runOutsideAngular(() => this.clickListener = this.renderer.listen(this.label.nativeElement, 'click', this.handleClick));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.clickListener) {\n this.clickListener();\n }\n }\n /**\n * @hidden\n */\n setAriaLabelledby() {\n if (!isDocumentAvailable()) {\n return;\n }\n const component = this.getFocusableComponent();\n if (component && component.focusableId) {\n const rootElement = getRootElement(this.label.nativeElement);\n const labelTarget = rootElement.querySelector(`#${component.focusableId}`);\n if (!labelTarget) {\n return;\n }\n const labelElement = this.label.nativeElement;\n const id = labelElement.id || `k-${guid()}`;\n if (!labelElement.getAttribute('id')) {\n this.renderer.setAttribute(labelElement, 'id', id);\n }\n this.renderer.setAttribute(labelTarget, 'aria-labelledby', id);\n }\n }\n getFocusableComponent() {\n const target = this.for;\n return target && target.focus !== undefined ? target : null;\n }\n}\nLabelDirective.ɵfac = function LabelDirective_Factory(t) { return new (t || LabelDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nLabelDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LabelDirective, selectors: [[\"label\", \"for\", \"\"]], hostVars: 3, hostBindings: function LabelDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"for\", ctx.labelFor);\n ɵngcc0.ɵɵclassProp(\"k-label\", ctx.labelClass);\n } }, inputs: { for: \"for\" } });\n/** @nocollapse */\nLabelDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nLabelDirective.propDecorators = {\n for: [{ type: Input }],\n labelFor: [{ type: HostBinding, args: ['attr.for',] }],\n labelClass: [{ type: HostBinding, args: ['class.k-label',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LabelDirective, [{\n type: Directive,\n args: [{\n selector: 'label[for]' //tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { labelClass: [{\n type: HostBinding,\n args: ['class.k-label']\n }], labelFor: [{\n type: HostBinding,\n args: ['attr.for']\n }], for: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { optional: \"optional\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n optional: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoLabelLocalizedMessages\", \"\"], [\"\", \"kendoFloatingLabelLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoLabelLocalizedMessages],\n [kendoFloatingLabelLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug label_globalization %}#toc-localization)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-label-messages\"], [\"kendo-floatinglabel-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-label-messages, kendo-floatinglabel-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\nconst SHARED_DIRECTIVES = [\n LocalizedMessagesDirective,\n CustomMessagesComponent\n];\n/**\n * @hidden\n */\nclass SharedDirectivesModule {\n}\nSharedDirectivesModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedDirectivesModule });\nSharedDirectivesModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedDirectivesModule_Factory(t) { return new (t || SharedDirectivesModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedDirectivesModule, { declarations: [LocalizedMessagesDirective,\n CustomMessagesComponent], exports: [LocalizedMessagesDirective,\n CustomMessagesComponent] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedDirectivesModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass FloatingLabelInputAdapter {\n constructor(component, formControl) {\n this.component = component;\n const isObservableOrEventEmitter = (event) => event instanceof Observable || event instanceof EventEmitter;\n if (isObservableOrEventEmitter(component.onFocus)) {\n this.onFocus = component.onFocus;\n }\n if (isObservableOrEventEmitter(component.autoFillStart)) {\n this.autoFillStart = component.autoFillStart;\n }\n if (isObservableOrEventEmitter(component.autoFillEnd)) {\n this.autoFillEnd = component.autoFillEnd;\n }\n if (isObservableOrEventEmitter(component.onBlur)) {\n this.onBlur = component.onBlur;\n }\n if (formControl) {\n this.onValueChange = formControl.valueChanges;\n }\n else if (component.onValueChange) {\n this.onValueChange = component.onValueChange;\n }\n }\n get focusableId() {\n const component = this.component;\n if ('focusableId' in component) {\n return component.focusableId;\n }\n else if ('id' in component) {\n return component.id;\n }\n return \"\";\n }\n set focusableId(value) {\n const component = this.component;\n if ('focusableId' in component) {\n component.focusableId = value;\n }\n else if ('id' in component) {\n component.id = value;\n }\n }\n}\n\nconst isFunction = (x) => Object.prototype.toString.call(x) === '[object Function]';\n/**\n * Represents the [Kendo UI FloatingLabel component for Angular]({% slug overview_floatinglabel %}).\n * Provides floating labels to `input` elements.\n *\n * The FloatingLabel supports both Template and Reactive Forms and\n * [can contain Kendo UI for Angular Input components such as `kendo-combobox` and `kendo-numerictextbox`,\n * or HTML Input elements with the `kendoTextBox` directive applied]({% slug overview_floatinglabel %}#toc-implementing-floating-labels).\n *\n * @example\n * ```ts\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public name = 'John';\n * }\n *\n * ```\n */\nclass FloatingLabelComponent {\n constructor(elementRef, renderer, changeDetectorRef, localization) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.changeDetectorRef = changeDetectorRef;\n this.localization = localization;\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focused = false;\n /**\n * @hidden\n */\n this.empty = true;\n /**\n * @hidden\n */\n this.invalid = false;\n /**\n * @hidden\n */\n this.labelId = `k-${guid()}`;\n this.autoFillStarted = false;\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, \"id\");\n }\n get focusedClass() {\n return this.focused;\n }\n get invalidClass() {\n return this.invalid;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.validateSetup();\n const control = new FloatingLabelInputAdapter(this.kendoInput || this.formControl.valueAccessor, this.formControl);\n this.addHandlers(control);\n this.setLabelFor(control);\n }\n ngAfterViewInit() {\n if (this.kendoInput) {\n this.setAriaLabelledby(this.kendoInput);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n subscribe(control, eventName, handler) {\n if (control[eventName] instanceof EventEmitter) {\n const subscription = control[eventName].subscribe(handler);\n if (!this.subscription) {\n this.subscription = subscription;\n }\n else {\n this.subscription.add(subscription);\n }\n }\n }\n updateState() {\n const empty = value => {\n // zero is not an empty value (e.g., NumericTextBox)\n if (value === 0 || value === false) {\n return false;\n }\n // empty arrays are an empty value (e.g., MultiSelect)\n if (Array.isArray(value) && !value.length) {\n return true;\n }\n return !value;\n };\n const formControl = this.formControl;\n if (formControl) {\n const valueAccessor = formControl.valueAccessor;\n if (isFunction(valueAccessor.isEmpty)) {\n this.empty = valueAccessor.isEmpty();\n }\n else {\n this.empty = empty(formControl.value);\n }\n this.invalid = formControl.invalid && (formControl.touched || formControl.dirty);\n }\n else {\n this.empty = isFunction(this.kendoInput.isEmpty) ?\n this.kendoInput.isEmpty() : empty(this.kendoInput.value);\n }\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n else {\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n this.changeDetectorRef.markForCheck();\n }\n setAriaLabelledby(component) {\n const componentId = component.focusableId || component.id;\n if (componentId) {\n const focusableElement = this.elementRef.nativeElement.querySelector(`#${componentId}`);\n this.renderer.setAttribute(focusableElement, 'aria-labelledby', this.labelId);\n }\n }\n setLabelFor(control) {\n const controlId = control.focusableId || control.id;\n if (this.id && controlId) {\n // input wins\n this.id = controlId;\n }\n else if (this.id) {\n control.focusableId = this.id;\n }\n else if (controlId) {\n this.id = controlId;\n }\n else {\n const id = `k-${guid()}`;\n control.focusableId = id;\n this.id = id;\n }\n }\n handleAutofill(control) {\n this.subscribe(control, 'autoFillStart', () => {\n this.autoFillStarted = true;\n this.renderer.removeClass(this.elementRef.nativeElement, 'k-state-empty');\n });\n this.subscribe(control, 'autoFillEnd', () => {\n if (this.autoFillStarted) {\n this.autoFillStarted = false;\n if (this.empty) {\n this.renderer.addClass(this.elementRef.nativeElement, 'k-state-empty');\n }\n }\n });\n }\n addHandlers(control) {\n const setFocus = (isFocused) => () => {\n this.focused = isFocused;\n this.updateState();\n };\n this.subscribe(control, 'onFocus', setFocus(true));\n this.subscribe(control, 'onBlur', setFocus(false));\n this.handleAutofill(control);\n const updateState = () => this.updateState();\n updateState();\n this.subscribe(control, 'onValueChange', updateState);\n }\n validateSetup() {\n if (!this.formControl && !this.kendoInput) {\n if (isDevMode()) {\n throw new Error(\"The FloatingLabelComponent requires a Kendo Input component\" +\n \" or a forms-bound component to function properly.\");\n }\n return;\n }\n }\n}\nFloatingLabelComponent.ɵfac = function FloatingLabelComponent_Factory(t) { return new (t || FloatingLabelComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFloatingLabelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FloatingLabelComponent, selectors: [[\"kendo-floatinglabel\"]], contentQueries: function FloatingLabelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, KendoInput, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NgControl, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.formControl = _t.first);\n } }, hostVars: 7, hostBindings: function FloatingLabelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-floating-label-container\", ctx.hostClasses)(\"k-state-focused\", ctx.focusedClass)(\"k-state-invalid\", ctx.invalidClass);\n } }, inputs: { id: \"id\", text: \"text\", optional: \"optional\" }, exportAs: [\"kendoFloatingLabel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatinglabel'\n }\n ])], ngContentSelectors: _c3, decls: 4, vars: 1, consts: [[\"kendoFloatingLabelLocalizedMessages\", \"\", 6, \"optional\"], [\"class\", \"k-label\", 3, \"for\", 4, \"ngIf\"], [1, \"k-label\", 3, \"for\"], [\"class\", \"k-label-optional\", 4, \"ngIf\"], [1, \"k-label-optional\"]], template: function FloatingLabelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c2);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵprojection(2);\n ɵngcc0.ɵɵtemplate(3, FloatingLabelComponent_label_3_Template, 3, 4, \"label\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.text);\n } }, directives: [LocalizedMessagesDirective, ɵngcc2.NgIf], encapsulation: 2 });\n/** @nocollapse */\nFloatingLabelComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: LocalizationService }\n];\nFloatingLabelComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-floating-label-container',] }],\n focusedClass: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n invalidClass: [{ type: HostBinding, args: ['class.k-state-invalid',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n id: [{ type: Input }],\n text: [{ type: Input }],\n optional: [{ type: Input }],\n kendoInput: [{ type: ContentChild, args: [KendoInput,] }],\n formControl: [{ type: ContentChild, args: [NgControl,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FloatingLabelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-floatinglabel',\n exportAs: 'kendoFloatingLabel',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.floatinglabel'\n }\n ],\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-floating-label-container']\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], focusedClass: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], invalidClass: [{\n type: HostBinding,\n args: ['class.k-state-invalid']\n }], id: [{\n type: Input\n }], text: [{\n type: Input\n }], optional: [{\n type: Input\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput]\n }], formControl: [{\n type: ContentChild,\n args: [NgControl]\n }] }); })();\n\nconst COMPONENT_DIRECTIVES = [FloatingLabelComponent];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TextBox directive.\n *\n * @example\n *\n * ```ts-no-run\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, FloatingLabelModule], // import FloatingLabel module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass FloatingLabelModule {\n}\nFloatingLabelModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FloatingLabelModule });\nFloatingLabelModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FloatingLabelModule_Factory(t) { return new (t || FloatingLabelModule)(); }, imports: [[CommonModule, SharedDirectivesModule],\n SharedDirectivesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FloatingLabelModule, { declarations: function () { return [FloatingLabelComponent]; }, imports: function () { return [CommonModule,\n SharedDirectivesModule]; }, exports: function () { return [FloatingLabelComponent,\n SharedDirectivesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FloatingLabelModule, [{\n type: NgModule,\n args: [{\n declarations: [...COMPONENT_DIRECTIVES],\n exports: [...COMPONENT_DIRECTIVES, SharedDirectivesModule],\n imports: [CommonModule, SharedDirectivesModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [Kendo UI Label component for Angular]({% slug label_basic %}).\n *\n * Associates a label with input elements or components.\n *\n * @example\n * ```ts\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public name = 'John';\n * }\n *\n * ```\n */\nclass LabelComponent {\n constructor(elementRef, renderer, localization) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.localization = localization;\n this.subscriptions = new Subscription();\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.renderer.removeAttribute(this.elementRef.nativeElement, 'id');\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n if (this.for) {\n this.control = this.for;\n return;\n }\n const nativeInputContent = getNativeInputContent(this.elementRef.nativeElement);\n if (nativeInputContent) {\n if (!nativeInputContent.hasAttribute('id')) {\n this.renderer.setAttribute(nativeInputContent, 'id', `k-${guid()}`);\n }\n this.control = nativeInputContent;\n return;\n }\n this.control = this.kendoInput;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n }));\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n this.labelDirective.setAriaLabelledby();\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n textFor(key) {\n return this.localization.get(key);\n }\n}\nLabelComponent.ɵfac = function LabelComponent_Factory(t) { return new (t || LabelComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLabelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LabelComponent, selectors: [[\"kendo-label\"]], contentQueries: function LabelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, KendoInput, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.kendoInput = _t.first);\n } }, viewQuery: function LabelComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(LabelDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.labelDirective = _t.first);\n } }, hostVars: 1, hostBindings: function LabelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n } }, inputs: { text: \"text\", for: \"for\", optional: \"optional\" }, exportAs: [\"kendoLabel\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.label'\n }\n ])], ngContentSelectors: _c3, decls: 6, vars: 5, consts: [[\"kendoLabelLocalizedMessages\", \"\", 6, \"optional\"], [3, \"for\"], [\"class\", \"k-label-optional\", 4, \"ngIf\"], [1, \"k-label-optional\"]], template: function LabelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c6);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"label\", 1);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵtemplate(4, LabelComponent_span_4_Template, 2, 1, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(5);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-label-empty\", !ctx.text);\n ɵngcc0.ɵɵproperty(\"for\", ctx.control);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \"\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.optional);\n } }, directives: [LocalizedMessagesDirective,\n LabelDirective, ɵngcc2.NgIf], encapsulation: 2 });\n/** @nocollapse */\nLabelComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService }\n];\nLabelComponent.propDecorators = {\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n text: [{ type: Input }],\n for: [{ type: Input }],\n optional: [{ type: Input }],\n labelDirective: [{ type: ViewChild, args: [LabelDirective, { static: true },] }],\n kendoInput: [{ type: ContentChild, args: [KendoInput, { static: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LabelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-label',\n exportAs: 'kendoLabel',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.label'\n }\n ],\n template: `\n \n \n \n {{ text }}({{textFor('optional')}})\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }]; }, { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], text: [{\n type: Input\n }], for: [{\n type: Input\n }], optional: [{\n type: Input\n }], labelDirective: [{\n type: ViewChild,\n args: [LabelDirective, { static: true }]\n }], kendoInput: [{\n type: ContentChild,\n args: [KendoInput, { static: true }]\n }] }); })();\n\nconst COMPONENT_DIRECTIVES$1 = [\n LabelDirective,\n LabelComponent\n];\n/**\n * The exported package module.\n *\n * The package exports:\n * - `LabelDirective`—The Label directive class.\n * - `LabelComponent`—The Label component class\n * - `FLoatingLabel`—The FloatingLabel component class.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Label module\n * import { LabelModule } from '@progress/kendo-angular-label';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, LabelModule], // import Label module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass LabelModule {\n}\nLabelModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: LabelModule });\nLabelModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function LabelModule_Factory(t) { return new (t || LabelModule)(); }, imports: [[CommonModule, SharedDirectivesModule],\n FloatingLabelModule,\n SharedDirectivesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(LabelModule, { declarations: function () { return [LabelDirective,\n LabelComponent]; }, imports: function () { return [CommonModule,\n SharedDirectivesModule]; }, exports: function () { return [LabelDirective,\n LabelComponent,\n FloatingLabelModule,\n SharedDirectivesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LabelModule, [{\n type: NgModule,\n args: [{\n imports: [CommonModule, SharedDirectivesModule],\n declarations: [...COMPONENT_DIRECTIVES$1],\n exports: [...COMPONENT_DIRECTIVES$1, FloatingLabelModule, SharedDirectivesModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { LocalizedMessagesDirective, Messages, SharedDirectivesModule, LabelDirective, LabelModule, FloatingLabelModule, FloatingLabelComponent, LabelComponent, CustomMessagesComponent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzttQ0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs4SUFBQztBQUNEO0FBQ0E7QUFDQTtxRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQWNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7eUpBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29GQXdCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBEQTBCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29weXJpZ2h0IMKpIDIwMjAgUHJvZ3Jlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIExpY2Vuc2VkIHVuZGVyIGNvbW1lcmNpYWwgbGljZW5zZS4gU2VlIExJQ0VOU0UubWQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBSZW5kZXJlcjIsIE5nWm9uZSwgSW5wdXQsIEhvc3RCaW5kaW5nLCBmb3J3YXJkUmVmLCBDb21wb25lbnQsIE5nTW9kdWxlLCBFdmVudEVtaXR0ZXIsIGlzRGV2TW9kZSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbnRlbnRDaGlsZCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0RvY3VtZW50QXZhaWxhYmxlLCBndWlkLCBLZW5kb0lucHV0IH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudE1lc3NhZ2VzLCBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWwxMG4nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNVcGxvYWRDb21wb25lbnQgPSAoY29tcG9uZW50KSA9PiBjb21wb25lbnQud3JhcHBlciAmJiBjb21wb25lbnQud3JhcHBlci50YWdOYW1lID09PSAnS0VORE8tVVBMT0FEJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZXROYXRpdmVJbnB1dENvbnRlbnQgPSAoZWxlbWVudCkgPT4gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdrZW5kby1sYWJlbCA+IGlucHV0LCBrZW5kby1sYWJlbCA+IHRleHRhcmVhLCBrZW5kby1sYWJlbCA+IHNlbGVjdCcpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzQWN0aXZlQ2hlY2tib3hPclJhZGlvID0gKGNvbXBvbmVudCkgPT4gY29tcG9uZW50IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiAvXihjaGVja2JveHxyYWRpbykkLy50ZXN0KGNvbXBvbmVudC50eXBlKSAmJiAhY29tcG9uZW50LmhpZGRlbjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc05lc3RlZE9yQXNzb2NpYXRlZCA9IChjb21wb25lbnQsIGxhYmVsKSA9PiBjb21wb25lbnQucGFyZW50RWxlbWVudCA9PT0gbGFiZWwgfHwgbGFiZWwuaGFzQXR0cmlidXRlKCdmb3InKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzaG91bGRDbGlja0NvbXBvbmVudCA9IChjb21wb25lbnQsIGxhYmVsKSA9PiBpc0FjdGl2ZUNoZWNrYm94T3JSYWRpbyhjb21wb25lbnQpICYmICFpc05lc3RlZE9yQXNzb2NpYXRlZChjb21wb25lbnQsIGxhYmVsKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBnZXRSb290RWxlbWVudCA9IChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgcm9vdEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIHdoaWxlIChyb290RWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgIHJvb3RFbGVtZW50ID0gcm9vdEVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgcmV0dXJuIHJvb3RFbGVtZW50O1xufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgTGFiZWwgZGlyZWN0aXZlIGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2xhYmVsICV9KS5cbiAqIFRoZSBMYWJlbCBhc3NvY2lhdGVzIGEgZm9jdXNhYmxlIEFuZ3VsYXIgY29tcG9uZW50IG9yIGFuIEhUTUwgZWxlbWVudFxuICogd2l0aCBhIGBsYWJlbGAgdGFnIGJ5IHVzaW5nIHRoZSBgW2Zvcl1gIHByb3BlcnR5IGJpbmRpbmcuXG4gKlxuICogVG8gYXNzb2NpYXRlIGEgY29tcG9uZW50IGJ5IHVzaW5nIHRoZSBgbGFiZWxgIGVsZW1lbnQsIGVpdGhlcjpcbiAqICogU2V0IHRoZSBgW2Zvcl1gIHByb3BlcnR5IGJpbmRpbmcgdG8gYVxuICogW3RlbXBsYXRlIHJlZmVyZW5jZSB2YXJpYWJsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsndGVtcGxhdGVzeW50YXgnXSB9fSN0ZW1wbGF0ZS1yZWZlcmVuY2UtdmFyaWFibGVzLS12YXItKSwgb3JcbiAqICogU2V0IHRoZSBgW2Zvcl1gIHByb3BlcnR5IGJpbmRpbmcgdG8gYW4gYGlkYCBIVE1MIHN0cmluZyB2YWx1ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGRpdiBjbGFzcz1cInJvdyBleGFtcGxlLXdyYXBwZXJcIiBzdHlsZT1cIm1pbi1oZWlnaHQ6IDQ1MHB4O1wiPlxuICogICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNiBleGFtcGxlLWNvbFwiPlxuICogICAgICA8bGFiZWwgW2Zvcl09XCJkYXRlcGlja2VyXCI+RGF0ZVBpY2tlcjogPC9sYWJlbD5cbiAqICAgICAgPGtlbmRvLWRhdGVwaWNrZXIgI2RhdGVwaWNrZXI+PC9rZW5kby1kYXRlcGlja2VyPlxuICogICAgPC9kaXY+XG4gKlxuICogICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtbWQtNiBleGFtcGxlLWNvbFwiPlxuICogICAgICA8bGFiZWwgW2Zvcl09XCInaW5wdXQnXCI+SW5wdXQ6IDwvbGFiZWw+XG4gKiAgICAgIDxpbnB1dCBpZD1cImlucHV0XCIgLz5cbiAqICAgIDwvZGl2PlxuICogIDwvZGl2PlxuICogYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBMYWJlbERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IobGFiZWwsIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLmxhYmVsQ2xhc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLmhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRGb2N1c2FibGVDb21wb25lbnQoKTtcbiAgICAgICAgICAgIGlmICghY29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzVXBsb2FkQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgICBjb21wb25lbnQuZmlsZVNlbGVjdC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50LmZvY3VzKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUyL3NlYy1mb3Jtcy5odG1sI2xhYmVsYWJsZS1lbGVtZW50XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xpY2tDb21wb25lbnQoY29tcG9uZW50LCB0aGlzLmxhYmVsLm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcG9uZW50LmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBsYWJlbEZvcigpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRGb2N1c2FibGVDb21wb25lbnQoKSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5mb2N1c2FibGVJZCB8fCBjb21wb25lbnQuaWQgfHwgbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRBcmlhTGFiZWxsZWRieSgpO1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5sYWJlbC5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCB0aGlzLmhhbmRsZUNsaWNrKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5jbGlja0xpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldEFyaWFMYWJlbGxlZGJ5KCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Rm9jdXNhYmxlQ29tcG9uZW50KCk7XG4gICAgICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50LmZvY3VzYWJsZUlkKSB7XG4gICAgICAgICAgICBjb25zdCByb290RWxlbWVudCA9IGdldFJvb3RFbGVtZW50KHRoaXMubGFiZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbFRhcmdldCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2NvbXBvbmVudC5mb2N1c2FibGVJZH1gKTtcbiAgICAgICAgICAgIGlmICghbGFiZWxUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW1lbnQgPSB0aGlzLmxhYmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGxhYmVsRWxlbWVudC5pZCB8fCBgay0ke2d1aWQoKX1gO1xuICAgICAgICAgICAgaWYgKCFsYWJlbEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdpZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGFiZWxFbGVtZW50LCAnaWQnLCBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsYWJlbFRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRGb2N1c2FibGVDb21wb25lbnQoKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZm9yO1xuICAgICAgICByZXR1cm4gdGFyZ2V0ICYmIHRhcmdldC5mb2N1cyAhPT0gdW5kZWZpbmVkID8gdGFyZ2V0IDogbnVsbDtcbiAgICB9XG59XG5MYWJlbERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnbGFiZWxbZm9yXScgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOmRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5MYWJlbERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5MYWJlbERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmb3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxhYmVsRm9yOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmZvcicsXSB9XSxcbiAgICBsYWJlbENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWxhYmVsJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5NZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvcHRpb25hbDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IGBcbiAgICAgIFtrZW5kb0xhYmVsTG9jYWxpemVkTWVzc2FnZXNdLFxuICAgICAgW2tlbmRvRmxvYXRpbmdMYWJlbExvY2FsaXplZE1lc3NhZ2VzXVxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlc1xuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBsYWJlbF9nbG9iYWxpemF0aW9uICV9I3RvYy1sb2NhbGl6YXRpb24pKS5cbiAqL1xuY2xhc3MgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tbGFiZWwtbWVzc2FnZXMsIGtlbmRvLWZsb2F0aW5nbGFiZWwtbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuY29uc3QgU0hBUkVEX0RJUkVDVElWRVMgPSBbXG4gICAgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2hhcmVkRGlyZWN0aXZlc01vZHVsZSB7XG59XG5TaGFyZWREaXJlY3RpdmVzTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtTSEFSRURfRElSRUNUSVZFU10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1NIQVJFRF9ESVJFQ1RJVkVTXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmxvYXRpbmdMYWJlbElucHV0QWRhcHRlciB7XG4gICAgY29uc3RydWN0b3IoY29tcG9uZW50LCBmb3JtQ29udHJvbCkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgY29uc3QgaXNPYnNlcnZhYmxlT3JFdmVudEVtaXR0ZXIgPSAoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSB8fCBldmVudCBpbnN0YW5jZW9mIEV2ZW50RW1pdHRlcjtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9yRXZlbnRFbWl0dGVyKGNvbXBvbmVudC5vbkZvY3VzKSkge1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzID0gY29tcG9uZW50Lm9uRm9jdXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9yRXZlbnRFbWl0dGVyKGNvbXBvbmVudC5hdXRvRmlsbFN0YXJ0KSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvRmlsbFN0YXJ0ID0gY29tcG9uZW50LmF1dG9GaWxsU3RhcnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9yRXZlbnRFbWl0dGVyKGNvbXBvbmVudC5hdXRvRmlsbEVuZCkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpbGxFbmQgPSBjb21wb25lbnQuYXV0b0ZpbGxFbmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZU9yRXZlbnRFbWl0dGVyKGNvbXBvbmVudC5vbkJsdXIpKSB7XG4gICAgICAgICAgICB0aGlzLm9uQmx1ciA9IGNvbXBvbmVudC5vbkJsdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2UgPSBmb3JtQ29udHJvbC52YWx1ZUNoYW5nZXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29tcG9uZW50Lm9uVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZSA9IGNvbXBvbmVudC5vblZhbHVlQ2hhbmdlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBmb2N1c2FibGVJZCgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQ7XG4gICAgICAgIGlmICgnZm9jdXNhYmxlSWQnIGluIGNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5mb2N1c2FibGVJZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgnaWQnIGluIGNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5pZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgc2V0IGZvY3VzYWJsZUlkKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50O1xuICAgICAgICBpZiAoJ2ZvY3VzYWJsZUlkJyBpbiBjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC5mb2N1c2FibGVJZCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCdpZCcgaW4gY29tcG9uZW50KSB7XG4gICAgICAgICAgICBjb21wb25lbnQuaWQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuY29uc3QgaXNGdW5jdGlvbiA9ICh4KSA9PiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBGbG9hdGluZ0xhYmVsIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19mbG9hdGluZ2xhYmVsICV9KS5cbiAqIFByb3ZpZGVzIGZsb2F0aW5nIGxhYmVscyB0byBgaW5wdXRgIGVsZW1lbnRzLlxuICpcbiAqIFRoZSBGbG9hdGluZ0xhYmVsIHN1cHBvcnRzIGJvdGggVGVtcGxhdGUgYW5kIFJlYWN0aXZlIEZvcm1zIGFuZFxuICogW2NhbiBjb250YWluIEtlbmRvIFVJIGZvciBBbmd1bGFyIElucHV0IGNvbXBvbmVudHMgc3VjaCBhcyBga2VuZG8tY29tYm9ib3hgIGFuZCBga2VuZG8tbnVtZXJpY3RleHRib3hgLFxuICogb3IgSFRNTCBJbnB1dCBlbGVtZW50cyB3aXRoIHRoZSBga2VuZG9UZXh0Qm94YCBkaXJlY3RpdmUgYXBwbGllZF0oeyUgc2x1ZyBvdmVydmlld19mbG9hdGluZ2xhYmVsICV9I3RvYy1pbXBsZW1lbnRpbmctZmxvYXRpbmctbGFiZWxzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8a2VuZG8tZmxvYXRpbmdsYWJlbCB0ZXh0PVwiRmlyc3QgbmFtZVwiPlxuICogICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwibmFtZVwiIGtlbmRvVGV4dEJveCAvPlxuICogICAgIDwva2VuZG8tZmxvYXRpbmdsYWJlbD5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIG5hbWUgPSAnSm9obic7XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIEZsb2F0aW5nTGFiZWxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCBjaGFuZ2VEZXRlY3RvclJlZiwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZiA9IGVsZW1lbnRSZWY7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZiA9IGNoYW5nZURldGVjdG9yUmVmO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3NlcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZW1wdHkgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhYmVsSWQgPSBgay0ke2d1aWQoKX1gO1xuICAgICAgICB0aGlzLmF1dG9GaWxsU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IGxvY2FsaXphdGlvbi5ydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgXCJpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGZvY3VzZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcbiAgICB9XG4gICAgZ2V0IGludmFsaWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW52YWxpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZVNldHVwKCk7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRmxvYXRpbmdMYWJlbElucHV0QWRhcHRlcih0aGlzLmtlbmRvSW5wdXQgfHwgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUFjY2Vzc29yLCB0aGlzLmZvcm1Db250cm9sKTtcbiAgICAgICAgdGhpcy5hZGRIYW5kbGVycyhjb250cm9sKTtcbiAgICAgICAgdGhpcy5zZXRMYWJlbEZvcihjb250cm9sKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAodGhpcy5rZW5kb0lucHV0KSB7XG4gICAgICAgICAgICB0aGlzLnNldEFyaWFMYWJlbGxlZGJ5KHRoaXMua2VuZG9JbnB1dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRleHRGb3Ioa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoa2V5KTtcbiAgICB9XG4gICAgc3Vic2NyaWJlKGNvbnRyb2wsIGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICBpZiAoY29udHJvbFtldmVudE5hbWVdIGluc3RhbmNlb2YgRXZlbnRFbWl0dGVyKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sW2V2ZW50TmFtZV0uc3Vic2NyaWJlKGhhbmRsZXIpO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVtcHR5ID0gdmFsdWUgPT4ge1xuICAgICAgICAgICAgLy8gemVybyBpcyBub3QgYW4gZW1wdHkgdmFsdWUgKGUuZy4sIE51bWVyaWNUZXh0Qm94KVxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSAwIHx8IHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVtcHR5IGFycmF5cyBhcmUgYW4gZW1wdHkgdmFsdWUgKGUuZy4sIE11bHRpU2VsZWN0KVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAhdmFsdWU7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbDtcbiAgICAgICAgaWYgKGZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUFjY2Vzc29yID0gZm9ybUNvbnRyb2wudmFsdWVBY2Nlc3NvcjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlQWNjZXNzb3IuaXNFbXB0eSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5ID0gdmFsdWVBY2Nlc3Nvci5pc0VtcHR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtcHR5ID0gZW1wdHkoZm9ybUNvbnRyb2wudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnZhbGlkID0gZm9ybUNvbnRyb2wuaW52YWxpZCAmJiAoZm9ybUNvbnRyb2wudG91Y2hlZCB8fCBmb3JtQ29udHJvbC5kaXJ0eSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVtcHR5ID0gaXNGdW5jdGlvbih0aGlzLmtlbmRvSW5wdXQuaXNFbXB0eSkgP1xuICAgICAgICAgICAgICAgIHRoaXMua2VuZG9JbnB1dC5pc0VtcHR5KCkgOiBlbXB0eSh0aGlzLmtlbmRvSW5wdXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1lbXB0eScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2stc3RhdGUtZW1wdHknKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICBzZXRBcmlhTGFiZWxsZWRieShjb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBjb21wb25lbnQuZm9jdXNhYmxlSWQgfHwgY29tcG9uZW50LmlkO1xuICAgICAgICBpZiAoY29tcG9uZW50SWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvY3VzYWJsZUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtjb21wb25lbnRJZH1gKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGZvY3VzYWJsZUVsZW1lbnQsICdhcmlhLWxhYmVsbGVkYnknLCB0aGlzLmxhYmVsSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldExhYmVsRm9yKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3QgY29udHJvbElkID0gY29udHJvbC5mb2N1c2FibGVJZCB8fCBjb250cm9sLmlkO1xuICAgICAgICBpZiAodGhpcy5pZCAmJiBjb250cm9sSWQpIHtcbiAgICAgICAgICAgIC8vIGlucHV0IHdpbnNcbiAgICAgICAgICAgIHRoaXMuaWQgPSBjb250cm9sSWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgY29udHJvbC5mb2N1c2FibGVJZCA9IHRoaXMuaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udHJvbElkKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gY29udHJvbElkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBgay0ke2d1aWQoKX1gO1xuICAgICAgICAgICAgY29udHJvbC5mb2N1c2FibGVJZCA9IGlkO1xuICAgICAgICAgICAgdGhpcy5pZCA9IGlkO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUF1dG9maWxsKGNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoY29udHJvbCwgJ2F1dG9GaWxsU3RhcnQnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmF1dG9GaWxsU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1lbXB0eScpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoY29udHJvbCwgJ2F1dG9GaWxsRW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0ZpbGxTdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvRmlsbFN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1lbXB0eScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZEhhbmRsZXJzKGNvbnRyb2wpIHtcbiAgICAgICAgY29uc3Qgc2V0Rm9jdXMgPSAoaXNGb2N1c2VkKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWQgPSBpc0ZvY3VzZWQ7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGNvbnRyb2wsICdvbkZvY3VzJywgc2V0Rm9jdXModHJ1ZSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZShjb250cm9sLCAnb25CbHVyJywgc2V0Rm9jdXMoZmFsc2UpKTtcbiAgICAgICAgdGhpcy5oYW5kbGVBdXRvZmlsbChjb250cm9sKTtcbiAgICAgICAgY29uc3QgdXBkYXRlU3RhdGUgPSAoKSA9PiB0aGlzLnVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKGNvbnRyb2wsICdvblZhbHVlQ2hhbmdlJywgdXBkYXRlU3RhdGUpO1xuICAgIH1cbiAgICB2YWxpZGF0ZVNldHVwKCkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wgJiYgIXRoaXMua2VuZG9JbnB1dCkge1xuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIEZsb2F0aW5nTGFiZWxDb21wb25lbnQgcmVxdWlyZXMgYSBLZW5kbyBJbnB1dCBjb21wb25lbnRcIiArXG4gICAgICAgICAgICAgICAgICAgIFwiIG9yIGEgZm9ybXMtYm91bmQgY29tcG9uZW50IHRvIGZ1bmN0aW9uIHByb3Blcmx5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbn1cbkZsb2F0aW5nTGFiZWxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZsb2F0aW5nbGFiZWwnLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9GbG9hdGluZ0xhYmVsJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmZsb2F0aW5nbGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9GbG9hdGluZ0xhYmVsTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tb3B0aW9uYWw9XCJrZW5kby5mbG9hdGluZ2xhYmVsLm9wdGlvbmFsfFRoZSB0ZXh0IGZvciB0aGUgb3B0aW9uYWwgc2VnbWVudCBvZiBhIEZsb2F0aW5nTGFiZWwgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG9wdGlvbmFsPVwiT3B0aW9uYWxcIlxuICAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8bGFiZWwgKm5nSWY9XCJ0ZXh0XCIgW2Zvcl09XCJpZFwiIFthdHRyLmlkXT1cImxhYmVsSWRcIiBjbGFzcz1cImstbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IHRleHQgfX08c3BhbiAqbmdJZj1cIm9wdGlvbmFsXCIgY2xhc3M9XCJrLWxhYmVsLW9wdGlvbmFsXCI+KHt7dGV4dEZvcignb3B0aW9uYWwnKX19KTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZsb2F0aW5nTGFiZWxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5GbG9hdGluZ0xhYmVsQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZsb2F0aW5nLWxhYmVsLWNvbnRhaW5lcicsXSB9XSxcbiAgICBmb2N1c2VkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZm9jdXNlZCcsXSB9XSxcbiAgICBpbnZhbGlkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtaW52YWxpZCcsXSB9XSxcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIGlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcHRpb25hbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAga2VuZG9JbnB1dDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbS2VuZG9JbnB1dCxdIH1dLFxuICAgIGZvcm1Db250cm9sOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtOZ0NvbnRyb2wsXSB9XVxufTtcblxuY29uc3QgQ09NUE9ORU5UX0RJUkVDVElWRVMgPSBbRmxvYXRpbmdMYWJlbENvbXBvbmVudF07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBUZXh0Qm94IGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBGbG9hdGluZ0xhYmVsTW9kdWxlXSwgLy8gaW1wb3J0IEZsb2F0aW5nTGFiZWwgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBGbG9hdGluZ0xhYmVsTW9kdWxlIHtcbn1cbkZsb2F0aW5nTGFiZWxNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogWy4uLkNPTVBPTkVOVF9ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UX0RJUkVDVElWRVMsIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIExhYmVsIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBsYWJlbF9iYXNpYyAlfSkuXG4gKlxuICogQXNzb2NpYXRlcyBhIGxhYmVsIHdpdGggaW5wdXQgZWxlbWVudHMgb3IgY29tcG9uZW50cy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8a2VuZG8tbGFiZWwgW2Zvcl09XCJpbnB1dFwiIHRleHQ9XCJGaXJzdCBuYW1lXCI+XG4gKiAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJuYW1lXCIga2VuZG9UZXh0Qm94ICNpbnB1dCAvPlxuICogICAgIDwva2VuZG8tbGFiZWw+XG4gKiAgIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBuYW1lID0gJ0pvaG4nO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBMYWJlbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudFJlZiwgcmVuZGVyZXIsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gbG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnaWQnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9yKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wgPSB0aGlzLmZvcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYXRpdmVJbnB1dENvbnRlbnQgPSBnZXROYXRpdmVJbnB1dENvbnRlbnQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAobmF0aXZlSW5wdXRDb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoIW5hdGl2ZUlucHV0Q29udGVudC5oYXNBdHRyaWJ1dGUoJ2lkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShuYXRpdmVJbnB1dENvbnRlbnQsICdpZCcsIGBrLSR7Z3VpZCgpfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gbmF0aXZlSW5wdXRDb250ZW50O1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMua2VuZG9JbnB1dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5sYWJlbERpcmVjdGl2ZS5zZXRBcmlhTGFiZWxsZWRieSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0ZXh0Rm9yKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgfVxufVxuTGFiZWxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWxhYmVsJyxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvTGFiZWwnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8ubGFiZWwnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9MYWJlbExvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLW9wdGlvbmFsPVwia2VuZG8ubGFiZWwub3B0aW9uYWx8VGhlIHRleHQgZm9yIHRoZSBvcHRpb25hbCBzZWdtZW50IG9mIGEgTGFiZWwgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG9wdGlvbmFsPVwiT3B0aW9uYWxcIlxuICAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICBbZm9yXT1cImNvbnRyb2xcIlxuICAgICAgICAgICAgW2NsYXNzLmstbGFiZWwtZW1wdHldPVwiIXRleHRcIj5cbiAgICAgICAgICAgIHt7IHRleHQgfX08c3BhbiAqbmdJZj1cIm9wdGlvbmFsXCIgY2xhc3M9XCJrLWxhYmVsLW9wdGlvbmFsXCI+KHt7dGV4dEZvcignb3B0aW9uYWwnKX19KTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTGFiZWxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkxhYmVsQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgdGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcHRpb25hbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbGFiZWxEaXJlY3RpdmU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW0xhYmVsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAga2VuZG9JbnB1dDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbS2VuZG9JbnB1dCwgeyBzdGF0aWM6IHRydWUgfSxdIH1dXG59O1xuXG5jb25zdCBDT01QT05FTlRfRElSRUNUSVZFUyQxID0gW1xuICAgIExhYmVsRGlyZWN0aXZlLFxuICAgIExhYmVsQ29tcG9uZW50XG5dO1xuLyoqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYExhYmVsRGlyZWN0aXZlYCZtZGFzaDtUaGUgTGFiZWwgZGlyZWN0aXZlIGNsYXNzLlxuICogLSBgTGFiZWxDb21wb25lbnRgJm1kYXNoO1RoZSBMYWJlbCBjb21wb25lbnQgY2xhc3NcbiAqIC0gYEZMb2F0aW5nTGFiZWxgJm1kYXNoO1RoZSBGbG9hdGluZ0xhYmVsIGNvbXBvbmVudCBjbGFzcy5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBMYWJlbCBtb2R1bGVcbiAqIGltcG9ydCB7IExhYmVsTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbGFiZWwnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBMYWJlbE1vZHVsZV0sIC8vIGltcG9ydCBMYWJlbCBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIExhYmVsTW9kdWxlIHtcbn1cbkxhYmVsTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTaGFyZWREaXJlY3RpdmVzTW9kdWxlXSxcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFsuLi5DT01QT05FTlRfRElSRUNUSVZFUyQxXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UX0RJUkVDVElWRVMkMSwgRmxvYXRpbmdMYWJlbE1vZHVsZSwgU2hhcmVkRGlyZWN0aXZlc01vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgeyBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTWVzc2FnZXMsIFNoYXJlZERpcmVjdGl2ZXNNb2R1bGUsIExhYmVsRGlyZWN0aXZlLCBMYWJlbE1vZHVsZSwgRmxvYXRpbmdMYWJlbE1vZHVsZSwgRmxvYXRpbmdMYWJlbENvbXBvbmVudCwgTGFiZWxDb21wb25lbnQsIEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IH07XG4iXX0=","\n Preferences\n\n\n
Please Wait!
\n
\n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n
","import { Component, OnInit, Input, ViewChild, ElementRef, HostListener } from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {faCog} from '@fortawesome/free-solid-svg-icons';\nimport {PreferenceSelectionService} from '../../preferences/preference-selection.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {PreferenceApiConnectorService} from '../../preferences/preference-api-connector.service';\nimport {NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../navbar-builder.service';\n\n@Component({\n selector: 'app-preferences',\n templateUrl: './preferences.component.html',\n styleUrls: ['./preferences.component.scss']\n})\nexport class PreferencesComponent implements OnInit {\n navFilterSelection: NavFilterSelection = null;\n faCog = faCog;\n RequestState = RequestState;\n @Input() displayTitles;\n primaryDisabled = false;\n secondaryDisabled = false;\n tertiaryDisabled = false;\n\n bkMenuViable = false;\n anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n popupAlign = { horizontal: 'left', vertical: 'top' };\n collision = { horizontal: 'fit', vertical: 'fit' };\n\n @ViewChild('bkanchor') public anchor: ElementRef;\n @ViewChild('bkpopup', { read: ElementRef }) public popup: ElementRef;\n\n requestHandler;\n apiState;\n preferences;\n\n constructor(\n private apiService: ApiService,\n private refreshHandlerService: RefreshHandlerService,\n private preferenceSelectionService: PreferenceSelectionService,\n private preferenceApiConnectorService: PreferenceApiConnectorService,\n private navbarBuilderService: NavbarBuilderService\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection: NavFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n this.requestHandler = this.apiService.get('/preference');\n this.requestHandler.sendRequest('/preference');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n if (!this.preferenceSelectionService.arePreferencesLoaded()) {\n this.preferences = JSON.parse(response.body);\n this.requireOne();\n } else {\n this.preferences = this.preferenceSelectionService.getPreferences();\n }\n }\n });\n this.refreshHandlerService.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest('/preference');\n },\n this.requestHandler.getRelativeParams('/preference')\n );\n }\n\n saveSelections() {\n this.preferenceApiConnectorService.savePreferences(this.preferences);\n this.onToggle();\n // this.preferenceSelectionService.setPreferences(this.preferences);\n }\n\n showCurrency() {\n return !this.navFilterSelection.hasOwnProperty('prefCurrencyChoices') || this.navFilterSelection.prefCurrencyChoices === true;\n }\n\n toggle(type) {\n if (this.preferences[type] === 'True') {\n this.preferences[type] = 'False';\n } else {\n this.preferences[type] = 'True';\n }\n this.requireOne();\n }\n requireOne() {\n this.primaryDisabled = false;\n this.secondaryDisabled = false;\n this.tertiaryDisabled = false;\n let countChecked = 0;\n if (this.preferences.primary === 'True') {\n countChecked++;\n }\n if (this.preferences.secondary === 'True') {\n countChecked++;\n }\n if (this.preferences.tertiary === 'True') {\n countChecked++;\n }\n if (countChecked === 1) {\n if (this.preferences.primary === 'True') {\n this.primaryDisabled = true;\n }\n if (this.preferences.secondary === 'True') {\n this.secondaryDisabled = true;\n }\n if (this.preferences.tertiary === 'True') {\n this.tertiaryDisabled = true;\n }\n }\n }\n\n onToggle(): void {\n this.bkMenuViable = !this.bkMenuViable;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.bkMenuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if ((this.bkMenuViable && !this.contains(event.target)) || (!this.bkMenuViable && this.contains(event.target))) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-account-rep',\n templateUrl: './account-rep.component.html',\n styleUrls: ['./account-rep.component.scss']\n})\nexport class AccountRepComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('cua/account_rep_list');\n this.requestHandler.sendRequest('cua/account_rep_list');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const user of apiData) {\n buildData.push({\n label: user.firstName + ' ' + user.lastName + ' (' + user.acctRep511 + ')',\n key: user.acctRepUpi\n });\n }\n this.data = buildData;\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.requestHandler !== undefined) {\n this.requestHandler.cancelSubscription();\n }\n }\n\n getDataItemByKeyField(keyField) {\n for (const item of this.data) {\n if (keyField === item.key) {\n return item;\n }\n }\n return null;\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const dataItem = this.getDataItemByKeyField(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.AccountRep, dataItem.key, dataItem.label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {AuthenticationService} from '../../authentication/authentication.service';\n\n@Component({\n selector: 'app-manager-amb-selector',\n templateUrl: './manager-amb-selector.component.html',\n styleUrls: ['./manager-amb-selector.component.scss']\n})\nexport class ManagerAmbSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n userName;\n user511;\n userUPI;\n isAMB;\n isAMBManager;\n isSuperUser;\n authSet = false;\n dataHasExtras = false;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n private authService: AuthenticationService\n ) { }\n\n ngOnInit(): void {\n if (this.isAMBManager) {\n this.requestHandler = this.apiService.get('/users/amb_tss');\n this.requestHandler.sendRequest('/users/amb_tss');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const user of apiData.users) {\n buildData.push({\n label: user.firstname,\n key: user.abbottid,\n type: 'amb'\n });\n }\n this.data = buildData;\n this.dataHasExtras = false;\n this.customizeData();\n }\n });\n }\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n this.userName = userInfo.firstname + ' ' + userInfo.lastname;\n this.user511 = userInfo.abbottid;\n this.userUPI = userInfo.upi;\n this.isAMB = userInfo.isAMB;\n this.isAMBManager = userInfo.isAMBManager;\n this.isSuperUser = userInfo.isSuperUser;\n this.authSet = true;\n this.customizeData();\n });\n // this.data = [\n // { label: 'Manager Overview', key: '12117547', overview: true },\n // { label: 'Test Amb 1', key: 'YOUNGJX13', overview: true },\n // { label: 'Test Amb 2', key: 'COLEYAR', overview: true },\n // { label: 'Test Amb 3', key: 'CHANDSN', overview: true }\n // ];\n }\n\n customizeData() {\n /**\n * if isamb add item for non manager\n * if ismanager add item for manager overview\n */\n if (!this.dataHasExtras && this.authSet) {\n if (this.isSuperUser || !this.isAMBManager || this.isAMB) {\n this.data.unshift({ label: '* ' + this.userName, key: this.user511, type: 'authuser' });\n this.apiState = RequestState.Complete;\n }\n if (this.isAMBManager) {\n this.data.unshift({ label: 'Manager Overview', key: this.userUPI, type: 'ambmanager' });\n }\n this.dataHasExtras = true;\n }\n }\n\n ngOnDestroy(): void {\n if (this.requestHandler !== undefined) {\n this.requestHandler.cancelSubscription();\n }\n }\n\n getDataItemByKeyField(keyField) {\n for (const item of this.data) {\n if (keyField === item.key) {\n return item;\n }\n }\n return null;\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const dataItem = this.getDataItemByKeyField(selectedItem);\n if (dataItem.type === 'authuser') {\n this.personaService.setPersonaOption(PersonaTypes.ManagersSpecifcAmb, this.user511, this.userName);\n } else if (dataItem.type === 'ambmanager') {\n this.personaService.setPersonaOption(PersonaTypes.ManagerOverview, this.userUPI, this.userName);\n } else {\n this.personaService.setPersonaOption(PersonaTypes.ManagersSpecifcAmb, dataItem.key, dataItem.label);\n }\n }\n}\n","import {Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-geo-location-selector',\n templateUrl: './geo-location-selector.component.html',\n styleUrls: ['./geo-location-selector.component.scss']\n})\nexport class GeoLocationSelectorComponent implements OnInit, OnDestroy {\n selectedTab = 'areas';\n selectedItem;\n requestHandler;\n\n @Input() apiConfig;\n\n apiState;\n areaData = [];\n countryData = [];\n molecularOrgData = [];\n regionData = [];\n serviceManagerData = [];\n\n // selectedArea;\n // selectedCountry;\n // selectedMolecularOrg;\n // selectedRegion;\n // selectedServiceManager;\n\n constructor(private apiService: ApiService, private personaService: PersonaService) { }\n\n ngOnInit(): void {\n let apiRoute = null;\n if (this.apiConfig === 'serviceMetrics') {\n apiRoute = '/geography_service';\n }\n if (this.apiConfig === 'ambassador') {\n apiRoute = '/geography_amb';\n }\n this.requestHandler = this.apiService.get(apiRoute);\n this.requestHandler.sendRequest(apiRoute);\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n let buildData;\n\n // areas\n buildData = [];\n if (apiData.areas) {\n for (const location of apiData.areas) {\n buildData.push({\n label: location.name,\n key: location.id\n });\n }\n }\n this.areaData = buildData;\n\n // countries\n buildData = [];\n if (apiData.countries) {\n for (const location of apiData.countries) {\n buildData.push({\n label: location.name,\n key: location.id\n });\n }\n }\n this.countryData = buildData;\n\n // molecular orgs\n buildData = [];\n if (apiData.molecularorgs) {\n for (const location of apiData.molecularorgs) {\n buildData.push({\n label: location.name,\n key: location.id\n });\n }\n }\n this.molecularOrgData = buildData;\n\n // regions\n buildData = [];\n if (apiData.regions) {\n for (const location of apiData.regions) {\n buildData.push({\n label: location.name,\n key: location.id\n });\n }\n }\n this.regionData = buildData;\n\n // service managers\n buildData = [];\n if (apiData.servicemanagers) {\n for (const location of apiData.servicemanagers) {\n buildData.push({\n label: location.name,\n key: location.id\n });\n }\n }\n this.serviceManagerData = buildData;\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.GEO);\n if (this.selectedItem !== '' && this.selectedItem !== null) {\n this.selectedTab = this.getTypeOfSelectedItem(this.selectedItem);\n }\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.GEO);\n if (this.selectedItem !== '' && this.selectedItem !== null && this.apiState === RequestState.Complete) {\n this.selectedTab = this.getTypeOfSelectedItem(this.selectedItem);\n }\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.GEO);\n if (this.selectedItem !== '' && this.selectedItem !== null) {\n this.selectedTab = this.getTypeOfSelectedItem(this.selectedItem);\n }\n });\n }\n\n getTypeOfSelectedItem(selectedItem) {\n for (const item of this.areaData) {\n if (item.key === selectedItem) {\n return 'areas';\n }\n }\n for (const item of this.countryData) {\n if (item.key === selectedItem) {\n return 'countries';\n }\n }\n for (const item of this.molecularOrgData) {\n if (item.key === selectedItem) {\n return 'molecular';\n }\n }\n for (const item of this.regionData) {\n if (item.key === selectedItem) {\n return 'regions';\n }\n }\n for (const item of this.serviceManagerData) {\n if (item.key === selectedItem) {\n return 'service';\n }\n }\n }\n\n getLabel(type, key) {\n let data = null;\n switch (type) {\n case 'areas':\n data = this.areaData;\n break;\n case 'countries':\n data = this.countryData;\n break;\n case 'molecular':\n data = this.molecularOrgData;\n break;\n case 'regions':\n data = this.regionData;\n break;\n case 'service':\n data = this.serviceManagerData;\n break;\n }\n if (data) {\n for (const item of data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n onSelectedChange(selectedTab) {\n this.selectedTab = selectedTab;\n }\n\n setSelectedItem(type, selectedItem) {\n this.selectedItem = selectedItem;\n this.selectedTab = type;\n const label = this.getLabel(type, selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.GEO, selectedItem, label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {SelectedManagerService} from '../../control_tower/selected-manager.service';\n\n@Component({\n selector: 'app-cua-manager-selector',\n templateUrl: './cua-manager-selector.component.html',\n styleUrls: ['./cua-manager-selector.component.scss']\n})\nexport class CuaManagerSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n private selectedManagerService: SelectedManagerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('cua/manager_list');\n this.requestHandler.sendRequest('cua/manager_list');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const user of apiData) {\n buildData.push({\n label: user.firstName + ' ' + user.lastName,\n key: user.mgr511,\n upi: user.mgrUpi\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.CuaManager);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.CuaManager);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.selectedManagerService.setManager(selectedItem.upi, selectedItem.key, selectedItem.label)\n this.personaService.setPersonaOption(PersonaTypes.CuaManager, selectedItem, label);\n this.selectedManagerService.setManager(selectedItem.upi, selectedItem.key, selectedItem.label)\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-manager-selector',\n templateUrl: './manager-selector.component.html',\n styleUrls: ['./manager-selector.component.scss']\n})\nexport class ManagerSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(private apiService: ApiService, private personaService: PersonaService) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/users/manager');\n this.requestHandler.sendRequest('/users/manager');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const user of apiData.users) {\n buildData.push({\n label: user.name,\n key: user.managerid\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Manager);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Manager);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.Manager, selectedItem, label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {AuthenticationService} from '../../authentication/authentication.service';\n\n@Component({\n selector: 'app-tss-ambassador-selector',\n templateUrl: './tss-ambassador-selector.component.html',\n styleUrls: ['./tss-ambassador-selector.component.scss']\n})\nexport class TssAmbassadorSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n userName;\n user511;\n userUPI;\n authSet = false;\n dataHasExtras = false;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n private authService: AuthenticationService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/users/tss');\n this.requestHandler.sendRequest('/users/tss');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const user of apiData.users) {\n buildData.push({\n label: user.firstname + ' ' + user.lastname,\n key: user.abbottid\n });\n }\n this.data = buildData;\n this.dataHasExtras = false;\n this.customizeData();\n }\n });\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n this.userName = userInfo.firstname + ' ' + userInfo.lastname;\n this.user511 = userInfo.abbottid;\n this.userUPI = userInfo.upi;\n this.authSet = true;\n this.customizeData();\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.TSS);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.TSS);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n customizeData() {\n if (!this.dataHasExtras && this.authSet) {\n this.data.unshift({ label: '* ' + this.userName, key: this.user511 });\n this.dataHasExtras = true;\n }\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.TSS, selectedItem, label);\n }\n}\n","export enum Personas {TssAmbassador, CuaManager, Manager, Customer, CtCustomer, CtAccount, Instrument, SN, CuaAmbManager, AccountRep, CuaAmb, AmbManager, GeoLocation, Account}\r\n","\r\n","\n","\n","
\n \n \n \n \n \n \n \n
\n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
","\n\n","\r\n\r\n","\n
\n
\n \n
\n
\n {{noResultsMessage}}\n
\n
\n
\n
\n

{{title}}

\n
\n
\n
\n
Loading...
\n
\n
\n
\n

{{title}}

\n
\n Please Type at least 4 characters Above to Search!\n
\n
\n
\n

{{title}}

\n
\n
\n
\n
Waiting...
\n
\n
\n
\n

{{title}}

\n
\n Request could not be called, a pre requisite failed.\n
\n
\n
\n

{{title}}

\n
\n There was an error!\n
\n
\n
","import {Component, Input, OnInit} from '@angular/core';\nimport {RequestState} from '../request-handler';\n\n@Component({\n selector: 'app-state-handler-search',\n templateUrl: './state-handler-search.component.html',\n styleUrls: ['./state-handler-search.component.scss']\n})\nexport class StateHandlerSearchComponent implements OnInit {\n RequestState = RequestState;\n @Input() requestState: RequestState;\n @Input() data;\n @Input() title;\n @Input() showTitle;\n @Input() noDataCheck: boolean = true;\n @Input() noResultsMessage = 'No Search Results Found!';\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n hasData(data) {\n if (!data) {\n return false;\n }\n if (Array.isArray(data) && data.length === 0) {\n return false;\n }\n return true;\n }\n}\n","
\n \n
\n
\n \n
\n
0\">\n
\n \n
100\" class=\"more-records-message\">\n {{totalRecordsReturned}} account1\">s listed out of {{totalRecordsFound}}.\n
Please narrow your search criteria more to view additional results.
\n
\n
\n
\n","import {Component, EventEmitter, OnInit, OnDestroy, Input, Output} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {ApiService} from '../../api/api.service';\nimport {FilterChoicesService} from '../../filter_selection/filter-choices.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-customer-select-list',\n templateUrl: './customer-select-list.component.html',\n styleUrls: ['./customer-select-list.component.scss']\n})\nexport class CustomerSelectListComponent implements OnInit, OnDestroy {\n apiRoute = 'cua/customer_search';\n requestHandler;\n RequestState = RequestState;\n state = RequestState.Waiting;\n data;\n keyField = 'key';\n displayField = 'label';\n @Input() selectedOption;\n @Output() itemSelect = new EventEmitter();\n totalRecordsFound;\n totalRecordsReturned;\n\n result = {\n data: []\n };\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n private filterChoices: FilterChoicesService,\n protected refreshHandlerService: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiRoute);\n this.requestHandler.sendRequest(this.apiRoute);\n this.requestHandler.onStateChange((state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n this.totalRecordsFound = apiData.totalRecordsFound;\n this.totalRecordsReturned = apiData.totalRecordsReturned;\n\n const buildData = [];\n for (const customer of apiData.data) {\n buildData.push({\n label: customer.customerName + ' (' + customer.customerNum + ')', // or customersrno\n key: customer.uniqueCustomerKey\n });\n }\n this.data = buildData;\n }\n });\n this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.apiRoute);\n }, this.requestHandler.getRelativeParams(this.apiRoute));\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n onValueChange(query) { // on search textbox change\n if (query.length >= 4) {\n this.filterChoices.setFilter('searchQueryCuaCustomer', query);\n }\n }\n\n onListItemSelect(key) {\n this.selectedOption = key;\n this.itemSelect.emit(this.selectedOption);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-ct-customer-selector',\n templateUrl: './ct-customer-selector.component.html',\n styleUrls: ['./ct-customer-selector.component.scss']\n})\nexport class CtCustomerSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('cua/customer_search');\n this.requestHandler.sendRequest('cua/customer_search');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const customer of apiData.data) {\n buildData.push({\n label: customer.customerName, // or customersrno\n key: customer.uniqueCustomerKey\n });\n }\n this.data = buildData;\n }\n });\n this.personaService.setCustomerOverride(true);\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Customer);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Customer);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.Customer, selectedItem, label);\n this.personaService.setCustomerOverride(true);\n }\n}\n","\n","
\n \n
\n
\n \n
\n
0\">\n
\n \n
100\" class=\"more-records-message\">\n {{totalRecordsReturned}} account1\">s listed out of {{totalRecordsFound}}.\n
Please narrow your search criteria more to view additional results.
\n
\n
\n
\n","import {Component, EventEmitter, OnInit, OnDestroy, Input, Output} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {ApiService} from '../../api/api.service';\nimport {FilterChoicesService} from '../../filter_selection/filter-choices.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-account-select-list',\n templateUrl: './account-select-list.component.html',\n styleUrls: ['./account-select-list.component.scss']\n})\nexport class AccountSelectListComponent implements OnInit, OnDestroy {\n apiRoute = 'cua/account_search';\n requestHandler;\n RequestState = RequestState;\n state = RequestState.Waiting;\n data;\n keyField = 'key';\n displayField = 'label';\n @Input() selectedOption;\n @Output() itemSelect = new EventEmitter();\n totalRecordsFound;\n totalRecordsReturned;\n\n result = {\n data: []\n };\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n private filterChoices: FilterChoicesService,\n protected refreshHandlerService: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiRoute);\n this.requestHandler.sendRequest(this.apiRoute);\n this.requestHandler.onStateChange((state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n this.totalRecordsFound = apiData.totalRecordsFound;\n this.totalRecordsReturned = apiData.totalRecordsReturned;\n\n const buildData = [];\n for (const account of apiData.data) {\n buildData.push({\n label: account.acctEntityName + ' (' + account.acctEntityId + ')',\n key: account.acctEntityId\n });\n }\n this.data = buildData;\n }\n });\n this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.apiRoute);\n }, this.requestHandler.getRelativeParams(this.apiRoute));\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n onValueChange(query) { // on search textbox change\n if (query.length >= 4) {\n this.filterChoices.setFilter('searchQueryCuaAccount', query);\n }\n }\n\n onListItemSelect(key) {\n this.selectedOption = key;\n this.itemSelect.emit(this.selectedOption);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-ct-account-selector',\n templateUrl: './ct-account-selector.component.html',\n styleUrls: ['./ct-account-selector.component.scss']\n})\nexport class CtAccountSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('cua/account_search');\n this.requestHandler.sendRequest('cua/account_search');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const customer of apiData.data) {\n buildData.push({\n label: customer.\n acctEntityName, // or customersrno\n key: customer.acctEntityId\n });\n }\n this.data = buildData;\n }\n });\n this.personaService.setCustomerOverride(true);\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Account);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Account);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.Account, selectedItem, label);\n this.personaService.setCustomerOverride(true);\n }\n}\n","\n","\n \n
{{menuText1}}
\n
{{menuText2}}
\n
\n \n
\n
1\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n\n","import { Component, OnInit, ElementRef, HostListener, ViewChild, Input, ChangeDetectorRef } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {Personas} from '../../configuration/personas';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-persona-selector',\n templateUrl: './persona-selector.component.html',\n styleUrls: ['./persona-selector.component.scss']\n})\nexport class PersonaSelectorComponent implements OnInit {\n DashboardOptions = DashboardOptions;\n Personas = Personas;\n PersonaTypes = PersonaTypes;\n navFilterSelection: NavFilterSelection;\n menuViable = false;\n selectedTab = null;\n isAMB = false;\n isAMBManager = false;\n isSuperUser = false;\n isService = false;\n\n lastSelectedDashboardTabInfo = null;\n selectedType = null;\n selectedValue = null;\n selectedLabel = null;\n menuText1 = '';\n menuText2 = '';\n\n @Input() disabled = false;\n @Input() anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n @Input() popupAlign = { horizontal: 'left', vertical: 'top' };\n\n @ViewChild('anchor') public anchor: ElementRef;\n @ViewChild('popup', { read: ElementRef }) public popup: ElementRef;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private authService: AuthenticationService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService,\n private cdRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n this.isAMB = userInfo.isAMB;\n this.isAMBManager = userInfo.isAMBManager;\n this.isSuperUser = userInfo.isSuperUser;\n this.updateSelections();\n });\n\n this.personaService.onPersonaChoiceUpdate(() => {\n this.updateSelections();\n });\n this.selectedTabService.onTabChange(() => {\n this.updateSelections();\n });\n this.updateSelections();\n this.isService = this.personaService.getServiceVsAmbState();\n this.onResize();\n }\n\n updateSelections() {\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n const level1Choice = this.personaService.getLevel1Choice();\n this.selectedType = level1Choice.type;\n this.selectedValue = level1Choice.value;\n this.selectedLabel = level1Choice.label;\n\n if (this.selectedType === null || this.selectedType === undefined) {\n if (this.lastSelectedDashboardTabInfo === DashboardOptions.dashboard) {\n this.menuText1 = 'Select TSS, Manager or Location';\n this.selectedType = PersonaTypes.TSS;\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.customer) {\n this.menuText1 = 'Select Location';\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.instruments) {\n this.menuText1 = 'Select Location';\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.ambassador) {\n const textPieces = [];\n if (this.isAMB) {\n textPieces.push('Ambassador');\n } else if (this.isAMBManager) {\n textPieces.push('Ambassador');\n textPieces.push('Manager');\n this.selectedType = PersonaTypes.AbbottIdAmb;\n } else if (this.isSuperUser) {\n textPieces.push('Location');\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.controltower) {\n textPieces.push('Customer');\n }\n this.menuText1 = 'Select ' + this.buildPhrase(textPieces);\n }\n this.menuText2 = '';\n } else {\n if (this.selectedType === PersonaTypes.GEO) {\n this.menuText1 = 'Location';\n } else if (this.selectedType === PersonaTypes.CuaManager) {\n this.menuText1 = 'Manager';\n } else if (this.selectedType === PersonaTypes.ManagerOverview) {\n this.menuText1 = 'Manager';\n } else if (this.selectedType === PersonaTypes.CuaAmbManager) {\n this.menuText1 = 'Ambassador /Manager';\n } else if (this.selectedType === PersonaTypes.AccountRep) {\n this.menuText1 = 'Account Rep';\n } else if (this.selectedType === PersonaTypes.CuaAmb) {\n this.menuText1 = 'Ambassador /Manager';\n } else if (this.selectedType === PersonaTypes.ManagersSpecifcAmb) {\n this.menuText1 = 'Ambassador';\n } else if (this.selectedType === PersonaTypes.Amb) {\n this.menuText1 = 'Ambassador';\n } else if (this.selectedType === PersonaTypes.Account) {\n this.menuText1 = 'Account';\n } else {\n this.menuText1 = this.selectedType;\n }\n this.menuText2 = this.selectedLabel;\n }\n if (this.selectedType === PersonaTypes.Customer) {\n this.selectedType = PersonaTypes.CtCustomer;\n }\n this.onSelectedChange(this.selectedType);\n this.cdRef.detectChanges();\n }\n\n buildPhrase(list) {\n list[list.length - 1] = 'or ' + list[list.length - 1];\n let str = list.join(', ');\n const pos = str.lastIndexOf(',');\n str = str.substring(0, pos) + str.substring(pos + 1);\n return str;\n }\n\n onToggle(): void {\n if (!this.disabled) {\n this.menuViable = !this.menuViable;\n }\n }\n\n isActiveOption(persona) {\n return this.navFilterSelection.personaOptions.includes(persona);\n }\n\n getMenuTabOptions() {\n const isService = this.personaService.getServiceVsAmbState();\n const menuTabs = [Personas.TssAmbassador, Personas.Manager, Personas.CuaManager, Personas.AccountRep];\n if (this.isAMBManager || this.isAMB || this.isSuperUser) {\n menuTabs.push(Personas.AmbManager);\n }\n if (isService || this.isSuperUser) {\n menuTabs.push(Personas.GeoLocation);\n }\n return menuTabs;\n }\n\n countActiveOptions(personas) {\n let count = 0;\n for (const persona of personas) {\n if (this.navFilterSelection.personaOptions.includes(persona)) {\n count += 1;\n }\n }\n return count;\n }\n\n onSelectedChange(selectedPersona) {\n if (\n selectedPersona === PersonaTypes.ManagersSpecifcAmb\n || selectedPersona === PersonaTypes.Amb\n ) {\n this.selectedTab = PersonaTypes.ManagerOverview;\n } else {\n this.selectedTab = selectedPersona;\n }\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if (!this.contains(event.target) && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (target.classList.contains('list-group-item')) {\n return false;\n }\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n}\n","import {Input, OnInit} from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {FilterChoicesService} from '../filter-choices.service';\n\nexport abstract class ToggleSwitchComponent implements OnInit {\n @Input() displayTitles;\n stateOn = true;\n navFilterSelection: NavFilterSelection;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n protected filterChoices: FilterChoicesService\n ) { }\n\n ngOnInit(): void {\n this.stateOn = this.defaultValue();\n if (!this.filterChoices.isFilterSet(this.filterKey())) {\n this.filterChoices.setFilter(this.filterKey(), this.stateOn);\n } else {\n this.stateOn = this.filterChoices.getFilter(this.filterKey());\n }\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n }\n\n abstract filterKey();\n abstract defaultValue();\n\n toggle() {\n this.stateOn = !this.stateOn;\n this.filterChoices.setFilter(this.filterKey(), this.stateOn);\n }\n}\n","\n \n \n \n Legacy Customer List\n \n \n Current Customer List\n \n \n","import { Component } from '@angular/core';\nimport {ToggleSwitchComponent} from '../toggle-switch.component';\n\n@Component({\n selector: 'app-customer-toggle',\n templateUrl: './customer-toggle.component.html',\n styleUrls: ['./customer-toggle.component.scss']\n})\nexport class CustomerToggleComponent extends ToggleSwitchComponent {\n filterKey() {\n return 'customerToggle';\n }\n defaultValue() {\n return false;\n }\n}\n","\n \n \n \n My Instruments for Customers\n \n \n All Instruments for Customers\n \n \n","import { Component } from '@angular/core';\nimport {ToggleSwitchComponent} from '../toggle-switch.component';\n\n@Component({\n selector: 'app-instrument-toggle',\n templateUrl: './instrument-toggle.component.html',\n styleUrls: ['./instrument-toggle.component.scss']\n})\nexport class InstrumentToggleComponent extends ToggleSwitchComponent {\n filterKey() {\n return 'instrumentToggle';\n }\n defaultValue() {\n return true;\n }\n}\n","\n \n \n \n Customers w/Track Systems\n \n \n All Customers\n \n \n","import { Component } from '@angular/core';\nimport {ToggleSwitchComponent} from '../toggle-switch.component';\n\n@Component({\n selector: 'app-track-toggle',\n templateUrl: './track-toggle.component.html',\n styleUrls: ['./track-toggle.component.scss']\n})\nexport class TrackToggleComponent extends ToggleSwitchComponent {\n filterKey() {\n return 'trackToggle';\n }\n defaultValue() {\n return false;\n }\n}\n","\n \n \n \n Flagship Instruments\n \n \n All Instruments\n \n \n","import { Component } from '@angular/core';\nimport {ToggleSwitchComponent} from '../toggle-switch.component';\n\n@Component({\n selector: 'app-flagship-toggle',\n templateUrl: './flagship-toggle.component.html',\n styleUrls: ['./flagship-toggle.component.scss']\n})\nexport class FlagshipToggleComponent extends ToggleSwitchComponent {\n filterKey() {\n return 'flagshipToggle';\n }\n defaultValue() {\n return false;\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n \n \n","import {Component, Input, OnInit} from '@angular/core';\nimport {NavbarBuilderService} from '../navbar-builder.service';\nimport {NavFilterSelection} from '../../configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-parameter-switches',\n templateUrl: './parameter-switches.component.html',\n styleUrls: ['./parameter-switches.component.scss']\n})\nexport class ParameterSwitchesComponent implements OnInit {\n navFilterSelection: NavFilterSelection;\n\n @Input() displayTitles;\n\n constructor(private navbarBuilderService: NavbarBuilderService) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-account-selector',\n templateUrl: './account.component.html',\n styleUrls: ['./account.component.scss']\n})\nexport class AccountComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/search/accountdetails');\n this.requestHandler.sendRequest('/search/accountdetails');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const account of apiData.accountdetails) {\n buildData.push({\n label: account.accountname,\n key: account.accountid\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Account);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Account);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.Account, selectedItem, label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-sn-selector',\n templateUrl: './sn-selector.component.html',\n styleUrls: ['./sn-selector.component.scss']\n})\nexport class SnSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/productline/sn');\n this.requestHandler.sendRequest('/productline/sn');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const productline of apiData.productlines) {\n buildData.push({\n label: productline.productname + ': ' + productline.sn,\n sub_label: productline.country,\n key: productline.productlineid\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.SN);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.SN);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.SN, selectedItem, label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-instrument-selector',\n templateUrl: './instrument-selector.component.html',\n styleUrls: ['./instrument-selector.component.scss']\n})\nexport class InstrumentSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService,\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/productline/details');\n this.requestHandler.sendRequest('/productline/details');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const productline of apiData.productlines) {\n buildData.push({\n label: productline.productname,\n key: productline.productlineid\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.ProductLine);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.ProductLine);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.ProductLine, selectedItem, label);\n }\n}\n","import {Component, OnDestroy, OnInit} from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-customer-selector',\n templateUrl: './customer-selector.component.html',\n styleUrls: ['./customer-selector.component.scss']\n})\nexport class CustomerSelectorComponent implements OnInit, OnDestroy {\n apiState;\n data = [];\n selectedItem;\n requestHandler;\n\n constructor(\n private apiService: ApiService,\n private personaService: PersonaService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get('/customer/details');\n this.requestHandler.sendRequest('/customer/details');\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const customer of apiData.customers) {\n buildData.push({\n label: customer.name + ' - ' + customer.customersrno, // or customersrno\n sub_label: customer.city,\n key: customer.customerid\n });\n }\n this.data = buildData;\n }\n });\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Customer);\n this.personaService.onPersonaChoiceUpdate(() => {\n this.selectedItem = this.personaService.getPersonaOption(PersonaTypes.Customer);\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.personaService.setPersonaOption(PersonaTypes.Customer, selectedItem, label);\n }\n}\n","\n","\n","\n","\n\n","\n \n
{{menuText1}}
\n
{{menuText2}}
\n
\n \n
\n
1\">\n \n \n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n\n","import { Component, OnInit, ElementRef, HostListener, ViewChild, Input } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {Personas} from '../../configuration/personas';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-persona-selector2',\n templateUrl: './persona-selector2.component.html',\n styleUrls: ['./persona-selector2.component.scss']\n})\nexport class PersonaSelector2Component implements OnInit {\n DashboardOptions = DashboardOptions;\n Personas = Personas;\n PersonaTypes = PersonaTypes;\n navFilterSelection: NavFilterSelection;\n menuViable = false;\n selectedTab = null;\n isAMB = false;\n isAMBManager = false;\n isSuperUser = false;\n\n lastSelectedDashboardTabInfo = null;\n selectedType = null;\n selectedValue = null;\n selectedLabel = null;\n menuText1 = '';\n menuText2 = '';\n\n @Input() anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n @Input() popupAlign = { horizontal: 'left', vertical: 'top' };\n\n @ViewChild('anchor') public anchor: ElementRef;\n @ViewChild('popup', { read: ElementRef }) public popup: ElementRef;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private authService: AuthenticationService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n this.isAMB = userInfo.isAMB;\n this.isAMBManager = userInfo.isAMBManager;\n this.isSuperUser = userInfo.isSuperUser;\n this.updateSelections();\n });\n\n this.personaService.onPersonaChoiceUpdate(() => {\n this.updateSelections();\n });\n this.selectedTabService.onTabChange(() => {\n this.updateSelections();\n });\n this.updateSelections();\n this.onResize();\n }\n\n updateSelections() {\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n const level2Choice = this.personaService.getLevel2Choice();\n if (level2Choice) {\n this.selectedType = level2Choice.type;\n this.selectedValue = level2Choice.value;\n this.selectedLabel = level2Choice.label;\n\n if (this.selectedType === null\n || this.selectedType === undefined\n || this.selectedValue === null\n || this.selectedValue === undefined\n || this.selectedValue === ''\n || this.selectedValue === 'all'\n ) {\n if (\n this.lastSelectedDashboardTabInfo === DashboardOptions.customer\n || this.lastSelectedDashboardTabInfo === DashboardOptions.controltower\n ) {\n this.menuText1 = 'Select Customer';\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.instruments) {\n this.menuText1 = 'Select Instrument or SN';\n this.selectedType = PersonaTypes.ProductLine;\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.ambassador) {\n this.menuText1 = 'Select Account';\n this.selectedType = PersonaTypes.Account;\n }\n this.menuText2 = '';\n } else {\n this.menuText1 = this.selectedType;\n this.menuText2 = this.selectedLabel;\n }\n this.onSelectedChange(this.selectedType);\n } else if (this.lastSelectedDashboardTabInfo === DashboardOptions.controltower) {\n this.menuText1 = 'Select Customer';\n }\n }\n\n onToggle(): void {\n this.menuViable = !this.menuViable;\n }\n\n isActiveOption(persona) {\n return this.navFilterSelection.personaOptions.includes(persona);\n }\n\n countActiveOptions(personas) {\n let count = 0;\n for (const persona of personas) {\n if (this.navFilterSelection.personaOptions.includes(persona)) {\n count += 1;\n }\n }\n return count;\n }\n\n onSelectedChange(selectedPersona) {\n this.selectedTab = selectedPersona;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if (!this.contains(event.target) && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (target.classList.contains('list-group-item')) {\n return false;\n }\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { EventEmitter, TemplateRef, Component, ElementRef, Input, Output, HostBinding, Optional, InjectionToken, Renderer2, ChangeDetectorRef, ContentChild, ViewChild, HostListener, Injectable, isDevMode, ComponentFactoryResolver, Inject, NgZone, Directive, Host, ViewChildren, ViewContainerRef, forwardRef, NgModule } from '@angular/core';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { Subject, merge, Subscription, of } from 'rxjs';\nimport { filter, map, take, share, tap, switchMap, takeUntil } from 'rxjs/operators';\nimport { DraggableDirective, isChanged, isDocumentAvailable, DraggableModule } from '@progress/kendo-angular-common';\nimport { offset, scrollPosition, positionWithScroll, getDocumentElement, getWindowViewPort } from '@progress/kendo-popup-common';\nimport { Button } from '@progress/kendo-angular-buttons';\nimport { CommonModule } from '@angular/common';\n\n/**\n * Specifies the action buttons of the Dialog\n * ([see example]({% slug actionbuttons_dialog %})).\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\n\nfunction DialogActionsComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!actions\"]);\n} }\nfunction DialogActionsComponent_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {\n const _r122 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function DialogActionsComponent_ng_container_1_button_1_Template_button_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r122); const action_r120 = ctx.$implicit; const ctx_r121 = ɵngcc0.ɵɵnextContext(2); return ctx_r121.onButtonClick(action_r120, $event); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const action_r120 = ctx.$implicit;\n const ctx_r119 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r119.buttonClass(action_r120));\n ɵngcc0.ɵɵattribute(\"aria-label\", action_r120.text);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", action_r120.text, \" \");\n} }\nfunction DialogActionsComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, DialogActionsComponent_ng_container_1_button_1_Template, 2, 3, \"button\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r117 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r117.actions);\n} }\nfunction DialogActionsComponent_2_ng_template_0_Template(rf, ctx) { }\nfunction DialogActionsComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialogActionsComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r118 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r118.actions);\n} }\nconst _c0 = [\"*\"];\nvar I18N_1;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.dialog.closeTitle\n */ \n const MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_2 = goog.getMsg(\"Close\");\n I18N_1 = MSG_EXTERNAL_7499923323865444383$$DIST_FESM2015_INDEX_JS_2;\n}\nelse {\n I18N_1 = $localize `:kendo.dialog.closeTitle|The title of the close button␟9b2bd34897f127e69e5f02f64692fca98a5a7572␟7499923323865444383:Close`;\n}\nconst _c3 = [\"closeTitle\", I18N_1];\nfunction DialogComponent_kendo_dialog_titlebar_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-dialog-titlebar\", 7);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r124 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"closeTitle\", ctx_r124.closeTitle)(\"id\", ctx_r124.titleId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r124.title);\n} }\nfunction DialogComponent_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!title\"]);\n} }\nfunction DialogComponent_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 1, [\"*ngIf\", \"!contentTemplate\"]);\n} }\nfunction DialogComponent_8_ng_template_0_Template(rf, ctx) { }\nfunction DialogComponent_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DialogComponent_8_ng_template_0_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r127 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r127.contentTemplate);\n} }\nfunction DialogComponent_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 2, [\"*ngIf\", \"!actions\"]);\n} }\nfunction DialogComponent_kendo_dialog_actions_10_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-dialog-actions\", 9);\n} if (rf & 2) {\n const ctx_r129 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"actions\", ctx_r129.actions)(\"layout\", ctx_r129.actionsLayout);\n} }\nconst _c4 = [[[\"kendo-dialog-titlebar\"]], \"*\", [[\"kendo-dialog-actions\"]]];\nconst _c5 = [\"kendo-dialog-titlebar\", \"*\", \"kendo-dialog-actions\"];\nfunction WindowTitleBarComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!template\"]);\n} }\nfunction WindowTitleBarComponent_1_ng_template_0_Template(rf, ctx) { }\nconst _c6 = function (a0) { return { \"$implicit\": a0 }; };\nfunction WindowTitleBarComponent_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowTitleBarComponent_1_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r132 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r132.template)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(2, _c6, ctx_r132.service));\n} }\nvar I18N_7;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the close button\n * @meaning kendo.window.closeTitle\n */ \n const MSG_EXTERNAL_2849207436137160812$$DIST_FESM2015_INDEX_JS_8 = goog.getMsg(\"Close\");\n I18N_7 = MSG_EXTERNAL_2849207436137160812$$DIST_FESM2015_INDEX_JS_8;\n}\nelse {\n I18N_7 = $localize `:kendo.window.closeTitle|The title of the close button␟bb50cb526949482fc976fd868573ab283580ee69␟2849207436137160812:Close`;\n}\nvar I18N_9;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the restore button\n * @meaning kendo.window.restoreTitle\n */ \n const MSG_EXTERNAL_3443120027481340803$$DIST_FESM2015_INDEX_JS_10 = goog.getMsg(\"Restore\");\n I18N_9 = MSG_EXTERNAL_3443120027481340803$$DIST_FESM2015_INDEX_JS_10;\n}\nelse {\n I18N_9 = $localize `:kendo.window.restoreTitle|The title of the restore button␟9a9ce231f0396e40adcfa80bfa76e546e0085be0␟3443120027481340803:Restore`;\n}\nvar I18N_11;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the maximize button\n * @meaning kendo.window.maximizeTitle\n */ \n const MSG_EXTERNAL_7793415109119115257$$DIST_FESM2015_INDEX_JS_12 = goog.getMsg(\"Maximize\");\n I18N_11 = MSG_EXTERNAL_7793415109119115257$$DIST_FESM2015_INDEX_JS_12;\n}\nelse {\n I18N_11 = $localize `:kendo.window.maximizeTitle|The title of the maximize button␟42bc654ef8767c5df5277aa88941b94f8d373b4d␟7793415109119115257:Maximize`;\n}\nvar I18N_13;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the minimize button\n * @meaning kendo.window.minimizeTitle\n */ \n const MSG_EXTERNAL_7581084655285341827$$DIST_FESM2015_INDEX_JS_14 = goog.getMsg(\"Minimize\");\n I18N_13 = MSG_EXTERNAL_7581084655285341827$$DIST_FESM2015_INDEX_JS_14;\n}\nelse {\n I18N_13 = $localize `:kendo.window.minimizeTitle|The title of the minimize button␟7ca9f9b41a23760f7f74e91ee4c76d5a5f4a706c␟7581084655285341827:Minimize`;\n}\nconst _c15 = [\"closeTitle\", I18N_7, \"restoreTitle\", I18N_9, \"maximizeTitle\", I18N_11, \"minimizeTitle\", I18N_13];\nfunction WindowComponent_kendo_window_titlebar_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-window-titlebar\", 5);\n ɵngcc0.ɵɵelementStart(1, \"div\", 6);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"div\", 7);\n ɵngcc0.ɵɵelement(4, \"button\", 8);\n ɵngcc0.ɵɵelement(5, \"button\", 9);\n ɵngcc0.ɵɵelement(6, \"button\", 10);\n ɵngcc0.ɵɵelement(7, \"button\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r134 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"template\", ctx_r134.titleBarTemplate);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r134.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r134.minimizeButtonTitle)(\"aria-label\", ctx_r134.minimizeButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r134.maximizeButtonTitle)(\"aria-label\", ctx_r134.maximizeButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r134.restoreButtonTitle)(\"aria-label\", ctx_r134.restoreButtonTitle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r134.closeButtonTitle)(\"aria-label\", ctx_r134.closeButtonTitle);\n} }\nfunction WindowComponent_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!showDefaultTitleBar\"]);\n} }\nfunction WindowComponent_div_5_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 1, [\"*ngIf\", \"!contentTemplate\"]);\n} }\nfunction WindowComponent_div_5_2_ng_template_0_Template(rf, ctx) { }\nfunction WindowComponent_div_5_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowComponent_div_5_2_ng_template_0_Template, 0, 0, \"ng-template\", 13);\n} if (rf & 2) {\n const ctx_r139 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r139.contentTemplate);\n} }\nfunction WindowComponent_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12);\n ɵngcc0.ɵɵtemplate(1, WindowComponent_div_5_1_Template, 1, 0, undefined, 2);\n ɵngcc0.ɵɵtemplate(2, WindowComponent_div_5_2_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r136 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"hidden\", ctx_r136.state === \"minimized\" && ctx_r136.keepContent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r136.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r136.contentTemplate);\n} }\nfunction WindowComponent_ng_template_6_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 15);\n} if (rf & 2) {\n const dir_r142 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"direction\", dir_r142);\n} }\nfunction WindowComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, WindowComponent_ng_template_6_div_0_Template, 1, 1, \"div\", 14);\n} if (rf & 2) {\n const ctx_r137 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r137.resizeDirections);\n} }\nconst _c16 = [[[\"kendo-window-titlebar\"]], \"*\"];\nconst _c17 = [\"kendo-window-titlebar\", \"*\"];\nclass DialogActionsComponent {\n constructor(el) {\n this.el = el;\n /**\n * Specifies the possible layout of the action buttons.\n */\n this.layout = 'stretched';\n /**\n * Fires when the user clicks an action button.\n */\n this.action = new EventEmitter();\n this.buttonGroupClassName = true;\n }\n get className() {\n return this.layout === 'stretched';\n }\n /**\n * @hidden\n */\n actionTemplate() {\n return this.actions instanceof TemplateRef;\n }\n /**\n * @hidden\n */\n onButtonClick(action, _e) {\n this.action.emit(action);\n }\n /**\n * @hidden\n */\n buttonClass(action) {\n const classes = ['k-button'];\n if (action.primary) {\n classes.push('k-primary');\n }\n return classes.join(' ');\n }\n}\nDialogActionsComponent.ɵfac = function DialogActionsComponent_Factory(t) { return new (t || DialogActionsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nDialogActionsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DialogActionsComponent, selectors: [[\"kendo-dialog-actions\"]], hostVars: 4, hostBindings: function DialogActionsComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-dialog-buttongroup\", ctx.buttonGroupClassName)(\"k-dialog-button-layout-stretched\", ctx.className);\n } }, inputs: { layout: \"layout\", actions: \"actions\" }, outputs: { action: \"action\" }, ngContentSelectors: _c0, decls: 3, vars: 3, consts: [[4, \"ngIf\"], [\"type\", \"button\", 3, \"ngClass\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"type\", \"button\", 3, \"ngClass\", \"click\"], [3, \"ngTemplateOutlet\"]], template: function DialogActionsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, DialogActionsComponent_0_Template, 1, 0, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, DialogActionsComponent_ng_container_1_Template, 2, 1, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(2, DialogActionsComponent_2_Template, 1, 1, undefined, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actions);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actionTemplate());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.actionTemplate());\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc1.NgClass, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nDialogActionsComponent.ctorParameters = () => [\n { type: ElementRef }\n];\nDialogActionsComponent.propDecorators = {\n actions: [{ type: Input }],\n layout: [{ type: Input }],\n action: [{ type: Output }],\n buttonGroupClassName: [{ type: HostBinding, args: ['class.k-dialog-buttongroup',] }],\n className: [{ type: HostBinding, args: ['class.k-dialog-button-layout-stretched',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogActionsComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-actions',\n template: `\n \n \n \n {{ action.text }}\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }]; }, { layout: [{\n type: Input\n }], action: [{\n type: Output\n }], buttonGroupClassName: [{\n type: HostBinding,\n args: ['class.k-dialog-buttongroup']\n }], className: [{\n type: HostBinding,\n args: ['class.k-dialog-button-layout-stretched']\n }], actions: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Represents the [Kendo UI DialogTitleBar component for Angular]({% slug api_dialog_dialogtitlebarcomponent %}).\n *\n * It is used as part of the Dialog content when the component is created dynamically by using an [Angular service]({% slug service_dialog %}).\n */\nclass DialogTitleBarComponent {\n constructor(hostElement, localizationService) {\n this.hostElement = hostElement;\n this.localizationService = localizationService;\n /**\n * Fires when the close button of the title-bar is clicked.\n */\n this.close = new EventEmitter();\n }\n get className() {\n return true;\n }\n get closeButtonTitle() {\n return this.localizationService.get('closeTitle');\n }\n ngAfterViewChecked() {\n const element = this.hostElement.nativeElement;\n element.setAttribute('id', this.id);\n }\n /**\n * @hidden\n */\n onCloseClick(e) {\n e.preventDefault();\n const eventArgs = new PreventableEvent();\n this.close.emit(eventArgs);\n }\n}\nDialogTitleBarComponent.ɵfac = function DialogTitleBarComponent_Factory(t) { return new (t || DialogTitleBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService, 8)); };\nDialogTitleBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DialogTitleBarComponent, selectors: [[\"kendo-dialog-titlebar\"]], hostVars: 4, hostBindings: function DialogTitleBarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-window-titlebar\", ctx.className)(\"k-dialog-titlebar\", ctx.className);\n } }, inputs: { id: \"id\", closeTitle: \"closeTitle\" }, outputs: { close: \"close\" }, ngContentSelectors: _c0, decls: 5, vars: 2, consts: [[1, \"k-window-title\", \"k-dialog-title\"], [1, \"k-window-actions\", \"k-dialog-actions\"], [\"href\", \"#\", \"role\", \"button\", 1, \"k-button\", \"k-bare\", \"k-button-icon\", \"k-window-action\", \"k-dialog-action\", \"k-dialog-close\", 3, \"click\"], [1, \"k-icon\", \"k-i-x\"]], template: function DialogTitleBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1);\n ɵngcc0.ɵɵelementStart(3, \"a\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function DialogTitleBarComponent_Template_a_click_3_listener($event) { return ctx.onCloseClick($event); });\n ɵngcc0.ɵɵelement(4, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵattribute(\"title\", ctx.closeButtonTitle)(\"aria-label\", ctx.closeButtonTitle);\n } }, encapsulation: 2 });\n/** @nocollapse */\nDialogTitleBarComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: LocalizationService, decorators: [{ type: Optional }] }\n];\nDialogTitleBarComponent.propDecorators = {\n close: [{ type: Output }],\n id: [{ type: Input }],\n closeTitle: [{ type: Input }],\n className: [{ type: HostBinding, args: ['class.k-window-titlebar',] }, { type: HostBinding, args: ['class.k-dialog-titlebar',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogTitleBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-dialog-titlebar',\n template: `\n
\n \n
\n\n
\n \n \n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc2.LocalizationService, decorators: [{\n type: Optional\n }] }]; }, { close: [{\n type: Output\n }], className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }], id: [{\n type: Input\n }], closeTitle: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isTruthy = (value) => !!value;\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\nconst focusableRegex = /^(?:a|input|select|textarea|button|object)$/i;\n/**\n * @hidden\n */\nvar Keys;\n(function (Keys) {\n Keys[Keys[\"esc\"] = 27] = \"esc\";\n Keys[Keys[\"tab\"] = 9] = \"tab\";\n Keys[Keys[\"enter\"] = 13] = \"enter\";\n Keys[Keys[\"space\"] = 32] = \"space\";\n Keys[Keys[\"ctrl\"] = 17] = \"ctrl\";\n Keys[Keys[\"shift\"] = 16] = \"shift\";\n Keys[Keys[\"left\"] = 37] = \"left\";\n Keys[Keys[\"up\"] = 38] = \"up\";\n Keys[Keys[\"right\"] = 39] = \"right\";\n Keys[Keys[\"down\"] = 40] = \"down\";\n})(Keys || (Keys = {}));\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ESC_KEY = 'k-dialog-wrapper k-dialog-buttongroup k-dialog-action';\n/**\n * @hidden\n */\nconst DIALOG_ELEMENTS_HANDLING_ARROWS = 'k-dialog-buttongroup';\n/**\n * @hidden\n */\nconst WINDOW_CLASSES = 'k-window';\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n return !!(rect.width && rect.height) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst isFocusable = (element, checkVisibility = true) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const validTabIndex = tabIndex !== null && !isNaN(tabIndex) && tabIndex > -1;\n let focusable = false;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled;\n }\n else {\n focusable = validTabIndex;\n }\n return focusable && (!checkVisibility || isVisible(element));\n }\n return false;\n};\n/**\n * @hidden\n */\nconst focusableSelector = [\n 'a[href]',\n 'area[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'iframe',\n 'object',\n 'embed',\n '*[tabindex]',\n '*[contenteditable]'\n].join(',');\n/**\n * @hidden\n */\nconst preventDefault = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\n/**\n * @hidden\n */\nconst RESIZE_DIRECTIONS = ['n', 'e', 's', 'w', 'se', 'sw', 'ne', 'nw'];\n/**\n * @hidden\n */\nconst OFFSET_STYLES = ['top', 'left', 'width', 'height'];\n/**\n * @hidden\n */\nconst isString = (value) => value instanceof String || typeof value === 'string';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === 'number' && isFinite(value);\n/**\n * @hidden\n */\nconst createValueWithUnit = (value) => value + (isNumber(value) ? 'px' : '');\n\n/**\n * The settings for the Dialog actions when the Dialog is opened through `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogAction {\n}\n/**\n * Indicates that the **Close** button is clicked. Used when the results from\n * the Dialogs that are opened through `DialogService` are filtered\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogCloseResult {\n}\n/**\n * The settings that can be used when the Dialog is opened through `DialogService`.\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogSettings {\n}\n/**\n * Holds references to the object instance and published events of the Dialog.\n * Controls the Dialogs that were opened through the `DialogService`\n * ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n */\nclass DialogRef {\n}\n\n/**\n * @hidden\n */\nconst DIALOG_LOCALIZATION_SERVICE = new InjectionToken('Dialog LocalizationService');\n\n/**\n * Represents the [Kendo UI Dialog component for Angular]({% slug overview_dialog_dialogs %}).\n */\nclass DialogComponent {\n constructor(_elRef, _renderer, localization, cdr) {\n this._elRef = _elRef;\n this._renderer = _renderer;\n this.cdr = cdr;\n /**\n * Specifies the layout of the action buttons in the Dialog.\n * This option is only applicable if the action buttons are specified through the `actions` options.\n *\n * @default 'stretched'\n */\n this.actionsLayout = 'stretched';\n /**\n * @hidden\n */\n this.titleId = null;\n /**\n * Fires when the user clicks an action button of the Dialog.\n * The event is fired only when the action buttons are specified through the `actions` options.\n */\n this.action = new EventEmitter();\n /**\n * Fires when the user clicks the **Close** button of the Dialog.\n */\n this.close = new EventEmitter();\n this.tabIndex = 0;\n this.subscriptions = [];\n this.direction = localization.rtl ? 'rtl' : 'ltr';\n this.subscriptions.push(localization.changes.subscribe(({ rtl }) => (this.direction = rtl ? 'rtl' : 'ltr')));\n this.titleId = this.generateTitleId();\n }\n get dir() {\n return this.direction;\n }\n /**\n * @hidden\n */\n onComponentKeydown(event) {\n const target = event.target;\n const parent = target.parentElement;\n if (hasClasses(target, DIALOG_ELEMENTS_HANDLING_ESC_KEY) || hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ESC_KEY)) {\n if (event.keyCode === Keys.esc) {\n this.close.emit(new DialogCloseResult());\n }\n }\n if (hasClasses(target, 'k-button') &&\n hasClasses(parent, DIALOG_ELEMENTS_HANDLING_ARROWS) &&\n (event.keyCode === Keys.left || event.keyCode === Keys.right)) {\n this.handleActionButtonFocus(parent, event.keyCode);\n }\n if (event.keyCode === Keys.tab) {\n this.keepFocusWithinComponent(target, event);\n }\n }\n ngAfterContentInit() {\n this.bubble('close', this.titlebarContent);\n if (this.titlebarContent) {\n this.titlebarContent.id = this.titleId;\n }\n }\n ngAfterViewInit() {\n this.handleInitialFocus();\n this.bubble('close', this.titlebarView);\n this.bubble('action', this.actionsView);\n if (this.titlebarView || this.titlebarContent) {\n //Needed for Dialogs created via service\n this._renderer.setAttribute(this._elRef.nativeElement.querySelector('.k-dialog'), 'aria-labelledby', this.titleId);\n }\n }\n ngOnInit() {\n this._renderer.removeAttribute(this._elRef.nativeElement, 'title');\n this.cdr.detectChanges();\n }\n ngOnDestroy() {\n this.subscriptions.forEach(s => s.unsubscribe());\n this.subscriptions = [];\n }\n /**\n * Focuses the wrapper of the Dialog component.\n */\n focus() {\n const wrapper = this._elRef.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n /**\n * @hidden\n */\n handleInitialFocus() {\n const wrapper = this._elRef.nativeElement;\n const primaryButton = wrapper.querySelector('.k-primary');\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else if (this.shouldFocusPrimary(primaryButton)) {\n primaryButton.focus();\n }\n else {\n wrapper.focus();\n }\n }\n /**\n * @hidden\n */\n handleActionButtonFocus(parent, key) {\n const focusableActionButtons = this.getAllFocusableChildren(parent);\n for (let i = 0; i < focusableActionButtons.length; i++) {\n const current = focusableActionButtons[i];\n if (current === document.activeElement) {\n if (key === Keys.left && i > 0) {\n focusableActionButtons[i - 1].focus();\n break;\n }\n if (key === Keys.right && i < focusableActionButtons.length - 1) {\n focusableActionButtons[i + 1].focus();\n break;\n }\n }\n }\n }\n /**\n * @hidden\n */\n keepFocusWithinComponent(target, event) {\n const firstFocusable = this._elRef.nativeElement;\n const lastFocusable = this.getLastFocusableElement(firstFocusable);\n const tabBeforeFirstFocusable = target === firstFocusable && event.shiftKey;\n const tabAfterLastFocusable = !event.shiftKey && isPresent(lastFocusable) && target === lastFocusable;\n const tabWithNoFocusable = !isPresent(lastFocusable) && !event.shiftKey;\n if (tabBeforeFirstFocusable || tabWithNoFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n if (tabAfterLastFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n }\n }\n /**\n * @hidden\n */\n shouldFocusPrimary(el) {\n return isPresent(el) && isFocusable(el);\n }\n /**\n * @hidden\n */\n getAllFocusableChildren(parent) {\n return parent.querySelectorAll(focusableSelector);\n }\n /**\n * @hidden\n */\n getLastFocusableElement(parent) {\n const all = this.getAllFocusableChildren(parent);\n return all.length > 0 ? all[all.length - 1] : null;\n }\n /**\n * @hidden\n */\n generateTitleId() {\n return 'kendo-dialog-title-' + Math.ceil(Math.random() * 1000000).toString();\n }\n get wrapperClass() {\n return true;\n }\n get styles() {\n const styles = {};\n if (this.width) {\n styles.width = createValueWithUnit(this.width);\n }\n if (this.height) {\n styles.height = createValueWithUnit(this.height);\n }\n if (this.minWidth) {\n styles.minWidth = createValueWithUnit(this.minWidth);\n }\n if (this.maxWidth) {\n styles.maxWidth = createValueWithUnit(this.maxWidth);\n }\n if (this.minHeight) {\n styles.minHeight = createValueWithUnit(this.minHeight);\n }\n if (this.maxHeight) {\n styles.maxHeight = createValueWithUnit(this.maxHeight);\n }\n return styles;\n }\n bubble(eventName, component) {\n if (component) {\n const emit = e => this[eventName].emit(e);\n const s = component[eventName].subscribe(emit);\n this.subscriptions.push(s);\n }\n }\n}\nDialogComponent.ɵfac = function DialogComponent_Factory(t) { return new (t || DialogComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nDialogComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DialogComponent, selectors: [[\"kendo-dialog\"]], contentQueries: function DialogComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DialogTitleBarComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titlebarContent = _t.first);\n } }, viewQuery: function DialogComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DialogTitleBarComponent, true);\n ɵngcc0.ɵɵviewQuery(DialogActionsComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titlebarView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.actionsView = _t.first);\n } }, hostVars: 4, hostBindings: function DialogComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function DialogComponent_keydown_HostBindingHandler($event) { return ctx.onComponentKeydown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-dialog-wrapper\", ctx.wrapperClass);\n } }, inputs: { actionsLayout: \"actionsLayout\", actions: \"actions\", autoFocusedElement: \"autoFocusedElement\", title: \"title\", width: \"width\", minWidth: \"minWidth\", maxWidth: \"maxWidth\", height: \"height\", minHeight: \"minHeight\", maxHeight: \"maxHeight\" }, outputs: { action: \"action\", close: \"close\" }, exportAs: [\"kendoDialog\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ])], ngContentSelectors: _c5, decls: 11, vars: 9, consts: [[\"kendoDialogLocalizedMessages\", \"\", 6, \"closeTitle\"], [1, \"k-overlay\"], [\"role\", \"dialog\", 1, \"k-widget\", \"k-window\", \"k-dialog\", 3, \"ngStyle\"], [3, \"closeTitle\", \"id\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"k-content\", \"k-window-content\", \"k-dialog-content\"], [3, \"actions\", \"layout\", 4, \"ngIf\"], [3, \"closeTitle\", \"id\"], [3, \"ngTemplateOutlet\"], [3, \"actions\", \"layout\"]], template: function DialogComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c4);\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c3);\n ɵngcc0.ɵɵelement(2, \"div\", 1);\n ɵngcc0.ɵɵelementStart(3, \"div\", 2);\n ɵngcc0.ɵɵtemplate(4, DialogComponent_kendo_dialog_titlebar_4_Template, 2, 3, \"kendo-dialog-titlebar\", 3);\n ɵngcc0.ɵɵtemplate(5, DialogComponent_5_Template, 1, 0, undefined, 4);\n ɵngcc0.ɵɵelementStart(6, \"div\", 5);\n ɵngcc0.ɵɵtemplate(7, DialogComponent_7_Template, 1, 0, undefined, 4);\n ɵngcc0.ɵɵtemplate(8, DialogComponent_8_Template, 1, 1, undefined, 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, DialogComponent_9_Template, 1, 0, undefined, 4);\n ɵngcc0.ɵɵtemplate(10, DialogComponent_kendo_dialog_actions_10_Template, 1, 2, \"kendo-dialog-actions\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"@overlayAppear\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.styles)(\"@dialogSlideInAppear\", undefined);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.title);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contentTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actions);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.actions);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc1.NgStyle, ɵngcc1.NgIf, DialogTitleBarComponent, ɵngcc1.NgTemplateOutlet, DialogActionsComponent]; }, encapsulation: 2, data: { animation: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ]),\n trigger('dialogSlideInAppear', [\n state('in', style({ transform: 'translate(0, 0)' })),\n transition('void => *', [style({ transform: 'translate(0, -10%)' }), animate('.3s cubic-bezier(.2, 1, .2, 1)')])\n ])\n ] } });\n/** @nocollapse */\nDialogComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nDialogComponent.propDecorators = {\n actions: [{ type: Input }],\n actionsLayout: [{ type: Input }],\n autoFocusedElement: [{ type: Input }],\n title: [{ type: Input }],\n width: [{ type: Input }],\n minWidth: [{ type: Input }],\n maxWidth: [{ type: Input }],\n height: [{ type: Input }],\n minHeight: [{ type: Input }],\n maxHeight: [{ type: Input }],\n action: [{ type: Output }],\n close: [{ type: Output }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabIndex',] }],\n titlebarContent: [{ type: ContentChild, args: [DialogTitleBarComponent,] }],\n titlebarView: [{ type: ViewChild, args: [DialogTitleBarComponent,] }],\n actionsView: [{ type: ViewChild, args: [DialogActionsComponent,] }],\n onComponentKeydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n wrapperClass: [{ type: HostBinding, args: ['class.k-dialog-wrapper',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('overlayAppear', [\n state('in', style({ opacity: 1 })),\n transition('void => *', [style({ opacity: 0.1 }), animate('.3s cubic-bezier(.2, .6, .4, 1)')])\n ]),\n trigger('dialogSlideInAppear', [\n state('in', style({ transform: 'translate(0, 0)' })),\n transition('void => *', [style({ transform: 'translate(0, -10%)' }), animate('.3s cubic-bezier(.2, 1, .2, 1)')])\n ])\n ],\n exportAs: 'kendoDialog',\n providers: [\n LocalizationService,\n {\n provide: DIALOG_LOCALIZATION_SERVICE,\n useExisting: LocalizationService\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.dialog'\n }\n ],\n selector: 'kendo-dialog',\n template: `\n \n
\n\n
\n {{ title }}\n \n\n
\n \n \n
\n\n \n \n
\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { actionsLayout: [{\n type: Input\n }], action: [{\n type: Output\n }], close: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], onComponentKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-dialog-wrapper']\n }], actions: [{\n type: Input\n }], autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], width: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], maxWidth: [{\n type: Input\n }], height: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], maxHeight: [{\n type: Input\n }], titlebarContent: [{\n type: ContentChild,\n args: [DialogTitleBarComponent]\n }], titlebarView: [{\n type: ViewChild,\n args: [DialogTitleBarComponent]\n }], actionsView: [{\n type: ViewChild,\n args: [DialogActionsComponent]\n }] }); })();\n\n/**\n * The base class which will be extended by a component that is provided as content through `content`\n * ([see example]({% slug service_dialog %}#toc-passing-title-content-and-actions-as-a-single-component)).\n */\nclass DialogContentBase {\n constructor(dialog) {\n this.dialog = dialog;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n if (this.dialogTitleBar) {\n // when opening component inside dialog with service AND the component has defined its own titlebar\n this.dialogTitleBar.close.pipe(filter((e) => !e.isDefaultPrevented())).subscribe(() => {\n this.dialog.close();\n });\n }\n if (this.dialogActions) {\n if (this.dialogActions.actions) {\n this.dialogActions.action.subscribe(action => this.dialog.dialog.instance.action.emit(action));\n }\n }\n }\n}\nDialogContentBase.ɵfac = function DialogContentBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nDialogContentBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DialogContentBase, viewQuery: function DialogContentBase_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DialogTitleBarComponent, true);\n ɵngcc0.ɵɵviewQuery(DialogActionsComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogTitleBar = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dialogActions = _t.first);\n } } });\nDialogContentBase.propDecorators = {\n dialogTitleBar: [{ type: ViewChild, args: [DialogTitleBarComponent,] }],\n dialogActions: [{ type: ViewChild, args: [DialogActionsComponent,] }]\n};\n\n\n/**\n * @hidden\n */\nclass DialogContainerService {\n set container(container) {\n DialogContainerService.container = container;\n }\n get container() {\n return DialogContainerService.container;\n }\n}\nDialogContainerService.ɵfac = function DialogContainerService_Factory(t) { return new (t || DialogContainerService)(); };\nDialogContainerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DialogContainerService, factory: DialogContainerService.ɵfac });\nDialogContainerService.container = null;\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogContainerService, [{\n type: Injectable\n }], null, null); })();\n\n// tslint:disable:max-line-length\nconst isNotComponent = (component) => isString(component) || component instanceof TemplateRef;\nclass DialogInjector {\n constructor(getDialogRef, parentInjector) {\n this.getDialogRef = getDialogRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === DialogRef) {\n return this.getDialogRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Dialog windows dynamically\n * ([see example]({% slug service_dialog %})).\n */\nclass DialogService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Dialog window. Requires an element in the application that uses the\n * [`kendoDialogContainer`]({% slug api_dialog_dialogcontainerdirective %}) directive.\n * Created Dialogs will be mounted in the DOM directly after that element.\n *\n * @param {DialogAction} options - The options that define the Dialog.\n * @returns {DialogRef} - A reference to the Dialog object and the convenience properties.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private dialogService: DialogService ) {}\n *\n * public open() {\n * var dialog = this.dialogService.open({\n * title: \"Please confirm\",\n * content: \"Are you sure?\",\n * actions: [\n * { text: \"No\" },\n * { text: \"Yes\", primary: true }\n * ]\n * });\n *\n * dialog.result.subscribe((result) => {\n * if (result instanceof DialogCloseResult) {\n * console.log(\"close\");\n * } else {\n * console.log(\"action\", result);\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(options) {\n const factory = this.resolver.resolveComponentFactory(DialogComponent);\n const container = options.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`\nCannot attach dialog to the page.\nAdd an element that uses the kendoDialogContainer directive, or set the 'appendTo' property.\nSee https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/.\n `);\n }\n // create DialogRef to (1) pass as result, (2) provide through injector\n const dialogRef = {\n close: () => {\n /* noop */\n },\n content: null,\n dialog: null,\n result: null\n };\n return this.initializeDialog(options.content, factory, container, dialogRef, options);\n }\n initializeDialog(component, factory, container, dialogRef, options) {\n const content = this.contentFrom(component, container, dialogRef);\n const dialog = container.createComponent(factory, undefined, undefined, content.nodes);\n dialogRef.dialog = dialog;\n dialog.changeDetectorRef.markForCheck();\n // copy @Input options to dialog instance\n this.applyOptions(dialog.instance, options);\n // create close handler and result stream\n const apiClose = new Subject();\n const close = (e) => {\n if (e instanceof PreventableEvent) {\n e = new DialogCloseResult();\n }\n apiClose.next(e || new DialogCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n dialog.destroy();\n };\n const result = merge(apiClose, \n // triggered when the titlebar or actions are defined in DialogSettings\n merge(dialog.instance.close, dialog.instance.action).pipe(map(e => (e instanceof PreventableEvent ? new DialogCloseResult() : e)), filter(e => {\n if (options.preventAction) {\n // add dialogRef only when using component\n const dialogRefParameter = isNotComponent(component) ? undefined : dialogRef;\n return !options.preventAction(e, dialogRefParameter);\n }\n return true;\n }))).pipe(take(1), \n // Takes care for multiple subscriptions:\n // We subscribe internaly and the user may subscribe to get a close result - dialog.result.subscribe().\n // This causes multiple subscriptions to the same source and thus multiple emissions. share() solves that.\n share());\n result.subscribe(close);\n dialogRef.close = close;\n dialogRef.result = result;\n if (component && isDevMode()) {\n const hasContentTitle = content.nodes[0] && content.nodes[0].length > 0;\n const hasContentActions = content.nodes[2] && content.nodes[2].length > 0;\n const multipleTitles = options.title && hasContentTitle;\n const multipleActions = options.actions && hasContentActions;\n if (component.prototype instanceof DialogContentBase) {\n // content component extends DialogContentBase\n if (multipleTitles || multipleActions) {\n console.warn(`\n Multiple Title and/or Actions configurations detected.\n When using a component as content, provide the title and actions either in the component's markup\n or via the title and actions properties of the DialogSettings object, but not both.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n else {\n if (hasContentTitle || hasContentActions) {\n console.warn(`\n When Title and/or Actions markup is provided in content component's template,\n the component needs to inherit the DialogContentBase class to ensure that close and result events are properly hooked.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/dialog/service/#toc-passing-title-content-and-actions-as-a-single-component'`);\n }\n }\n }\n return dialogRef;\n }\n applyOptions(instance, options) {\n instance.title = options.title;\n instance.actions = options.actions;\n instance.actionsLayout = options.actionsLayout || 'stretched';\n instance.width = options.width;\n instance.minWidth = options.minWidth;\n instance.maxWidth = options.maxWidth;\n instance.height = options.height;\n instance.minHeight = options.minHeight;\n instance.maxHeight = options.maxHeight;\n instance.autoFocusedElement = options.autoFocusedElement;\n instance.closeTitle = options.closeTitle;\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n }\n contentFrom(content, container, dialogRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let titleNodes = [];\n let actionNodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n // Component\n const injector = new DialogInjector(() => dialogRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n titleNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-titlebar'));\n nodes = [componentRef.location.nativeElement];\n actionNodes = Array.from(componentRef.location.nativeElement.querySelectorAll('kendo-dialog-actions'));\n dialogRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n titleNodes,\n nodes,\n actionNodes // \n ]\n };\n }\n}\nDialogService.ɵfac = function DialogService_Factory(t) { return new (t || DialogService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(DialogContainerService)); };\nDialogService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DialogService, factory: DialogService.ɵfac });\n/** @nocollapse */\nDialogService.ctorParameters = () => [\n { type: ComponentFactoryResolver },\n { type: DialogContainerService, decorators: [{ type: Inject, args: [DialogContainerService,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: DialogContainerService, decorators: [{\n type: Inject,\n args: [DialogContainerService]\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nlet newZIndex = 10002;\n/**\n * @hidden\n */\nconst DEFAULT_OPTIONS = {\n draggable: true,\n height: null,\n left: null,\n minHeight: 100,\n minWidth: 120,\n position: 'absolute',\n resizable: true,\n state: 'default',\n top: null,\n width: null\n};\n/**\n * @hidden\n */\nconst createMoveStream = (el, ev) => mouseDown => {\n return el.kendoDrag\n .pipe(takeUntil(el.kendoRelease.pipe(tap(() => { ev.emit(); }))), map(({ pageX, pageY }) => ({\n originalX: mouseDown.pageX,\n originalY: mouseDown.pageY,\n pageX,\n pageY\n })));\n};\n/**\n * @hidden\n */\nclass DragResizeService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.close = new EventEmitter();\n this.focus = new EventEmitter();\n this.change = new EventEmitter();\n this.stateChange = new EventEmitter();\n this.dragStart = new EventEmitter();\n this.dragEnd = new EventEmitter();\n this.resizeStart = new EventEmitter();\n this.resizeEnd = new EventEmitter();\n this.options = Object.assign({}, DEFAULT_OPTIONS);\n this.lastAction = null;\n this.subscriptions = new Subscription();\n this.dragSubscription = new Subscription();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.dragSubscription) {\n this.dragSubscription.unsubscribe();\n }\n }\n init(el) {\n const state$$1 = this.options.state;\n let options = this.options;\n this.window = el;\n if (state$$1 !== 'default') {\n this.restoreOptions = Object.assign({}, options);\n }\n if (state$$1 === 'minimized') {\n options.height = 0;\n options.minHeight = 0;\n }\n if (state$$1 === 'maximized') {\n options.position = 'fixed';\n }\n }\n onDrag(el) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startPosition;\n let dragStarted;\n this.dragSubscription = el.kendoPress\n .pipe(tap((ev) => {\n if (!ev.isTouch) {\n preventDefault(ev);\n }\n this.focus.emit();\n startPosition = this.currentPosition();\n dragStarted = false;\n }), switchMap(createMoveStream(el, this.dragEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!dragStarted) {\n this.ensureWidth();\n this.dragStart.emit();\n dragStarted = true;\n }\n this.handleDrag({\n originalX, originalY,\n pageX, pageY, startPosition\n });\n });\n }));\n }\n handleDrag({ originalX, originalY, pageX, pageY, startPosition }) {\n this.options.left = startPosition.x + pageX - originalX;\n this.options.top = startPosition.y + pageY - originalY;\n if (this.options.state === 'minimized' && isPresent(this.restoreOptions)) {\n this.restoreOptions.left = this.options.left;\n this.restoreOptions.top = this.options.top;\n }\n this.change.emit({\n left: startPosition.x + pageX - originalX,\n top: startPosition.y + pageY - originalY\n });\n }\n onResize(handle, direction) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => {\n let startOffsetAndPosition;\n let resizeStarted = false;\n handle.kendoPress.pipe(tap((ev) => {\n preventDefault(ev);\n this.focus.emit();\n startOffsetAndPosition = this.currentOffsetAndPosition();\n resizeStarted = false;\n }), switchMap(createMoveStream(handle, this.resizeEnd)))\n .subscribe(({ pageX, pageY, originalX, originalY }) => {\n if (!resizeStarted) {\n this.resizeStart.emit(direction);\n resizeStarted = true;\n }\n let deltaX = pageX - originalX;\n let deltaY = pageY - originalY;\n this.handleResize(startOffsetAndPosition, direction, deltaX, deltaY);\n });\n }));\n }\n handleResize(initial, dir, deltaX, deltaY) {\n const old = this.options;\n let ev = {};\n if (dir.indexOf('e') >= 0) {\n const newWidth = initial.width + deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth) {\n ev.width = newWidth;\n }\n }\n if (dir.indexOf('n') >= 0) {\n const newHeight = initial.height - deltaY;\n const newTop = initial.y + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight && newTop !== old.top) {\n ev.height = newHeight;\n ev.top = newTop;\n }\n }\n if (dir.indexOf('s') >= 0) {\n const newHeight = initial.height + deltaY;\n if (newHeight !== old.height && newHeight >= old.minHeight) {\n ev.height = newHeight;\n }\n }\n if (dir.indexOf('w') >= 0) {\n const newLeft = initial.x + deltaX;\n const newWidth = initial.width - deltaX;\n if (newWidth !== old.width && newWidth >= old.minWidth && newLeft !== old.left) {\n ev.width = newWidth;\n ev.left = newLeft;\n }\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.options[style$$1] = ev[style$$1];\n }\n });\n this.change.emit(ev);\n }\n }\n restoreAction() {\n this.lastAction = 'restore';\n this.defaultState();\n }\n defaultState() {\n if (isPresent(this.restoreOptions)) {\n this.options = Object.assign({}, this.restoreOptions);\n }\n this.options.state = 'default';\n this.stateChange.emit('default');\n }\n storeOptions() {\n this.restoreOptions = Object.assign({}, this.options);\n }\n maximizeAction() {\n this.lastAction = 'maximize';\n this.maximizeState();\n }\n maximizeState() {\n this.storeOptions();\n const wnd = this.windowViewPort;\n this.options = Object.assign({}, this.options, {\n height: wnd.height,\n left: 0,\n position: 'fixed',\n state: 'maximized',\n top: 0,\n width: wnd.width\n });\n this.stateChange.emit('maximized');\n }\n minimizeAction() {\n this.lastAction = 'minimize';\n this.minimizeState();\n }\n minimizeState() {\n this.storeOptions();\n this.options = Object.assign({}, this.options, {\n height: null,\n minHeight: 0,\n state: 'minimized'\n });\n this.stateChange.emit('minimized');\n }\n /**\n * Handles manual changes of the 'state' property.\n * Required to distinguish them from action clicks.\n */\n applyManualState() {\n const state$$1 = this.options.state;\n switch (state$$1) {\n case 'default':\n this.clearHeight();\n this.defaultState();\n break;\n case 'maximized':\n this.clearHeight();\n this.maximizeState();\n break;\n case 'minimized':\n this.minimizeState();\n break;\n default:\n break;\n }\n }\n closeAction() {\n this.close.emit();\n }\n ensureWidth() {\n const windowOffset = offset(this.window.nativeElement);\n if (!isPresent(this.options.width)) {\n this.options.width = windowOffset.width;\n this.change.emit({ width: windowOffset.width });\n }\n }\n clearHeight() {\n if (this.options.height === 0) {\n delete this.options.height;\n }\n if (this.options.minHeight === 0) {\n delete this.options.minHeight;\n }\n }\n center() {\n if (this.options.state === 'maximized') {\n return;\n }\n let scroll = scrollPosition(this.window.nativeElement);\n let wnd = this.windowViewPort;\n let wrapper = offset(this.window.nativeElement);\n let ev = {};\n if (!isPresent(this.options.left)) {\n this.options.left = scroll.x + Math.max(0, (wnd.width - wrapper.width) / 2);\n ev.left = this.options.left;\n }\n if (!isPresent(this.options.top)) {\n this.options.top = scroll.y + Math.max(0, (wnd.height - wrapper.height) / 2);\n ev.top = this.options.top;\n }\n this.change.emit(ev);\n }\n currentOffsetAndPosition() {\n const o = this.options;\n const off = offset(this.window.nativeElement);\n return Object.assign({}, this.currentPosition(), {\n height: o.height ? o.height : off.height,\n width: o.width ? o.width : off.width\n });\n }\n currentPosition() {\n const o = this.options;\n if (!o.top || !o.left) {\n this.setPosition();\n }\n return {\n x: this.options.left,\n y: this.options.top\n };\n }\n setPosition() {\n const wrapper = positionWithScroll(this.window.nativeElement, getDocumentElement(this.window.nativeElement));\n this.options.left = wrapper.left;\n this.options.top = wrapper.top;\n }\n setRestoreOption(style$$1, value) {\n if (isPresent(this.restoreOptions)) {\n this.restoreOptions[style$$1] = value;\n }\n }\n get nextPossibleZIndex() {\n return newZIndex;\n }\n get nextZIndex() {\n return newZIndex++;\n }\n get windowViewPort() {\n return getWindowViewPort(this.window.nativeElement);\n }\n}\nDragResizeService.ɵfac = function DragResizeService_Factory(t) { return new (t || DragResizeService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nDragResizeService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DragResizeService, factory: DragResizeService.ɵfac });\n/** @nocollapse */\nDragResizeService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragResizeService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ResizeHandleDirective {\n constructor(draggable, el, renderer, service) {\n this.draggable = draggable;\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.subscriptions = new Subscription();\n }\n get hostClass() {\n return true;\n }\n ngOnInit() {\n this.setDisplay();\n this.renderer.addClass(this.el.nativeElement, 'k-resize-' + this.direction);\n this.subscriptions.add(of(this.draggable).subscribe(handle => {\n this.service.onResize(handle, this.direction);\n }));\n this.subscriptions.add(this.service.resizeStart.subscribe((dir) => {\n if (dir !== this.direction) {\n this.setDisplay('none');\n }\n }));\n this.subscriptions.add(this.service.dragStart.subscribe(() => {\n this.setDisplay('none');\n }));\n this.subscriptions.add(merge(this.service.resizeEnd, this.service.dragEnd).subscribe(() => {\n this.setDisplay('block');\n }));\n this.subscriptions.add(this.service.stateChange.subscribe((state$$1) => {\n this.setDisplay(state$$1 === 'default' ? 'block' : 'none');\n }));\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n setDisplay(value = 'block') {\n this.renderer.setStyle(this.el.nativeElement, 'display', this.service.options.state === 'default' ? value : 'none');\n }\n}\nResizeHandleDirective.ɵfac = function ResizeHandleDirective_Factory(t) { return new (t || ResizeHandleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc3.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService)); };\nResizeHandleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ResizeHandleDirective, selectors: [[\"\", \"kendoWindowResizeHandle\", \"\"]], hostVars: 2, hostBindings: function ResizeHandleDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-resize-handle\", ctx.hostClass);\n } }, inputs: { direction: \"direction\" } });\n/** @nocollapse */\nResizeHandleDirective.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService }\n];\nResizeHandleDirective.propDecorators = {\n direction: [{ type: Input }],\n hostClass: [{ type: HostBinding, args: ['class.k-resize-handle',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResizeHandleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoWindowResizeHandle]'\n }]\n }], function () { return [{ type: ɵngcc3.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-resize-handle']\n }], direction: [{\n type: Input\n }] }); })();\n\nclass WindowTitleBarComponent {\n constructor(el, service, ngZone) {\n this.el = el;\n this.ngZone = ngZone;\n this.service = service;\n }\n ngOnInit() {\n this.dragDirective = new DraggableDirective(this.el, this.ngZone);\n this.dragDirective.ngOnInit();\n if (this.isDraggable) {\n this.subscribeDrag();\n }\n this.subscribeStateChange();\n }\n ngOnDestroy() {\n this.dragDirective.ngOnDestroy();\n this.unsubscribeDrag();\n this.unsubscribeState();\n }\n /**\n * @hidden\n */\n subscribeDrag() {\n this.unsubscribeDrag();\n this.dragSubscription = of(this.dragDirective).subscribe(titleBar => {\n this.service.onDrag(titleBar);\n });\n }\n /**\n * @hidden\n */\n subscribeStateChange() {\n this.stateSubscription = this.service.stateChange.subscribe((state$$1) => {\n if (this.service.options.draggable) {\n if (state$$1 === 'maximized') {\n this.unsubscribeDrag();\n }\n else {\n this.subscribeDrag();\n }\n }\n });\n }\n /**\n * @hidden\n */\n unsubscribeDrag() {\n if (this.dragSubscription) {\n this.service.dragSubscription.unsubscribe();\n this.dragSubscription.unsubscribe();\n this.dragSubscription = null;\n }\n }\n /**\n * @hidden\n */\n unsubscribeState() {\n if (this.stateSubscription) {\n this.stateSubscription.unsubscribe();\n this.stateSubscription = null;\n }\n }\n get className() {\n return true;\n }\n get touchAction() {\n if (this.isDraggable) {\n return 'none';\n }\n }\n /**\n * @hidden\n */\n handle(ev) {\n const target = ev.target;\n const state$$1 = this.service.options.state;\n if (!hasClasses(target, 'k-icon') && !isFocusable(target, false) && this.service.options.resizable) {\n if (state$$1 === 'default') {\n this.service.maximizeAction();\n }\n else if (state$$1 === 'maximized') {\n this.service.restoreAction();\n }\n }\n }\n get isDraggable() {\n const options = this.service.options;\n return options.draggable && options.state !== 'maximized';\n }\n}\nWindowTitleBarComponent.ɵfac = function WindowTitleBarComponent_Factory(t) { return new (t || WindowTitleBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragResizeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowTitleBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: WindowTitleBarComponent, selectors: [[\"kendo-window-titlebar\"]], hostVars: 6, hostBindings: function WindowTitleBarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"dblclick\", function WindowTitleBarComponent_dblclick_HostBindingHandler($event) { return ctx.handle($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.touchAction);\n ɵngcc0.ɵɵclassProp(\"k-window-titlebar\", ctx.className)(\"k-dialog-titlebar\", ctx.className);\n } }, inputs: { template: \"template\" }, ngContentSelectors: _c0, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function WindowTitleBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, WindowTitleBarComponent_0_Template, 1, 0, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, WindowTitleBarComponent_1_Template, 1, 4, undefined, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.template);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nWindowTitleBarComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: DragResizeService },\n { type: NgZone }\n];\nWindowTitleBarComponent.propDecorators = {\n template: [{ type: Input }],\n className: [{ type: HostBinding, args: ['class.k-window-titlebar',] }, { type: HostBinding, args: ['class.k-dialog-titlebar',] }],\n touchAction: [{ type: HostBinding, args: ['style.touch-action',] }],\n handle: [{ type: HostListener, args: ['dblclick', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowTitleBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-window-titlebar',\n template: `\n \n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragResizeService }, { type: ɵngcc0.NgZone }]; }, { className: [{\n type: HostBinding,\n args: ['class.k-window-titlebar']\n }, {\n type: HostBinding,\n args: ['class.k-dialog-titlebar']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], handle: [{\n type: HostListener,\n args: ['dblclick', ['$event']]\n }], template: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(window) {\n this.window = window;\n }\n process(ev) {\n const key = ev.keyCode;\n switch (key) {\n case Keys.up:\n case Keys.down:\n case Keys.left:\n case Keys.right: {\n ev.preventDefault();\n this.handleArrow(key, ev);\n break;\n }\n case Keys.esc:\n this.handleEscape();\n break;\n default:\n break;\n }\n }\n handleArrow(key, ev) {\n const options = this.window.options;\n if (ev.altKey) {\n this.handleStateChange(key, options.state);\n return;\n }\n if ((ev.ctrlKey || ev.metaKey) && options.state === 'default') {\n this.handleResize(key);\n }\n else {\n this.handleDrag(key);\n }\n }\n handleEscape() {\n this.window.closeAction();\n }\n handleDrag(key) {\n let options = this.window.options;\n if (!options.draggable) {\n return;\n }\n const offset$$1 = this.window.currentOffsetAndPosition();\n let restoreOptions = this.window.restoreOptions;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n ev.left = offset$$1.x + delta;\n options.left = ev.left;\n break;\n }\n case Keys.up:\n case Keys.down: {\n ev.top = offset$$1.y + delta;\n options.top = ev.top;\n break;\n }\n default:\n break;\n }\n if (options.state === 'minimized' && isPresent(restoreOptions)) {\n restoreOptions.left = options.left;\n restoreOptions.top = options.top;\n }\n this.window.change.emit(ev);\n }\n handleResize(key) {\n const options = this.window.options;\n if (!options.resizable) {\n return;\n }\n const offset$$1 = this.window.currentOffsetAndPosition();\n let newWidth;\n let newHeight;\n let ev = {};\n let delta = 10;\n if (key === Keys.left || key === Keys.up) {\n delta *= -1;\n }\n switch (key) {\n case Keys.left:\n case Keys.right: {\n newWidth = offset$$1.width + delta;\n if (newWidth !== options.width && newWidth >= options.minWidth) {\n ev.width = newWidth;\n }\n break;\n }\n case Keys.up:\n case Keys.down: {\n newHeight = offset$$1.height + delta;\n if (newHeight !== options.height && newHeight >= options.minHeight) {\n ev.height = newHeight;\n }\n break;\n }\n default:\n break;\n }\n if (isPresent(ev.width) || isPresent(ev.height)) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.window.options[style$$1] = ev[style$$1];\n }\n });\n this.window.change.emit(ev);\n }\n }\n handleStateChange(key, state$$1) {\n if ((state$$1 === 'minimized' && key === Keys.up) ||\n (state$$1 === 'maximized' && key === Keys.down)) {\n this.window.restoreAction();\n return;\n }\n if (state$$1 === 'default') {\n if (key === Keys.up) {\n this.window.maximizeAction();\n }\n else if (key === Keys.down) {\n this.window.minimizeAction();\n }\n }\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(DragResizeService)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: DragResizeService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: DragResizeService }]; }, null); })();\n\n/**\n * Represents the [Kendo UI Window component for Angular]({% slug overview_window_dialogs %}).\n */\nclass WindowComponent {\n constructor(el, renderer, service, navigation, ngZone, localization) {\n this.el = el;\n this.renderer = renderer;\n this.service = service;\n this.navigation = navigation;\n this.ngZone = ngZone;\n this.localization = localization;\n /**\n * Specifies if the content of the component is persisted in the DOM when minimized.\n * @default false\n */\n this.keepContent = false;\n /**\n * Fires when the user starts to move the Window.\n */\n this.dragStart = new EventEmitter();\n /**\n * Fires when the Window was moved by the user.\n */\n this.dragEnd = new EventEmitter();\n /**\n * Fires when the user starts to resize the Window.\n */\n this.resizeStart = new EventEmitter();\n /**\n * Fires when the Window was resized by the user.\n */\n this.resizeEnd = new EventEmitter();\n /**\n * Fires when the user closes the Window.\n */\n this.close = new EventEmitter();\n /**\n * Fires when the `width` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new width. Allows a two-way binding of the `width` property.\n */\n this.widthChange = new EventEmitter();\n /**\n * Fires when the `height` property of the component was updated. The event is triggered only after the resizing\n * has ended. The event data contains the new height. Allows a two-way binding of the `height` property.\n */\n this.heightChange = new EventEmitter();\n /**\n * Fires when the `top` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new top offset. Allows a two-way binding of the `top` property.\n */\n this.topChange = new EventEmitter();\n /**\n * Fires when the `left` property of the component was updated. The event is triggered only after the dragging\n * and resizing have ended. The event data contains the new left offset. Allows a two-way binding of the `left` property.\n */\n this.leftChange = new EventEmitter();\n /**\n * Fires when the `state` property of the component was updated. The event data contains the new state. Allows a\n * two-way binding of the `state` property.\n */\n this.stateChange = new EventEmitter();\n this.tabIndex = 0;\n this.draged = false;\n this.resized = false;\n this.windowSubscription = new Subscription();\n this.direction = this.localization.rtl ? 'rtl' : 'ltr';\n this.localizationChangeSubscription = this.localization.changes\n .subscribe(({ rtl }) => this.direction = rtl ? 'rtl' : 'ltr');\n this.resizeDirections = RESIZE_DIRECTIONS;\n this.subscribeEvents();\n }\n /**\n * Specifies whether the user will be able to drag the component.\n * @default true\n */\n set draggable(value) {\n this.options.draggable = value;\n }\n get draggable() {\n return this.options.draggable;\n }\n /**\n * Specifies whether the user will be able to resize the component.\n * @default true\n */\n set resizable(value) {\n this.options.resizable = value;\n }\n get resizable() {\n return this.options.resizable;\n }\n /**\n * Specifies the initial state of the component.\n * If not specified, the value is set to `default`.\n *\n * The possible values are:\n * * `minimized`\n * * `maximized`\n * * `default`\n */\n set state(value) {\n this.options.state = value;\n }\n get state() {\n return this.options.state;\n }\n /**\n * Specifies the minimum width of the component.\n * The `minWidth` property has to be set in pixels.\n * @default 120\n */\n set minWidth(value) {\n this.setOption('minWidth', value);\n }\n get minWidth() {\n return this.options.minWidth;\n }\n /**\n * Specifies the minimum height of the Window.\n * The `minHeight` property has to be set in pixels.\n * @default 100\n */\n set minHeight(value) {\n this.setOption('minHeight', value);\n }\n get minHeight() {\n return this.options.minHeight;\n }\n /**\n * Specifies the width of the Window.\n * The `width` property has to be set in pixels.\n */\n set width(value) {\n this.setOption('width', value);\n }\n get width() {\n return this.options.width;\n }\n /**\n * Specifies the height of the Window.\n * The `height` property has to be set in pixels.\n */\n set height(value) {\n this.setOption('height', value);\n }\n get height() {\n return this.options.height;\n }\n /**\n * Specifies the initial top offset of the Window.\n * The `top` property has to be set in pixels.\n */\n set top(value) {\n this.setOption('top', value);\n }\n get top() {\n return this.options.top;\n }\n /**\n * Specifies the initial left offset of the Window.\n * Numeric values are treated as pixels.\n */\n set left(value) {\n this.setOption('left', value);\n }\n get left() {\n return this.options.left;\n }\n get closeButtonTitle() {\n if (this.messages && this.messages.closeTitle) {\n return this.messages.closeTitle;\n }\n return this.localization.get('closeTitle');\n }\n get restoreButtonTitle() {\n if (this.messages && this.messages.restoreTitle) {\n return this.messages.restoreTitle;\n }\n return this.localization.get('restoreTitle');\n }\n get maximizeButtonTitle() {\n if (this.messages && this.messages.maximizeTitle) {\n return this.messages.maximizeTitle;\n }\n return this.localization.get('maximizeTitle');\n }\n get minimizeButtonTitle() {\n if (this.messages && this.messages.minimizeTitle) {\n return this.messages.minimizeTitle;\n }\n return this.localization.get('minimizeTitle');\n }\n get hostClasses() {\n return true;\n }\n get dir() {\n return this.direction;\n }\n ngAfterViewInit() {\n this.setNextZIndex();\n this.handleInitialFocus();\n this.ngZone.runOutsideAngular(() => Promise.resolve(null).then(() => this.setInitialOffset()));\n }\n ngOnInit() {\n this.renderer.removeAttribute(this.el.nativeElement, 'title');\n this.service.init(this.el);\n }\n ngOnChanges(changes) {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isChanged(style$$1, changes)) {\n this.setStyle(style$$1, this.options[style$$1]);\n }\n });\n if (isChanged('draggable', changes)) {\n const titleBar = isPresent(this.titleBarContent) ? this.titleBarContent : this.titleBarView;\n if (isTruthy(changes.draggable.currentValue)) {\n titleBar.subscribeDrag();\n }\n else {\n titleBar.unsubscribeDrag();\n }\n }\n if (isChanged('state', changes)) {\n if (isPresent(this.service.lastAction)) {\n this.service.lastAction = null;\n }\n else {\n this.service.applyManualState();\n this.updateAllOffset();\n }\n }\n }\n ngOnDestroy() {\n if (this.windowSubscription) {\n this.windowSubscription.unsubscribe();\n }\n this.localizationChangeSubscription.unsubscribe();\n }\n /**\n * Focuses the wrapper of the Window component.\n */\n focus() {\n const wrapper = this.el.nativeElement;\n if (isPresent(wrapper)) {\n wrapper.focus();\n }\n }\n /**\n * Brings the current Window component on top of other Window components on the page.\n */\n bringToFront() {\n this.setNextZIndex();\n }\n /**\n * Manually updates the `width` or `height` option of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for sizing dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowDimensionSetting} dimension - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setDimension(dimension, value) {\n this.setOption(dimension, value);\n this.setStyle(dimension, value);\n }\n /**\n * Manually updates the `top` or `left` offset of the Window.\n * The required style will be applied to the Window wrapper element and the\n * corresponding property of the component instance will be updated.\n * This method is intended to be used for positioning dynamically created components using the\n * [`WindowService`]({% slug api_dialog_windowservice %})\n * @param {WindowOffsetSetting} offset - The option that will be updated\n * @param {number} value - The value set in pixels\n */\n setOffset(offset$$1, value) {\n this.setOption(offset$$1, value);\n this.setStyle(offset$$1, value);\n }\n get showDefaultTitleBar() {\n return !isPresent(this.titleBarContent);\n }\n get styleMinWidth() {\n return this.minWidth + 'px';\n }\n get styleMinHeight() {\n return this.minHeight + 'px';\n }\n get stylePosition() {\n return this.options.position;\n }\n get wrapperMaximizedClass() {\n return this.state === 'maximized';\n }\n get wrapperMinimizedClass() {\n return this.state === 'minimized';\n }\n /**\n * @hidden\n */\n onComponentKeydown(event) {\n if (hasClasses(event.target, WINDOW_CLASSES)) {\n this.navigation.process(event);\n }\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n this.renderer.addClass(this.el.nativeElement, 'k-state-focused');\n this.setNextZIndex();\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n this.renderer.removeClass(this.el.nativeElement, 'k-state-focused');\n }\n subscribeEvents() {\n if (!isDocumentAvailable()) {\n return;\n }\n this.windowSubscription.add(this.service.focus.subscribe(() => {\n this.el.nativeElement.focus();\n }));\n this.windowSubscription.add(this.service.dragStart.subscribe(() => {\n this.draged = true;\n this.ngZone.run(() => {\n this.dragStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.dragEnd.subscribe(() => {\n if (this.draged) {\n this.draged = false;\n this.ngZone.run(() => {\n this.dragEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.close.subscribe(() => {\n this.close.emit();\n }));\n this.windowSubscription.add(this.service.resizeStart.subscribe(() => {\n this.resized = true;\n this.ngZone.run(() => {\n this.resizeStart.emit();\n });\n }));\n this.windowSubscription.add(this.service.resizeEnd.subscribe(() => {\n if (this.resized) {\n this.resized = false;\n this.ngZone.run(() => {\n this.resizeEnd.emit();\n });\n }\n }));\n this.windowSubscription.add(this.service.change.subscribe((ev) => {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(ev[style$$1])) {\n this.setStyle(style$$1, ev[style$$1]);\n if (this.state !== 'maximized') {\n const emitter = this[style$$1 + 'Change'];\n if (emitter.observers.length) {\n this.ngZone.run(() => {\n emitter.emit(ev[style$$1]);\n });\n }\n }\n }\n });\n }));\n this.windowSubscription.add(this.service.stateChange.subscribe((state$$1) => {\n if (isPresent(this.service.lastAction)) {\n this.updateAllOffset();\n this.stateChange.emit(state$$1);\n }\n }));\n }\n setNextZIndex() {\n const currentZIndex = this.el.nativeElement.style['z-index'];\n const nextPossibleZIndex = this.service.nextPossibleZIndex;\n if (!currentZIndex || (nextPossibleZIndex - currentZIndex > 1)) {\n this.renderer.setStyle(this.el.nativeElement, \"z-index\", this.service.nextZIndex);\n }\n }\n setInitialOffset() {\n if (this.state !== 'maximized') {\n this.updateAllOffset();\n if (!isPresent(this.left) || !isPresent(this.top)) {\n this.service.center();\n }\n }\n else {\n const viewPort = this.service.windowViewPort;\n this.setStyle('width', viewPort.width);\n this.setStyle('height', viewPort.height);\n this.setStyle('top', 0);\n this.setStyle('left', 0);\n }\n }\n updateAllOffset() {\n OFFSET_STYLES.forEach((style$$1) => {\n if (isPresent(this[style$$1])) {\n this.setStyle(style$$1, this[style$$1]);\n }\n else {\n this.removeStyle(style$$1);\n }\n });\n }\n setStyle(style$$1, value) {\n this.renderer.setStyle(this.el.nativeElement, style$$1, value + 'px');\n }\n removeStyle(style$$1) {\n this.renderer.removeStyle(this.el.nativeElement, style$$1);\n }\n get options() {\n return this.service.options;\n }\n setOption(style$$1, value) {\n if (typeof value !== 'number' && typeof value !== 'string') {\n return;\n }\n const parsedValue = (typeof value === 'number') ? value : parseInt(value, 10);\n this.options[style$$1] = parsedValue;\n this.service.setRestoreOption(style$$1, parsedValue);\n }\n handleInitialFocus() {\n const wrapper = this.el.nativeElement;\n if (this.autoFocusedElement) {\n const initiallyFocusedElement = wrapper.querySelector(this.autoFocusedElement);\n if (initiallyFocusedElement) {\n initiallyFocusedElement.focus();\n }\n }\n else {\n this.focus();\n }\n }\n}\nWindowComponent.ɵfac = function WindowComponent_Factory(t) { return new (t || WindowComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nWindowComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: WindowComponent, selectors: [[\"kendo-window\"]], contentQueries: function WindowComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, WindowTitleBarComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titleBarContent = _t.first);\n } }, viewQuery: function WindowComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(WindowTitleBarComponent, true);\n ɵngcc0.ɵɵviewQuery(ResizeHandleDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titleBarView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeHandles = _t);\n } }, hostVars: 16, hostBindings: function WindowComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"keydown\", function WindowComponent_keydown_HostBindingHandler($event) { return ctx.onComponentKeydown($event); })(\"focus\", function WindowComponent_focus_HostBindingHandler() { return ctx.onComponentFocus(); })(\"blur\", function WindowComponent_blur_HostBindingHandler() { return ctx.onComponentBlur(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵstyleProp(\"min-width\", ctx.styleMinWidth)(\"min-height\", ctx.styleMinHeight)(\"position\", ctx.stylePosition);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-window\", ctx.hostClasses)(\"k-window-maximized\", ctx.wrapperMaximizedClass)(\"k-window-minimized\", ctx.wrapperMinimizedClass);\n } }, inputs: { keepContent: \"keepContent\", draggable: \"draggable\", resizable: \"resizable\", state: \"state\", minWidth: \"minWidth\", minHeight: \"minHeight\", width: \"width\", height: \"height\", top: \"top\", left: \"left\", autoFocusedElement: \"autoFocusedElement\", title: \"title\" }, outputs: { dragStart: \"dragStart\", dragEnd: \"dragEnd\", resizeStart: \"resizeStart\", resizeEnd: \"resizeEnd\", close: \"close\", widthChange: \"widthChange\", heightChange: \"heightChange\", topChange: \"topChange\", leftChange: \"leftChange\", stateChange: \"stateChange\" }, exportAs: [\"kendoWindow\"], features: [ɵngcc0.ɵɵProvidersFeature([\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c17, decls: 7, vars: 4, consts: [[\"kendoWindowLocalizedMessages\", \"\", 6, \"closeTitle\", \"restoreTitle\", \"maximizeTitle\", \"minimizeTitle\"], [3, \"template\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-content k-window-content\", 3, \"hidden\", 4, \"ngIf\"], [3, \"ngIf\"], [3, \"template\"], [1, \"k-window-title\"], [1, \"k-window-actions\"], [\"kendoWindowMinimizeAction\", \"\"], [\"kendoWindowMaximizeAction\", \"\"], [\"kendoWindowRestoreAction\", \"\"], [\"kendoWindowCloseAction\", \"\"], [1, \"k-content\", \"k-window-content\", 3, \"hidden\"], [3, \"ngTemplateOutlet\"], [\"kendoWindowResizeHandle\", \"\", \"kendoDraggable\", \"\", 3, \"direction\", 4, \"ngFor\", \"ngForOf\"], [\"kendoWindowResizeHandle\", \"\", \"kendoDraggable\", \"\", 3, \"direction\"]], template: function WindowComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c16);\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c15);\n ɵngcc0.ɵɵelementContainerStart(2);\n ɵngcc0.ɵɵtemplate(3, WindowComponent_kendo_window_titlebar_3_Template, 8, 10, \"kendo-window-titlebar\", 1);\n ɵngcc0.ɵɵtemplate(4, WindowComponent_4_Template, 1, 0, undefined, 2);\n ɵngcc0.ɵɵtemplate(5, WindowComponent_div_5_Template, 3, 3, \"div\", 3);\n ɵngcc0.ɵɵtemplate(6, WindowComponent_ng_template_6_Template, 1, 1, \"ng-template\", 4);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showDefaultTitleBar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.showDefaultTitleBar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.state !== \"minimized\" || ctx.keepContent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.resizable);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc1.NgIf, WindowTitleBarComponent,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowCloseActionDirective, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgForOf, ResizeHandleDirective, ɵngcc3.DraggableDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nWindowComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService },\n { type: NavigationService },\n { type: NgZone },\n { type: LocalizationService }\n];\nWindowComponent.propDecorators = {\n autoFocusedElement: [{ type: Input }],\n title: [{ type: Input }],\n draggable: [{ type: Input }],\n resizable: [{ type: Input }],\n keepContent: [{ type: Input }],\n state: [{ type: Input }],\n minWidth: [{ type: Input }],\n minHeight: [{ type: Input }],\n width: [{ type: Input }],\n height: [{ type: Input }],\n top: [{ type: Input }],\n left: [{ type: Input }],\n dragStart: [{ type: Output }],\n dragEnd: [{ type: Output }],\n resizeStart: [{ type: Output }],\n resizeEnd: [{ type: Output }],\n close: [{ type: Output }],\n widthChange: [{ type: Output }],\n heightChange: [{ type: Output }],\n topChange: [{ type: Output }],\n leftChange: [{ type: Output }],\n stateChange: [{ type: Output }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabIndex',] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-window',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n titleBarView: [{ type: ViewChild, args: [WindowTitleBarComponent,] }],\n titleBarContent: [{ type: ContentChild, args: [WindowTitleBarComponent,] }],\n resizeHandles: [{ type: ViewChildren, args: [ResizeHandleDirective,] }],\n styleMinWidth: [{ type: HostBinding, args: ['style.minWidth',] }],\n styleMinHeight: [{ type: HostBinding, args: ['style.minHeight',] }],\n stylePosition: [{ type: HostBinding, args: ['style.position',] }],\n wrapperMaximizedClass: [{ type: HostBinding, args: ['class.k-window-maximized',] }],\n wrapperMinimizedClass: [{ type: HostBinding, args: ['class.k-window-minimized',] }],\n onComponentKeydown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n onComponentFocus: [{ type: HostListener, args: ['focus',] }],\n onComponentBlur: [{ type: HostListener, args: ['blur',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoWindow',\n providers: [\n DragResizeService,\n NavigationService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.window'\n }\n ],\n selector: 'kendo-window',\n template: `\n \n \n\n \n
{{ title }}
\n
\n \n \n \n \n
\n
\n \n\n
\n \n \n
\n\n \n
\n
\n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService }, { type: NavigationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc2.LocalizationService }]; }, { keepContent: [{\n type: Input\n }], dragStart: [{\n type: Output\n }], dragEnd: [{\n type: Output\n }], resizeStart: [{\n type: Output\n }], resizeEnd: [{\n type: Output\n }], close: [{\n type: Output\n }], widthChange: [{\n type: Output\n }], heightChange: [{\n type: Output\n }], topChange: [{\n type: Output\n }], leftChange: [{\n type: Output\n }], stateChange: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], draggable: [{\n type: Input\n }], resizable: [{\n type: Input\n }], state: [{\n type: Input\n }], minWidth: [{\n type: Input\n }], minHeight: [{\n type: Input\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], top: [{\n type: Input\n }], left: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-window']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], styleMinWidth: [{\n type: HostBinding,\n args: ['style.minWidth']\n }], styleMinHeight: [{\n type: HostBinding,\n args: ['style.minHeight']\n }], stylePosition: [{\n type: HostBinding,\n args: ['style.position']\n }], wrapperMaximizedClass: [{\n type: HostBinding,\n args: ['class.k-window-maximized']\n }], wrapperMinimizedClass: [{\n type: HostBinding,\n args: ['class.k-window-minimized']\n }], onComponentKeydown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }], onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }], autoFocusedElement: [{\n type: Input\n }], title: [{\n type: Input\n }], titleBarView: [{\n type: ViewChild,\n args: [WindowTitleBarComponent]\n }], titleBarContent: [{\n type: ContentChild,\n args: [WindowTitleBarComponent]\n }], resizeHandles: [{\n type: ViewChildren,\n args: [ResizeHandleDirective]\n }] }); })();\n\nclass WindowMaximizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-maximize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.maximizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n}\nWindowMaximizeActionDirective.ɵfac = function WindowMaximizeActionDirective_Factory(t) { return new (t || WindowMaximizeActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowMaximizeActionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WindowMaximizeActionDirective, selectors: [[\"button\", \"kendoWindowMaximizeAction\", \"\"]], hostVars: 3, hostBindings: function WindowMaximizeActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowMaximizeActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowMaximizeAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nWindowMaximizeActionDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nWindowMaximizeActionDirective.propDecorators = {\n window: [{ type: Input }],\n buttonType: [{ type: HostBinding, args: ['attr.type',] }],\n onClick: [{ type: HostListener, args: ['click',] }],\n visible: [{ type: HostBinding, args: ['style.display',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowMaximizeActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMaximizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMaximizeAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n\nclass WindowMinimizeActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-minimize';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.minimizeAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'inline-flex' : 'none';\n }\n}\nWindowMinimizeActionDirective.ɵfac = function WindowMinimizeActionDirective_Factory(t) { return new (t || WindowMinimizeActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowMinimizeActionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WindowMinimizeActionDirective, selectors: [[\"button\", \"kendoWindowMinimizeAction\", \"\"]], hostVars: 3, hostBindings: function WindowMinimizeActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowMinimizeActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowMinimizeAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nWindowMinimizeActionDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nWindowMinimizeActionDirective.propDecorators = {\n window: [{ type: Input }],\n buttonType: [{ type: HostBinding, args: ['attr.type',] }],\n onClick: [{ type: HostListener, args: ['click',] }],\n visible: [{ type: HostBinding, args: ['style.display',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowMinimizeActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowMinimizeAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowMinimizeAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n\nclass WindowCloseActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'close';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.closeAction();\n }\n }\n}\nWindowCloseActionDirective.ɵfac = function WindowCloseActionDirective_Factory(t) { return new (t || WindowCloseActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowCloseActionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WindowCloseActionDirective, selectors: [[\"button\", \"kendoWindowCloseAction\", \"\"]], hostVars: 1, hostBindings: function WindowCloseActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowCloseActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowCloseAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nWindowCloseActionDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nWindowCloseActionDirective.propDecorators = {\n window: [{ type: Input }],\n buttonType: [{ type: HostBinding, args: ['attr.type',] }],\n onClick: [{ type: HostListener, args: ['click',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowCloseActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowCloseAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowCloseAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }] }); })();\n\nclass WindowRestoreActionDirective extends Button {\n constructor(el, renderer, _service, localization, ngZone) {\n super(el, renderer, null, localization, ngZone);\n this.buttonType = 'button';\n this.window = _service;\n this.look = 'bare';\n this.icon = 'window-restore';\n }\n /**\n * @hidden\n */\n onClick() {\n if (!this.isDisabled) {\n this.window.restoreAction();\n }\n }\n get visible() {\n return this.window.options.state === 'default' ? 'none' : 'inline-flex';\n }\n}\nWindowRestoreActionDirective.ɵfac = function WindowRestoreActionDirective_Factory(t) { return new (t || WindowRestoreActionDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DragResizeService, 8), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nWindowRestoreActionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WindowRestoreActionDirective, selectors: [[\"button\", \"kendoWindowRestoreAction\", \"\"]], hostVars: 3, hostBindings: function WindowRestoreActionDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function WindowRestoreActionDirective_click_HostBindingHandler() { return ctx.onClick(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.buttonType);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n } }, inputs: { window: \"window\" }, exportAs: [\"kendoWindowRestoreAction\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nWindowRestoreActionDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: DragResizeService, decorators: [{ type: Optional }] },\n { type: LocalizationService },\n { type: NgZone }\n];\nWindowRestoreActionDirective.propDecorators = {\n window: [{ type: Input }],\n buttonType: [{ type: HostBinding, args: ['attr.type',] }],\n onClick: [{ type: HostListener, args: ['click',] }],\n visible: [{ type: HostBinding, args: ['style.display',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowRestoreActionDirective, [{\n type: Directive,\n args: [{\n exportAs: 'kendoWindowRestoreAction',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.button'\n }\n ],\n selector: 'button[kendoWindowRestoreAction]' // tslint:disable-line\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DragResizeService, decorators: [{\n type: Optional\n }] }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { buttonType: [{\n type: HostBinding,\n args: ['attr.type']\n }], window: [{\n type: Input\n }], onClick: [{\n type: HostListener,\n args: ['click']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }] }); })();\n\n/**\n * The settings for the Window actions when the Window is opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowSettings {\n}\n/**\n * Indicates that the **Close** button of a Window that is opened through `WindowService` is clicked.\n */\nclass WindowCloseResult {\n}\n/**\n * Holds references to the object instance of the Window.\n * Controls the Windows that were opened through `WindowService`\n * ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n */\nclass WindowRef {\n}\n\n/**\n * @hidden\n */\nclass WindowContainerService {\n set container(container) {\n WindowContainerService.container = container;\n }\n get container() {\n return WindowContainerService.container;\n }\n}\nWindowContainerService.ɵfac = function WindowContainerService_Factory(t) { return new (t || WindowContainerService)(); };\nWindowContainerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: WindowContainerService, factory: WindowContainerService.ɵfac });\nWindowContainerService.container = null;\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowContainerService, [{\n type: Injectable\n }], null, null); })();\n\nclass WindowInjector {\n constructor(getWindowRef, parentInjector) {\n this.getWindowRef = getWindowRef;\n this.parentInjector = parentInjector;\n }\n get(token, notFoundValue) {\n if (token === WindowRef) {\n return this.getWindowRef();\n }\n return this.parentInjector.get(token, notFoundValue);\n }\n}\n/**\n * A service for opening Windows dynamically\n * ([see example]({% slug service_window %})).\n */\nclass WindowService {\n constructor(\n /**\n * @hidden\n */\n resolver, containerService) {\n this.resolver = resolver;\n this.containerService = containerService;\n }\n /**\n * Opens a Window component.\n *\n * @param {WindowSettings} settings - The settings that define the Window.\n * @returns {WindowRef} - A reference to the Window object.\n *\n * @example\n *\n * ```ts-no-run\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n *
\n * `\n * })\n * export class AppComponent {\n * constructor( private windowService: WindowService ) {}\n *\n * public open() {\n * var window = this.windowService.open({\n * title: \"My window\",\n * content: \"My content!\"\n * });\n *\n * window.result.subscribe((result) => {\n * if (result instanceof WindowCloseResult) {\n * console.log(\"Window was closed\");\n * }\n * });\n * }\n * }\n * ```\n *\n */\n open(settings) {\n const factory = this.resolver.resolveComponentFactory(WindowComponent);\n const container = settings.appendTo || this.containerService.container;\n if (!container) {\n throw new Error(`Cannot attach window to the page.\n Add an element that uses the kendoWindowContainer directive, or set the 'appendTo' property.\n See https://www.telerik.com/kendo-angular-ui/components/dialogs/window/service/\n `);\n }\n const windowRef = {\n close: () => { },\n content: null,\n result: null,\n window: null\n };\n const content = this.contentFrom(settings.content, container, windowRef);\n const window = container.createComponent(factory, undefined, undefined, content.nodes);\n windowRef.window = window;\n this.applyOptions(window.instance, settings);\n const apiClose = new Subject();\n const close = (e) => {\n apiClose.next(e || new WindowCloseResult());\n if (content.componentRef) {\n content.componentRef.destroy();\n }\n window.destroy();\n };\n const result = merge(apiClose, window.instance.close).pipe(take(1));\n result.subscribe(close);\n windowRef.close = close;\n windowRef.result = result;\n window.changeDetectorRef.markForCheck();\n return windowRef;\n }\n applyOptions(instance, options) {\n if (isPresent(options.title)) {\n instance.title = options.title;\n }\n if (isPresent(options.keepContent)) {\n instance.keepContent = options.keepContent;\n }\n if (isPresent(options.width)) {\n instance.width = options.width;\n }\n if (isPresent(options.minWidth)) {\n instance.minWidth = options.minWidth;\n }\n if (isPresent(options.height)) {\n instance.height = options.height;\n }\n if (isPresent(options.minHeight)) {\n instance.minHeight = options.minHeight;\n }\n if (isPresent(options.left)) {\n instance.left = options.left;\n }\n if (isPresent(options.top)) {\n instance.top = options.top;\n }\n if (isPresent(options.draggable)) {\n instance.draggable = options.draggable;\n }\n if (isPresent(options.resizable)) {\n instance.resizable = options.resizable;\n }\n if (isPresent(options.messages && options.messages.closeTitle)) {\n instance.messages.closeTitle = options.messages.closeTitle;\n }\n if (isPresent(options.messages && options.messages.restoreTitle)) {\n instance.messages.restoreTitle = options.messages.restoreTitle;\n }\n if (isPresent(options.messages && options.messages.maximizeTitle)) {\n instance.messages.maximizeTitle = options.messages.maximizeTitle;\n }\n if (isPresent(options.messages && options.messages.minimizeTitle)) {\n instance.messages.minimizeTitle = options.messages.minimizeTitle;\n }\n if (isPresent(options.autoFocusedElement)) {\n instance.autoFocusedElement = options.autoFocusedElement;\n }\n if (isPresent(options.state)) {\n instance.state = options.state;\n if (options.state === 'minimized') {\n instance.keepContent = true;\n }\n }\n if (options.content instanceof TemplateRef) {\n instance.contentTemplate = options.content;\n }\n if (options.titleBarContent instanceof TemplateRef) {\n instance.titleBarTemplate = options.titleBarContent;\n }\n }\n contentFrom(content, container, windowRef) {\n const renderer = container.injector.get(Renderer2);\n let nodes = [];\n let componentRef = null;\n if (typeof content === 'string') {\n nodes = [renderer.createText(content)];\n }\n else if (content && !(content instanceof TemplateRef)) {\n const injector = new WindowInjector(() => windowRef, container.injector);\n const factory = this.resolver.resolveComponentFactory(content);\n componentRef = container.createComponent(factory, undefined, injector);\n nodes = [componentRef.location.nativeElement];\n windowRef.content = componentRef;\n }\n return {\n componentRef,\n nodes: [\n [],\n nodes // Content\n ]\n };\n }\n}\nWindowService.ɵfac = function WindowService_Factory(t) { return new (t || WindowService)(ɵngcc0.ɵɵinject(ɵngcc0.ComponentFactoryResolver), ɵngcc0.ɵɵinject(WindowContainerService)); };\nWindowService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: WindowService, factory: WindowService.ɵfac });\n/** @nocollapse */\nWindowService.ctorParameters = () => [\n { type: ComponentFactoryResolver },\n { type: WindowContainerService, decorators: [{ type: Inject, args: [WindowContainerService,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.ComponentFactoryResolver }, { type: WindowContainerService, decorators: [{\n type: Inject,\n args: [WindowContainerService]\n }] }]; }, null); })();\n\n/**\n * Provides an insertion point for the Dialogs which are created through the\n * Dialog service ([see example]({% slug api_dialog_dialogservice %}#toc-open)).\n * Created Dialogs will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nclass DialogContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n}\nDialogContainerDirective.ɵfac = function DialogContainerDirective_Factory(t) { return new (t || DialogContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(DialogContainerService)); };\nDialogContainerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DialogContainerDirective, selectors: [[\"\", \"kendoDialogContainer\", \"\"]] });\n/** @nocollapse */\nDialogContainerDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: DialogContainerService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDialogContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: DialogContainerService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { closeTitle: \"closeTitle\", restoreTitle: \"restoreTitle\", maximizeTitle: \"maximizeTitle\", minimizeTitle: \"minimizeTitle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n closeTitle: [{ type: Input }],\n restoreTitle: [{ type: Input }],\n maximizeTitle: [{ type: Input }],\n minimizeTitle: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoDialogLocalizedMessages\", \"\"], [\"\", \"kendoWindowLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoDialogLocalizedMessages],\n [kendoWindowLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_dialogs %}#toc-localization)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-dialog-messages\"], [\"kendo-window-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-dialog-messages, kendo-window-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nconst SHARED_DIRECTIVES = [\n DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective\n];\n/**\n * @hidden\n */\nclass SharedModule {\n}\nSharedModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedModule_Factory(t) { return new (t || SharedModule)(); }, imports: [[CommonModule],\n CommonModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective,\n CommonModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [SHARED_DIRECTIVES],\n exports: [SHARED_DIRECTIVES, CommonModule],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst DIALOG_DIRECTIVES = [\n DialogComponent,\n DialogTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialog component that includes all Dialog components and directives.\n * Imports `DialogModule` into the [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Dialog component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { DialogModule } from '@progress/kendo-angular-dialog';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass DialogModule {\n}\nDialogModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DialogModule });\nDialogModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DialogModule_Factory(t) { return new (t || DialogModule)(); }, providers: [DialogContainerService, DialogService], imports: [[SharedModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DialogModule, { declarations: [DialogComponent,\n DialogTitleBarComponent,\n DialogContainerDirective], imports: [SharedModule], exports: [DialogComponent,\n DialogTitleBarComponent,\n DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective,\n DialogContainerDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogModule, [{\n type: NgModule,\n args: [{\n declarations: [DIALOG_DIRECTIVES, DialogContainerDirective],\n entryComponents: [DIALOG_DIRECTIVES],\n exports: [DIALOG_DIRECTIVES, SHARED_DIRECTIVES, DialogContainerDirective],\n imports: [SharedModule],\n providers: [DialogContainerService, DialogService]\n }]\n }], null, null); })();\n\n/**\n * Provides an insertion point for the Windows which are created through the\n * Window service ([see example]({% slug api_dialog_windowservice %}#toc-open)).\n * Created Windows will be mounted after that element.\n *\n * @example\n * ```html-no-run\n *
\n * ```\n */\nclass WindowContainerDirective {\n constructor(container, service) {\n service.container = container;\n }\n}\nWindowContainerDirective.ɵfac = function WindowContainerDirective_Factory(t) { return new (t || WindowContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(WindowContainerService)); };\nWindowContainerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WindowContainerDirective, selectors: [[\"\", \"kendoWindowContainer\", \"\"]] });\n/** @nocollapse */\nWindowContainerDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: WindowContainerService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoWindowContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: WindowContainerService }]; }, null); })();\n\nconst WINDOW_DIRECTIVES = [\n ResizeHandleDirective,\n WindowComponent,\n WindowTitleBarComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective\n];\nconst ENTRY_COMPONENTS = [\n WindowComponent,\n WindowTitleBarComponent\n];\nconst exportedModules = [\n WindowComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowTitleBarComponent\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Window component. Imports `WindowModule` into the\n * [root module]({{ site.data.urls.angular['ngmodules'] }}#angular-modularity)\n * of your application or into any other sub-module that will use the Window component.\n *\n * @example\n * ```ts-no-run\n * import { NgModule } from '@angular/core';\n * import { BrowserModule } from '@angular/platform-browser';\n * import { WindowModule } from '@progress/kendo-angular-window';\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * bootstrap: [AppComponent],\n * declarations: [AppComponent],\n * imports: [BrowserModule, WindowModule]\n * })\n * export class AppModule {\n * }\n * ```\n */\nclass WindowModule {\n}\nWindowModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: WindowModule });\nWindowModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function WindowModule_Factory(t) { return new (t || WindowModule)(); }, providers: [WindowContainerService, WindowService], imports: [[SharedModule, DraggableModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(WindowModule, { declarations: function () { return [ResizeHandleDirective,\n WindowComponent,\n WindowTitleBarComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowContainerDirective]; }, imports: function () { return [SharedModule,\n DraggableModule]; }, exports: function () { return [WindowComponent,\n WindowCloseActionDirective,\n WindowMinimizeActionDirective,\n WindowMaximizeActionDirective,\n WindowRestoreActionDirective,\n WindowTitleBarComponent,\n DialogActionsComponent,\n CustomMessagesComponent,\n LocalizedMessagesDirective,\n WindowContainerDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WindowModule, [{\n type: NgModule,\n args: [{\n declarations: [WINDOW_DIRECTIVES, WindowContainerDirective],\n entryComponents: [ENTRY_COMPONENTS],\n exports: [exportedModules, SHARED_DIRECTIVES, WindowContainerDirective],\n imports: [SharedModule, DraggableModule],\n providers: [WindowContainerService, WindowService]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Dialogs components.\n *\n * @example\n *\n * ```ts-no-run\n * import { DialogsModule } from '@progress/kendo-angular-dialog';\n *\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n * import { NgModule } from '@angular/core';\n *\n * import { AppComponent } from './app.component';\n *\n * _@NgModule({\n * declarations: [AppComponent],\n * imports: [BrowserModule, DialogsModule],\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DialogsModule {\n}\nDialogsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DialogsModule });\nDialogsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DialogsModule_Factory(t) { return new (t || DialogsModule)(); }, imports: [DialogModule,\n WindowModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DialogsModule, { exports: [DialogModule,\n WindowModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DialogsModule, [{\n type: NgModule,\n args: [{\n exports: [DialogModule, WindowModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { DIALOG_DIRECTIVES, DialogContainerDirective, DialogContainerService, CustomMessagesComponent, DIALOG_LOCALIZATION_SERVICE, LocalizedMessagesDirective, Messages, SHARED_DIRECTIVES, SharedModule, DragResizeService, NavigationService, WindowContainerDirective, WindowContainerService, ResizeHandleDirective, DialogComponent, DialogTitleBarComponent, DialogContentBase, DialogActionsComponent, DialogService, DialogCloseResult, DialogRef, DialogSettings, DialogAction, WindowComponent, WindowTitleBarComponent, WindowMaximizeActionDirective, WindowMinimizeActionDirective, WindowCloseActionDirective, WindowRestoreActionDirective, WindowSettings, WindowRef, WindowCloseResult, WindowService, DialogModule, WindowModule, DialogsModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7aUhBb0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkF1QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFpREU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7V0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2tJQUFDO0FBQ0Q7OzswQkFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1R0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7dUVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzsrQ0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7O2lGQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7MkVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUpBMERFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztrREFhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztrREFhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O2tEQWFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztrREFhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztrSUFBQztBQUNEOzs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VHQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O21IQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnUEFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtxRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQWNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7eUpBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBU0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NElBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7bUhBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQVNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29weXJpZ2h0IMKpIDIwMjAgUHJvZ3Jlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIExpY2Vuc2VkIHVuZGVyIGNvbW1lcmNpYWwgbGljZW5zZS4gU2VlIExJQ0VOU0UubWQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBUZW1wbGF0ZVJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgT3B0aW9uYWwsIEluamVjdGlvblRva2VuLCBSZW5kZXJlcjIsIENoYW5nZURldGVjdG9yUmVmLCBDb250ZW50Q2hpbGQsIFZpZXdDaGlsZCwgSG9zdExpc3RlbmVyLCBJbmplY3RhYmxlLCBpc0Rldk1vZGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0LCBOZ1pvbmUsIERpcmVjdGl2ZSwgSG9zdCwgVmlld0NoaWxkcmVuLCBWaWV3Q29udGFpbmVyUmVmLCBmb3J3YXJkUmVmLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCwgQ29tcG9uZW50TWVzc2FnZXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1sMTBuJztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlLCBTdWJzY3JpcHRpb24sIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFrZSwgc2hhcmUsIHRhcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBEcmFnZ2FibGVEaXJlY3RpdmUsIGlzQ2hhbmdlZCwgaXNEb2N1bWVudEF2YWlsYWJsZSwgRHJhZ2dhYmxlTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IG9mZnNldCwgc2Nyb2xsUG9zaXRpb24sIHBvc2l0aW9uV2l0aFNjcm9sbCwgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRXaW5kb3dWaWV3UG9ydCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1wb3B1cC1jb21tb24nO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9ucyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgYWN0aW9uIGJ1dHRvbnMgb2YgdGhlIERpYWxvZ1xuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhY3Rpb25idXR0b25zX2RpYWxvZyAlfSkpLlxuICovXG5jbGFzcyBEaWFsb2dBY3Rpb25zQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbCkge1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHBvc3NpYmxlIGxheW91dCBvZiB0aGUgYWN0aW9uIGJ1dHRvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxheW91dCA9ICdzdHJldGNoZWQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgYW4gYWN0aW9uIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwQ2xhc3NOYW1lID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0ID09PSAnc3RyZXRjaGVkJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGFjdGlvblRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkJ1dHRvbkNsaWNrKGFjdGlvbiwgX2UpIHtcbiAgICAgICAgdGhpcy5hY3Rpb24uZW1pdChhY3Rpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgYnV0dG9uQ2xhc3MoYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBbJ2stYnV0dG9uJ107XG4gICAgICAgIGlmIChhY3Rpb24ucHJpbWFyeSkge1xuICAgICAgICAgICAgY2xhc3Nlcy5wdXNoKCdrLXByaW1hcnknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG4gICAgfVxufVxuRGlhbG9nQWN0aW9uc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGlhbG9nLWFjdGlvbnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYWN0aW9uVGVtcGxhdGUoKVwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImJ1dHRvbkNsYXNzKGFjdGlvbilcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkJ1dHRvbkNsaWNrKGFjdGlvbiwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFjdGlvbiBvZiBhY3Rpb25zXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFjdGlvbi50ZXh0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBhY3Rpb24udGV4dCB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWN0aW9uc1wiICpuZ0lmPVwiYWN0aW9uVGVtcGxhdGUoKVwiPjwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EaWFsb2dBY3Rpb25zQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9XG5dO1xuRGlhbG9nQWN0aW9uc0NvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhY3Rpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsYXlvdXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGlvbjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGJ1dHRvbkdyb3VwQ2xhc3NOYW1lOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRpYWxvZy1idXR0b25ncm91cCcsXSB9XSxcbiAgICBjbGFzc05hbWU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZGlhbG9nLWJ1dHRvbi1sYXlvdXQtc3RyZXRjaGVkJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUHJldmVudGFibGVFdmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYSBzcGVjaWZpZWQgZXZlbnQuXG4gICAgICogSW4gdGhpcyB3YXksIHRoZSBzb3VyY2UgY29tcG9uZW50IHN1cHByZXNzZXMgdGhlIGJ1aWx0LWluIGJlaGF2aW9yIHRoYXQgZm9sbG93cyB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzIHByZXZlbnRlZCBieSBhbnkgb2YgaXRzIHN1YnNjcmliZXJzLCByZXR1cm5zIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGVmYXVsdCBhY3Rpb24gd2FzIHByZXZlbnRlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICovXG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBEaWFsb2dUaXRsZUJhciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgYXBpX2RpYWxvZ19kaWFsb2d0aXRsZWJhcmNvbXBvbmVudCAlfSkuXG4gKlxuICogSXQgaXMgdXNlZCBhcyBwYXJ0IG9mIHRoZSBEaWFsb2cgY29udGVudCB3aGVuIHRoZSBjb21wb25lbnQgaXMgY3JlYXRlZCBkeW5hbWljYWxseSBieSB1c2luZyBhbiBbQW5ndWxhciBzZXJ2aWNlXSh7JSBzbHVnIHNlcnZpY2VfZGlhbG9nICV9KS5cbiAqL1xuY2xhc3MgRGlhbG9nVGl0bGVCYXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGhvc3RFbGVtZW50LCBsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBob3N0RWxlbWVudDtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlID0gbG9jYWxpemF0aW9uU2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGNsb3NlIGJ1dHRvbiBvZiB0aGUgdGl0bGUtYmFyIGlzIGNsaWNrZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBnZXQgY2xhc3NOYW1lKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGNsb3NlQnV0dG9uVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KCdjbG9zZVRpdGxlJyk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5pZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsb3NlQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdChldmVudEFyZ3MpO1xuICAgIH1cbn1cbkRpYWxvZ1RpdGxlQmFyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kaWFsb2ctdGl0bGViYXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLXdpbmRvdy10aXRsZSBrLWRpYWxvZy10aXRsZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiay13aW5kb3ctYWN0aW9ucyBrLWRpYWxvZy1hY3Rpb25zXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJjbG9zZUJ1dHRvblRpdGxlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNsb3NlQnV0dG9uVGl0bGVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay1iYXJlIGstYnV0dG9uLWljb24gay13aW5kb3ctYWN0aW9uIGstZGlhbG9nLWFjdGlvbiBrLWRpYWxvZy1jbG9zZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWkteFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EaWFsb2dUaXRsZUJhckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5EaWFsb2dUaXRsZUJhckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbG9zZVRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbGFzc05hbWU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2luZG93LXRpdGxlYmFyJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kaWFsb2ctdGl0bGViYXInLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1ByZXNlbnQgPSAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNUcnV0aHkgPSAodmFsdWUpID0+ICEhdmFsdWU7XG5jb25zdCB0b0NsYXNzTGlzdCA9IChjbGFzc05hbWVzKSA9PiBTdHJpbmcoY2xhc3NOYW1lcykudHJpbSgpLnNwbGl0KCcgJyk7XG5jb25zdCBmb2N1c2FibGVSZWdleCA9IC9eKD86YXxpbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2k7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEtleXM7XG4oZnVuY3Rpb24gKEtleXMpIHtcbiAgICBLZXlzW0tleXNbXCJlc2NcIl0gPSAyN10gPSBcImVzY1wiO1xuICAgIEtleXNbS2V5c1tcInRhYlwiXSA9IDldID0gXCJ0YWJcIjtcbiAgICBLZXlzW0tleXNbXCJlbnRlclwiXSA9IDEzXSA9IFwiZW50ZXJcIjtcbiAgICBLZXlzW0tleXNbXCJzcGFjZVwiXSA9IDMyXSA9IFwic3BhY2VcIjtcbiAgICBLZXlzW0tleXNbXCJjdHJsXCJdID0gMTddID0gXCJjdHJsXCI7XG4gICAgS2V5c1tLZXlzW1wic2hpZnRcIl0gPSAxNl0gPSBcInNoaWZ0XCI7XG4gICAgS2V5c1tLZXlzW1wibGVmdFwiXSA9IDM3XSA9IFwibGVmdFwiO1xuICAgIEtleXNbS2V5c1tcInVwXCJdID0gMzhdID0gXCJ1cFwiO1xuICAgIEtleXNbS2V5c1tcInJpZ2h0XCJdID0gMzldID0gXCJyaWdodFwiO1xuICAgIEtleXNbS2V5c1tcImRvd25cIl0gPSA0MF0gPSBcImRvd25cIjtcbn0pKEtleXMgfHwgKEtleXMgPSB7fSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IERJQUxPR19FTEVNRU5UU19IQU5ETElOR19FU0NfS0VZID0gJ2stZGlhbG9nLXdyYXBwZXIgay1kaWFsb2ctYnV0dG9uZ3JvdXAgay1kaWFsb2ctYWN0aW9uJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBESUFMT0dfRUxFTUVOVFNfSEFORExJTkdfQVJST1dTID0gJ2stZGlhbG9nLWJ1dHRvbmdyb3VwJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBXSU5ET1dfQ0xBU1NFUyA9ICdrLXdpbmRvdyc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzQ2xhc3NlcyA9IChlbGVtZW50LCBjbGFzc05hbWVzKSA9PiB7XG4gICAgY29uc3QgbmFtZXNMaXN0ID0gdG9DbGFzc0xpc3QoY2xhc3NOYW1lcyk7XG4gICAgcmV0dXJuIEJvb2xlYW4odG9DbGFzc0xpc3QoZWxlbWVudC5jbGFzc05hbWUpLmZpbmQoKGNsYXNzTmFtZSkgPT4gbmFtZXNMaXN0LmluZGV4T2YoY2xhc3NOYW1lKSA+PSAwKSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzVmlzaWJsZSA9IChlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuICEhKHJlY3Qud2lkdGggJiYgcmVjdC5oZWlnaHQpICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnZpc2liaWxpdHkgIT09ICdoaWRkZW4nO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0ZvY3VzYWJsZSA9IChlbGVtZW50LCBjaGVja1Zpc2liaWxpdHkgPSB0cnVlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQudGFnTmFtZSkge1xuICAgICAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGNvbnN0IHRhYkluZGV4ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RhYkluZGV4Jyk7XG4gICAgICAgIGNvbnN0IHZhbGlkVGFiSW5kZXggPSB0YWJJbmRleCAhPT0gbnVsbCAmJiAhaXNOYU4odGFiSW5kZXgpICYmIHRhYkluZGV4ID4gLTE7XG4gICAgICAgIGxldCBmb2N1c2FibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGZvY3VzYWJsZVJlZ2V4LnRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZSA9ICFlbGVtZW50LmRpc2FibGVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9jdXNhYmxlID0gdmFsaWRUYWJJbmRleDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9jdXNhYmxlICYmICghY2hlY2tWaXNpYmlsaXR5IHx8IGlzVmlzaWJsZShlbGVtZW50KSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZm9jdXNhYmxlU2VsZWN0b3IgPSBbXG4gICAgJ2FbaHJlZl0nLFxuICAgICdhcmVhW2hyZWZdJyxcbiAgICAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAnc2VsZWN0Om5vdChbZGlzYWJsZWRdKScsXG4gICAgJ3RleHRhcmVhOm5vdChbZGlzYWJsZWRdKScsXG4gICAgJ2J1dHRvbjpub3QoW2Rpc2FibGVkXSknLFxuICAgICdpZnJhbWUnLFxuICAgICdvYmplY3QnLFxuICAgICdlbWJlZCcsXG4gICAgJypbdGFiaW5kZXhdJyxcbiAgICAnKltjb250ZW50ZWRpdGFibGVdJ1xuXS5qb2luKCcsJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcHJldmVudERlZmF1bHQgPSAoeyBvcmlnaW5hbEV2ZW50OiBldmVudCB9KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgUkVTSVpFX0RJUkVDVElPTlMgPSBbJ24nLCAnZScsICdzJywgJ3cnLCAnc2UnLCAnc3cnLCAnbmUnLCAnbncnXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBPRkZTRVRfU1RZTEVTID0gWyd0b3AnLCAnbGVmdCcsICd3aWR0aCcsICdoZWlnaHQnXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1N0cmluZyA9ICh2YWx1ZSkgPT4gdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc051bWJlciA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY3JlYXRlVmFsdWVXaXRoVW5pdCA9ICh2YWx1ZSkgPT4gdmFsdWUgKyAoaXNOdW1iZXIodmFsdWUpID8gJ3B4JyA6ICcnKTtcblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBEaWFsb2cgYWN0aW9ucyB3aGVuIHRoZSBEaWFsb2cgaXMgb3BlbmVkIHRocm91Z2ggYERpYWxvZ1NlcnZpY2VgXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwaV9kaWFsb2dfZGlhbG9nc2VydmljZSAlfSN0b2Mtb3BlbikpLlxuICovXG5jbGFzcyBEaWFsb2dBY3Rpb24ge1xufVxuLyoqXG4gKiBJbmRpY2F0ZXMgdGhhdCB0aGUgKipDbG9zZSoqIGJ1dHRvbiBpcyBjbGlja2VkLiBVc2VkIHdoZW4gdGhlIHJlc3VsdHMgZnJvbVxuICogdGhlIERpYWxvZ3MgdGhhdCBhcmUgb3BlbmVkIHRocm91Z2ggYERpYWxvZ1NlcnZpY2VgIGFyZSBmaWx0ZXJlZFxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhcGlfZGlhbG9nX2RpYWxvZ3NlcnZpY2UgJX0jdG9jLW9wZW4pKS5cbiAqL1xuY2xhc3MgRGlhbG9nQ2xvc2VSZXN1bHQge1xufVxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgdGhhdCBjYW4gYmUgdXNlZCB3aGVuIHRoZSBEaWFsb2cgaXMgb3BlbmVkIHRocm91Z2ggYERpYWxvZ1NlcnZpY2VgLlxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhcGlfZGlhbG9nX2RpYWxvZ3NlcnZpY2UgJX0jdG9jLW9wZW4pKS5cbiAqL1xuY2xhc3MgRGlhbG9nU2V0dGluZ3Mge1xufVxuLyoqXG4gKiBIb2xkcyByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QgaW5zdGFuY2UgYW5kIHB1Ymxpc2hlZCBldmVudHMgb2YgdGhlIERpYWxvZy5cbiAqIENvbnRyb2xzIHRoZSBEaWFsb2dzIHRoYXQgd2VyZSBvcGVuZWQgdGhyb3VnaCB0aGUgYERpYWxvZ1NlcnZpY2VgXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwaV9kaWFsb2dfZGlhbG9nc2VydmljZSAlfSN0b2Mtb3BlbikpLlxuICovXG5jbGFzcyBEaWFsb2dSZWYge1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgRElBTE9HX0xPQ0FMSVpBVElPTl9TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuKCdEaWFsb2cgTG9jYWxpemF0aW9uU2VydmljZScpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBEaWFsb2cgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2RpYWxvZ19kaWFsb2dzICV9KS5cbiAqL1xuY2xhc3MgRGlhbG9nQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihfZWxSZWYsIF9yZW5kZXJlciwgbG9jYWxpemF0aW9uLCBjZHIpIHtcbiAgICAgICAgdGhpcy5fZWxSZWYgPSBfZWxSZWY7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyID0gX3JlbmRlcmVyO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbGF5b3V0IG9mIHRoZSBhY3Rpb24gYnV0dG9ucyBpbiB0aGUgRGlhbG9nLlxuICAgICAgICAgKiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaWYgdGhlIGFjdGlvbiBidXR0b25zIGFyZSBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgYGFjdGlvbnNgIG9wdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0ICdzdHJldGNoZWQnXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbnNMYXlvdXQgPSAnc3RyZXRjaGVkJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGl0bGVJZCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhbiBhY3Rpb24gYnV0dG9uIG9mIHRoZSBEaWFsb2cuXG4gICAgICAgICAqIFRoZSBldmVudCBpcyBmaXJlZCBvbmx5IHdoZW4gdGhlIGFjdGlvbiBidXR0b25zIGFyZSBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgYGFjdGlvbnNgIG9wdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKkNsb3NlKiogYnV0dG9uIG9mIHRoZSBEaWFsb2cuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID0gbG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gKHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJykpKTtcbiAgICAgICAgdGhpcy50aXRsZUlkID0gdGhpcy5nZW5lcmF0ZVRpdGxlSWQoKTtcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Db21wb25lbnRLZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIGlmIChoYXNDbGFzc2VzKHRhcmdldCwgRElBTE9HX0VMRU1FTlRTX0hBTkRMSU5HX0VTQ19LRVkpIHx8IGhhc0NsYXNzZXMocGFyZW50LCBESUFMT0dfRUxFTUVOVFNfSEFORExJTkdfRVNDX0tFWSkpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLmVzYykge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdChuZXcgRGlhbG9nQ2xvc2VSZXN1bHQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0NsYXNzZXModGFyZ2V0LCAnay1idXR0b24nKSAmJlxuICAgICAgICAgICAgaGFzQ2xhc3NlcyhwYXJlbnQsIERJQUxPR19FTEVNRU5UU19IQU5ETElOR19BUlJPV1MpICYmXG4gICAgICAgICAgICAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5sZWZ0IHx8IGV2ZW50LmtleUNvZGUgPT09IEtleXMucmlnaHQpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbkJ1dHRvbkZvY3VzKHBhcmVudCwgZXZlbnQua2V5Q29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEtleXMudGFiKSB7XG4gICAgICAgICAgICB0aGlzLmtlZXBGb2N1c1dpdGhpbkNvbXBvbmVudCh0YXJnZXQsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuYnViYmxlKCdjbG9zZScsIHRoaXMudGl0bGViYXJDb250ZW50KTtcbiAgICAgICAgaWYgKHRoaXMudGl0bGViYXJDb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnRpdGxlYmFyQ29udGVudC5pZCA9IHRoaXMudGl0bGVJZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIHRoaXMuYnViYmxlKCdjbG9zZScsIHRoaXMudGl0bGViYXJWaWV3KTtcbiAgICAgICAgdGhpcy5idWJibGUoJ2FjdGlvbicsIHRoaXMuYWN0aW9uc1ZpZXcpO1xuICAgICAgICBpZiAodGhpcy50aXRsZWJhclZpZXcgfHwgdGhpcy50aXRsZWJhckNvbnRlbnQpIHtcbiAgICAgICAgICAgIC8vTmVlZGVkIGZvciBEaWFsb2dzIGNyZWF0ZWQgdmlhIHNlcnZpY2VcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLWRpYWxvZycpLCAnYXJpYS1sYWJlbGxlZGJ5JywgdGhpcy50aXRsZUlkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IFtdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSB3cmFwcGVyIG9mIHRoZSBEaWFsb2cgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh3cmFwcGVyKSkge1xuICAgICAgICAgICAgd3JhcHBlci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJbml0aWFsRm9jdXMoKSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwcmltYXJ5QnV0dG9uID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKCcuay1wcmltYXJ5Jyk7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Gb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbGx5Rm9jdXNlZEVsZW1lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IodGhpcy5hdXRvRm9jdXNlZEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGluaXRpYWxseUZvY3VzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGx5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnNob3VsZEZvY3VzUHJpbWFyeShwcmltYXJ5QnV0dG9uKSkge1xuICAgICAgICAgICAgcHJpbWFyeUJ1dHRvbi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgd3JhcHBlci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVBY3Rpb25CdXR0b25Gb2N1cyhwYXJlbnQsIGtleSkge1xuICAgICAgICBjb25zdCBmb2N1c2FibGVBY3Rpb25CdXR0b25zID0gdGhpcy5nZXRBbGxGb2N1c2FibGVDaGlsZHJlbihwYXJlbnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZvY3VzYWJsZUFjdGlvbkJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBmb2N1c2FibGVBY3Rpb25CdXR0b25zW2ldO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBLZXlzLmxlZnQgJiYgaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlQWN0aW9uQnV0dG9uc1tpIC0gMV0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IEtleXMucmlnaHQgJiYgaSA8IGZvY3VzYWJsZUFjdGlvbkJ1dHRvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBmb2N1c2FibGVBY3Rpb25CdXR0b25zW2kgKyAxXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGtlZXBGb2N1c1dpdGhpbkNvbXBvbmVudCh0YXJnZXQsIGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5fZWxSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZSA9IHRoaXMuZ2V0TGFzdEZvY3VzYWJsZUVsZW1lbnQoZmlyc3RGb2N1c2FibGUpO1xuICAgICAgICBjb25zdCB0YWJCZWZvcmVGaXJzdEZvY3VzYWJsZSA9IHRhcmdldCA9PT0gZmlyc3RGb2N1c2FibGUgJiYgZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IHRhYkFmdGVyTGFzdEZvY3VzYWJsZSA9ICFldmVudC5zaGlmdEtleSAmJiBpc1ByZXNlbnQobGFzdEZvY3VzYWJsZSkgJiYgdGFyZ2V0ID09PSBsYXN0Rm9jdXNhYmxlO1xuICAgICAgICBjb25zdCB0YWJXaXRoTm9Gb2N1c2FibGUgPSAhaXNQcmVzZW50KGxhc3RGb2N1c2FibGUpICYmICFldmVudC5zaGlmdEtleTtcbiAgICAgICAgaWYgKHRhYkJlZm9yZUZpcnN0Rm9jdXNhYmxlIHx8IHRhYldpdGhOb0ZvY3VzYWJsZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGZpcnN0Rm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYkFmdGVyTGFzdEZvY3VzYWJsZSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGxhc3RGb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2hvdWxkRm9jdXNQcmltYXJ5KGVsKSB7XG4gICAgICAgIHJldHVybiBpc1ByZXNlbnQoZWwpICYmIGlzRm9jdXNhYmxlKGVsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldEFsbEZvY3VzYWJsZUNoaWxkcmVuKHBhcmVudCkge1xuICAgICAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZm9jdXNhYmxlU2VsZWN0b3IpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0TGFzdEZvY3VzYWJsZUVsZW1lbnQocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGFsbCA9IHRoaXMuZ2V0QWxsRm9jdXNhYmxlQ2hpbGRyZW4ocGFyZW50KTtcbiAgICAgICAgcmV0dXJuIGFsbC5sZW5ndGggPiAwID8gYWxsW2FsbC5sZW5ndGggLSAxXSA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZW5lcmF0ZVRpdGxlSWQoKSB7XG4gICAgICAgIHJldHVybiAna2VuZG8tZGlhbG9nLXRpdGxlLScgKyBNYXRoLmNlaWwoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGdldCB3cmFwcGVyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgc3R5bGVzKCkge1xuICAgICAgICBjb25zdCBzdHlsZXMgPSB7fTtcbiAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgICAgICAgIHN0eWxlcy53aWR0aCA9IGNyZWF0ZVZhbHVlV2l0aFVuaXQodGhpcy53aWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0KSB7XG4gICAgICAgICAgICBzdHlsZXMuaGVpZ2h0ID0gY3JlYXRlVmFsdWVXaXRoVW5pdCh0aGlzLmhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluV2lkdGgpIHtcbiAgICAgICAgICAgIHN0eWxlcy5taW5XaWR0aCA9IGNyZWF0ZVZhbHVlV2l0aFVuaXQodGhpcy5taW5XaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4V2lkdGgpIHtcbiAgICAgICAgICAgIHN0eWxlcy5tYXhXaWR0aCA9IGNyZWF0ZVZhbHVlV2l0aFVuaXQodGhpcy5tYXhXaWR0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluSGVpZ2h0KSB7XG4gICAgICAgICAgICBzdHlsZXMubWluSGVpZ2h0ID0gY3JlYXRlVmFsdWVXaXRoVW5pdCh0aGlzLm1pbkhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWF4SGVpZ2h0KSB7XG4gICAgICAgICAgICBzdHlsZXMubWF4SGVpZ2h0ID0gY3JlYXRlVmFsdWVXaXRoVW5pdCh0aGlzLm1heEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICB9XG4gICAgYnViYmxlKGV2ZW50TmFtZSwgY29tcG9uZW50KSB7XG4gICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtaXQgPSBlID0+IHRoaXNbZXZlbnROYW1lXS5lbWl0KGUpO1xuICAgICAgICAgICAgY29uc3QgcyA9IGNvbXBvbmVudFtldmVudE5hbWVdLnN1YnNjcmliZShlbWl0KTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHMpO1xuICAgICAgICB9XG4gICAgfVxufVxuRGlhbG9nQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKCdvdmVybGF5QXBwZWFyJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUoJ2luJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24oJ3ZvaWQgPT4gKicsIFtzdHlsZSh7IG9wYWNpdHk6IDAuMSB9KSwgYW5pbWF0ZSgnLjNzIGN1YmljLWJlemllciguMiwgLjYsIC40LCAxKScpXSlcbiAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ2RpYWxvZ1NsaWRlSW5BcHBlYXInLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAwKScgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbigndm9pZCA9PiAqJywgW3N0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIC0xMCUpJyB9KSwgYW5pbWF0ZSgnLjNzIGN1YmljLWJlemllciguMiwgMSwgLjIsIDEpJyldKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0RpYWxvZycsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IERJQUxPR19MT0NBTElaQVRJT05fU0VSVklDRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBMb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5kaWFsb2cnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGlhbG9nJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBrZW5kb0RpYWxvZ0xvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLWNsb3NlVGl0bGU9XCJrZW5kby5kaWFsb2cuY2xvc2VUaXRsZXxUaGUgdGl0bGUgb2YgdGhlIGNsb3NlIGJ1dHRvblwiXG4gICAgICAgICAgICBjbG9zZVRpdGxlPVwiQ2xvc2VcIlxuICAgICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLW92ZXJsYXlcIiBAb3ZlcmxheUFwcGVhcj48L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiay13aWRnZXQgay13aW5kb3cgay1kaWFsb2dcIiByb2xlPVwiZGlhbG9nXCIgW25nU3R5bGVdPVwic3R5bGVzXCIgQGRpYWxvZ1NsaWRlSW5BcHBlYXI+XG4gICAgICAgICAgICA8a2VuZG8tZGlhbG9nLXRpdGxlYmFyICpuZ0lmPVwidGl0bGVcIiBbY2xvc2VUaXRsZV09XCJjbG9zZVRpdGxlXCIgW2lkXT1cInRpdGxlSWRcIj57eyB0aXRsZSB9fTwva2VuZG8tZGlhbG9nLXRpdGxlYmFyPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tZGlhbG9nLXRpdGxlYmFyXCIgKm5nSWY9XCIhdGl0bGVcIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLWNvbnRlbnQgay13aW5kb3ctY29udGVudCBrLWRpYWxvZy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCIhY29udGVudFRlbXBsYXRlXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGVcIiAqbmdJZj1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tZGlhbG9nLWFjdGlvbnNcIiAqbmdJZj1cIiFhY3Rpb25zXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgPGtlbmRvLWRpYWxvZy1hY3Rpb25zICpuZ0lmPVwiYWN0aW9uc1wiIFthY3Rpb25zXT1cImFjdGlvbnNcIiBbbGF5b3V0XT1cImFjdGlvbnNMYXlvdXRcIj4gPC9rZW5kby1kaWFsb2ctYWN0aW9ucz5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EaWFsb2dDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5EaWFsb2dDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYWN0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uc0xheW91dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXV0b0ZvY3VzZWRFbGVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbldpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXhXaWR0aDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVpZ2h0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW5IZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heEhlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBkaXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnRhYkluZGV4JyxdIH1dLFxuICAgIHRpdGxlYmFyQ29udGVudDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbRGlhbG9nVGl0bGVCYXJDb21wb25lbnQsXSB9XSxcbiAgICB0aXRsZWJhclZpZXc6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW0RpYWxvZ1RpdGxlQmFyQ29tcG9uZW50LF0gfV0sXG4gICAgYWN0aW9uc1ZpZXc6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW0RpYWxvZ0FjdGlvbnNDb21wb25lbnQsXSB9XSxcbiAgICBvbkNvbXBvbmVudEtleWRvd246IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydrZXlkb3duJywgWyckZXZlbnQnXSxdIH1dLFxuICAgIHdyYXBwZXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kaWFsb2ctd3JhcHBlcicsXSB9XVxufTtcblxuLyoqXG4gKiBUaGUgYmFzZSBjbGFzcyAgd2hpY2ggd2lsbCBiZSBleHRlbmRlZCBieSBhIGNvbXBvbmVudCB0aGF0IGlzIHByb3ZpZGVkIGFzIGNvbnRlbnQgdGhyb3VnaCBgY29udGVudGBcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc2VydmljZV9kaWFsb2cgJX0jdG9jLXBhc3NpbmctdGl0bGUtY29udGVudC1hbmQtYWN0aW9ucy1hcy1hLXNpbmdsZS1jb21wb25lbnQpKS5cbiAqL1xuY2xhc3MgRGlhbG9nQ29udGVudEJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGRpYWxvZykge1xuICAgICAgICB0aGlzLmRpYWxvZyA9IGRpYWxvZztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlhbG9nVGl0bGVCYXIpIHtcbiAgICAgICAgICAgIC8vIHdoZW4gb3BlbmluZyBjb21wb25lbnQgaW5zaWRlIGRpYWxvZyB3aXRoIHNlcnZpY2UgQU5EIHRoZSBjb21wb25lbnQgaGFzIGRlZmluZWQgaXRzIG93biB0aXRsZWJhclxuICAgICAgICAgICAgdGhpcy5kaWFsb2dUaXRsZUJhci5jbG9zZS5waXBlKGZpbHRlcigoZSkgPT4gIWUuaXNEZWZhdWx0UHJldmVudGVkKCkpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLmNsb3NlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaWFsb2dBY3Rpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaWFsb2dBY3Rpb25zLmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ0FjdGlvbnMuYWN0aW9uLnN1YnNjcmliZShhY3Rpb24gPT4gdGhpcy5kaWFsb2cuZGlhbG9nLmluc3RhbmNlLmFjdGlvbi5lbWl0KGFjdGlvbikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuRGlhbG9nQ29udGVudEJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZGlhbG9nVGl0bGVCYXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW0RpYWxvZ1RpdGxlQmFyQ29tcG9uZW50LF0gfV0sXG4gICAgZGlhbG9nQWN0aW9uczogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbRGlhbG9nQWN0aW9uc0NvbXBvbmVudCxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGlhbG9nQ29udGFpbmVyU2VydmljZSB7XG4gICAgc2V0IGNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgICAgICAgRGlhbG9nQ29udGFpbmVyU2VydmljZS5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgfVxuICAgIGdldCBjb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiBEaWFsb2dDb250YWluZXJTZXJ2aWNlLmNvbnRhaW5lcjtcbiAgICB9XG59XG5EaWFsb2dDb250YWluZXJTZXJ2aWNlLmNvbnRhaW5lciA9IG51bGw7XG5EaWFsb2dDb250YWluZXJTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IGlzTm90Q29tcG9uZW50ID0gKGNvbXBvbmVudCkgPT4gaXNTdHJpbmcoY29tcG9uZW50KSB8fCBjb21wb25lbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZjtcbmNsYXNzIERpYWxvZ0luamVjdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihnZXREaWFsb2dSZWYsIHBhcmVudEluamVjdG9yKSB7XG4gICAgICAgIHRoaXMuZ2V0RGlhbG9nUmVmID0gZ2V0RGlhbG9nUmVmO1xuICAgICAgICB0aGlzLnBhcmVudEluamVjdG9yID0gcGFyZW50SW5qZWN0b3I7XG4gICAgfVxuICAgIGdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSkge1xuICAgICAgICBpZiAodG9rZW4gPT09IERpYWxvZ1JlZikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGlhbG9nUmVmKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50SW5qZWN0b3IuZ2V0KHRva2VuLCBub3RGb3VuZFZhbHVlKTtcbiAgICB9XG59XG4vKipcbiAqIEEgc2VydmljZSBmb3Igb3BlbmluZyBEaWFsb2cgd2luZG93cyBkeW5hbWljYWxseVxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZXJ2aWNlX2RpYWxvZyAlfSkpLlxuICovXG5jbGFzcyBEaWFsb2dTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVzb2x2ZXIsIGNvbnRhaW5lclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclNlcnZpY2UgPSBjb250YWluZXJTZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIERpYWxvZyB3aW5kb3cuIFJlcXVpcmVzIGFuIGVsZW1lbnQgaW4gdGhlIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGVcbiAgICAgKiBbYGtlbmRvRGlhbG9nQ29udGFpbmVyYF0oeyUgc2x1ZyBhcGlfZGlhbG9nX2RpYWxvZ2NvbnRhaW5lcmRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICAgICAqIENyZWF0ZWQgRGlhbG9ncyB3aWxsIGJlIG1vdW50ZWQgaW4gdGhlIERPTSBkaXJlY3RseSBhZnRlciB0aGF0IGVsZW1lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0RpYWxvZ0FjdGlvbn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRoYXQgZGVmaW5lIHRoZSBEaWFsb2cuXG4gICAgICogQHJldHVybnMge0RpYWxvZ1JlZn0gLSBBIHJlZmVyZW5jZSB0byB0aGUgRGlhbG9nIG9iamVjdCBhbmQgdGhlIGNvbnZlbmllbmNlIHByb3BlcnRpZXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYGBgdHMtbm8tcnVuXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgPGJ1dHRvbiBrZW5kb0J1dHRvbiAoY2xpY2spPVwib3BlbigpXCI+SGFybWxlc3MgYnV0dG9uPC9idXR0b24+XG4gICAgICogICAgIDxkaXYga2VuZG9EaWFsb2dDb250YWluZXI+PC9kaXY+XG4gICAgICogICBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgICAgY29uc3RydWN0b3IoIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSApIHt9XG4gICAgICpcbiAgICAgKiAgICAgcHVibGljIG9wZW4oKSB7XG4gICAgICogICAgICAgICB2YXIgZGlhbG9nID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oe1xuICAgICAqICAgICAgICAgICB0aXRsZTogXCJQbGVhc2UgY29uZmlybVwiLFxuICAgICAqICAgICAgICAgICBjb250ZW50OiBcIkFyZSB5b3Ugc3VyZT9cIixcbiAgICAgKiAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAqICAgICAgICAgICAgIHsgdGV4dDogXCJOb1wiIH0sXG4gICAgICogICAgICAgICAgICAgeyB0ZXh0OiBcIlllc1wiLCBwcmltYXJ5OiB0cnVlIH1cbiAgICAgKiAgICAgICAgICAgXVxuICAgICAqICAgICAgICAgfSk7XG4gICAgICpcbiAgICAgKiAgICAgICAgIGRpYWxvZy5yZXN1bHQuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgKiAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIERpYWxvZ0Nsb3NlUmVzdWx0KSB7XG4gICAgICogICAgICAgICAgICAgY29uc29sZS5sb2coXCJjbG9zZVwiKTtcbiAgICAgKiAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgKiAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFjdGlvblwiLCByZXN1bHQpO1xuICAgICAqICAgICAgICAgICB9XG4gICAgICogICAgICAgICB9KTtcbiAgICAgKiAgICAgfVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqL1xuICAgIG9wZW4ob3B0aW9ucykge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShEaWFsb2dDb21wb25lbnQpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBvcHRpb25zLmFwcGVuZFRvIHx8IHRoaXMuY29udGFpbmVyU2VydmljZS5jb250YWluZXI7XG4gICAgICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuQ2Fubm90IGF0dGFjaCBkaWFsb2cgdG8gdGhlIHBhZ2UuXG5BZGQgYW4gZWxlbWVudCB0aGF0IHVzZXMgdGhlIGtlbmRvRGlhbG9nQ29udGFpbmVyIGRpcmVjdGl2ZSwgb3Igc2V0IHRoZSAnYXBwZW5kVG8nIHByb3BlcnR5LlxuU2VlIGh0dHBzOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kaWFsb2dzL2RpYWxvZy9zZXJ2aWNlLy5cbiAgICAgICAgICBgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgRGlhbG9nUmVmIHRvICgxKSBwYXNzIGFzIHJlc3VsdCwgKDIpIHByb3ZpZGUgdGhyb3VnaCBpbmplY3RvclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB7XG4gICAgICAgICAgICBjbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8qIG5vb3AgKi9cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZW50OiBudWxsLFxuICAgICAgICAgICAgZGlhbG9nOiBudWxsLFxuICAgICAgICAgICAgcmVzdWx0OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmluaXRpYWxpemVEaWFsb2cob3B0aW9ucy5jb250ZW50LCBmYWN0b3J5LCBjb250YWluZXIsIGRpYWxvZ1JlZiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGluaXRpYWxpemVEaWFsb2coY29tcG9uZW50LCBmYWN0b3J5LCBjb250YWluZXIsIGRpYWxvZ1JlZiwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50RnJvbShjb21wb25lbnQsIGNvbnRhaW5lciwgZGlhbG9nUmVmKTtcbiAgICAgICAgY29uc3QgZGlhbG9nID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGVudC5ub2Rlcyk7XG4gICAgICAgIGRpYWxvZ1JlZi5kaWFsb2cgPSBkaWFsb2c7XG4gICAgICAgIGRpYWxvZy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgLy8gY29weSBASW5wdXQgb3B0aW9ucyB0byBkaWFsb2cgaW5zdGFuY2VcbiAgICAgICAgdGhpcy5hcHBseU9wdGlvbnMoZGlhbG9nLmluc3RhbmNlLCBvcHRpb25zKTtcbiAgICAgICAgLy8gY3JlYXRlIGNsb3NlIGhhbmRsZXIgYW5kIHJlc3VsdCBzdHJlYW1cbiAgICAgICAgY29uc3QgYXBpQ2xvc2UgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICBjb25zdCBjbG9zZSA9IChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIFByZXZlbnRhYmxlRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBlID0gbmV3IERpYWxvZ0Nsb3NlUmVzdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGlDbG9zZS5uZXh0KGUgfHwgbmV3IERpYWxvZ0Nsb3NlUmVzdWx0KCkpO1xuICAgICAgICAgICAgaWYgKGNvbnRlbnQuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgY29udGVudC5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbWVyZ2UoYXBpQ2xvc2UsIFxuICAgICAgICAvLyB0cmlnZ2VyZWQgd2hlbiB0aGUgdGl0bGViYXIgb3IgYWN0aW9ucyBhcmUgZGVmaW5lZCBpbiBEaWFsb2dTZXR0aW5nc1xuICAgICAgICBtZXJnZShkaWFsb2cuaW5zdGFuY2UuY2xvc2UsIGRpYWxvZy5pbnN0YW5jZS5hY3Rpb24pLnBpcGUobWFwKGUgPT4gKGUgaW5zdGFuY2VvZiBQcmV2ZW50YWJsZUV2ZW50ID8gbmV3IERpYWxvZ0Nsb3NlUmVzdWx0KCkgOiBlKSksIGZpbHRlcihlID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnByZXZlbnRBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBhZGQgZGlhbG9nUmVmIG9ubHkgd2hlbiB1c2luZyBjb21wb25lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBkaWFsb2dSZWZQYXJhbWV0ZXIgPSBpc05vdENvbXBvbmVudChjb21wb25lbnQpID8gdW5kZWZpbmVkIDogZGlhbG9nUmVmO1xuICAgICAgICAgICAgICAgIHJldHVybiAhb3B0aW9ucy5wcmV2ZW50QWN0aW9uKGUsIGRpYWxvZ1JlZlBhcmFtZXRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkpKS5waXBlKHRha2UoMSksIFxuICAgICAgICAvLyBUYWtlcyBjYXJlIGZvciBtdWx0aXBsZSBzdWJzY3JpcHRpb25zOlxuICAgICAgICAvLyBXZSBzdWJzY3JpYmUgaW50ZXJuYWx5IGFuZCB0aGUgdXNlciBtYXkgc3Vic2NyaWJlIHRvIGdldCBhIGNsb3NlIHJlc3VsdCAtIGRpYWxvZy5yZXN1bHQuc3Vic2NyaWJlKCkuXG4gICAgICAgIC8vIFRoaXMgY2F1c2VzIG11bHRpcGxlIHN1YnNjcmlwdGlvbnMgdG8gdGhlIHNhbWUgc291cmNlIGFuZCB0aHVzIG11bHRpcGxlIGVtaXNzaW9ucy4gc2hhcmUoKSBzb2x2ZXMgdGhhdC5cbiAgICAgICAgc2hhcmUoKSk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoY2xvc2UpO1xuICAgICAgICBkaWFsb2dSZWYuY2xvc2UgPSBjbG9zZTtcbiAgICAgICAgZGlhbG9nUmVmLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgaWYgKGNvbXBvbmVudCAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc3QgaGFzQ29udGVudFRpdGxlID0gY29udGVudC5ub2Rlc1swXSAmJiBjb250ZW50Lm5vZGVzWzBdLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBjb25zdCBoYXNDb250ZW50QWN0aW9ucyA9IGNvbnRlbnQubm9kZXNbMl0gJiYgY29udGVudC5ub2Rlc1syXS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlwbGVUaXRsZXMgPSBvcHRpb25zLnRpdGxlICYmIGhhc0NvbnRlbnRUaXRsZTtcbiAgICAgICAgICAgIGNvbnN0IG11bHRpcGxlQWN0aW9ucyA9IG9wdGlvbnMuYWN0aW9ucyAmJiBoYXNDb250ZW50QWN0aW9ucztcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQucHJvdG90eXBlIGluc3RhbmNlb2YgRGlhbG9nQ29udGVudEJhc2UpIHtcbiAgICAgICAgICAgICAgICAvLyBjb250ZW50IGNvbXBvbmVudCBleHRlbmRzIERpYWxvZ0NvbnRlbnRCYXNlXG4gICAgICAgICAgICAgICAgaWYgKG11bHRpcGxlVGl0bGVzIHx8IG11bHRpcGxlQWN0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYFxuICAgICAgICAgICAgICAgICAgICBNdWx0aXBsZSBUaXRsZSBhbmQvb3IgQWN0aW9ucyBjb25maWd1cmF0aW9ucyBkZXRlY3RlZC5cbiAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyBhIGNvbXBvbmVudCBhcyBjb250ZW50LCBwcm92aWRlIHRoZSB0aXRsZSBhbmQgYWN0aW9ucyBlaXRoZXIgaW4gdGhlIGNvbXBvbmVudCdzIG1hcmt1cFxuICAgICAgICAgICAgICAgICAgICBvciB2aWEgdGhlIHRpdGxlIGFuZCBhY3Rpb25zIHByb3BlcnRpZXMgb2YgdGhlIERpYWxvZ1NldHRpbmdzIG9iamVjdCwgYnV0IG5vdCBib3RoLlxuICAgICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RpYWxvZ3MvZGlhbG9nL3NlcnZpY2UvI3RvYy1wYXNzaW5nLXRpdGxlLWNvbnRlbnQtYW5kLWFjdGlvbnMtYXMtYS1zaW5nbGUtY29tcG9uZW50J2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChoYXNDb250ZW50VGl0bGUgfHwgaGFzQ29udGVudEFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBcbiAgICAgICAgICAgICAgICAgICAgV2hlbiBUaXRsZSBhbmQvb3IgQWN0aW9ucyBtYXJrdXAgaXMgcHJvdmlkZWQgaW4gY29udGVudCBjb21wb25lbnQncyB0ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgdGhlIGNvbXBvbmVudCBuZWVkcyB0byBpbmhlcml0IHRoZSBEaWFsb2dDb250ZW50QmFzZSBjbGFzcyB0byBlbnN1cmUgdGhhdCBjbG9zZSBhbmQgcmVzdWx0IGV2ZW50cyBhcmUgcHJvcGVybHkgaG9va2VkLlxuICAgICAgICAgICAgICAgICAgICBTZWUgaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RpYWxvZ3MvZGlhbG9nL3NlcnZpY2UvI3RvYy1wYXNzaW5nLXRpdGxlLWNvbnRlbnQtYW5kLWFjdGlvbnMtYXMtYS1zaW5nbGUtY29tcG9uZW50J2ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlhbG9nUmVmO1xuICAgIH1cbiAgICBhcHBseU9wdGlvbnMoaW5zdGFuY2UsIG9wdGlvbnMpIHtcbiAgICAgICAgaW5zdGFuY2UudGl0bGUgPSBvcHRpb25zLnRpdGxlO1xuICAgICAgICBpbnN0YW5jZS5hY3Rpb25zID0gb3B0aW9ucy5hY3Rpb25zO1xuICAgICAgICBpbnN0YW5jZS5hY3Rpb25zTGF5b3V0ID0gb3B0aW9ucy5hY3Rpb25zTGF5b3V0IHx8ICdzdHJldGNoZWQnO1xuICAgICAgICBpbnN0YW5jZS53aWR0aCA9IG9wdGlvbnMud2lkdGg7XG4gICAgICAgIGluc3RhbmNlLm1pbldpZHRoID0gb3B0aW9ucy5taW5XaWR0aDtcbiAgICAgICAgaW5zdGFuY2UubWF4V2lkdGggPSBvcHRpb25zLm1heFdpZHRoO1xuICAgICAgICBpbnN0YW5jZS5oZWlnaHQgPSBvcHRpb25zLmhlaWdodDtcbiAgICAgICAgaW5zdGFuY2UubWluSGVpZ2h0ID0gb3B0aW9ucy5taW5IZWlnaHQ7XG4gICAgICAgIGluc3RhbmNlLm1heEhlaWdodCA9IG9wdGlvbnMubWF4SGVpZ2h0O1xuICAgICAgICBpbnN0YW5jZS5hdXRvRm9jdXNlZEVsZW1lbnQgPSBvcHRpb25zLmF1dG9Gb2N1c2VkRWxlbWVudDtcbiAgICAgICAgaW5zdGFuY2UuY2xvc2VUaXRsZSA9IG9wdGlvbnMuY2xvc2VUaXRsZTtcbiAgICAgICAgaWYgKG9wdGlvbnMuY29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb250ZW50VGVtcGxhdGUgPSBvcHRpb25zLmNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGVudEZyb20oY29udGVudCwgY29udGFpbmVyLCBkaWFsb2dSZWYpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBjb250YWluZXIuaW5qZWN0b3IuZ2V0KFJlbmRlcmVyMik7XG4gICAgICAgIGxldCBub2RlcyA9IFtdO1xuICAgICAgICBsZXQgdGl0bGVOb2RlcyA9IFtdO1xuICAgICAgICBsZXQgYWN0aW9uTm9kZXMgPSBbXTtcbiAgICAgICAgbGV0IGNvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5vZGVzID0gW3JlbmRlcmVyLmNyZWF0ZVRleHQoY29udGVudCldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbnRlbnQgJiYgIShjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpKSB7XG4gICAgICAgICAgICAvLyBDb21wb25lbnRcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IERpYWxvZ0luamVjdG9yKCgpID0+IGRpYWxvZ1JlZiwgY29udGFpbmVyLmluamVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbnRlbnQpO1xuICAgICAgICAgICAgY29tcG9uZW50UmVmID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5LCB1bmRlZmluZWQsIGluamVjdG9yKTtcbiAgICAgICAgICAgIHRpdGxlTm9kZXMgPSBBcnJheS5mcm9tKGNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2tlbmRvLWRpYWxvZy10aXRsZWJhcicpKTtcbiAgICAgICAgICAgIG5vZGVzID0gW2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgICAgIGFjdGlvbk5vZGVzID0gQXJyYXkuZnJvbShjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdrZW5kby1kaWFsb2ctYWN0aW9ucycpKTtcbiAgICAgICAgICAgIGRpYWxvZ1JlZi5jb250ZW50ID0gY29tcG9uZW50UmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYsXG4gICAgICAgICAgICBub2RlczogW1xuICAgICAgICAgICAgICAgIHRpdGxlTm9kZXMsXG4gICAgICAgICAgICAgICAgbm9kZXMsXG4gICAgICAgICAgICAgICAgYWN0aW9uTm9kZXMgLy8gPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG5EaWFsb2dTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EaWFsb2dTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0sXG4gICAgeyB0eXBlOiBEaWFsb2dDb250YWluZXJTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtEaWFsb2dDb250YWluZXJTZXJ2aWNlLF0gfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmxldCBuZXdaSW5kZXggPSAxMDAwMjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBERUZBVUxUX09QVElPTlMgPSB7XG4gICAgZHJhZ2dhYmxlOiB0cnVlLFxuICAgIGhlaWdodDogbnVsbCxcbiAgICBsZWZ0OiBudWxsLFxuICAgIG1pbkhlaWdodDogMTAwLFxuICAgIG1pbldpZHRoOiAxMjAsXG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgcmVzaXphYmxlOiB0cnVlLFxuICAgIHN0YXRlOiAnZGVmYXVsdCcsXG4gICAgdG9wOiBudWxsLFxuICAgIHdpZHRoOiBudWxsXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNyZWF0ZU1vdmVTdHJlYW0gPSAoZWwsIGV2KSA9PiBtb3VzZURvd24gPT4ge1xuICAgIHJldHVybiBlbC5rZW5kb0RyYWdcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKGVsLmtlbmRvUmVsZWFzZS5waXBlKHRhcCgoKSA9PiB7IGV2LmVtaXQoKTsgfSkpKSwgbWFwKCh7IHBhZ2VYLCBwYWdlWSB9KSA9PiAoe1xuICAgICAgICBvcmlnaW5hbFg6IG1vdXNlRG93bi5wYWdlWCxcbiAgICAgICAgb3JpZ2luYWxZOiBtb3VzZURvd24ucGFnZVksXG4gICAgICAgIHBhZ2VYLFxuICAgICAgICBwYWdlWVxuICAgIH0pKSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYWdSZXNpemVTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmRyYWdTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnJlc2l6ZUVuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TKTtcbiAgICAgICAgdGhpcy5sYXN0QWN0aW9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmRyYWdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kcmFnU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0KGVsKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5vcHRpb25zLnN0YXRlO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgdGhpcy53aW5kb3cgPSBlbDtcbiAgICAgICAgaWYgKHN0YXRlJCQxICE9PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUkJDEgPT09ICdtaW5pbWl6ZWQnKSB7XG4gICAgICAgICAgICBvcHRpb25zLmhlaWdodCA9IDA7XG4gICAgICAgICAgICBvcHRpb25zLm1pbkhlaWdodCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlJCQxID09PSAnbWF4aW1pemVkJykge1xuICAgICAgICAgICAgb3B0aW9ucy5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25EcmFnKGVsKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN0YXJ0UG9zaXRpb247XG4gICAgICAgICAgICBsZXQgZHJhZ1N0YXJ0ZWQ7XG4gICAgICAgICAgICB0aGlzLmRyYWdTdWJzY3JpcHRpb24gPSBlbC5rZW5kb1ByZXNzXG4gICAgICAgICAgICAgICAgLnBpcGUodGFwKChldikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXYuaXNUb3VjaCkge1xuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdChldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMuZW1pdCgpO1xuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSB0aGlzLmN1cnJlbnRQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIGRyYWdTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KSwgc3dpdGNoTWFwKGNyZWF0ZU1vdmVTdHJlYW0oZWwsIHRoaXMuZHJhZ0VuZCkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcGFnZVgsIHBhZ2VZLCBvcmlnaW5hbFgsIG9yaWdpbmFsWSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFkcmFnU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVdpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1N0YXJ0LmVtaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ1N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZURyYWcoe1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFgsIG9yaWdpbmFsWSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVgsIHBhZ2VZLCBzdGFydFBvc2l0aW9uXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBoYW5kbGVEcmFnKHsgb3JpZ2luYWxYLCBvcmlnaW5hbFksIHBhZ2VYLCBwYWdlWSwgc3RhcnRQb3NpdGlvbiB9KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sZWZ0ID0gc3RhcnRQb3NpdGlvbi54ICsgcGFnZVggLSBvcmlnaW5hbFg7XG4gICAgICAgIHRoaXMub3B0aW9ucy50b3AgPSBzdGFydFBvc2l0aW9uLnkgKyBwYWdlWSAtIG9yaWdpbmFsWTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zdGF0ZSA9PT0gJ21pbmltaXplZCcgJiYgaXNQcmVzZW50KHRoaXMucmVzdG9yZU9wdGlvbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVPcHRpb25zLmxlZnQgPSB0aGlzLm9wdGlvbnMubGVmdDtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU9wdGlvbnMudG9wID0gdGhpcy5vcHRpb25zLnRvcDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIGxlZnQ6IHN0YXJ0UG9zaXRpb24ueCArIHBhZ2VYIC0gb3JpZ2luYWxYLFxuICAgICAgICAgICAgdG9wOiBzdGFydFBvc2l0aW9uLnkgKyBwYWdlWSAtIG9yaWdpbmFsWVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25SZXNpemUoaGFuZGxlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RhcnRPZmZzZXRBbmRQb3NpdGlvbjtcbiAgICAgICAgICAgIGxldCByZXNpemVTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBoYW5kbGUua2VuZG9QcmVzcy5waXBlKHRhcCgoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdChldik7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cy5lbWl0KCk7XG4gICAgICAgICAgICAgICAgc3RhcnRPZmZzZXRBbmRQb3NpdGlvbiA9IHRoaXMuY3VycmVudE9mZnNldEFuZFBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSksIHN3aXRjaE1hcChjcmVhdGVNb3ZlU3RyZWFtKGhhbmRsZSwgdGhpcy5yZXNpemVFbmQpKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHBhZ2VYLCBwYWdlWSwgb3JpZ2luYWxYLCBvcmlnaW5hbFkgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzaXplU3RhcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZVN0YXJ0LmVtaXQoZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzaXplU3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBkZWx0YVggPSBwYWdlWCAtIG9yaWdpbmFsWDtcbiAgICAgICAgICAgICAgICBsZXQgZGVsdGFZID0gcGFnZVkgLSBvcmlnaW5hbFk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoc3RhcnRPZmZzZXRBbmRQb3NpdGlvbiwgZGlyZWN0aW9uLCBkZWx0YVgsIGRlbHRhWSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBoYW5kbGVSZXNpemUoaW5pdGlhbCwgZGlyLCBkZWx0YVgsIGRlbHRhWSkge1xuICAgICAgICBjb25zdCBvbGQgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIGxldCBldiA9IHt9O1xuICAgICAgICBpZiAoZGlyLmluZGV4T2YoJ2UnKSA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdXaWR0aCA9IGluaXRpYWwud2lkdGggKyBkZWx0YVg7XG4gICAgICAgICAgICBpZiAobmV3V2lkdGggIT09IG9sZC53aWR0aCAmJiBuZXdXaWR0aCA+PSBvbGQubWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBldi53aWR0aCA9IG5ld1dpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkaXIuaW5kZXhPZignbicpID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGluaXRpYWwuaGVpZ2h0IC0gZGVsdGFZO1xuICAgICAgICAgICAgY29uc3QgbmV3VG9wID0gaW5pdGlhbC55ICsgZGVsdGFZO1xuICAgICAgICAgICAgaWYgKG5ld0hlaWdodCAhPT0gb2xkLmhlaWdodCAmJiBuZXdIZWlnaHQgPj0gb2xkLm1pbkhlaWdodCAmJiBuZXdUb3AgIT09IG9sZC50b3ApIHtcbiAgICAgICAgICAgICAgICBldi5oZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgICAgICAgICAgZXYudG9wID0gbmV3VG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkaXIuaW5kZXhPZigncycpID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IGluaXRpYWwuaGVpZ2h0ICsgZGVsdGFZO1xuICAgICAgICAgICAgaWYgKG5ld0hlaWdodCAhPT0gb2xkLmhlaWdodCAmJiBuZXdIZWlnaHQgPj0gb2xkLm1pbkhlaWdodCkge1xuICAgICAgICAgICAgICAgIGV2LmhlaWdodCA9IG5ld0hlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlyLmluZGV4T2YoJ3cnKSA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdMZWZ0ID0gaW5pdGlhbC54ICsgZGVsdGFYO1xuICAgICAgICAgICAgY29uc3QgbmV3V2lkdGggPSBpbml0aWFsLndpZHRoIC0gZGVsdGFYO1xuICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9PSBvbGQud2lkdGggJiYgbmV3V2lkdGggPj0gb2xkLm1pbldpZHRoICYmIG5ld0xlZnQgIT09IG9sZC5sZWZ0KSB7XG4gICAgICAgICAgICAgICAgZXYud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICAgICAgICBldi5sZWZ0ID0gbmV3TGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KGV2LndpZHRoKSB8fCBpc1ByZXNlbnQoZXYuaGVpZ2h0KSkge1xuICAgICAgICAgICAgT0ZGU0VUX1NUWUxFUy5mb3JFYWNoKChzdHlsZSQkMSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoZXZbc3R5bGUkJDFdKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnNbc3R5bGUkJDFdID0gZXZbc3R5bGUkJDFdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChldik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzdG9yZUFjdGlvbigpIHtcbiAgICAgICAgdGhpcy5sYXN0QWN0aW9uID0gJ3Jlc3RvcmUnO1xuICAgICAgICB0aGlzLmRlZmF1bHRTdGF0ZSgpO1xuICAgIH1cbiAgICBkZWZhdWx0U3RhdGUoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5yZXN0b3JlT3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMucmVzdG9yZU9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3B0aW9ucy5zdGF0ZSA9ICdkZWZhdWx0JztcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KCdkZWZhdWx0Jyk7XG4gICAgfVxuICAgIHN0b3JlT3B0aW9ucygpIHtcbiAgICAgICAgdGhpcy5yZXN0b3JlT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucyk7XG4gICAgfVxuICAgIG1heGltaXplQWN0aW9uKCkge1xuICAgICAgICB0aGlzLmxhc3RBY3Rpb24gPSAnbWF4aW1pemUnO1xuICAgICAgICB0aGlzLm1heGltaXplU3RhdGUoKTtcbiAgICB9XG4gICAgbWF4aW1pemVTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5zdG9yZU9wdGlvbnMoKTtcbiAgICAgICAgY29uc3Qgd25kID0gdGhpcy53aW5kb3dWaWV3UG9ydDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5vcHRpb25zLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IHduZC5oZWlnaHQsXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICAgICAgICBzdGF0ZTogJ21heGltaXplZCcsXG4gICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICB3aWR0aDogd25kLndpZHRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ21heGltaXplZCcpO1xuICAgIH1cbiAgICBtaW5pbWl6ZUFjdGlvbigpIHtcbiAgICAgICAgdGhpcy5sYXN0QWN0aW9uID0gJ21pbmltaXplJztcbiAgICAgICAgdGhpcy5taW5pbWl6ZVN0YXRlKCk7XG4gICAgfVxuICAgIG1pbmltaXplU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuc3RvcmVPcHRpb25zKCk7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMub3B0aW9ucywge1xuICAgICAgICAgICAgaGVpZ2h0OiBudWxsLFxuICAgICAgICAgICAgbWluSGVpZ2h0OiAwLFxuICAgICAgICAgICAgc3RhdGU6ICdtaW5pbWl6ZWQnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlLmVtaXQoJ21pbmltaXplZCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIG1hbnVhbCBjaGFuZ2VzIG9mIHRoZSAnc3RhdGUnIHByb3BlcnR5LlxuICAgICAqIFJlcXVpcmVkIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBhY3Rpb24gY2xpY2tzLlxuICAgICAqL1xuICAgIGFwcGx5TWFudWFsU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5vcHRpb25zLnN0YXRlO1xuICAgICAgICBzd2l0Y2ggKHN0YXRlJCQxKSB7XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFySGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0U3RhdGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21heGltaXplZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckhlaWdodCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubWF4aW1pemVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWluaW1pemVkJzpcbiAgICAgICAgICAgICAgICB0aGlzLm1pbmltaXplU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xvc2VBY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICBlbnN1cmVXaWR0aCgpIHtcbiAgICAgICAgY29uc3Qgd2luZG93T2Zmc2V0ID0gb2Zmc2V0KHRoaXMud2luZG93Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLm9wdGlvbnMud2lkdGgpKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMud2lkdGggPSB3aW5kb3dPZmZzZXQud2lkdGg7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHsgd2lkdGg6IHdpbmRvd09mZnNldC53aWR0aCB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGVhckhlaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLm9wdGlvbnMuaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubWluSGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5vcHRpb25zLm1pbkhlaWdodDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjZW50ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhdGUgPT09ICdtYXhpbWl6ZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHNjcm9sbCA9IHNjcm9sbFBvc2l0aW9uKHRoaXMud2luZG93Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBsZXQgd25kID0gdGhpcy53aW5kb3dWaWV3UG9ydDtcbiAgICAgICAgbGV0IHdyYXBwZXIgPSBvZmZzZXQodGhpcy53aW5kb3cubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGxldCBldiA9IHt9O1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLm9wdGlvbnMubGVmdCkpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sZWZ0ID0gc2Nyb2xsLnggKyBNYXRoLm1heCgwLCAod25kLndpZHRoIC0gd3JhcHBlci53aWR0aCkgLyAyKTtcbiAgICAgICAgICAgIGV2LmxlZnQgPSB0aGlzLm9wdGlvbnMubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLm9wdGlvbnMudG9wKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnRvcCA9IHNjcm9sbC55ICsgTWF0aC5tYXgoMCwgKHduZC5oZWlnaHQgLSB3cmFwcGVyLmhlaWdodCkgLyAyKTtcbiAgICAgICAgICAgIGV2LnRvcCA9IHRoaXMub3B0aW9ucy50b3A7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChldik7XG4gICAgfVxuICAgIGN1cnJlbnRPZmZzZXRBbmRQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgbyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgY29uc3Qgb2ZmID0gb2Zmc2V0KHRoaXMud2luZG93Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jdXJyZW50UG9zaXRpb24oKSwge1xuICAgICAgICAgICAgaGVpZ2h0OiBvLmhlaWdodCA/IG8uaGVpZ2h0IDogb2ZmLmhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiBvLndpZHRoID8gby53aWR0aCA6IG9mZi53aWR0aFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3VycmVudFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBvID0gdGhpcy5vcHRpb25zO1xuICAgICAgICBpZiAoIW8udG9wIHx8ICFvLmxlZnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogdGhpcy5vcHRpb25zLmxlZnQsXG4gICAgICAgICAgICB5OiB0aGlzLm9wdGlvbnMudG9wXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNldFBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gcG9zaXRpb25XaXRoU2Nyb2xsKHRoaXMud2luZG93Lm5hdGl2ZUVsZW1lbnQsIGdldERvY3VtZW50RWxlbWVudCh0aGlzLndpbmRvdy5uYXRpdmVFbGVtZW50KSk7XG4gICAgICAgIHRoaXMub3B0aW9ucy5sZWZ0ID0gd3JhcHBlci5sZWZ0O1xuICAgICAgICB0aGlzLm9wdGlvbnMudG9wID0gd3JhcHBlci50b3A7XG4gICAgfVxuICAgIHNldFJlc3RvcmVPcHRpb24oc3R5bGUkJDEsIHZhbHVlKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5yZXN0b3JlT3B0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZU9wdGlvbnNbc3R5bGUkJDFdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG5leHRQb3NzaWJsZVpJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIG5ld1pJbmRleDtcbiAgICB9XG4gICAgZ2V0IG5leHRaSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBuZXdaSW5kZXgrKztcbiAgICB9XG4gICAgZ2V0IHdpbmRvd1ZpZXdQb3J0KCkge1xuICAgICAgICByZXR1cm4gZ2V0V2luZG93Vmlld1BvcnQodGhpcy53aW5kb3cubmF0aXZlRWxlbWVudCk7XG4gICAgfVxufVxuRHJhZ1Jlc2l6ZVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyYWdSZXNpemVTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBSZXNpemVIYW5kbGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGRyYWdnYWJsZSwgZWwsIHJlbmRlcmVyLCBzZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICBnZXQgaG9zdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0RGlzcGxheSgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgJ2stcmVzaXplLScgKyB0aGlzLmRpcmVjdGlvbik7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQob2YodGhpcy5kcmFnZ2FibGUpLnN1YnNjcmliZShoYW5kbGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLm9uUmVzaXplKGhhbmRsZSwgdGhpcy5kaXJlY3Rpb24pO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zZXJ2aWNlLnJlc2l6ZVN0YXJ0LnN1YnNjcmliZSgoZGlyKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGlyICE9PSB0aGlzLmRpcmVjdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheSgnbm9uZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zZXJ2aWNlLmRyYWdTdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXREaXNwbGF5KCdub25lJyk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChtZXJnZSh0aGlzLnNlcnZpY2UucmVzaXplRW5kLCB0aGlzLnNlcnZpY2UuZHJhZ0VuZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGlzcGxheSgnYmxvY2snKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuc2VydmljZS5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlJCQxKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldERpc3BsYXkoc3RhdGUkJDEgPT09ICdkZWZhdWx0JyA/ICdibG9jaycgOiAnbm9uZScpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgc2V0RGlzcGxheSh2YWx1ZSA9ICdibG9jaycpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgdGhpcy5zZXJ2aWNlLm9wdGlvbnMuc3RhdGUgPT09ICdkZWZhdWx0JyA/IHZhbHVlIDogJ25vbmUnKTtcbiAgICB9XG59XG5SZXNpemVIYW5kbGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1dpbmRvd1Jlc2l6ZUhhbmRsZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblJlc2l6ZUhhbmRsZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYWdnYWJsZURpcmVjdGl2ZSwgZGVjb3JhdG9yczogW3sgdHlwZTogSG9zdCB9XSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBEcmFnUmVzaXplU2VydmljZSB9XG5dO1xuUmVzaXplSGFuZGxlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXJlc2l6ZS1oYW5kbGUnLF0gfV1cbn07XG5cbmNsYXNzIFdpbmRvd1RpdGxlQmFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbCwgc2VydmljZSwgbmdab25lKSB7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmRyYWdEaXJlY3RpdmUgPSBuZXcgRHJhZ2dhYmxlRGlyZWN0aXZlKHRoaXMuZWwsIHRoaXMubmdab25lKTtcbiAgICAgICAgdGhpcy5kcmFnRGlyZWN0aXZlLm5nT25Jbml0KCk7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZURyYWcoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YnNjcmliZVN0YXRlQ2hhbmdlKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRyYWdEaXJlY3RpdmUubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZURyYWcoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzdWJzY3JpYmVEcmFnKCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRHJhZygpO1xuICAgICAgICB0aGlzLmRyYWdTdWJzY3JpcHRpb24gPSBvZih0aGlzLmRyYWdEaXJlY3RpdmUpLnN1YnNjcmliZSh0aXRsZUJhciA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlcnZpY2Uub25EcmFnKHRpdGxlQmFyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzdWJzY3JpYmVTdGF0ZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlJCQxKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXJ2aWNlLm9wdGlvbnMuZHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlJCQxID09PSAnbWF4aW1pemVkJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRHJhZygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVEcmFnKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHVuc3Vic2NyaWJlRHJhZygpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmRyYWdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5kcmFnU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdW5zdWJzY3JpYmVTdGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgdG91Y2hBY3Rpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRHJhZ2dhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ25vbmUnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGUoZXYpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXYudGFyZ2V0O1xuICAgICAgICBjb25zdCBzdGF0ZSQkMSA9IHRoaXMuc2VydmljZS5vcHRpb25zLnN0YXRlO1xuICAgICAgICBpZiAoIWhhc0NsYXNzZXModGFyZ2V0LCAnay1pY29uJykgJiYgIWlzRm9jdXNhYmxlKHRhcmdldCwgZmFsc2UpICYmIHRoaXMuc2VydmljZS5vcHRpb25zLnJlc2l6YWJsZSkge1xuICAgICAgICAgICAgaWYgKHN0YXRlJCQxID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2UubWF4aW1pemVBY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlJCQxID09PSAnbWF4aW1pemVkJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5yZXN0b3JlQWN0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGlzRHJhZ2dhYmxlKCkge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5zZXJ2aWNlLm9wdGlvbnM7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmRyYWdnYWJsZSAmJiBvcHRpb25zLnN0YXRlICE9PSAnbWF4aW1pemVkJztcbiAgICB9XG59XG5XaW5kb3dUaXRsZUJhckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8td2luZG93LXRpdGxlYmFyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIXRlbXBsYXRlXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsnJGltcGxpY2l0Jzogc2VydmljZX1cIiAqbmdJZj1cInRlbXBsYXRlXCI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XaW5kb3dUaXRsZUJhckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IERyYWdSZXNpemVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcbldpbmRvd1RpdGxlQmFyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjbGFzc05hbWU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2luZG93LXRpdGxlYmFyJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kaWFsb2ctdGl0bGViYXInLF0gfV0sXG4gICAgdG91Y2hBY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLnRvdWNoLWFjdGlvbicsXSB9XSxcbiAgICBoYW5kbGU6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydkYmxjbGljaycsIFsnJGV2ZW50J10sXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih3aW5kb3cpIHtcbiAgICAgICAgdGhpcy53aW5kb3cgPSB3aW5kb3c7XG4gICAgfVxuICAgIHByb2Nlc3MoZXYpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXYua2V5Q29kZTtcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5cy51cDpcbiAgICAgICAgICAgIGNhc2UgS2V5cy5kb3duOlxuICAgICAgICAgICAgY2FzZSBLZXlzLmxlZnQ6XG4gICAgICAgICAgICBjYXNlIEtleXMucmlnaHQ6IHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3coa2V5LCBldik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleXMuZXNjOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXNjYXBlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUFycm93KGtleSwgZXYpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMud2luZG93Lm9wdGlvbnM7XG4gICAgICAgIGlmIChldi5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU3RhdGVDaGFuZ2Uoa2V5LCBvcHRpb25zLnN0YXRlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGV2LmN0cmxLZXkgfHwgZXYubWV0YUtleSkgJiYgb3B0aW9ucy5zdGF0ZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlc2l6ZShrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVEcmFnKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlRXNjYXBlKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jbG9zZUFjdGlvbigpO1xuICAgIH1cbiAgICBoYW5kbGVEcmFnKGtleSkge1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHRoaXMud2luZG93Lm9wdGlvbnM7XG4gICAgICAgIGlmICghb3B0aW9ucy5kcmFnZ2FibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXQkJDEgPSB0aGlzLndpbmRvdy5jdXJyZW50T2Zmc2V0QW5kUG9zaXRpb24oKTtcbiAgICAgICAgbGV0IHJlc3RvcmVPcHRpb25zID0gdGhpcy53aW5kb3cucmVzdG9yZU9wdGlvbnM7XG4gICAgICAgIGxldCBldiA9IHt9O1xuICAgICAgICBsZXQgZGVsdGEgPSAxMDtcbiAgICAgICAgaWYgKGtleSA9PT0gS2V5cy5sZWZ0IHx8IGtleSA9PT0gS2V5cy51cCkge1xuICAgICAgICAgICAgZGVsdGEgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgS2V5cy5sZWZ0OlxuICAgICAgICAgICAgY2FzZSBLZXlzLnJpZ2h0OiB7XG4gICAgICAgICAgICAgICAgZXYubGVmdCA9IG9mZnNldCQkMS54ICsgZGVsdGE7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5sZWZ0ID0gZXYubGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgS2V5cy51cDpcbiAgICAgICAgICAgIGNhc2UgS2V5cy5kb3duOiB7XG4gICAgICAgICAgICAgICAgZXYudG9wID0gb2Zmc2V0JCQxLnkgKyBkZWx0YTtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnRvcCA9IGV2LnRvcDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc3RhdGUgPT09ICdtaW5pbWl6ZWQnICYmIGlzUHJlc2VudChyZXN0b3JlT3B0aW9ucykpIHtcbiAgICAgICAgICAgIHJlc3RvcmVPcHRpb25zLmxlZnQgPSBvcHRpb25zLmxlZnQ7XG4gICAgICAgICAgICByZXN0b3JlT3B0aW9ucy50b3AgPSBvcHRpb25zLnRvcDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpbmRvdy5jaGFuZ2UuZW1pdChldik7XG4gICAgfVxuICAgIGhhbmRsZVJlc2l6ZShrZXkpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMud2luZG93Lm9wdGlvbnM7XG4gICAgICAgIGlmICghb3B0aW9ucy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXQkJDEgPSB0aGlzLndpbmRvdy5jdXJyZW50T2Zmc2V0QW5kUG9zaXRpb24oKTtcbiAgICAgICAgbGV0IG5ld1dpZHRoO1xuICAgICAgICBsZXQgbmV3SGVpZ2h0O1xuICAgICAgICBsZXQgZXYgPSB7fTtcbiAgICAgICAgbGV0IGRlbHRhID0gMTA7XG4gICAgICAgIGlmIChrZXkgPT09IEtleXMubGVmdCB8fCBrZXkgPT09IEtleXMudXApIHtcbiAgICAgICAgICAgIGRlbHRhICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlIEtleXMubGVmdDpcbiAgICAgICAgICAgIGNhc2UgS2V5cy5yaWdodDoge1xuICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gb2Zmc2V0JCQxLndpZHRoICsgZGVsdGE7XG4gICAgICAgICAgICAgICAgaWYgKG5ld1dpZHRoICE9PSBvcHRpb25zLndpZHRoICYmIG5ld1dpZHRoID49IG9wdGlvbnMubWluV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgZXYud2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEtleXMudXA6XG4gICAgICAgICAgICBjYXNlIEtleXMuZG93bjoge1xuICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IG9mZnNldCQkMS5oZWlnaHQgKyBkZWx0YTtcbiAgICAgICAgICAgICAgICBpZiAobmV3SGVpZ2h0ICE9PSBvcHRpb25zLmhlaWdodCAmJiBuZXdIZWlnaHQgPj0gb3B0aW9ucy5taW5IZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXYuaGVpZ2h0ID0gbmV3SGVpZ2h0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChldi53aWR0aCkgfHwgaXNQcmVzZW50KGV2LmhlaWdodCkpIHtcbiAgICAgICAgICAgIE9GRlNFVF9TVFlMRVMuZm9yRWFjaCgoc3R5bGUkJDEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KGV2W3N0eWxlJCQxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aW5kb3cub3B0aW9uc1tzdHlsZSQkMV0gPSBldltzdHlsZSQkMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLndpbmRvdy5jaGFuZ2UuZW1pdChldik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlU3RhdGVDaGFuZ2Uoa2V5LCBzdGF0ZSQkMSkge1xuICAgICAgICBpZiAoKHN0YXRlJCQxID09PSAnbWluaW1pemVkJyAmJiBrZXkgPT09IEtleXMudXApIHx8XG4gICAgICAgICAgICAoc3RhdGUkJDEgPT09ICdtYXhpbWl6ZWQnICYmIGtleSA9PT0gS2V5cy5kb3duKSkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cucmVzdG9yZUFjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZSQkMSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBLZXlzLnVwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3cubWF4aW1pemVBY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGtleSA9PT0gS2V5cy5kb3duKSB7XG4gICAgICAgICAgICAgICAgdGhpcy53aW5kb3cubWluaW1pemVBY3Rpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbk5hdmlnYXRpb25TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5OYXZpZ2F0aW9uU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYWdSZXNpemVTZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFdpbmRvdyBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfd2luZG93X2RpYWxvZ3MgJX0pLlxuICovXG5jbGFzcyBXaW5kb3dDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsLCByZW5kZXJlciwgc2VydmljZSwgbmF2aWdhdGlvbiwgbmdab25lLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5lbCA9IGVsO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IG5hdmlnYXRpb247XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50IGlzIHBlcnNpc3RlZCBpbiB0aGUgRE9NIHdoZW4gbWluaW1pemVkLlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5rZWVwQ29udGVudCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBzdGFydHMgdG8gbW92ZSB0aGUgV2luZG93LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kcmFnU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBXaW5kb3cgd2FzIG1vdmVkIGJ5IHRoZSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kcmFnRW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBzdGFydHMgdG8gcmVzaXplIHRoZSBXaW5kb3cuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlc2l6ZVN0YXJ0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgV2luZG93IHdhcyByZXNpemVkIGJ5IHRoZSB1c2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZXNpemVFbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsb3NlcyB0aGUgV2luZG93LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGB3aWR0aGAgcHJvcGVydHkgb2YgdGhlIGNvbXBvbmVudCB3YXMgdXBkYXRlZC4gVGhlIGV2ZW50IGlzIHRyaWdnZXJlZCBvbmx5IGFmdGVyIHRoZSByZXNpemluZ1xuICAgICAgICAgKiBoYXMgZW5kZWQuIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIHRoZSBuZXcgd2lkdGguIEFsbG93cyBhIHR3by13YXkgYmluZGluZyBvZiB0aGUgYHdpZHRoYCBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud2lkdGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBgaGVpZ2h0YCBwcm9wZXJ0eSBvZiB0aGUgY29tcG9uZW50IHdhcyB1cGRhdGVkLiBUaGUgZXZlbnQgaXMgdHJpZ2dlcmVkIG9ubHkgYWZ0ZXIgdGhlIHJlc2l6aW5nXG4gICAgICAgICAqIGhhcyBlbmRlZC4gVGhlIGV2ZW50IGRhdGEgY29udGFpbnMgdGhlIG5ldyBoZWlnaHQuIEFsbG93cyBhIHR3by13YXkgYmluZGluZyBvZiB0aGUgYGhlaWdodGAgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhlaWdodENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGB0b3BgIHByb3BlcnR5IG9mIHRoZSBjb21wb25lbnQgd2FzIHVwZGF0ZWQuIFRoZSBldmVudCBpcyB0cmlnZ2VyZWQgb25seSBhZnRlciB0aGUgZHJhZ2dpbmdcbiAgICAgICAgICogYW5kIHJlc2l6aW5nIGhhdmUgZW5kZWQuIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIHRoZSBuZXcgdG9wIG9mZnNldC4gQWxsb3dzIGEgdHdvLXdheSBiaW5kaW5nIG9mIHRoZSBgdG9wYCBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG9wQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgYGxlZnRgIHByb3BlcnR5IG9mIHRoZSBjb21wb25lbnQgd2FzIHVwZGF0ZWQuIFRoZSBldmVudCBpcyB0cmlnZ2VyZWQgb25seSBhZnRlciB0aGUgZHJhZ2dpbmdcbiAgICAgICAgICogYW5kIHJlc2l6aW5nIGhhdmUgZW5kZWQuIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIHRoZSBuZXcgbGVmdCBvZmZzZXQuIEFsbG93cyBhIHR3by13YXkgYmluZGluZyBvZiB0aGUgYGxlZnRgIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sZWZ0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgYHN0YXRlYCBwcm9wZXJ0eSBvZiB0aGUgY29tcG9uZW50IHdhcyB1cGRhdGVkLiBUaGUgZXZlbnQgZGF0YSBjb250YWlucyB0aGUgbmV3IHN0YXRlLiBBbGxvd3MgYVxuICAgICAgICAgKiB0d28td2F5IGJpbmRpbmcgb2YgdGhlIGBzdGF0ZWAgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5kcmFnZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNpemVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMud2luZG93U3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBydGwgfSkgPT4gdGhpcy5kaXJlY3Rpb24gPSBydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICAgICAgdGhpcy5yZXNpemVEaXJlY3Rpb25zID0gUkVTSVpFX0RJUkVDVElPTlM7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlRXZlbnRzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSB1c2VyIHdpbGwgYmUgYWJsZSB0byBkcmFnIHRoZSBjb21wb25lbnQuXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIHNldCBkcmFnZ2FibGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zLmRyYWdnYWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZHJhZ2dhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmRyYWdnYWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlIHVzZXIgd2lsbCBiZSBhYmxlIHRvIHJlc2l6ZSB0aGUgY29tcG9uZW50LlxuICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgKi9cbiAgICBzZXQgcmVzaXphYmxlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucy5yZXNpemFibGUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHJlc2l6YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5yZXNpemFibGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSB2YWx1ZSBpcyBzZXQgdG8gYGRlZmF1bHRgLlxuICAgICAqXG4gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICogKiBgbWluaW1pemVkYFxuICAgICAqICogYG1heGltaXplZGBcbiAgICAgKiAqIGBkZWZhdWx0YFxuICAgICAqL1xuICAgIHNldCBzdGF0ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLm9wdGlvbnMuc3RhdGUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG1pbmltdW0gd2lkdGggb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBUaGUgYG1pbldpZHRoYCBwcm9wZXJ0eSBoYXMgdG8gYmUgc2V0IGluIHBpeGVscy5cbiAgICAgKiBAZGVmYXVsdCAxMjBcbiAgICAgKi9cbiAgICBzZXQgbWluV2lkdGgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb24oJ21pbldpZHRoJywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgbWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMubWluV2lkdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgbWluaW11bSBoZWlnaHQgb2YgdGhlIFdpbmRvdy5cbiAgICAgKiBUaGUgYG1pbkhlaWdodGAgcHJvcGVydHkgaGFzIHRvIGJlIHNldCBpbiBwaXhlbHMuXG4gICAgICogQGRlZmF1bHQgMTAwXG4gICAgICovXG4gICAgc2V0IG1pbkhlaWdodCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbignbWluSGVpZ2h0JywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgbWluSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLm1pbkhlaWdodDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgV2luZG93LlxuICAgICAqIFRoZSBgd2lkdGhgIHByb3BlcnR5IGhhcyB0byBiZSBzZXQgaW4gcGl4ZWxzLlxuICAgICAqL1xuICAgIHNldCB3aWR0aCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbignd2lkdGgnLCB2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB3aWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53aWR0aDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBoZWlnaHQgb2YgdGhlIFdpbmRvdy5cbiAgICAgKiBUaGUgYGhlaWdodGAgcHJvcGVydHkgaGFzIHRvIGJlIHNldCBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgc2V0IGhlaWdodCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbignaGVpZ2h0JywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgaGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmhlaWdodDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbml0aWFsIHRvcCBvZmZzZXQgb2YgdGhlIFdpbmRvdy5cbiAgICAgKiBUaGUgYHRvcGAgcHJvcGVydHkgaGFzIHRvIGJlIHNldCBpbiBwaXhlbHMuXG4gICAgICovXG4gICAgc2V0IHRvcCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbigndG9wJywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdG9wKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnRvcDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBpbml0aWFsIGxlZnQgb2Zmc2V0IG9mIHRoZSBXaW5kb3cuXG4gICAgICogTnVtZXJpYyB2YWx1ZXMgYXJlIHRyZWF0ZWQgYXMgcGl4ZWxzLlxuICAgICAqL1xuICAgIHNldCBsZWZ0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKCdsZWZ0JywgdmFsdWUpO1xuICAgIH1cbiAgICBnZXQgbGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5sZWZ0O1xuICAgIH1cbiAgICBnZXQgY2xvc2VCdXR0b25UaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMgJiYgdGhpcy5tZXNzYWdlcy5jbG9zZVRpdGxlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlcy5jbG9zZVRpdGxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ2Nsb3NlVGl0bGUnKTtcbiAgICB9XG4gICAgZ2V0IHJlc3RvcmVCdXR0b25UaXRsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMubWVzc2FnZXMgJiYgdGhpcy5tZXNzYWdlcy5yZXN0b3JlVGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzLnJlc3RvcmVUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdyZXN0b3JlVGl0bGUnKTtcbiAgICB9XG4gICAgZ2V0IG1heGltaXplQnV0dG9uVGl0bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VzICYmIHRoaXMubWVzc2FnZXMubWF4aW1pemVUaXRsZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXMubWF4aW1pemVUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdtYXhpbWl6ZVRpdGxlJyk7XG4gICAgfVxuICAgIGdldCBtaW5pbWl6ZUJ1dHRvblRpdGxlKCkge1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlcyAmJiB0aGlzLm1lc3NhZ2VzLm1pbmltaXplVGl0bGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzLm1pbmltaXplVGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldCgnbWluaW1pemVUaXRsZScpO1xuICAgIH1cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXROZXh0WkluZGV4KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5pdGlhbEZvY3VzKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKCgpID0+IHRoaXMuc2V0SW5pdGlhbE9mZnNldCgpKSk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICd0aXRsZScpO1xuICAgICAgICB0aGlzLnNlcnZpY2UuaW5pdCh0aGlzLmVsKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBPRkZTRVRfU1RZTEVTLmZvckVhY2goKHN0eWxlJCQxKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNDaGFuZ2VkKHN0eWxlJCQxLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoc3R5bGUkJDEsIHRoaXMub3B0aW9uc1tzdHlsZSQkMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZCgnZHJhZ2dhYmxlJywgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlQmFyID0gaXNQcmVzZW50KHRoaXMudGl0bGVCYXJDb250ZW50KSA/IHRoaXMudGl0bGVCYXJDb250ZW50IDogdGhpcy50aXRsZUJhclZpZXc7XG4gICAgICAgICAgICBpZiAoaXNUcnV0aHkoY2hhbmdlcy5kcmFnZ2FibGUuY3VycmVudFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRpdGxlQmFyLnN1YnNjcmliZURyYWcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRpdGxlQmFyLnVuc3Vic2NyaWJlRHJhZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0NoYW5nZWQoJ3N0YXRlJywgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5zZXJ2aWNlLmxhc3RBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmxhc3RBY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmFwcGx5TWFudWFsU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFsbE9mZnNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy53aW5kb3dTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgd3JhcHBlciBvZiB0aGUgV2luZG93IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh3cmFwcGVyKSkge1xuICAgICAgICAgICAgd3JhcHBlci5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJyaW5ncyB0aGUgY3VycmVudCBXaW5kb3cgY29tcG9uZW50IG9uIHRvcCBvZiBvdGhlciBXaW5kb3cgY29tcG9uZW50cyBvbiB0aGUgcGFnZS5cbiAgICAgKi9cbiAgICBicmluZ1RvRnJvbnQoKSB7XG4gICAgICAgIHRoaXMuc2V0TmV4dFpJbmRleCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYW51YWxseSB1cGRhdGVzIHRoZSBgd2lkdGhgIG9yIGBoZWlnaHRgIG9wdGlvbiBvZiB0aGUgV2luZG93LlxuICAgICAqIFRoZSByZXF1aXJlZCBzdHlsZSB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIFdpbmRvdyB3cmFwcGVyIGVsZW1lbnQgYW5kIHRoZVxuICAgICAqIGNvcnJlc3BvbmRpbmcgcHJvcGVydHkgb2YgdGhlIGNvbXBvbmVudCBpbnN0YW5jZSB3aWxsIGJlIHVwZGF0ZWQuXG4gICAgICogVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3Igc2l6aW5nIGR5bmFtaWNhbGx5IGNyZWF0ZWQgY29tcG9uZW50cyB1c2luZyB0aGVcbiAgICAgKiBbYFdpbmRvd1NlcnZpY2VgXSh7JSBzbHVnIGFwaV9kaWFsb2dfd2luZG93c2VydmljZSAlfSlcbiAgICAgKiBAcGFyYW0ge1dpbmRvd0RpbWVuc2lvblNldHRpbmd9IGRpbWVuc2lvbiAtIFRoZSBvcHRpb24gdGhhdCB3aWxsIGJlIHVwZGF0ZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSBUaGUgdmFsdWUgc2V0IGluIHBpeGVsc1xuICAgICAqL1xuICAgIHNldERpbWVuc2lvbihkaW1lbnNpb24sIHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uKGRpbWVuc2lvbiwgdmFsdWUpO1xuICAgICAgICB0aGlzLnNldFN0eWxlKGRpbWVuc2lvbiwgdmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYW51YWxseSB1cGRhdGVzIHRoZSBgdG9wYCBvciBgbGVmdGAgb2Zmc2V0IG9mIHRoZSBXaW5kb3cuXG4gICAgICogVGhlIHJlcXVpcmVkIHN0eWxlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgV2luZG93IHdyYXBwZXIgZWxlbWVudCBhbmQgdGhlXG4gICAgICogY29ycmVzcG9uZGluZyBwcm9wZXJ0eSBvZiB0aGUgY29tcG9uZW50IGluc3RhbmNlIHdpbGwgYmUgdXBkYXRlZC5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGZvciBwb3NpdGlvbmluZyBkeW5hbWljYWxseSBjcmVhdGVkIGNvbXBvbmVudHMgdXNpbmcgdGhlXG4gICAgICogW2BXaW5kb3dTZXJ2aWNlYF0oeyUgc2x1ZyBhcGlfZGlhbG9nX3dpbmRvd3NlcnZpY2UgJX0pXG4gICAgICogQHBhcmFtIHtXaW5kb3dPZmZzZXRTZXR0aW5nfSBvZmZzZXQgLSBUaGUgb3B0aW9uIHRoYXQgd2lsbCBiZSB1cGRhdGVkXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIC0gVGhlIHZhbHVlIHNldCBpbiBwaXhlbHNcbiAgICAgKi9cbiAgICBzZXRPZmZzZXQob2Zmc2V0JCQxLCB2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldE9wdGlvbihvZmZzZXQkJDEsIHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRTdHlsZShvZmZzZXQkJDEsIHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNob3dEZWZhdWx0VGl0bGVCYXIoKSB7XG4gICAgICAgIHJldHVybiAhaXNQcmVzZW50KHRoaXMudGl0bGVCYXJDb250ZW50KTtcbiAgICB9XG4gICAgZ2V0IHN0eWxlTWluV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbldpZHRoICsgJ3B4JztcbiAgICB9XG4gICAgZ2V0IHN0eWxlTWluSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5IZWlnaHQgKyAncHgnO1xuICAgIH1cbiAgICBnZXQgc3R5bGVQb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5wb3NpdGlvbjtcbiAgICB9XG4gICAgZ2V0IHdyYXBwZXJNYXhpbWl6ZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09ICdtYXhpbWl6ZWQnO1xuICAgIH1cbiAgICBnZXQgd3JhcHBlck1pbmltaXplZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gJ21pbmltaXplZCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNvbXBvbmVudEtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGhhc0NsYXNzZXMoZXZlbnQudGFyZ2V0LCBXSU5ET1dfQ0xBU1NFUykpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi5wcm9jZXNzKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Db21wb25lbnRGb2N1cygpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgdGhpcy5zZXROZXh0WkluZGV4KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNvbXBvbmVudEJsdXIoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgfVxuICAgIHN1YnNjcmliZUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLndpbmRvd1N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLmZvY3VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLndpbmRvd1N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLmRyYWdTdGFydC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kcmFnZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTdGFydC5lbWl0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLndpbmRvd1N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLmRyYWdFbmQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnRW5kLmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLndpbmRvd1N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLmNsb3NlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLndpbmRvd1N1YnNjcmlwdGlvbi5hZGQodGhpcy5zZXJ2aWNlLnJlc2l6ZVN0YXJ0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZVN0YXJ0LmVtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMud2luZG93U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNlcnZpY2UucmVzaXplRW5kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVFbmQuZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMud2luZG93U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNlcnZpY2UuY2hhbmdlLnN1YnNjcmliZSgoZXYpID0+IHtcbiAgICAgICAgICAgIE9GRlNFVF9TVFlMRVMuZm9yRWFjaCgoc3R5bGUkJDEpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcmVzZW50KGV2W3N0eWxlJCQxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdHlsZShzdHlsZSQkMSwgZXZbc3R5bGUkJDFdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdtYXhpbWl6ZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpc1tzdHlsZSQkMSArICdDaGFuZ2UnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbWl0dGVyLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQoZXZbc3R5bGUkJDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMud2luZG93U3Vic2NyaXB0aW9uLmFkZCh0aGlzLnNlcnZpY2Uuc3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZSQkMSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnNlcnZpY2UubGFzdEFjdGlvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUFsbE9mZnNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSQkMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgc2V0TmV4dFpJbmRleCgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFpJbmRleCA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5zdHlsZVsnei1pbmRleCddO1xuICAgICAgICBjb25zdCBuZXh0UG9zc2libGVaSW5kZXggPSB0aGlzLnNlcnZpY2UubmV4dFBvc3NpYmxlWkluZGV4O1xuICAgICAgICBpZiAoIWN1cnJlbnRaSW5kZXggfHwgKG5leHRQb3NzaWJsZVpJbmRleCAtIGN1cnJlbnRaSW5kZXggPiAxKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIFwiei1pbmRleFwiLCB0aGlzLnNlcnZpY2UubmV4dFpJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0SW5pdGlhbE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUgIT09ICdtYXhpbWl6ZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFsbE9mZnNldCgpO1xuICAgICAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5sZWZ0KSB8fCAhaXNQcmVzZW50KHRoaXMudG9wKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5jZW50ZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQb3J0ID0gdGhpcy5zZXJ2aWNlLndpbmRvd1ZpZXdQb3J0O1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSgnd2lkdGgnLCB2aWV3UG9ydC53aWR0aCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKCdoZWlnaHQnLCB2aWV3UG9ydC5oZWlnaHQpO1xuICAgICAgICAgICAgdGhpcy5zZXRTdHlsZSgndG9wJywgMCk7XG4gICAgICAgICAgICB0aGlzLnNldFN0eWxlKCdsZWZ0JywgMCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQWxsT2Zmc2V0KCkge1xuICAgICAgICBPRkZTRVRfU1RZTEVTLmZvckVhY2goKHN0eWxlJCQxKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXNbc3R5bGUkJDFdKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3R5bGUoc3R5bGUkJDEsIHRoaXNbc3R5bGUkJDFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU3R5bGUoc3R5bGUkJDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2V0U3R5bGUoc3R5bGUkJDEsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCBzdHlsZSQkMSwgdmFsdWUgKyAncHgnKTtcbiAgICB9XG4gICAgcmVtb3ZlU3R5bGUoc3R5bGUkJDEpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHN0eWxlJCQxKTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2Uub3B0aW9ucztcbiAgICB9XG4gICAgc2V0T3B0aW9uKHN0eWxlJCQxLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykgPyB2YWx1ZSA6IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgICAgIHRoaXMub3B0aW9uc1tzdHlsZSQkMV0gPSBwYXJzZWRWYWx1ZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNldFJlc3RvcmVPcHRpb24oc3R5bGUkJDEsIHBhcnNlZFZhbHVlKTtcbiAgICB9XG4gICAgaGFuZGxlSW5pdGlhbEZvY3VzKCkge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5hdXRvRm9jdXNlZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxseUZvY3VzZWRFbGVtZW50ID0gd3JhcHBlci5xdWVyeVNlbGVjdG9yKHRoaXMuYXV0b0ZvY3VzZWRFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChpbml0aWFsbHlGb2N1c2VkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGluaXRpYWxseUZvY3VzZWRFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5XaW5kb3dDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvV2luZG93JyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgRHJhZ1Jlc2l6ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8ud2luZG93J1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXdpbmRvdycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb1dpbmRvd0xvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLWNsb3NlVGl0bGU9XCJrZW5kby53aW5kb3cuY2xvc2VUaXRsZXxUaGUgdGl0bGUgb2YgdGhlIGNsb3NlIGJ1dHRvblwiXG4gICAgICAgICAgICBjbG9zZVRpdGxlPVwiQ2xvc2VcIlxuXG4gICAgICAgICAgICBpMThuLXJlc3RvcmVUaXRsZT1cImtlbmRvLndpbmRvdy5yZXN0b3JlVGl0bGV8VGhlIHRpdGxlIG9mIHRoZSByZXN0b3JlIGJ1dHRvblwiXG4gICAgICAgICAgICByZXN0b3JlVGl0bGU9XCJSZXN0b3JlXCJcblxuICAgICAgICAgICAgaTE4bi1tYXhpbWl6ZVRpdGxlPVwia2VuZG8ud2luZG93Lm1heGltaXplVGl0bGV8VGhlIHRpdGxlIG9mIHRoZSBtYXhpbWl6ZSBidXR0b25cIlxuICAgICAgICAgICAgbWF4aW1pemVUaXRsZT1cIk1heGltaXplXCJcblxuICAgICAgICAgICAgaTE4bi1taW5pbWl6ZVRpdGxlPVwia2VuZG8ud2luZG93Lm1pbmltaXplVGl0bGV8VGhlIHRpdGxlIG9mIHRoZSBtaW5pbWl6ZSBidXR0b25cIlxuICAgICAgICAgICAgbWluaW1pemVUaXRsZT1cIk1pbmltaXplXCJcbiAgICAgICAgPlxuICAgICAgICA8bmctY29udGFpbmVyPlxuXG4gICAgICAgIDxrZW5kby13aW5kb3ctdGl0bGViYXIgKm5nSWY9XCJzaG93RGVmYXVsdFRpdGxlQmFyXCIgW3RlbXBsYXRlXT1cInRpdGxlQmFyVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrLXdpbmRvdy10aXRsZVwiPnt7IHRpdGxlIH19PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay13aW5kb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24ga2VuZG9XaW5kb3dNaW5pbWl6ZUFjdGlvbiAgW2F0dHIudGl0bGVdPVwibWluaW1pemVCdXR0b25UaXRsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwibWluaW1pemVCdXR0b25UaXRsZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24ga2VuZG9XaW5kb3dNYXhpbWl6ZUFjdGlvbiBbYXR0ci50aXRsZV09XCJtYXhpbWl6ZUJ1dHRvblRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJtYXhpbWl6ZUJ1dHRvblRpdGxlXCI+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb1dpbmRvd1Jlc3RvcmVBY3Rpb24gW2F0dHIudGl0bGVdPVwicmVzdG9yZUJ1dHRvblRpdGxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJyZXN0b3JlQnV0dG9uVGl0bGVcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGtlbmRvV2luZG93Q2xvc2VBY3Rpb24gW2F0dHIudGl0bGVdPVwiY2xvc2VCdXR0b25UaXRsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiY2xvc2VCdXR0b25UaXRsZVwiPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwva2VuZG8td2luZG93LXRpdGxlYmFyPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJrZW5kby13aW5kb3ctdGl0bGViYXJcIiAqbmdJZj1cIiFzaG93RGVmYXVsdFRpdGxlQmFyXCI+PC9uZy1jb250ZW50PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJzdGF0ZSAhPT0gJ21pbmltaXplZCcgfHwga2VlcENvbnRlbnRcIlxuICAgICAgICAgICAgW2hpZGRlbl09XCJzdGF0ZSA9PT0gJ21pbmltaXplZCcgJiYga2VlcENvbnRlbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWNvbnRlbnQgay13aW5kb3ctY29udGVudFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIWNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGVcIiAqbmdJZj1cImNvbnRlbnRUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09J3Jlc2l6YWJsZSc+XG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj0nbGV0IGRpciBvZiByZXNpemVEaXJlY3Rpb25zJ1xuICAgICAgICAgICAgICAgIFtkaXJlY3Rpb25dPVwiZGlyXCJcbiAgICAgICAgICAgICAgICBrZW5kb1dpbmRvd1Jlc2l6ZUhhbmRsZVxuICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XaW5kb3dDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IERyYWdSZXNpemVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5XaW5kb3dDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYXV0b0ZvY3VzZWRFbGVtZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZ2dhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXNpemFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtlZXBDb250ZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluV2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbkhlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9wOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsZWZ0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkcmFnU3RhcnQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBkcmFnRW5kOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcmVzaXplU3RhcnQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICByZXNpemVFbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHdpZHRoQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaGVpZ2h0Q2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdG9wQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgbGVmdENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHN0YXRlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGFiSW5kZXgnLF0gfV0sXG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aW5kb3cnLF0gfV0sXG4gICAgZGlyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICB0aXRsZUJhclZpZXc6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW1dpbmRvd1RpdGxlQmFyQ29tcG9uZW50LF0gfV0sXG4gICAgdGl0bGVCYXJDb250ZW50OiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtXaW5kb3dUaXRsZUJhckNvbXBvbmVudCxdIH1dLFxuICAgIHJlc2l6ZUhhbmRsZXM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogW1Jlc2l6ZUhhbmRsZURpcmVjdGl2ZSxdIH1dLFxuICAgIHN0eWxlTWluV2lkdGg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLm1pbldpZHRoJyxdIH1dLFxuICAgIHN0eWxlTWluSGVpZ2h0OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5taW5IZWlnaHQnLF0gfV0sXG4gICAgc3R5bGVQb3NpdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUucG9zaXRpb24nLF0gfV0sXG4gICAgd3JhcHBlck1heGltaXplZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpbmRvdy1tYXhpbWl6ZWQnLF0gfV0sXG4gICAgd3JhcHBlck1pbmltaXplZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpbmRvdy1taW5pbWl6ZWQnLF0gfV0sXG4gICAgb25Db21wb25lbnRLZXlkb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5ZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBvbkNvbXBvbmVudEZvY3VzOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25Db21wb25lbnRCbHVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnYmx1cicsXSB9XVxufTtcblxuY2xhc3MgV2luZG93TWF4aW1pemVBY3Rpb25EaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVsLCByZW5kZXJlciwgX3NlcnZpY2UsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHN1cGVyKGVsLCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmJ1dHRvblR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy53aW5kb3cgPSBfc2VydmljZTtcbiAgICAgICAgdGhpcy5sb29rID0gJ2JhcmUnO1xuICAgICAgICB0aGlzLmljb24gPSAnd2luZG93LW1heGltaXplJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvdy5tYXhpbWl6ZUFjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCB2aXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53aW5kb3cub3B0aW9ucy5zdGF0ZSA9PT0gJ2RlZmF1bHQnID8gJ2lubGluZS1mbGV4JyA6ICdub25lJztcbiAgICB9XG59XG5XaW5kb3dNYXhpbWl6ZUFjdGlvbkRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9XaW5kb3dNYXhpbWl6ZUFjdGlvbicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5idXR0b24nXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnYnV0dG9uW2tlbmRvV2luZG93TWF4aW1pemVBY3Rpb25dJyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbldpbmRvd01heGltaXplQWN0aW9uRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBEcmFnUmVzaXplU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuV2luZG93TWF4aW1pemVBY3Rpb25EaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgd2luZG93OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBidXR0b25UeXBlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnR5cGUnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJyxdIH1dLFxuICAgIHZpc2libGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmRpc3BsYXknLF0gfV1cbn07XG5cbmNsYXNzIFdpbmRvd01pbmltaXplQWN0aW9uRGlyZWN0aXZlIGV4dGVuZHMgQnV0dG9uIHtcbiAgICBjb25zdHJ1Y3RvcihlbCwgcmVuZGVyZXIsIF9zZXJ2aWNlLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5idXR0b25UeXBlID0gJ2J1dHRvbic7XG4gICAgICAgIHRoaXMud2luZG93ID0gX3NlcnZpY2U7XG4gICAgICAgIHRoaXMubG9vayA9ICdiYXJlJztcbiAgICAgICAgdGhpcy5pY29uID0gJ3dpbmRvdy1taW5pbWl6ZSc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cubWluaW1pemVBY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2luZG93Lm9wdGlvbnMuc3RhdGUgPT09ICdkZWZhdWx0JyA/ICdpbmxpbmUtZmxleCcgOiAnbm9uZSc7XG4gICAgfVxufVxuV2luZG93TWluaW1pemVBY3Rpb25EaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvV2luZG93TWluaW1pemVBY3Rpb24nLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uYnV0dG9uJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2J1dHRvbltrZW5kb1dpbmRvd01pbmltaXplQWN0aW9uXScgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XaW5kb3dNaW5pbWl6ZUFjdGlvbkRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogRHJhZ1Jlc2l6ZVNlcnZpY2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcbldpbmRvd01pbmltaXplQWN0aW9uRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHdpbmRvdzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYnV0dG9uVHlwZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50eXBlJyxdIH1dLFxuICAgIG9uQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydjbGljaycsXSB9XSxcbiAgICB2aXNpYmxlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5kaXNwbGF5JyxdIH1dXG59O1xuXG5jbGFzcyBXaW5kb3dDbG9zZUFjdGlvbkRpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZWwsIHJlbmRlcmVyLCBfc2VydmljZSwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWwsIHJlbmRlcmVyLCBudWxsLCBsb2NhbGl6YXRpb24sIG5nWm9uZSk7XG4gICAgICAgIHRoaXMuYnV0dG9uVHlwZSA9ICdidXR0b24nO1xuICAgICAgICB0aGlzLndpbmRvdyA9IF9zZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvb2sgPSAnYmFyZSc7XG4gICAgICAgIHRoaXMuaWNvbiA9ICdjbG9zZSc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3cuY2xvc2VBY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbldpbmRvd0Nsb3NlQWN0aW9uRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1dpbmRvd0Nsb3NlQWN0aW9uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdidXR0b25ba2VuZG9XaW5kb3dDbG9zZUFjdGlvbl0nIC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuV2luZG93Q2xvc2VBY3Rpb25EaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IERyYWdSZXNpemVTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5XaW5kb3dDbG9zZUFjdGlvbkRpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB3aW5kb3c6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJ1dHRvblR5cGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudHlwZScsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLF0gfV1cbn07XG5cbmNsYXNzIFdpbmRvd1Jlc3RvcmVBY3Rpb25EaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVsLCByZW5kZXJlciwgX3NlcnZpY2UsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHN1cGVyKGVsLCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmJ1dHRvblR5cGUgPSAnYnV0dG9uJztcbiAgICAgICAgdGhpcy53aW5kb3cgPSBfc2VydmljZTtcbiAgICAgICAgdGhpcy5sb29rID0gJ2JhcmUnO1xuICAgICAgICB0aGlzLmljb24gPSAnd2luZG93LXJlc3RvcmUnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93LnJlc3RvcmVBY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2luZG93Lm9wdGlvbnMuc3RhdGUgPT09ICdkZWZhdWx0JyA/ICdub25lJyA6ICdpbmxpbmUtZmxleCc7XG4gICAgfVxufVxuV2luZG93UmVzdG9yZUFjdGlvbkRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9XaW5kb3dSZXN0b3JlQWN0aW9uJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmJ1dHRvbidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdidXR0b25ba2VuZG9XaW5kb3dSZXN0b3JlQWN0aW9uXScgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XaW5kb3dSZXN0b3JlQWN0aW9uRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBEcmFnUmVzaXplU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuV2luZG93UmVzdG9yZUFjdGlvbkRpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB3aW5kb3c6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJ1dHRvblR5cGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudHlwZScsXSB9XSxcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLF0gfV0sXG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XVxufTtcblxuLyoqXG4gKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBXaW5kb3cgYWN0aW9ucyB3aGVuIHRoZSBXaW5kb3cgaXMgb3BlbmVkIHRocm91Z2ggYFdpbmRvd1NlcnZpY2VgXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwaV9kaWFsb2dfd2luZG93c2VydmljZSAlfSN0b2Mtb3BlbikpLlxuICovXG5jbGFzcyBXaW5kb3dTZXR0aW5ncyB7XG59XG4vKipcbiAqIEluZGljYXRlcyB0aGF0IHRoZSAqKkNsb3NlKiogYnV0dG9uIG9mIGEgV2luZG93IHRoYXQgaXMgb3BlbmVkIHRocm91Z2ggYFdpbmRvd1NlcnZpY2VgIGlzIGNsaWNrZWQuXG4gKi9cbmNsYXNzIFdpbmRvd0Nsb3NlUmVzdWx0IHtcbn1cbi8qKlxuICogSG9sZHMgcmVmZXJlbmNlcyB0byB0aGUgb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBXaW5kb3cuXG4gKiBDb250cm9scyB0aGUgV2luZG93cyB0aGF0IHdlcmUgb3BlbmVkIHRocm91Z2ggYFdpbmRvd1NlcnZpY2VgXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwaV9kaWFsb2dfd2luZG93c2VydmljZSAlfSN0b2Mtb3BlbikpLlxuICovXG5jbGFzcyBXaW5kb3dSZWYge1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgV2luZG93Q29udGFpbmVyU2VydmljZSB7XG4gICAgc2V0IGNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgICAgICAgV2luZG93Q29udGFpbmVyU2VydmljZS5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgfVxuICAgIGdldCBjb250YWluZXIoKSB7XG4gICAgICAgIHJldHVybiBXaW5kb3dDb250YWluZXJTZXJ2aWNlLmNvbnRhaW5lcjtcbiAgICB9XG59XG5XaW5kb3dDb250YWluZXJTZXJ2aWNlLmNvbnRhaW5lciA9IG51bGw7XG5XaW5kb3dDb250YWluZXJTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jbGFzcyBXaW5kb3dJbmplY3RvciB7XG4gICAgY29uc3RydWN0b3IoZ2V0V2luZG93UmVmLCBwYXJlbnRJbmplY3Rvcikge1xuICAgICAgICB0aGlzLmdldFdpbmRvd1JlZiA9IGdldFdpbmRvd1JlZjtcbiAgICAgICAgdGhpcy5wYXJlbnRJbmplY3RvciA9IHBhcmVudEluamVjdG9yO1xuICAgIH1cbiAgICBnZXQodG9rZW4sIG5vdEZvdW5kVmFsdWUpIHtcbiAgICAgICAgaWYgKHRva2VuID09PSBXaW5kb3dSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFdpbmRvd1JlZigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudEluamVjdG9yLmdldCh0b2tlbiwgbm90Rm91bmRWYWx1ZSk7XG4gICAgfVxufVxuLyoqXG4gKiBBIHNlcnZpY2UgZm9yIG9wZW5pbmcgV2luZG93cyBkeW5hbWljYWxseVxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZXJ2aWNlX3dpbmRvdyAlfSkpLlxuICovXG5jbGFzcyBXaW5kb3dTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVzb2x2ZXIsIGNvbnRhaW5lclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclNlcnZpY2UgPSBjb250YWluZXJTZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBPcGVucyBhIFdpbmRvdyBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1dpbmRvd1NldHRpbmdzfSBzZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyB0aGF0IGRlZmluZSB0aGUgV2luZG93LlxuICAgICAqIEByZXR1cm5zIHtXaW5kb3dSZWZ9IC0gQSByZWZlcmVuY2UgdG8gdGhlIFdpbmRvdyBvYmplY3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqXG4gICAgICogYGBgdHMtbm8tcnVuXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgPGJ1dHRvbiBrZW5kb0J1dHRvbiAoY2xpY2spPVwib3BlbigpXCI+T3BlbiB3aW5kb3c8L2J1dHRvbj5cbiAgICAgKiAgICAgPGRpdiBrZW5kb1dpbmRvd0NvbnRhaW5lcj48L2Rpdj5cbiAgICAgKiAgIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgICBjb25zdHJ1Y3RvciggcHJpdmF0ZSB3aW5kb3dTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlICkge31cbiAgICAgKlxuICAgICAqICAgICBwdWJsaWMgb3BlbigpIHtcbiAgICAgKiAgICAgICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvd1NlcnZpY2Uub3Blbih7XG4gICAgICogICAgICAgICAgIHRpdGxlOiBcIk15IHdpbmRvd1wiLFxuICAgICAqICAgICAgICAgICBjb250ZW50OiBcIk15IGNvbnRlbnQhXCJcbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqXG4gICAgICogICAgICAgICB3aW5kb3cucmVzdWx0LnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICogICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBXaW5kb3dDbG9zZVJlc3VsdCkge1xuICAgICAqICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiV2luZG93IHdhcyBjbG9zZWRcIik7XG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIH0pO1xuICAgICAqICAgICB9XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICovXG4gICAgb3BlbihzZXR0aW5ncykge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShXaW5kb3dDb21wb25lbnQpO1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBzZXR0aW5ncy5hcHBlbmRUbyB8fCB0aGlzLmNvbnRhaW5lclNlcnZpY2UuY29udGFpbmVyO1xuICAgICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgYXR0YWNoIHdpbmRvdyB0byB0aGUgcGFnZS5cbiAgICAgICAgICAgICAgICBBZGQgYW4gZWxlbWVudCB0aGF0IHVzZXMgdGhlIGtlbmRvV2luZG93Q29udGFpbmVyIGRpcmVjdGl2ZSwgb3Igc2V0IHRoZSAnYXBwZW5kVG8nIHByb3BlcnR5LlxuICAgICAgICAgICAgICAgIFNlZSBodHRwczovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGlhbG9ncy93aW5kb3cvc2VydmljZS9cbiAgICAgICAgICAgIGApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpbmRvd1JlZiA9IHtcbiAgICAgICAgICAgIGNsb3NlOiAoKSA9PiB7IH0sXG4gICAgICAgICAgICBjb250ZW50OiBudWxsLFxuICAgICAgICAgICAgcmVzdWx0OiBudWxsLFxuICAgICAgICAgICAgd2luZG93OiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnRGcm9tKHNldHRpbmdzLmNvbnRlbnQsIGNvbnRhaW5lciwgd2luZG93UmVmKTtcbiAgICAgICAgY29uc3Qgd2luZG93ID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGVudC5ub2Rlcyk7XG4gICAgICAgIHdpbmRvd1JlZi53aW5kb3cgPSB3aW5kb3c7XG4gICAgICAgIHRoaXMuYXBwbHlPcHRpb25zKHdpbmRvdy5pbnN0YW5jZSwgc2V0dGluZ3MpO1xuICAgICAgICBjb25zdCBhcGlDbG9zZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIGNvbnN0IGNsb3NlID0gKGUpID0+IHtcbiAgICAgICAgICAgIGFwaUNsb3NlLm5leHQoZSB8fCBuZXcgV2luZG93Q2xvc2VSZXN1bHQoKSk7XG4gICAgICAgICAgICBpZiAoY29udGVudC5jb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgICAgICBjb250ZW50LmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aW5kb3cuZGVzdHJveSgpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZXN1bHQgPSBtZXJnZShhcGlDbG9zZSwgd2luZG93Lmluc3RhbmNlLmNsb3NlKS5waXBlKHRha2UoMSkpO1xuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKGNsb3NlKTtcbiAgICAgICAgd2luZG93UmVmLmNsb3NlID0gY2xvc2U7XG4gICAgICAgIHdpbmRvd1JlZi5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHdpbmRvdy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgcmV0dXJuIHdpbmRvd1JlZjtcbiAgICB9XG4gICAgYXBwbHlPcHRpb25zKGluc3RhbmNlLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQob3B0aW9ucy50aXRsZSkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnRpdGxlID0gb3B0aW9ucy50aXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMua2VlcENvbnRlbnQpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5rZWVwQ29udGVudCA9IG9wdGlvbnMua2VlcENvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChvcHRpb25zLndpZHRoKSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uud2lkdGggPSBvcHRpb25zLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQob3B0aW9ucy5taW5XaWR0aCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLm1pbldpZHRoID0gb3B0aW9ucy5taW5XaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMuaGVpZ2h0KSkge1xuICAgICAgICAgICAgaW5zdGFuY2UuaGVpZ2h0ID0gb3B0aW9ucy5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChvcHRpb25zLm1pbkhlaWdodCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLm1pbkhlaWdodCA9IG9wdGlvbnMubWluSGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQob3B0aW9ucy5sZWZ0KSkge1xuICAgICAgICAgICAgaW5zdGFuY2UubGVmdCA9IG9wdGlvbnMubGVmdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMudG9wKSkge1xuICAgICAgICAgICAgaW5zdGFuY2UudG9wID0gb3B0aW9ucy50b3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChvcHRpb25zLmRyYWdnYWJsZSkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLmRyYWdnYWJsZSA9IG9wdGlvbnMuZHJhZ2dhYmxlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1ByZXNlbnQob3B0aW9ucy5yZXNpemFibGUpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5yZXNpemFibGUgPSBvcHRpb25zLnJlc2l6YWJsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMubWVzc2FnZXMgJiYgb3B0aW9ucy5tZXNzYWdlcy5jbG9zZVRpdGxlKSkge1xuICAgICAgICAgICAgaW5zdGFuY2UubWVzc2FnZXMuY2xvc2VUaXRsZSA9IG9wdGlvbnMubWVzc2FnZXMuY2xvc2VUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMubWVzc2FnZXMgJiYgb3B0aW9ucy5tZXNzYWdlcy5yZXN0b3JlVGl0bGUpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5tZXNzYWdlcy5yZXN0b3JlVGl0bGUgPSBvcHRpb25zLm1lc3NhZ2VzLnJlc3RvcmVUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMubWVzc2FnZXMgJiYgb3B0aW9ucy5tZXNzYWdlcy5tYXhpbWl6ZVRpdGxlKSkge1xuICAgICAgICAgICAgaW5zdGFuY2UubWVzc2FnZXMubWF4aW1pemVUaXRsZSA9IG9wdGlvbnMubWVzc2FnZXMubWF4aW1pemVUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMubWVzc2FnZXMgJiYgb3B0aW9ucy5tZXNzYWdlcy5taW5pbWl6ZVRpdGxlKSkge1xuICAgICAgICAgICAgaW5zdGFuY2UubWVzc2FnZXMubWluaW1pemVUaXRsZSA9IG9wdGlvbnMubWVzc2FnZXMubWluaW1pemVUaXRsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcmVzZW50KG9wdGlvbnMuYXV0b0ZvY3VzZWRFbGVtZW50KSkge1xuICAgICAgICAgICAgaW5zdGFuY2UuYXV0b0ZvY3VzZWRFbGVtZW50ID0gb3B0aW9ucy5hdXRvRm9jdXNlZEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChvcHRpb25zLnN0YXRlKSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBvcHRpb25zLnN0YXRlO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RhdGUgPT09ICdtaW5pbWl6ZWQnKSB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2Uua2VlcENvbnRlbnQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLmNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29udGVudFRlbXBsYXRlID0gb3B0aW9ucy5jb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnRpdGxlQmFyQ29udGVudCBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS50aXRsZUJhclRlbXBsYXRlID0gb3B0aW9ucy50aXRsZUJhckNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGVudEZyb20oY29udGVudCwgY29udGFpbmVyLCB3aW5kb3dSZWYpIHtcbiAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBjb250YWluZXIuaW5qZWN0b3IuZ2V0KFJlbmRlcmVyMik7XG4gICAgICAgIGxldCBub2RlcyA9IFtdO1xuICAgICAgICBsZXQgY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgaWYgKHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbm9kZXMgPSBbcmVuZGVyZXIuY3JlYXRlVGV4dChjb250ZW50KV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29udGVudCAmJiAhKGNvbnRlbnQgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikpIHtcbiAgICAgICAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IFdpbmRvd0luamVjdG9yKCgpID0+IHdpbmRvd1JlZiwgY29udGFpbmVyLmluamVjdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGNvbnRlbnQpO1xuICAgICAgICAgICAgY29tcG9uZW50UmVmID0gY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5LCB1bmRlZmluZWQsIGluamVjdG9yKTtcbiAgICAgICAgICAgIG5vZGVzID0gW2NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50XTtcbiAgICAgICAgICAgIHdpbmRvd1JlZi5jb250ZW50ID0gY29tcG9uZW50UmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb21wb25lbnRSZWYsXG4gICAgICAgICAgICBub2RlczogW1xuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIG5vZGVzIC8vIENvbnRlbnRcbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG59XG5XaW5kb3dTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5XaW5kb3dTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0sXG4gICAgeyB0eXBlOiBXaW5kb3dDb250YWluZXJTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtXaW5kb3dDb250YWluZXJTZXJ2aWNlLF0gfV0gfVxuXTtcblxuLyoqXG4gKiBQcm92aWRlcyBhbiBpbnNlcnRpb24gcG9pbnQgZm9yIHRoZSBEaWFsb2dzIHdoaWNoIGFyZSBjcmVhdGVkIHRocm91Z2ggdGhlXG4gKiBEaWFsb2cgc2VydmljZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwaV9kaWFsb2dfZGlhbG9nc2VydmljZSAlfSN0b2Mtb3BlbikpLlxuICogQ3JlYXRlZCBEaWFsb2dzIHdpbGwgYmUgbW91bnRlZCBhZnRlciB0aGF0IGVsZW1lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8ZGl2IGtlbmRvRGlhbG9nQ29udGFpbmVyPjwvZGl2PlxuICogYGBgXG4gKi9cbmNsYXNzIERpYWxvZ0NvbnRhaW5lckRpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoY29udGFpbmVyLCBzZXJ2aWNlKSB7XG4gICAgICAgIHNlcnZpY2UuY29udGFpbmVyID0gY29udGFpbmVyO1xuICAgIH1cbn1cbkRpYWxvZ0NvbnRhaW5lckRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRGlhbG9nQ29udGFpbmVyXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGlhbG9nQ29udGFpbmVyRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiB9LFxuICAgIHsgdHlwZTogRGlhbG9nQ29udGFpbmVyU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5NZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjbG9zZVRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXN0b3JlVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heGltaXplVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbmltaXplVGl0bGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBgXG4gICAgW2tlbmRvRGlhbG9nTG9jYWxpemVkTWVzc2FnZXNdLFxuICAgIFtrZW5kb1dpbmRvd0xvY2FsaXplZE1lc3NhZ2VzXVxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXNcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ2xvYmFsaXphdGlvbl9kaWFsb2dzICV9I3RvYy1sb2NhbGl6YXRpb24pKS5cbiAqL1xuY2xhc3MgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6bm8tZm9yd2FyZC1yZWZcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kaWFsb2ctbWVzc2FnZXMsIGtlbmRvLXdpbmRvdy1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgU0hBUkVEX0RJUkVDVElWRVMgPSBbXG4gICAgRGlhbG9nQWN0aW9uc0NvbXBvbmVudCxcbiAgICBDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTaGFyZWRNb2R1bGUge1xufVxuU2hhcmVkTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtTSEFSRURfRElSRUNUSVZFU10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1NIQVJFRF9ESVJFQ1RJVkVTLCBDb21tb25Nb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBESUFMT0dfRElSRUNUSVZFUyA9IFtcbiAgICBEaWFsb2dDb21wb25lbnQsXG4gICAgRGlhbG9nVGl0bGVCYXJDb21wb25lbnRcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBEaWFsb2cgY29tcG9uZW50IHRoYXQgaW5jbHVkZXMgYWxsIERpYWxvZyBjb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzLlxuICogSW1wb3J0cyBgRGlhbG9nTW9kdWxlYCBpbnRvIHRoZSBbcm9vdCBtb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlcyddIH19I2FuZ3VsYXItbW9kdWxhcml0eSlcbiAqIG9mIHlvdXIgYXBwbGljYXRpb24gb3IgaW50byBhbnkgb3RoZXIgc3ViLW1vZHVsZSB0aGF0IHdpbGwgdXNlIHRoZSBEaWFsb2cgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4gKiBpbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kaWFsb2cnO1xuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdLFxuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sXG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRGlhbG9nTW9kdWxlXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIERpYWxvZ01vZHVsZSB7XG59XG5EaWFsb2dNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0RJQUxPR19ESVJFQ1RJVkVTLCBEaWFsb2dDb250YWluZXJEaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGVudHJ5Q29tcG9uZW50czogW0RJQUxPR19ESVJFQ1RJVkVTXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbRElBTE9HX0RJUkVDVElWRVMsIFNIQVJFRF9ESVJFQ1RJVkVTLCBEaWFsb2dDb250YWluZXJEaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtTaGFyZWRNb2R1bGVdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW0RpYWxvZ0NvbnRhaW5lclNlcnZpY2UsIERpYWxvZ1NlcnZpY2VdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUHJvdmlkZXMgYW4gaW5zZXJ0aW9uIHBvaW50IGZvciB0aGUgV2luZG93cyB3aGljaCBhcmUgY3JlYXRlZCB0aHJvdWdoIHRoZVxuICogV2luZG93IHNlcnZpY2UgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhcGlfZGlhbG9nX3dpbmRvd3NlcnZpY2UgJX0jdG9jLW9wZW4pKS5cbiAqIENyZWF0ZWQgV2luZG93cyB3aWxsIGJlIG1vdW50ZWQgYWZ0ZXIgdGhhdCBlbGVtZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGRpdiBrZW5kb1dpbmRvd0NvbnRhaW5lcj48L2Rpdj5cbiAqIGBgYFxuICovXG5jbGFzcyBXaW5kb3dDb250YWluZXJEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRhaW5lciwgc2VydmljZSkge1xuICAgICAgICBzZXJ2aWNlLmNvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICB9XG59XG5XaW5kb3dDb250YWluZXJEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1dpbmRvd0NvbnRhaW5lcl0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbldpbmRvd0NvbnRhaW5lckRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFZpZXdDb250YWluZXJSZWYgfSxcbiAgICB7IHR5cGU6IFdpbmRvd0NvbnRhaW5lclNlcnZpY2UgfVxuXTtcblxuY29uc3QgV0lORE9XX0RJUkVDVElWRVMgPSBbXG4gICAgUmVzaXplSGFuZGxlRGlyZWN0aXZlLFxuICAgIFdpbmRvd0NvbXBvbmVudCxcbiAgICBXaW5kb3dUaXRsZUJhckNvbXBvbmVudCxcbiAgICBXaW5kb3dDbG9zZUFjdGlvbkRpcmVjdGl2ZSxcbiAgICBXaW5kb3dNaW5pbWl6ZUFjdGlvbkRpcmVjdGl2ZSxcbiAgICBXaW5kb3dNYXhpbWl6ZUFjdGlvbkRpcmVjdGl2ZSxcbiAgICBXaW5kb3dSZXN0b3JlQWN0aW9uRGlyZWN0aXZlXG5dO1xuY29uc3QgRU5UUllfQ09NUE9ORU5UUyA9IFtcbiAgICBXaW5kb3dDb21wb25lbnQsXG4gICAgV2luZG93VGl0bGVCYXJDb21wb25lbnRcbl07XG5jb25zdCBleHBvcnRlZE1vZHVsZXMgPSBbXG4gICAgV2luZG93Q29tcG9uZW50LFxuICAgIFdpbmRvd0Nsb3NlQWN0aW9uRGlyZWN0aXZlLFxuICAgIFdpbmRvd01pbmltaXplQWN0aW9uRGlyZWN0aXZlLFxuICAgIFdpbmRvd01heGltaXplQWN0aW9uRGlyZWN0aXZlLFxuICAgIFdpbmRvd1Jlc3RvcmVBY3Rpb25EaXJlY3RpdmUsXG4gICAgV2luZG93VGl0bGVCYXJDb21wb25lbnRcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBXaW5kb3cgY29tcG9uZW50LiBJbXBvcnRzIGBXaW5kb3dNb2R1bGVgIGludG8gdGhlXG4gKiBbcm9vdCBtb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlcyddIH19I2FuZ3VsYXItbW9kdWxhcml0eSlcbiAqIG9mIHlvdXIgYXBwbGljYXRpb24gb3IgaW50byBhbnkgb3RoZXIgc3ViLW1vZHVsZSB0aGF0IHdpbGwgdXNlIHRoZSBXaW5kb3cgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1uby1ydW5cbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBCcm93c2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG4gKiBpbXBvcnQgeyBXaW5kb3dNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci13aW5kb3cnO1xuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdLFxuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sXG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgV2luZG93TW9kdWxlXVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIFdpbmRvd01vZHVsZSB7XG59XG5XaW5kb3dNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1dJTkRPV19ESVJFQ1RJVkVTLCBXaW5kb3dDb250YWluZXJEaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGVudHJ5Q29tcG9uZW50czogW0VOVFJZX0NPTVBPTkVOVFNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMsIFNIQVJFRF9ESVJFQ1RJVkVTLCBXaW5kb3dDb250YWluZXJEaXJlY3RpdmVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIERyYWdnYWJsZU1vZHVsZV0sXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbV2luZG93Q29udGFpbmVyU2VydmljZSwgV2luZG93U2VydmljZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRGlhbG9ncyBjb21wb25lbnRzLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiBpbXBvcnQgeyBEaWFsb2dzTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGlhbG9nJztcbiAqXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIERpYWxvZ3NNb2R1bGVdLFxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBEaWFsb2dzTW9kdWxlIHtcbn1cbkRpYWxvZ3NNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtEaWFsb2dNb2R1bGUsIFdpbmRvd01vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgeyBESUFMT0dfRElSRUNUSVZFUywgRGlhbG9nQ29udGFpbmVyRGlyZWN0aXZlLCBEaWFsb2dDb250YWluZXJTZXJ2aWNlLCBDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgRElBTE9HX0xPQ0FMSVpBVElPTl9TRVJWSUNFLCBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTWVzc2FnZXMsIFNIQVJFRF9ESVJFQ1RJVkVTLCBTaGFyZWRNb2R1bGUsIERyYWdSZXNpemVTZXJ2aWNlLCBOYXZpZ2F0aW9uU2VydmljZSwgV2luZG93Q29udGFpbmVyRGlyZWN0aXZlLCBXaW5kb3dDb250YWluZXJTZXJ2aWNlLCBSZXNpemVIYW5kbGVEaXJlY3RpdmUsIERpYWxvZ0NvbXBvbmVudCwgRGlhbG9nVGl0bGVCYXJDb21wb25lbnQsIERpYWxvZ0NvbnRlbnRCYXNlLCBEaWFsb2dBY3Rpb25zQ29tcG9uZW50LCBEaWFsb2dTZXJ2aWNlLCBEaWFsb2dDbG9zZVJlc3VsdCwgRGlhbG9nUmVmLCBEaWFsb2dTZXR0aW5ncywgRGlhbG9nQWN0aW9uLCBXaW5kb3dDb21wb25lbnQsIFdpbmRvd1RpdGxlQmFyQ29tcG9uZW50LCBXaW5kb3dNYXhpbWl6ZUFjdGlvbkRpcmVjdGl2ZSwgV2luZG93TWluaW1pemVBY3Rpb25EaXJlY3RpdmUsIFdpbmRvd0Nsb3NlQWN0aW9uRGlyZWN0aXZlLCBXaW5kb3dSZXN0b3JlQWN0aW9uRGlyZWN0aXZlLCBXaW5kb3dTZXR0aW5ncywgV2luZG93UmVmLCBXaW5kb3dDbG9zZVJlc3VsdCwgV2luZG93U2VydmljZSwgRGlhbG9nTW9kdWxlLCBXaW5kb3dNb2R1bGUsIERpYWxvZ3NNb2R1bGUgfTtcbiJdfQ==","\n \n \n \n Search\n \n \n\n\n \n \n \n
Updating Results...
\n
\n
\n
\n
Customers
\n
\n
\n
{{item.name}}
\n {{item.address}}, {{item.city}}\n \n \n
\n
\n
\n
\n
Instruments
\n
\n
\n {{item.productname}}\n
\n
\n
\n
\n
Serial Numbers
\n
\n
\n
{{item.productname}} SN: {{item.sn}}
\n {{item.country}}\n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {Router} from '@angular/router';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {FilterChoicesService} from '../filter-choices.service';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\n\n@Component({\n selector: 'app-search-popup',\n templateUrl: './search-popup.component.html',\n styleUrls: ['./search-popup.component.scss']\n})\nexport class SearchPopupComponent implements OnInit, OnDestroy {\n RequestState = RequestState;\n DashboardOptions = DashboardOptions;\n @Input() displayTitles;\n stateOn = false;\n searchValue = '';\n navFilterSelection: NavFilterSelection;\n refreshHandleKey;\n requestHandler;\n apiState;\n apiRoute = '/search';\n apiData;\n selectedType;\n // selectedSnKeys;\n selectedKey;\n searchQuery;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private filterChoices: FilterChoicesService,\n private apiService: ApiService,\n private refreshHandlerService: RefreshHandlerService,\n private selectedTabService: SelectedTabService,\n private personaService: PersonaService,\n private router: Router\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.requestHandler = this.apiService.get(this.apiRoute);\n this.requestHandler.sendRequest(this.apiRoute);\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.apiData = apiData;\n this.resetSelection(true);\n // console.log(this.apiData);\n /**\n * note instrument selections switch to the instruments dashboard\n * customers [\n address: \"325 E 15TH ST BETWEEN 1ST AND 2ND \"\n city: \"NEW YORK\"\n country: \"056\"\n customerid: \"45891\"\n customersrno: \"0050082684\"\n isnew: \"False\"\n name: \"MOUNT SINAI BETH ISRAEL\"\n productlines: []\n state: \"NY\"\n ]\n * productlines [\n alconnectable: null\n alwaysonuptime: null\n country: null\n customers: [\n 0: \"1511 (256580-0)\"\n 1: \"12782 (4051401-0)\"\n 2: \"13080 (2093001-1)\"\n 3: \"13184 (8175001-1)\"\n ]\n productdescription: \"ARCHITECT I2000\"\n productlineid: \"115\"\n productname: \"ARCHITECT I2000\"\n sn: null\n ]\n * snlist [\n alconnectable: null\n alwaysonuptime: null\n country: \"JAPAN\"\n customers: null\n productdescription: null\n productlineid: \"116#ISR00141\"\n productname: \"ARCHITECT i2000SR\"\n sn: \"ISR00141\"\n ]\n */\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.apiRoute);\n }, this.requestHandler.getRelativeParams(this.apiRoute));\n }\n\n ngOnDestroy() {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n }\n\n toggle() {\n this.stateOn = !this.stateOn;\n }\n\n public change(event) {\n this.searchQuery = event.target.value;\n if (event.key === 'Enter') {\n this.search();\n }\n }\n public search() {\n this.filterChoices.setFilter('searchQuery', this.searchQuery);\n }\n\n resetSelection(withSn = false) {\n for (const k in this.apiData.customers) {\n if (this.apiData.customers.hasOwnProperty(k)) {\n this.apiData.customers[k].selected = false;\n }\n }\n for (const k in this.apiData.productlines) {\n if (this.apiData.productlines.hasOwnProperty(k)) {\n this.apiData.productlines[k].selected = false;\n }\n }\n // if (withSn) {\n for (const k in this.apiData.snlist) {\n if (this.apiData.snlist.hasOwnProperty(k)) {\n this.apiData.snlist[k].selected = false;\n }\n }\n // }\n }\n\n getCurrentSelectedItems() {\n if (this.selectedType === 'customer') {\n for (const item of this.apiData.customers) {\n if (item.customerid === this.selectedKey) {\n return item;\n }\n }\n }\n if (this.selectedType === 'pl') {\n for (const item of this.apiData.productlines) {\n if (item.productlineid === this.selectedKey) {\n return item;\n }\n }\n }\n if (this.selectedType === 'sn') {\n // const selectedItems = [];\n for (const item of this.apiData.snlist) {\n if (item.productlineid === this.selectedKey) {\n return item;\n // selectedItems.push(item);\n }\n }\n // return selectedItems;\n }\n return null;\n }\n\n public select(item, type, key) {\n if (!item.selected) {\n if (type === 'sn') {\n this.resetSelection();\n // if (!Array.isArray(this.selectedKey)) {\n // this.selectedSnKeys = [];\n // }\n // this.selectedSnKeys.push(key);\n // this.selectedKey = this.selectedSnKeys;\n this.selectedKey = key;\n } else {\n this.resetSelection(true);\n this.selectedKey = key;\n // this.selectedSnKeys = [];\n }\n }\n // else if (type === 'sn') {\n // const index = this.selectedSnKeys.indexOf(key);\n // if (index > -1) {\n // this.selectedSnKeys.splice(index, 1);\n // }\n // this.selectedKey = this.selectedSnKeys;\n // }\n\n this.selectedType = type;\n item.selected = !item.selected;\n this.submit();\n }\n\n public close() {\n this.stateOn = false;\n }\n\n public open() {\n this.stateOn = true;\n }\n\n public submit() {\n /**\n * set to appropriate dashboard\n * set persona selections\n * trigger refreshes\n * close the window\n */\n const selectedItems = this.getCurrentSelectedItems();\n if (this.selectedType === 'customer') {\n this.selectedTabService.selectTab(DashboardOptions.customer);\n this.personaService.setServiceVsAmbState(true);\n this.personaService.setPersonaOption(PersonaTypes.GEO, 'WorldWide', 'WorldWide');\n this.personaService.setPersonaOption(PersonaTypes.Customer, this.selectedKey, selectedItems.name);\n this.router.navigate(['/customerDashboard']);\n // this.filterChoices.setFilter('searchCustomerId', this.selectedKey);\n // this.filterChoices.setFilter('searchProductLineId', '');\n }\n if (this.selectedType === 'pl') {\n this.selectedTabService.selectTab(DashboardOptions.instruments);\n this.personaService.setServiceVsAmbState(true);\n this.personaService.setPersonaOption(PersonaTypes.GEO, 'WorldWide', 'WorldWide');\n this.personaService.setPersonaOption(PersonaTypes.ProductLine, this.selectedKey, selectedItems.productname);\n this.router.navigate(['/instrumentsDashboard']);\n // this.filterChoices.setFilter('searchProductLineId', this.selectedKey);\n // this.filterChoices.setFilter('searchCustomerId', '');\n }\n if (this.selectedType === 'sn') {\n // selectedItems = selectedItems[0];\n this.selectedTabService.selectTab(DashboardOptions.instruments);\n this.personaService.setServiceVsAmbState(true);\n // persona service needs modification to allow multi select\n this.personaService.setPersonaOption(PersonaTypes.GEO, 'WorldWide', 'WorldWide');\n this.personaService.setPersonaOption(PersonaTypes.SN, this.selectedKey, selectedItems.sn);\n this.router.navigate(['/instrumentsDashboard']);\n // this.filterChoices.setFilter('searchProductLineId', '');\n // this.filterChoices.setFilter('searchCustomerId', '');\n }\n this.close();\n }\n}\n","
\n \n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n \n
\n \n \n
\n
\n
\n
","import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport {\n faBookmark,\n faCog,\n faGlobeAmericas,\n faSearch,\n faUser,\n faUsers,\n faFilter,\n faVial,\n faClinicMedical,\n faGripHorizontal,\n faUserTie,\n faLaptopMedical,\n faMortarPestle,\n faSyringe,\n faHandHoldingMedical,\n faTachometerAlt,\n faMicroscope,\n} from '@fortawesome/free-solid-svg-icons';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../navbar-builder.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-dashboard-navbar',\n templateUrl: './dashboard-navbar.component.html',\n styleUrls: ['./dashboard-navbar.component.scss']\n})\nexport class DashboardNavbarComponent implements OnInit {\n navFilterSelection: NavFilterSelection = null;\n DashboardOptions = DashboardOptions;\n faGlobeAmericas = faGlobeAmericas;\n faSearch = faSearch;\n faBookmark = faBookmark;\n faCog = faCog;\n faUsers = faUsers;\n faUser = faUser;\n faFilter = faFilter;\n faVial = faVial;\n faClinicMedical = faClinicMedical;\n faGripHorizontal = faGripHorizontal;\n faUserTie = faUserTie;\n faLaptopMedical = faLaptopMedical;\n faMortarPestle = faMortarPestle;\n faSyringe = faSyringe;\n faHandHoldingMedical = faHandHoldingMedical;\n status = false;\n isAmbTabVisible = false;\n lastSelectedDashboardTabInfo = null;\n faMicroscope = faMicroscope;\n faTachometerAlt = faTachometerAlt;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private refreshHandlerService: RefreshHandlerService,\n private authService: AuthenticationService,\n private selectedTabService: SelectedTabService,\n private cdRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n // @todo: understand the setTimeout hack used here\n // https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/\n // https://blog.angular-university.io/angular-debugging/\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection: NavFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n this.isAmbTabVisible = (userInfo.isAMB || userInfo.isAMBManager || userInfo.isSuperUser);\n });\n this.selectedTabService.onTabChange(() => {\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n this.cdRef.detectChanges();\n });\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n this.cdRef.detectChanges();\n }\n\n getNavigateBackwardsLink() {\n const selectedTab = this.selectedTabService.getLastSelectedTabInfo();\n if (selectedTab === DashboardOptions.dashboard) {\n return '/';\n }\n if (selectedTab === DashboardOptions.customer) {\n return '/customerDashboard';\n }\n if (selectedTab === DashboardOptions.instruments) {\n return '/instrumentsDashboard';\n }\n if (selectedTab === DashboardOptions.ambassador) {\n return '/ambassadorDashboard';\n }\n }\n\n clickEvent() {\n this.status = !this.status;\n }\n closeSidebar() {\n this.status = false;\n }\n dashboardChange(dashboardOption) {\n this.selectedTabService.selectTab(dashboardOption);\n // this.refreshHandlerService.triggerCallbacks();\n }\n}\n","\n \n
{{menuText1}}
\n
{{menuText2}}
\n
\n \n
\n
\n
{{filter.key}}: {{filter.value}}
\n
\n
\n
\n\n","import { Component, OnInit, ElementRef, HostListener, ViewChild, Input } from '@angular/core';\nimport {DetailChoicesService} from '../details/detail-choices.service';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {Personas} from '../../configuration/personas';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {DetailAccountFilterComponent} from '../details/detail-account-filter/detail-account-filter.component';\nimport {DetailCapitalServiceAssaySwitchesFilterComponent} from '../details/detail-capital-service-assay-switches-filter/detail-capital-service-assay-switches-filter.component';\nimport {DetailCustomerFilterComponent} from '../details/detail-customer-filter/detail-customer-filter.component';\nimport {DetailProductLineFilterComponent} from '../details/detail-product-line-filter/detail-product-line-filter.component';\nimport {DetailDiseaseStateFilterComponent} from '../details/detail-disease-state-filter/detail-disease-state-filter.component';\nimport {DetailAssayFilterComponent} from '../details/detail-assay-filter/detail-assay-filter.component';\nimport {DetailCategorySwitchesFilterComponent} from '../details/detail-category-switches-filter/detail-category-switches-filter.component';\n\n@Component({\n selector: 'app-detail-persona-selector',\n templateUrl: './detail-persona-selector.component.html',\n styleUrls: ['./detail-persona-selector.component.scss']\n})\nexport class DetailPersonaSelectorComponent implements OnInit {\n DashboardOptions = DashboardOptions;\n Personas = Personas;\n PersonaTypes = PersonaTypes;\n navFilterSelection: NavFilterSelection;\n menuViable = false;\n filterSelections = [];\n\n selectedType = null;\n selectedValue = null;\n selectedLabel = null;\n menuText1 = '';\n menuText2 = '';\n\n @Input() anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n @Input() popupAlign = { horizontal: 'left', vertical: 'top' };\n\n @ViewChild('anchor') public anchor: ElementRef;\n @ViewChild('popup', { read: ElementRef }) public popup: ElementRef;\n\n constructor(\n private authService: AuthenticationService,\n private navbarBuilderService: NavbarBuilderService,\n private detailChoices: DetailChoicesService\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.authService.onAuth(() => {\n this.updateSelections();\n });\n\n this.detailChoices.onDisplayCallbacks(() => {\n this.updateSelections();\n });\n\n this.updateSelections();\n this.onResize();\n\n // this.detailChoicesService.getFilter('detailCustomerIdFilter');\n }\n\n /**\n * @todo: think about how display will handle toggle switches\n */\n updateSelections() {\n // this.selectedType = level1Choice.type;\n // this.selectedValue = level1Choice.value;\n // this.selectedLabel = level1Choice.label;\n const titles = {\n detailAccountFilter: 'Account',\n detailAssayFilter: 'Assay',\n detailCustomerIdFilter: 'Customer',\n detailDiseaseStateFilter: 'Disease State',\n detailIsCapitalFilter: 'Is Capital',\n detailIsFieldServiceContractFilter: 'Is Field Service Contract',\n detailIsOtherFilter: 'Is Other',\n detailIsReagentFilter: 'Is Reagent',\n detailIsServiceFilter: 'Is Service',\n detailProductLineFilter: 'Product Line'\n };\n this.filterSelections = [];\n const filterSelections = this.detailChoices.getFilterSelections();\n for (const filterKey in filterSelections) {\n if (filterKey in filterSelections) {\n const filter = filterSelections[filterKey];\n this.filterSelections.push({key: titles[filterKey], value: filter});\n }\n }\n this.menuText1 = 'View Selections';\n this.menuText2 = '';\n\n // const filterDescriptions = {\n // DetailCustomerFilterComponent: 'Customer',\n // DetailProductLineFilterComponent: 'Product Line',\n // DetailAccountFilterComponent: 'Account',\n // DetailAssayFilterComponent: 'Assay',\n // DetailDiseaseStateFilterComponent: 'Disease State',\n // DetailCategorySwitchesFilterComponent: 'Categories',\n // DetailCapitalServiceAssaySwitchesFilterComponent: 'Capital/Service/Assay Switches'\n // };\n // // if (this.selectedType === null || this.selectedType === undefined) {\n // const textPieces = [];\n // for (const filterKey of this.navFilterSelection.detailFilters) {\n // textPieces.push(filterDescriptions[filterKey]);\n // }\n //\n // this.menuText1 = this.buildPhrase(textPieces);\n //\n // this.menuText2 = '';\n // } else {\n // this.menuText1 = this.selectedType;\n // this.menuText2 = this.selectedLabel;\n // }\n }\n\n buildPhrase(list) {\n list[list.length - 1] = 'or ' + list[list.length - 1];\n let str = list.join(', ');\n const pos = str.lastIndexOf(',');\n str = str.substring(0, pos) + str.substring(pos + 1);\n return str;\n }\n\n onToggle(): void {\n this.menuViable = !this.menuViable;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if (!this.contains(event.target) && this.menuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (target.classList.contains('list-group-item')) {\n return false;\n }\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n\n applyDetailFilters() {\n this.detailChoices.applyFilters();\n return this;\n }\n\n clearDetailFilters() {\n this.detailChoices.clearFilters();\n return this;\n }\n}\n","
\n \n \n
\n
\n
\n \n \n {{navFilterSelection.navigateBackwardsLabel}}\n \n
\n \n \n
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport {faBookmark, faChevronLeft, faFlag, faList, faStar, faUserTag} from '@fortawesome/free-solid-svg-icons';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../navbar-builder.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-metric-detail-navbar',\n templateUrl: './metric-detail-navbar.component.html',\n styleUrls: ['./metric-detail-navbar.component.scss']\n})\nexport class MetricDetailNavbarComponent implements OnInit {\n navFilterSelection: NavFilterSelection = null;\n faList = faList;\n faStar = faStar;\n faUserTag = faUserTag;\n faFlag = faFlag;\n faBookmark = faBookmark;\n faChevronLeft = faChevronLeft;\n status = false;\n lastSelectedDashboardTabInfo = null;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n // @todo: understand the setTimeout hack used here\n // https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/\n // https://blog.angular-university.io/angular-debugging/\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n if (navFilterSelection.navigateBackwardsLink === '/lastSelectedDashboard') {\n navFilterSelection.navigateBackwardsLink = this.getNavigateBackwardsLink();\n }\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n this.selectedTabService.onTabChange(() => {\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n });\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n }\n\n getNavigateBackwardsLink() {\n const selectedTab = this.selectedTabService.getLastSelectedTabInfo();\n if (selectedTab === DashboardOptions.dashboard) {\n return '/';\n }\n if (selectedTab === DashboardOptions.customer) {\n return '/customerDashboard';\n }\n if (selectedTab === DashboardOptions.instruments) {\n return '/instrumentsDashboard';\n }\n if (selectedTab === DashboardOptions.ambassador) {\n return '/ambassadorDashboard';\n }\n return '/';\n }\n\n clickEvent() {\n this.status = !this.status;\n }\n closeSidebar() {\n this.status = false;\n }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CtServiceService {\n customerScope;\n customerScopeChangeCallbacks = [];\n callbackScopeIndex = 0;\n customerId;\n customerName;\n callbackIndex = 0;\n customerSelectionChangeCallbacks = {};\n hasSetCustomerId = false;\n returnCustomer = null;\n\n constructor() { }\n\n setCustomerScope(scope) {\n this.customerScope = scope;\n this.callCustomerScopeChangeCallbacks();\n return this;\n }\n\n getCustomerScope() {\n return this.customerScope;\n }\n\n onCustomerScopeChange(callback) {\n this.customerScopeChangeCallbacks[++this.callbackScopeIndex] = callback;\n return this.callbackScopeIndex;\n }\n\n callCustomerScopeChangeCallbacks() {\n for (const callbackKey in this.customerScopeChangeCallbacks) {\n if (callbackKey in this.customerScopeChangeCallbacks) {\n const callback = this.customerScopeChangeCallbacks[callbackKey];\n callback();\n }\n }\n return this;\n }\n\n clearCustomerScopeChangeEvent(index) {\n delete this.customerSelectionChangeCallbacks[index];\n }\n\n setCustomerId(customerId, customerName = null) {\n this.customerId = customerId;\n this.customerName = customerName;\n\n this.callCustomerSelectionChangeCallbacks();\n return this;\n }\n\n getCustomerId() {\n return this.customerId;\n }\n\n getCustomerName() {\n return this.customerName;\n }\n\n setReturnCustomer(returnCustomerParam) {\n this.returnCustomer = returnCustomerParam;\n }\n\n isReturnCustomerSet() {\n return (this.returnCustomer !== null);\n }\n\n getReturnCustomer() {\n return this.returnCustomer;\n }\n\n onCustomerSelectionChange(callback) {\n this.customerSelectionChangeCallbacks[++this.callbackIndex] = callback;\n if (this.hasSetCustomerId) {\n callback();\n }\n return this.callbackIndex;\n }\n\n clearCustomerSelectionChangeEvent(index) {\n delete this.customerSelectionChangeCallbacks[index];\n }\n\n getSize(obj) {\n let size = 0;\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n size++;\n }\n }\n return size;\n }\n\n callCustomerSelectionChangeCallbacks() {\n this.hasSetCustomerId = true;\n for (const callbackKey in this.customerSelectionChangeCallbacks) {\n if (callbackKey in this.customerSelectionChangeCallbacks) {\n const callback = this.customerSelectionChangeCallbacks[callbackKey];\n callback();\n }\n }\n return this;\n }\n}\n","\r\n \r\n
{{menuText1}}
\r\n
{{menuText2}}
\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n","import { Component, OnInit, ElementRef, HostListener, ViewChild, Input } from '@angular/core';\nimport {FilterChoicesService} from '../filter-choices.service';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\n\n@Component({\n selector: 'app-ct-product-set-selector',\n templateUrl: './ct-product-set-selector.component.html',\n styleUrls: ['./ct-product-set-selector.component.scss']\n})\nexport class CtProductSetSelectorComponent implements OnInit {\n public apiUrl = 'cua/product_families';\n apiState = RequestState.Complete;\n menuVisible = false;\n\n data = [];\n selectedItem;\n\n menuText1 = '';\n menuText2 = '';\n\n @Input() anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n @Input() popupAlign = { horizontal: 'left', vertical: 'top' };\n\n @ViewChild('anchor') public anchor: ElementRef;\n @ViewChild('popup', { read: ElementRef }) public popup: ElementRef;\n\n constructor(\n private filterService: FilterChoicesService,\n private apiService: ApiService\n ) { }\n\n ngOnInit(): void {\n const requestHandler = this.apiService.get(this.apiUrl);\n requestHandler.sendRequest(this.apiUrl, [], false);\n\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const data = JSON.parse(response.body);\n this.data = [];\n for (const item of data) {\n this.data.push({\n label: item.prdFamilySetDisplayVal,\n key: item.prdFamilySetId // prdFamilySetKey\n });\n if (item.prdFamilySetDefault) {\n this.setSelectedItem(item.prdFamilySetId);\n }\n }\n // console.log('cuatest', this.data);\n }\n });\n\n this.updateSelections();\n this.onResize();\n }\n\n updateSelections() {\n this.menuText1 = 'Product Families';\n this.menuText2 = this.getLabel(this.selectedItem);\n }\n\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n this.filterService.setFilter('product_set_number', selectedItem);\n this.updateSelections();\n }\n\n onToggle(): void {\n this.menuVisible = !this.menuVisible;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.menuVisible) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if (!this.contains(event.target) && this.menuVisible) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n}\n","
\n \n \n
\n
\n
\n \n
\n \n
\n
\n \n
\n \n \n \n
\n \n
\n
\n\n
\n \n \n \n \n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-gs-alerts-navbar',\n templateUrl: './gs-alerts-navbar.component.html',\n styleUrls: ['./gs-alerts-navbar.component.scss']\n})\nexport class GsAlertsNavbarComponent implements OnInit {\n\n ToolSelectionOptions = ToolSelectionOptions;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-alerts-navbar',\n templateUrl: './alerts-navbar.component.html',\n styleUrls: ['./alerts-navbar.component.scss']\n})\nexport class AlertsNavbarComponent implements OnInit {\n ToolSelectionOptions = ToolSelectionOptions;\n\n constructor() { }\n\n ngOnInit(): void {\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {NavFilterSelection, ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {CtServiceService} from '../../control_tower/ct-service.service';\nimport {NavbarBuilderService} from '../navbar-builder.service';\n\n@Component({\n selector: 'app-ct-navbar',\n templateUrl: './ct-navbar.component.html',\n styleUrls: ['./ct-navbar.component.scss']\n})\nexport class CtNavbarComponent implements OnInit {\n navFilterSelection: NavFilterSelection = null;\n ToolSelectionOptions = ToolSelectionOptions;\n status = false;\n\n constructor(\n private ctService: CtServiceService,\n private navbarBuilderService: NavbarBuilderService\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection: NavFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n }\n\n clickEvent() {\n this.status = !this.status;\n }\n closeSidebar() {\n this.status = false;\n }\n\n customerScopeChange(evt) {\n this.ctService.setCustomerScope(evt);\n }\n}\n","","","
\n \n
","import { Component, OnInit } from '@angular/core';\nimport {faBookmark, faChevronLeft, faFlag, faList, faStar, faUserTag} from '@fortawesome/free-solid-svg-icons';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../navbar-builder.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-metric-detail-no-filter',\n templateUrl: './metric-detail-no-filter.component.html',\n styleUrls: ['./metric-detail-no-filter.component.scss']\n})\nexport class MetricDetailNoFilterComponent implements OnInit {\n navFilterSelection: NavFilterSelection = null;\n faList = faList;\n faStar = faStar;\n faUserTag = faUserTag;\n faFlag = faFlag;\n faBookmark = faBookmark;\n faChevronLeft = faChevronLeft;\n status = false;\n lastSelectedDashboardTabInfo = null;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n // @todo: understand the setTimeout hack used here\n // https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/\n // https://blog.angular-university.io/angular-debugging/\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n if (navFilterSelection.navigateBackwardsLink === '/lastSelectedDashboard') {\n navFilterSelection.navigateBackwardsLink = this.getNavigateBackwardsLink();\n }\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n this.selectedTabService.onTabChange(() => {\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n });\n this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n }\n\n getNavigateBackwardsLink() {\n const selectedTab = this.selectedTabService.getLastSelectedTabInfo();\n if (selectedTab === DashboardOptions.dashboard) {\n return '/';\n }\n if (selectedTab === DashboardOptions.customer) {\n return '/customerDashboard';\n }\n if (selectedTab === DashboardOptions.instruments) {\n return '/instrumentsDashboard';\n }\n if (selectedTab === DashboardOptions.ambassador) {\n return '/ambassadorDashboard';\n }\n return '/';\n }\n\n clickEvent() {\n this.status = !this.status;\n }\n closeSidebar() {\n this.status = false;\n }\n}\n","\n ","import { Component, OnInit } from '@angular/core';\nimport {\n faDesktop,\n faBorderAll\n} from '@fortawesome/free-solid-svg-icons';\nimport {PresentationToggleHandlerService} from '../presentation-toggle-handler.service';\n\n@Component({\n selector: 'app-presentation-toggle-switch',\n templateUrl: './presentation-toggle-switch.component.html',\n styleUrls: ['./presentation-toggle-switch.component.scss']\n})\nexport class PresentationToggleSwitchComponent implements OnInit {\n faDesktop = faDesktop;\n faBorderAll = faBorderAll;\n\n state = 0;\n\n constructor(private presentationToggleHandlerService: PresentationToggleHandlerService) { }\n\n ngOnInit(): void {\n }\n\n changeState() {\n if (this.state === 0) {\n this.state = 1;\n } else {\n this.state = 0;\n }\n this.presentationToggleHandlerService.updateToggleState(this.state);\n }\n}\n","
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n","import { Component, OnInit, ChangeDetectorRef } from '@angular/core';\nimport {DashboardOptions, NavFilterSelection} from '../../configuration/nav-filter-selection';\nimport {\n faDesktop,\n faBorderAll,\n faBookmark,\n faCog,\n faGlobeAmericas,\n faSearch,\n faUser,\n faUsers,\n faFilter,\n faVial,\n faClinicMedical,\n faGripHorizontal,\n faUserTie,\n faLaptopMedical,\n faMortarPestle,\n faSyringe,\n faHandHoldingMedical,\n faTachometerAlt,\n faMicroscope,\n} from '@fortawesome/free-solid-svg-icons';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\n\n@Component({\n selector: 'app-br-navbar',\n templateUrl: './br-navbar.component.html',\n styleUrls: ['./br-navbar.component.scss']\n})\nexport class BrNavbarComponent implements OnInit {\n isVisible = true;\n navFilterSelection: NavFilterSelection = null;\n DashboardOptions = DashboardOptions;\n faDesktop = faDesktop;\n faBorderAll = faBorderAll;\n // faGlobeAmericas = faGlobeAmericas;\n // faSearch = faSearch;\n // faBookmark = faBookmark;\n faCog = faCog;\n // faUsers = faUsers;\n // faUser = faUser;\n // faFilter = faFilter;\n // faVial = faVial;\n // faClinicMedical = faClinicMedical;\n // faGripHorizontal = faGripHorizontal;\n // faUserTie = faUserTie;\n // faLaptopMedical = faLaptopMedical;\n // faMortarPestle = faMortarPestle;\n // faSyringe = faSyringe;\n // faHandHoldingMedical = faHandHoldingMedical;\n status = false;\n // isAmbTabVisible = false;\n // lastSelectedDashboardTabInfo = null;\n // faMicroscope = faMicroscope;\n // faTachometerAlt = faTachometerAlt;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private refreshHandlerService: RefreshHandlerService,\n private authService: AuthenticationService,\n // private selectedTabService: SelectedTabService,\n // private cdRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n // @todo: understand the setTimeout hack used here\n // https://indepth.dev/everything-you-need-to-know-about-the-expressionchangedafterithasbeencheckederror-error/\n // https://blog.angular-university.io/angular-debugging/\n this.navbarBuilderService.getNavFilterSelectionSubject().subscribe(\n (navFilterSelection: NavFilterSelection) => {\n setTimeout(() => {\n this.navFilterSelection = navFilterSelection;\n });\n }\n );\n this.navbarBuilderService.tickNavFilterSelectionSubject();\n\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n\n // this.isAmbTabVisible = (userInfo.isAMB || userInfo.isAMBManager || userInfo.isSuperUser);\n });\n // this.selectedTabService.onTabChange(() => {\n // this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n // this.cdRef.detectChanges();\n // });\n // this.lastSelectedDashboardTabInfo = this.selectedTabService.getLastSelectedTabInfo();\n // this.cdRef.detectChanges();\n this.navbarBuilderService.getNavbarIsVisibleSubject().subscribe(\n (isVisible) => {\n this.isVisible = isVisible;\n }\n );\n }\n\n clickEvent() {\n this.status = !this.status;\n }\n closeSidebar() {\n this.status = false;\n }\n dashboardChange(dashboardOption) {\n // this.selectedTabService.selectTab(dashboardOption);\n // this.refreshHandlerService.triggerCallbacks();\n }\n}\n","
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
Authenticating...
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n Not Authorized!\r\n
","import {Component, OnInit, OnDestroy} from '@angular/core';\nimport {NavbarBuilderService} from './navigation/navbar-builder.service';\nimport {PersonaOptionsService} from './api/persona-options.service';\nimport {PreferenceApiConnectorService} from './preferences/preference-api-connector.service';\nimport {PersonaService} from './api/persona.service';\nimport {DetailChoicesService} from './filter_selection/details/detail-choices.service';\nimport {FilterChoicesService} from './filter_selection/filter-choices.service';\nimport {AuthenticationService} from './authentication/authentication.service';\nimport {PersonaTypes} from './configuration/persona-types';\nimport { SwPush } from '@angular/service-worker';\nimport { PushNotificationService } from './api/push-notification-service';\nimport { BroadcastService, MsalService } from '@azure/msal-angular';\nimport {environment} from '../environments/environment';\nimport {HttpClient, HttpErrorResponse, HttpHeaders, HttpParams, HttpResponse} from '@angular/common/http';\nimport { Logger, CryptoUtils, AuthenticationParameters } from 'msal';\nimport {ApiMapping} from './configuration/api-mapping';\nimport {RequestState} from './api/request-handler';\nimport {RefreshHandlerService} from './api/refresh-handler.service';\nimport {SelectedTabService} from './dashboards/selected-tab.service';\nimport {ComponentLookup, ComponentLookupRegistry} from './decorators/component-lookup';\nimport {StackedBarLineChartComponent} from './tiles/base/stacked-bar-line-chart/stacked-bar-line-chart.component';\nimport {TextIndicatorsComponent} from './tiles/base/text-indicators/text-indicators.component';\nimport {StackedBarChartByProductComponent} from './tiles/base/stacked-bar-chart-by-product/stacked-bar-chart-by-product.component';\nimport {FilterInsertComponent} from './filter_selection/details/filter-insert/filter-insert.component';\nimport {TopStatsListComponent} from './tiles/base/top-stats-list/top-stats-list.component';\nimport {VerticalSplitTextIndicatorsComponent} from './tiles/base/vertical-split-text-indicators/vertical-split-text-indicators.component';\nimport {ShapeIndicatorsComponent} from './tiles/base/shape-indicators/shape-indicators.component';\nimport {PieChartComponent} from './tiles/base/pie-chart/pie-chart.component';\nimport {AreaLineChartComponent} from './tiles/base/area-line-chart/area-line-chart.component';\nimport {MultiLineChartComponent} from './tiles/base/multi-line-chart/multi-line-chart.component';\nimport {ComplianceChartComponent} from './tiles/metrics/compliance-chart/compliance-chart.component';\nimport {NpsComponent} from './tiles/metrics/nps/nps.component';\nimport {UtilizationTpdComponent} from './tiles/metrics/utilization-tpd/utilization-tpd.component';\nimport {PlaceholderComponent} from './tiles/placeholder/placeholder.component';\nimport {DetailAccountFilterComponent} from './filter_selection/details/detail-account-filter/detail-account-filter.component';\nimport {DetailAssayFilterComponent} from './filter_selection/details/detail-assay-filter/detail-assay-filter.component';\nimport {DetailCapitalServiceAssaySwitchesFilterComponent} from './filter_selection/details/detail-capital-service-assay-switches-filter/detail-capital-service-assay-switches-filter.component';\nimport {DetailCategorySwitchesFilterComponent} from './filter_selection/details/detail-category-switches-filter/detail-category-switches-filter.component';\nimport {DetailCustomerFilterComponent} from './filter_selection/details/detail-customer-filter/detail-customer-filter.component';\nimport {DetailDiseaseStateFilterComponent} from './filter_selection/details/detail-disease-state-filter/detail-disease-state-filter.component';\nimport {DetailProductLineFilterComponent} from './filter_selection/details/detail-product-line-filter/detail-product-line-filter.component';\nimport {BrPlaceholderComponent} from './business_review/snapshots/br-placeholder/br-placeholder.component';\nimport {BrStackedBarLineChartComponent} from './business_review/snapshots/br-stacked-bar-line-chart/br-stacked-bar-line-chart.component';\nimport { BrMultiLineChartComponent } from './business_review/snapshots/br-multi-line-chart/br-multi-line-chart.component';\nimport { BrMultiBarChartComponent } from './business_review/snapshots/br-multi-bar-chart/br-multi-bar-chart.component'\nimport { BrLineChartComponent } from './business_review/snapshots/br-line-chart/br-line-chart.component';\nimport { BrPieChartComponent } from './business_review/snapshots/br-pie-chart/br-pie-chart.component';\nimport { BrStackedBarChartByProductComponent } from './business_review/snapshots/br-stacked-bar-chart-by-product/br-stacked-bar-chart-by-product.component';\nimport { BrTextIndicatorComponent } from './business_review/snapshots/br-text-indicator/br-text-indicator.component';\nimport { BrTopItemsComponent } from './business_review/snapshots/br-top-items/br-top-items.component';\nimport { BrExamplePieChartComponent } from './business_review/snapshots/br-example-pie-chart/br-example-pie-chart.component';\nimport { ApiTestComponent } from './business_review/snapshots/api-test/api-test.component';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent implements OnInit, OnDestroy {\n title = 'oneview-spa';\n navbar;\n isIframe = false;\n loggedIn = false;\n loginSuccessSubscription;\n loginFailureSubscription;\n acquireTokenFailureSubscription;\n acquireTokenSuccessSubscription;\n subscription;\n isAuthenticating = true;\n isAuthorized = true;\n // this.isAuthorized = this.authService.isAuthorizedCheck();\n // console.log('isauth', this.isAuthorized);\n\n readonly VAPID_PUBLIC_KEY = \"BNCy-6pMOFBprNvbFya5TCXTR4-RuTDjq1EA8c4GknLb848K19abxzmVLEzYXXKNWsGkEkS0vMWnkqI9K8fylic\";\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private personaOptionsService: PersonaOptionsService,\n private preferenceApiConnectorService: PreferenceApiConnectorService,\n private detailChoicesService: DetailChoicesService,\n private authService: AuthenticationService,\n protected filterChoices: FilterChoicesService,\n private swPush: SwPush,\n private pushNotificationService: PushNotificationService,\n private broadcastService: BroadcastService,\n private http: HttpClient,\n private msalAuthService: MsalService,\n private refreshHandlerService: RefreshHandlerService,\n private selectedTabService: SelectedTabService\n ) {}\n\n ngOnInit(): void {\n\n //localStorage.clear();\n ComponentLookupRegistry.set('StackedBarLineChartComponent', StackedBarLineChartComponent);\n ComponentLookupRegistry.set('TextIndicatorsComponent', TextIndicatorsComponent);\n ComponentLookupRegistry.set('TopStatsListComponent', TopStatsListComponent);\n ComponentLookupRegistry.set('VerticalSplitTextIndicatorsComponent', VerticalSplitTextIndicatorsComponent);\n ComponentLookupRegistry.set('StackedBarChartByProductComponent', StackedBarChartByProductComponent);\n ComponentLookupRegistry.set('ShapeIndicatorsComponent', ShapeIndicatorsComponent);\n ComponentLookupRegistry.set('PieChartComponent', PieChartComponent);\n ComponentLookupRegistry.set('AreaLineChartComponent', AreaLineChartComponent);\n ComponentLookupRegistry.set('MultiLineChartComponent', MultiLineChartComponent);\n ComponentLookupRegistry.set('ComplianceChartComponent', ComplianceChartComponent);\n ComponentLookupRegistry.set('NpsComponent', NpsComponent);\n ComponentLookupRegistry.set('UtilizationTpdComponent', UtilizationTpdComponent);\n ComponentLookupRegistry.set('PlaceholderComponent', PlaceholderComponent);\n ComponentLookupRegistry.set('DetailAccountFilterComponent', DetailAccountFilterComponent);\n ComponentLookupRegistry.set('DetailAssayFilterComponent', DetailAssayFilterComponent);\n ComponentLookupRegistry.set('DetailCapitalServiceAssaySwitchesFilterComponent', DetailCapitalServiceAssaySwitchesFilterComponent);\n ComponentLookupRegistry.set('DetailCategorySwitchesFilterComponent', DetailCategorySwitchesFilterComponent);\n ComponentLookupRegistry.set('DetailCustomerFilterComponent', DetailCustomerFilterComponent);\n ComponentLookupRegistry.set('DetailDiseaseStateFilterComponent', DetailDiseaseStateFilterComponent);\n ComponentLookupRegistry.set('DetailProductLineFilterComponent', DetailProductLineFilterComponent);\n ComponentLookupRegistry.set('BrPlaceholderComponent', BrPlaceholderComponent);\n ComponentLookupRegistry.set('BrStackedBarLineChartComponent', BrStackedBarLineChartComponent);\n ComponentLookupRegistry.set('BrMultiLineChartComponent', BrMultiLineChartComponent);\n ComponentLookupRegistry.set('BrMultiBarChartComponent', BrMultiBarChartComponent);\n ComponentLookupRegistry.set('BrLineChartComponent', BrLineChartComponent);\n ComponentLookupRegistry.set('BrPieChartComponent', BrPieChartComponent);\n ComponentLookupRegistry.set('BrStackedBarChartByProductComponent', BrStackedBarChartByProductComponent);\n ComponentLookupRegistry.set('BrTextIndicatorComponent', BrTextIndicatorComponent);\n ComponentLookupRegistry.set('BrTopItemsComponent', BrTopItemsComponent);\n ComponentLookupRegistry.set('BrExamplePieChartComponent', BrExamplePieChartComponent);\n ComponentLookupRegistry.set('ApiTestComponent', ApiTestComponent);\n // this.isIframe = window !== window.parent && !window.opener;\n\n // this.checkAccount();\n\n // this.broadcastService.subscribe('msal:loginSuccess', payload => {\n // console.log('loginSuccess', payload);\n // this.checkAccount();\n // });\n // this.loginSuccessSubscription = this.broadcastService.subscribe('msal:loginSuccess', payload => {\n // console.log('loginSuccess', payload);\n // });\n // this.loginFailureSubscription = this.broadcastService.subscribe('msal:loginFailure', payload => {\n // console.log('loginFailure', payload);\n // });\n\n // this.msalAuthService.handleRedirectCallback((authError, response) => {\n // if (authError) {\n // console.error('Redirect Error: ', authError.errorMessage);\n // return;\n // }\n //\n // console.log('Redirect Success: ', response.accessToken);\n // });\n\n // this.msalAuthService.setLogger(new Logger((logLevel, message, piiEnabled) => {\n // console.log('MSAL Logging: ', message);\n // }, {\n // correlationId: CryptoUtils.createNewGuid(),\n // piiLoggingEnabled: false\n // }));\n // this.broadcastService.subscribe(\"msal:ssoSuccess\", payload => {\n // console.log('tokenSuccess', payload);\n // });\n this.acquireTokenSuccessSubscription = this.broadcastService.subscribe('msal:acquireTokenSuccess', payload => {\n if (!this.authService.isAuth()) {\n const formData = new HttpParams({\n fromObject: {\n id_token: payload.idToken.rawIdToken,\n }\n });\n const headers = new HttpHeaders()\n .set('Content-Type', 'application/x-www-form-urlencoded');\n console.log('auth url', environment.proxyServerUrl + '/sso.php', formData);\n this.subscription = this.http.post(environment.proxyServerUrl + '/sso.php', formData, {\n headers: headers,\n responseType: 'text',\n withCredentials: true,\n observe: 'response'\n }).subscribe({\n next: (response) => {\n console.log('Auth: Success!');\n this.isAuthenticating = false;\n const authSubscription = this.authService.pingAuth();\n authSubscription.subscribe(\n response => {\n this.personaService.initialLoad();\n this.authService.onAuth(() => { // this must happen after persona service initialLoad\n this.preferenceApiConnectorService.loadPreferences();\n this.personaService.setServiceVsAmbState(true);\n this.selectedTabService.triggerCallbacks();\n\n // personaOptionsService is intended to pre load persona menus\n this.personaOptionsService.initialLoad();\n\n // kick off all request for dashboard tiles\n this.refreshHandlerService.triggerCallbacks([]);\n }, 'appComponent');\n }\n );\n },\n error: error => console.error('Auth: there was an error!', error)\n });\n }\n });\n\n this.acquireTokenFailureSubscription = this.broadcastService.subscribe('msal:acquireTokenFailure', payload => {\n console.log('acquireTokenFailure', payload);\n const userRequest: AuthenticationParameters = {\n scopes: ['openid']\n };\n this.msalAuthService.acquireTokenRedirect(userRequest);\n // https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-spa-acquire-token?tabs=javascript\n // https://npm.runkit.com/msal-angular-garbledtech\n // https://azuread.github.io/microsoft-authentication-library-for-js/ref/msal-angular/classes/_msal_service_.msalservice.html\n });\n\n this.navbarBuilderService.getNavbarChoiceSubject().subscribe(\n (navbarChoice) => {\n setTimeout(() => {\n this.navbar = navbarChoice;\n });\n }\n );\n this.filterChoices.setFilter('customerToggle', false);\n this.filterChoices.setFilter('flagshipToggle', false);\n this.filterChoices.setFilter('instrumentToggle', false);\n this.filterChoices.setFilter('trackToggle', false);\n\n this.detailChoicesService.setFilter('detailCustomerIdFilter', 'all');\n this.detailChoicesService.setFilter('detailProductLineFilter', 'all');\n this.detailChoicesService.setFilter('detailAccountFilter', 'all');\n this.detailChoicesService.setFilter('detailAssayFilter', '');\n this.detailChoicesService.setFilter('detailDiseaseStateFilter', '');\n this.detailChoicesService.setFilter('detailIsCapitalFilter', 'true');\n this.detailChoicesService.setFilter('detailIsServiceFilter', 'true');\n this.detailChoicesService.setFilter('detailIsReagentFilter', 'true');\n this.detailChoicesService.setFilter('detailIsFieldServiceContractFilter', 'true');\n this.detailChoicesService.setFilter('detailIsOtherFilter', 'true');\n }\n // https://autologon.microsoftazuread-sso.com/abbott.com/winauth/ssoprobe?client-request-id=ab46d319-3e69-4a7a-af86-ddfc4a1901f9&_=1602685842900\n ngOnDestroy() {\n this.broadcastService.getMSALSubject().next(1);\n if (this.loginSuccessSubscription) {\n this.loginSuccessSubscription.unsubscribe();\n }\n if (this.loginFailureSubscription) {\n this.loginFailureSubscription.unsubscribe();\n }\n if (this.acquireTokenFailureSubscription) {\n this.acquireTokenFailureSubscription.unsubscribe();\n }\n if (this.acquireTokenSuccessSubscription) {\n this.acquireTokenSuccessSubscription.unsubscribe();\n }\n }\n\n checkAccount() {\n this.loggedIn = !!this.msalAuthService.getAccount();\n }\n\n login() {\n const isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1;\n\n if (isIE) {\n this.msalAuthService.loginRedirect();\n } else {\n this.msalAuthService.loginPopup();\n }\n }\n\n logout() {\n this.msalAuthService.logout();\n }\n\n ngAfterViewInit() {\n //this.subscribeToNotifications();\n }\n\n subscribeToNotifications() {\n this.swPush.requestSubscription({\n serverPublicKey: this.VAPID_PUBLIC_KEY\n })\n .then(sub => this.pushNotificationService.addPushSubscriber(sub).subscribe())\n .catch(err => console.error(\"Could not subscribe to push notifications!!\", err));\n }\n}\n","import {TileReference} from '../dashboards/tile-reference';\r\n\r\nexport const SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT: TileReference[] = [\r\n {\r\n apiSource: '/metrics/hsi',\r\n componentName: 'StackedBarLineChartComponent',\r\n detailLink: '/hsi',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Highly Serviced Instruments'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/hotsheets',\r\n componentName: 'TextIndicatorsComponent',\r\n detailLink: '/hotsheets',\r\n preferences: {\r\n title: 'NPS Open Hotsheets'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/opencalls',\r\n componentName: 'ShapeIndicatorsComponent',\r\n preferences: {\r\n shape: 'circle',\r\n orderByLabel: ['Complaint', 'Service Demand', 'PM', 'TSB'],\r\n title: 'Assigned Open Calls'\r\n },\r\n detailLink: '/opencalls'\r\n },\r\n {\r\n apiSource: '/metrics/cpyr',\r\n componentName: 'MultiLineChartComponent',\r\n detailLink: '/cpyr',\r\n preferences: {\r\n excludeLines: [3],\r\n periodsToShow: 4,\r\n title: 'CPY-R'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/servicecost',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n valueAxis1Label: '#K',\r\n axis2Source: 'yleftmax',\r\n axis2VisibleLabels: false,\r\n periodsToShow: 4,\r\n title: 'Service Cost'\r\n },\r\n detailLink: '/servicecost'\r\n },\r\n {\r\n apiSource: '/metrics/alconnected', // this is actually abbottlink installed but uses alconnected\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: true,\r\n goalPercentageSlideLabel: 'Installed',\r\n title: 'AbbottLink - Installed'\r\n },\r\n detailLink: '/alconnected'\r\n },\r\n {\r\n apiSource: '/metrics/alconnectivity',\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: true,\r\n goalPercentageSlideLabel: 'Connected (%)',\r\n title: 'AbbottLink - Connectivity'\r\n },\r\n detailLink: '/alconnectivity'\r\n },\r\n {\r\n apiSource: '/metrics/hci',\r\n componentName: 'StackedBarLineChartComponent',\r\n detailLink: '/hci',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'High Cost Instruments'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/sdfr',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n periodsToShow: 4,\r\n excludeLines: [3],\r\n tickCount: 5,\r\n title: 'Same Day Fix Rate'\r\n },\r\n detailLink: '/sdfr'\r\n },\r\n {\r\n apiSource: '/metrics/ftfr',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n periodsToShow: 4,\r\n excludeLines: [2, 3],\r\n tickCount: 5,\r\n title: 'First Time Fix Rate'\r\n },\r\n detailLink: '/ftfr'\r\n },\r\n {\r\n apiSource: '/metrics/uptime',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Uptime'\r\n },\r\n detailLink: '/uptime'\r\n },\r\n {\r\n apiSource: '/metrics/assay',\r\n componentName: 'TopStatsListComponent',\r\n detailLink: '/assay',\r\n preferences: {\r\n title: 'Top Assays'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/cpyp',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n tickCount: 3,\r\n periodsToShow: 4,\r\n title: 'CPY-P',\r\n colorsByIndex: [0, 2]\r\n },\r\n detailLink: '/cpyp'\r\n },\r\n {\r\n apiSource: '/metrics/ticketrending',\r\n componentName: 'StackedBarLineChartComponent',\r\n detailLink: '/ticketrending',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Ticket Trending'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/trt',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n periodsToShow: 4,\r\n tickCount: 5,\r\n title: 'Total Resolution Time'\r\n },\r\n detailLink: '/trt'\r\n },\r\n {\r\n apiSource: '/metrics/tsb',\r\n componentName: 'ShapeIndicatorsComponent',\r\n preferences: {\r\n shape: 'diamond',\r\n title: 'TSB\\'s'\r\n },\r\n detailLink: '/tsb'\r\n },\r\n {\r\n apiSource: '/metrics/pm',\r\n componentName: 'ShapeIndicatorsComponent',\r\n preferences: {\r\n shape: 'square',\r\n orderByLabel: ['0-1 Month', '1-2 Months', '2-3 Months', '>3 Months'],\r\n title: 'PM\\'s'\r\n },\r\n detailLink: '/pm'\r\n },\r\n {\r\n apiSource: '/metrics/nps',\r\n componentName: 'VerticalSplitTextIndicatorsComponent', // Customer NPS\r\n apiMappingLinks: ['/metrics/nps'],\r\n preferences: {\r\n detailLinks: ['/customerNps', '/customerNps'],\r\n useDataArray: true,\r\n title: 'Customer NPS'\r\n },\r\n // detailLink: '/customerNps'\r\n },\r\n {\r\n apiSource: '/metrics/servicecosthours',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n tickCount: 7,\r\n periodsToShow: 4,\r\n title: 'Service Hours'\r\n },\r\n detailLink: '/servicecosthours'\r\n },\r\n {\r\n apiSource: '/metrics/utilization',\r\n componentName: 'VerticalSplitTextIndicatorsComponent',\r\n apiMappingLinks: ['/metrics/utilization'],\r\n preferences: {\r\n detailLinks: ['/utilization', '/utilization'],\r\n useDataArray: true,\r\n title: 'Low Utilization',\r\n preSpacing: 2\r\n }\r\n // , detailLink: '/utilization'\r\n },\r\n {\r\n apiSource: '/metrics/servicecontracts', // Service Contracts (excluding RAP)\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n renderForServiceContracts: true,\r\n title: 'Service Contracts'\r\n },\r\n detailLink: '/servicecontracts'\r\n },\r\n {\r\n apiSource: '/metrics/CRLSummary',\r\n componentName: 'TextIndicatorsComponent', // Current Instrument Quantity\r\n preferences: {\r\n calculateTotalFromData: true,\r\n title: 'Current Instrument Quantity'\r\n },\r\n detailLink: '/CRLSummary'\r\n },\r\n {\r\n apiSource: '/metrics/proactive',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n excludeLines: [3],\r\n periodsToShow: 4,\r\n tickCount: 5,\r\n title: 'Proactive Ticket Rate %'\r\n },\r\n detailLink: '/proactive'\r\n },\r\n {\r\n apiSource: '/metrics/orders/thumbnail', // Customer Orders\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n title: 'Customer Orders'\r\n },\r\n detailLink: '/orders'\r\n },\r\n {\r\n apiSource: '/metrics/alwaysonuptime',\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n title: 'ALWAYS ON Uptime'\r\n },\r\n detailLink: '/alwaysonuptime'\r\n },\r\n {\r\n apiSource: '/metrics/fsrutilization',\r\n componentName: 'UtilizationTpdComponent',\r\n apiMappingLinks: ['/metrics/fsrutilization'],\r\n preferences: {\r\n detailLinks: ['/util_workload', '/tickets_per_day'],\r\n useDataArray: true,\r\n showTitle: false,\r\n title: 'Utilization Workload % / Tickets Per Day Per Person'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/servicegrossmargin_customerSGM',\r\n componentName: 'TextIndicatorsComponent',\r\n detailLink: '/servicegrossmargin_customerSGM',\r\n preferences: {\r\n lowerTitleColor: '#000000',\r\n title: 'Service Gross Margin'\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/customerswithoutservicecontracts',\r\n componentName: 'StackedBarLineChartComponent',\r\n detailLink: '/customerswithoutservicecontracts',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Predictive Alerts w/o Service Contracts'\r\n }\r\n }/**/\r\n // ,\r\n // {\r\n // apiSource: 'null',\r\n // componentName: 'PlaceholderComponent', // TextIndicatorsComponent\r\n // preferences: {\r\n // title: 'Service Gross Margin (SGM %)'\r\n // }\r\n // },\r\n];\r\n\r\n// Highly Serviced Instruments\r\n// NPS Open Hotsheets\r\n// Assigned Open Calls\r\n// CPY-R\r\n// Service Cost\r\n// AbbottLink - Installed\r\n//\r\n// AbbottLink - Connectivity\r\n// High Cost Instruments\r\n//\r\n// Same Day Fix Rate\r\n// First Time Fix Rate\r\n// Uptime\r\n// Top Assays\r\n//\r\n// CPY-P\r\n// Ticket Trending\r\n// Total Resolution Time\r\n// TSB's\r\n//\r\n// PM's\r\n// Customer NPS\r\n//\r\n// Service Hours\r\n// Low Utilization\r\n// Service Contracts (Including RAP)\r\n// Current Instrument Quantity\r\n// Proactive Ticket Rate %\r\n// Customer Orders\r\n//\r\n// ALWAYS ON Uptime (12 Months)\r\n// Utilization Workload % (3MA) / Tickets Per Day Per Person (3MA)\r\n// Service Gross Margin (SGM %)\r\n// Customers SGM % (12MA)\r\n// Proactive Alerts w/o Service Contracts\r\n","import {\n AfterViewInit, ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef, Input,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {ComponentLookupRegistry} from '../../decorators/component-lookup';\nimport {TileReference} from '../tile-reference';\n\n@Component({\n selector: 'app-tile-insert',\n templateUrl: './tile-insert.component.html',\n styleUrls: ['./tile-insert.component.scss']\n})\nexport class TileInsertComponent implements AfterViewInit, OnDestroy {\n dynamicComponentRef: ComponentRef;\n\n @Input() tileReference: TileReference;\n\n @ViewChild('dynamic', {read: ViewContainerRef}) viewContainerRef: ViewContainerRef;\n\n constructor(private factoryResolver: ComponentFactoryResolver, private cd: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadDynamicComponent();\n });\n this.cd.detectChanges();\n }\n\n loadDynamicComponent() {\n const componentType: Type = ComponentLookupRegistry.get(this.tileReference.componentName);\n if (componentType !== undefined) {\n const componentFactory = this.factoryResolver.resolveComponentFactory(componentType);\n\n this.viewContainerRef.clear();\n this.dynamicComponentRef = this.viewContainerRef.createComponent(componentFactory);\n // add tileReference to component data inputs\n (this.dynamicComponentRef.instance).tileReference = this.tileReference;\n }\n }\n\n ngOnDestroy() {\n if (this.dynamicComponentRef) {\n this.dynamicComponentRef.destroy();\n }\n }\n}\n","","
\n
\n
\n
\n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport {TileReference} from '../tile-reference';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {Personas} from '../../configuration/personas';\nimport {SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT} from '../../configuration/service-metric-tile-reference-default-arrangement';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DashboardOptions} from '../../configuration/nav-filter-selection';\nimport {PersonaService} from '../../api/persona.service';\nimport {ChartArea} from '@progress/kendo-angular-charts';\nimport {SelectedTabService} from '../selected-tab.service';\nimport {PreferenceSelectionService} from '../../preferences/preference-selection.service';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-dashboard',\n templateUrl: './dashboard.component.html',\n styleUrls: ['./dashboard.component.scss']\n})\nexport class DashboardComponent implements OnInit {\n arrangement: TileReference[] = SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT;\n requestHandler;\n prefRequestHandler;\n managerApiData;\n managerDataLoaded = false;\n preferencesLoaded = false;\n\n constructor(\n private authService: AuthenticationService,\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService,\n private apiService: ApiService,\n private preferenceSelectionService: PreferenceSelectionService,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n this.selectedTabService.selectTab(DashboardOptions.dashboard); // this must proceed managerId hack\n // this.arrangement = [this.arrangement[0]];\n // for testing specific metrics\n // Stacked Bar Line Charts\n // this.arrangement = [this.arrangement[0], this.arrangement[4], this.arrangement[7], this.arrangement[13], this.arrangement[27]];\n // Multi Line Charts\n // this.arrangement = [this.arrangement[3], this.arrangement[8], this.arrangement[9], this.arrangement[10], this.arrangement[12], this.arrangement[14], this.arrangement[18], this.arrangement[22]];\n // Text Indicators Chart\n // this.arrangement = [this.arrangement[1], this.arrangement[21], this.arrangement[26]];\n // Shape Indicators\n // this.arrangement = [this.arrangement[2], this.arrangement[15], this.arrangement[16]];\n // Vertical Split Text Charts\n // this.arrangement = [this.arrangement[17], this.arrangement[19], this.arrangement[25]];\n // Pie Charts\n // this.arrangement = [this.arrangement[5], this.arrangement[6], this.arrangement[20], this.arrangement[23], this.arrangement[24]];\n // Top Assays\n // this.arrangement = [this.arrangement[11]];\n\n /**\n * HACK TO FIX ISSUE WHERE MANAGER UPI IS CONFIGURED FOR MYCRL ROUTES AND AOH USES 511\n */\n this.authService.onAuth(() => {\n this.updateManagerIdHackLoadManagerListAndPreferences();\n });\n this.updateManagerIdHackLoadManagerListAndPreferences();\n // HACK END\n\n this.personaService.setServiceVsAmbState(true);\n this.personaService.refreshDetailChoices();\n this.navbarBuilderService.setNavbarChoice('dashboard');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: true,\n personaSelector: true,\n dashboardSelector: true,\n selectedDashboard: DashboardOptions.dashboard,\n search: true,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: false,\n navigateBackwardsLabel: 'Back',\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [Personas.TssAmbassador, Personas.Manager, Personas.GeoLocation]\n });\n }\n\n updateManagerIdHackLoadManagerListAndPreferences() {\n if (!this.preferenceSelectionService.arePreferencesLoaded() && this.authService.isAuth()) {\n this.prefRequestHandler = this.apiService.get('/preference');\n this.prefRequestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n this.preferencesLoaded = true;\n this.updateManagerIdHackFixPersona();\n }\n });\n } else {\n this.preferencesLoaded = true;\n }\n if (this.authService.isAuth()) {\n this.requestHandler = this.apiService.get('cua/manager_list');\n this.requestHandler.sendRequest('cua/manager_list', null, false);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.managerApiData = JSON.parse(response.body);\n this.managerDataLoaded = true;\n this.updateManagerIdHackFixPersona();\n }\n });\n }\n }\n\n updateManagerIdHackFixPersona() {\n let level1PersonaChoice = this.personaService.getLevel1Choice();\n if (\n this.managerDataLoaded\n && this.preferencesLoaded\n && level1PersonaChoice.type === PersonaTypes.CuaManager\n && this.selectedTabService.getLastSelectedTabInfo() !== DashboardOptions.controltower // do not call unless ct dashboard page active\n ) {\n level1PersonaChoice = this.personaService.getLevel1Choice();\n for (const user of this.managerApiData) {\n if (user.mgr511 === level1PersonaChoice.value) {\n this.personaService.setPersonaOption(\n PersonaTypes.Manager,\n user.mgrUpi,\n user.firstName + ' ' + user.lastName\n );\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport {RowParsers} from '../configuration/details/row-parsers';\nimport {RowParserInterface} from './row-parser-interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class RowParserService {\n protected rowParsers = RowParsers;\n protected registry = {};\n\n constructor() { }\n\n public get(key): RowParserInterface {\n if (!(key in this.registry)) {\n this.registry[key] = new this.rowParsers[key]();\n }\n\n return this.registry[key];\n }\n}\n","import {StackedBarChartByProductComponent} from '../../tiles/base/stacked-bar-chart-by-product/stacked-bar-chart-by-product.component';\r\nimport {DetailAssayFilterComponent} from '../../filter_selection/details/detail-assay-filter/detail-assay-filter.component';\r\n\r\nexport const Style1Pages = {\r\n '/hsi': {\r\n metricId: 1,\r\n serviceVsAmb: true,\r\n pageTitle: 'Highly Serviced Instruments',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/hsi',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/hsi_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'hsi.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'nonHsi',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Non-HSI',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'hsi',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HSI',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'totals',\r\n parser: 'stackTotals',\r\n inject: ['hsi', 'nonHsi'],\r\n attributes: {\r\n label: 'Total',\r\n }\r\n },\r\n {\r\n key: 'percents',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HSI %',\r\n stackGoalsIndex: 0\r\n }\r\n },\r\n {\r\n key: 'percentGoals',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HSI % Goal',\r\n stackGoalsIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['nonHsi', 'hsi', 'totals', 'percents', 'percentGoals'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[1],\r\n apiData.stackcolors[0],\r\n '',\r\n apiData.stackgoalcolors[0],\r\n apiData.stackgoalcolors[1]\r\n ];\r\n }\r\n }\r\n },\r\n '/cpyr': {\r\n metricId: 4,\r\n serviceVsAmb: true,\r\n pageTitle: 'CPY-R',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/cpyr',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n excludeLines: [3]\r\n }\r\n },\r\n apiRequestHandler: '/metrics/cpyr_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'cpyr.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'cpyr-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CPY-R 12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'cpyr-3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CPY-R 3MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'cpyr-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CPY-R Goal',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'census',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Census',\r\n stackIndex: 3\r\n }\r\n },\r\n ],\r\n dataRows: ['cpyr-12ma', 'cpyr-3ma', 'cpyr-goal', 'census'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n ''\r\n ];\r\n }\r\n }\r\n },\r\n '/servicecost': {\r\n metricId: 5,\r\n serviceVsAmb: true,\r\n pageTitle: 'Service Cost',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/servicecost',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n valueAxis1Label: '#K',\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/servicecost_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'servicecost.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'labor',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Labor',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'parts',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Parts',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'labor_and_parts',\r\n parser: 'stackTotals',\r\n inject: ['labor', 'parts'],\r\n attributes: {\r\n label: 'Labor and Parts',\r\n }\r\n },\r\n {\r\n key: 'labor_and_parts_goal',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Labor and Parts Goal',\r\n stackGoalsIndex: 0\r\n }\r\n },\r\n {\r\n key: 'travel',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Travel',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'total_service_cost',\r\n parser: 'stackTotals',\r\n inject: ['labor_and_parts', 'travel'],\r\n attributes: {\r\n label: 'Total Service Cost',\r\n }\r\n }\r\n ],\r\n dataRows: ['labor', 'parts', 'labor_and_parts', 'labor_and_parts_goal', 'travel', 'total_service_cost'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[0],\r\n apiData.stackcolors[1],\r\n '',\r\n apiData.stackgoalcolors[0],\r\n apiData.stackcolors[2],\r\n ''\r\n ];\r\n }\r\n }\r\n },\r\n '/alconnected': {\r\n metricId: 6,\r\n serviceVsAmb: true,\r\n pageTitle: 'AbbottLink - Installed',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/alconnected', // this is actually abbottlink installed but uses alconnected\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: true,\r\n goalPercentageSlideLabel: 'Installed',\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/alconnected_0',\r\n table: {\r\n type: 'set-values',\r\n exportFileName: 'alconnected.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: [\r\n {\r\n ref: 'percentInstalled',\r\n description: '% Installed',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberInstalled',\r\n description: '# Installed',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentNotInstalled',\r\n description: '% Not Installed',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberNotInstalled',\r\n description: '# Not Installed',\r\n width: 80\r\n },\r\n {\r\n ref: 'goalPercent',\r\n description: 'Goal %',\r\n width: 80\r\n }\r\n ],\r\n dataValues: (apiData) => {\r\n return {\r\n percentInstalled: apiData.values[0].percentage,\r\n numberInstalled: apiData.values[0].count,\r\n percentNotInstalled: apiData.values[1].percentage,\r\n numberNotInstalled: apiData.values[1].count,\r\n goalPercent: apiData.values[0].goalpercentage\r\n };\r\n },\r\n valueColors: (apiData) => {\r\n return [\r\n apiData.values[0].color,\r\n '',\r\n apiData.values[1].color,\r\n '',\r\n '',\r\n ];\r\n }\r\n }\r\n },\r\n '/alconnectivity': {\r\n metricId: 7,\r\n serviceVsAmb: true,\r\n pageTitle: 'AbbottLink - Connectivity',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/alconnectivity/intermediate',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/alconnectivity/intermediate_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'alconnectivity.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'online_percentage',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Online Percentage',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'more_than_8_days',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '> 8 days',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: '4_7_days',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '4 - 7 days',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'goal_percent',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal %',\r\n stackGoalsIndex: 0\r\n }\r\n }\r\n ],\r\n dataRows: ['online_percentage', 'more_than_8_days', '4_7_days', 'goal_percent'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[0],\r\n apiData.stackcolors[1],\r\n apiData.stackcolors[2],\r\n apiData.stackgoalcolors[0],\r\n ];\r\n }\r\n }\r\n },\r\n '/hci': {\r\n metricId: 8,\r\n serviceVsAmb: true,\r\n pageTitle: 'High Cost Instruments',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/hci',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/hci_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'hsi.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'nonHci',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Non-HCI',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'hci',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HCI',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'totals',\r\n parser: 'stackTotals',\r\n inject: ['hci', 'nonHci'],\r\n attributes: {\r\n label: 'Total',\r\n }\r\n },\r\n {\r\n key: 'percents',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HCI Percentage',\r\n stackGoalsIndex: 0\r\n }\r\n },\r\n {\r\n key: 'percentGoals',\r\n parser: 'percentGoals',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'HCI % Goal',\r\n stackGoalsIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['nonHci', 'hci', 'totals', 'percents', 'percentGoals'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[1],\r\n apiData.stackcolors[0],\r\n '',\r\n apiData.stackcolors[0],\r\n apiData.stackcolors[1]\r\n ];\r\n }\r\n }\r\n },\r\n '/customerNps': {\r\n metricId: 18,\r\n serviceVsAmb: true,\r\n pageTitle: 'Customer NPS',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/nps/intermediate',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n yaxisleftlabel: 'NPS Score',\r\n min: -105\r\n }\r\n },\r\n apiRequestHandler: '/metrics/nps/intermediate_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'customer-nps.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'overallCustomer',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Overall Customer',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'fieldService',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Field Service',\r\n stackIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['overallCustomer', 'fieldService'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n ];\r\n }\r\n }\r\n },\r\n '/sdfr': {\r\n metricId: 9,\r\n serviceVsAmb: true,\r\n pageTitle: 'Same Day Fix Rate',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/sdfr',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/sdfr_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'sdfr.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'sdfr-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'SDFR 12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'sdfr-1ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'SDFR 1MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'sdfr-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'SDFR Goal',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'ticket_qty',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Ticket Qty',\r\n stackIndex: 3\r\n }\r\n },\r\n ],\r\n dataRows: ['sdfr-12ma', 'sdfr-1ma', 'sdfr-goal', 'ticket_qty'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n ''\r\n ];\r\n }\r\n }\r\n },\r\n '/ftfr': {\r\n metricId: 10,\r\n serviceVsAmb: true,\r\n pageTitle: 'First Time Fix Rate',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/ftfr',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n excludeLines: [2, 3]\r\n // rowColorOverrides: [null, null]// , '#6f42c1', '#dc3545']\r\n }\r\n },\r\n apiRequestHandler: '/metrics/ftfr_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'ftfr.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'ftfr-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'FTFR 12 MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'ftfr-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'ftf',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'First Time Fixes',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'nftf',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Non-First Time Fixes',\r\n stackIndex: 3\r\n }\r\n },\r\n ],\r\n dataRows: ['ftfr-12ma', 'ftfr-goal', 'ftf', 'nftf'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n '#6f42c1',\r\n '#dc3545'\r\n ];\r\n }\r\n }\r\n },\r\n '/uptime': {\r\n metricId: 11,\r\n serviceVsAmb: true,\r\n pageTitle: 'Uptime',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/uptime',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/uptime_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'uptime.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'uptime-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Uptime 12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'uptime-1ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Uptime 1MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'uptime-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Uptime Goal',\r\n stackIndex: 2\r\n }\r\n }\r\n ],\r\n dataRows: ['uptime-12ma', 'uptime-1ma', 'uptime-goal'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2]\r\n ];\r\n }\r\n }\r\n },\r\n '/cpyp': {\r\n metricId: 13,\r\n serviceVsAmb: true,\r\n pageTitle: 'CPY-P',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/cpyp',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n colorsByIndex: [0, 2]\r\n }\r\n },\r\n apiRequestHandler: '/metrics/cpyp_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'cpyp.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'cpyp-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CPY-P 12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'cpyp-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CPY-P Goal',\r\n stackIndex: 1\r\n }\r\n },\r\n ],\r\n dataRows: ['cpyp-12ma', 'cpyp-goal'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1]\r\n ];\r\n }\r\n }\r\n },\r\n '/ticketrending': {\r\n metricId: 14,\r\n serviceVsAmb: true,\r\n pageTitle: 'Ticket Trending',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/ticketrending',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/ticketrending_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'ticketrending.xlsx',\r\n level2DetailLink: 'details',\r\n colorRowDescriptions: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'complaintWFsv',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Complaint w/FSV',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'serviceWFsv',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Service w/FSV',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'proactive',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Proactive',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'fsrHwsPhoneFix',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'FSR/HWS Phone Fix',\r\n stackIndex: 3\r\n }\r\n },\r\n {\r\n key: 'cscPhoneFix',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'CSC Phone Fix',\r\n stackIndex: 4\r\n }\r\n },\r\n {\r\n key: 'pm',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'PM',\r\n stackIndex: 5\r\n }\r\n },\r\n {\r\n key: 'installIntegration',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Install/ Integration',\r\n stackIndex: 6\r\n }\r\n },\r\n {\r\n key: 'tsb',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'TSB',\r\n stackIndex: 7\r\n }\r\n },\r\n {\r\n key: 'inquiry',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Inquiry',\r\n stackIndex: 8\r\n }\r\n },\r\n {\r\n key: 'otherTicket',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Other Ticket',\r\n stackIndex: 9\r\n }\r\n }\r\n ],\r\n dataRows: [\r\n 'complaintWFsv', 'serviceWFsv', 'proactive',\r\n 'fsrHwsPhoneFix', 'cscPhoneFix', 'pm', 'installIntegration',\r\n 'tsb', 'inquiry', 'otherTicket'\r\n ], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[0],\r\n apiData.stackcolors[1],\r\n apiData.stackcolors[2],\r\n apiData.stackcolors[3],\r\n apiData.stackcolors[4],\r\n apiData.stackcolors[5],\r\n apiData.stackcolors[6],\r\n apiData.stackcolors[7],\r\n apiData.stackcolors[8],\r\n apiData.stackcolors[9]\r\n ];\r\n }\r\n }\r\n },\r\n '/trt': {\r\n metricId: 15,\r\n serviceVsAmb: true,\r\n pageTitle: 'Total Resolution Time',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/trt',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/trt_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'trt.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'trt-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'trt-3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '3MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'trt-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal',\r\n stackIndex: 2\r\n }\r\n }\r\n ],\r\n dataRows: ['trt-12ma', 'trt-3ma', 'trt-goal'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n ''\r\n ];\r\n }\r\n }\r\n },\r\n '/servicecosthours': {\r\n metricId: 19,\r\n serviceVsAmb: true,\r\n pageTitle: 'Service Hours',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/servicecosthours',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/servicecosthours_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'servicecosthours.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'total-service-hours',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Total Service Hours',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'labor-hours-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Labor Hours (12MA)',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: '12ma-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal (12 MA)',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'total-service-hours-3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Total Service Hours (3MA)',\r\n stackIndex: 3\r\n }\r\n },\r\n {\r\n key: 'labor-hours-3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Labor Hours (3 MA)',\r\n stackIndex: 4\r\n }\r\n },\r\n ],\r\n dataRows: ['total-service-hours', 'labor-hours-12ma', '12ma-goal', 'total-service-hours-3ma', 'labor-hours-3ma'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n apiData.linecolors[3],\r\n apiData.linecolors[4],\r\n ];\r\n }\r\n }\r\n },\r\n '/utilization': {\r\n metricId: 20,\r\n serviceVsAmb: true,\r\n pageTitle: 'Low Utilization',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n charts: [\r\n {\r\n apiSource: '/metrics/utilization/intermediate',\r\n componentName: 'StackedBarChartByProductComponent',\r\n preferences: {\r\n title: 'Lowest Range',\r\n useDataArray: true,\r\n showTitle: false,\r\n apiObjectKey: 0\r\n }\r\n },\r\n {\r\n apiSource: '/metrics/utilization/intermediate',\r\n componentName: 'StackedBarChartByProductComponent',\r\n preferences: {\r\n title: '2nd Lowest Range',\r\n useDataArray: true,\r\n showTitle: false,\r\n apiObjectKey: 1\r\n }\r\n }\r\n ],\r\n apiRequestHandler: '/metrics/utilization/intermediate_0',\r\n table: {\r\n type: 'custom',\r\n exportFileName: 'low_utilization.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: [\r\n {\r\n ref: 'instrument',\r\n description: 'Instrument',\r\n width: 80\r\n },\r\n {\r\n ref: 'lowRangeNumberOfTests',\r\n description: 'Low Range # Of Tests',\r\n customStyle: { 'text-align': 'right' },\r\n width: 80\r\n },\r\n {\r\n ref: 'lowRangeInstrumentsCount',\r\n description: 'Low Range Instrument Count',\r\n customStyle: { 'text-align': 'right' },\r\n width: 80\r\n },\r\n {\r\n ref: 'secondLowestRange',\r\n description: '2nd Lowest Range',\r\n customStyle: { 'text-align': 'right' },\r\n width: 80\r\n },\r\n {\r\n ref: 'secondLowestInstrumentCount',\r\n description: '2nd Lowest Instrument Count',\r\n customStyle: { 'text-align': 'right' },\r\n width: 80\r\n }\r\n ]\r\n }\r\n },\r\n '/proactive': {\r\n metricId: 24,\r\n serviceVsAmb: true,\r\n pageTitle: 'Proactive Ticket Rate %',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/proactive',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/proactive_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'proactive.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'proactive-12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Proactive % 12MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'proactive-1ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Proactive % 1MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: 'proactive-goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Proactive % Goal',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'overall-ticket-qty',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Overall Ticket Qty',\r\n stackIndex: 3\r\n }\r\n },\r\n ],\r\n dataRows: ['proactive-12ma', 'proactive-1ma', 'proactive-goal', 'overall-ticket-qty'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n apiData.linecolors[3]\r\n ];\r\n }\r\n }\r\n },\r\n '/orders': {\r\n metricId: 25,\r\n serviceVsAmb: true,\r\n pageTitle: 'Customer Orders',\r\n filters: ['DetailCustomerFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/orders/thumbnail',\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/orders/thumbnail_0',\r\n table: {\r\n type: 'set-values',\r\n exportFileName: 'customerorders.xlsx',\r\n level2DetailLink: 'intermediate',\r\n dataCols: [\r\n {\r\n ref: 'percentHold',\r\n description: '% Hold',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberHold',\r\n description: '# Hold',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentOpen',\r\n description: '% Open',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberOpen',\r\n description: '# Open',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentClosed',\r\n description: '% Closed',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberClosed',\r\n description: '# Closed',\r\n width: 80\r\n }\r\n ],\r\n dataValues: (apiData) => {\r\n return {\r\n percentHold: apiData.values[0].percentage,\r\n numberHold: apiData.values[0].quantity,\r\n percentOpen: apiData.values[1].percentage,\r\n numberOpen: apiData.values[1].quantity,\r\n percentClosed: apiData.values[2].percentage,\r\n numberClosed: apiData.values[2].quantity,\r\n };\r\n },\r\n valueColors: (apiData) => {\r\n return [\r\n apiData.values[0].color,\r\n '',\r\n apiData.values[1].color,\r\n '',\r\n apiData.values[2].color,\r\n '',\r\n ];\r\n }\r\n }\r\n },\r\n '/alwaysonuptime': {\r\n metricId: 29,\r\n serviceVsAmb: true,\r\n pageTitle: 'ALWAYS ON Uptime Summary',\r\n filters: ['DetailCustomerFilterComponent', 'DetailProductLineFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/alwaysonuptime',\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/alwaysonuptime_0',\r\n table: {\r\n type: 'set-values',\r\n exportFileName: 'alwaysonuptime.xlsx',\r\n level2DetailLink: 'details',\r\n dataCols: [\r\n {\r\n ref: 'percentGuaranteeAchieved',\r\n description: '% Guarantee Achieved',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberGuaranteeAchieved',\r\n description: '# Guarantee Achieved',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentGuaranteeNotAchieved',\r\n description: '% Guarantee Not Achieved',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberGuaranteeNotAchieved',\r\n description: '# Guarantee Not Achieved',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentNotEligible',\r\n description: '% Not Eligible',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberNotEligible',\r\n description: '# Not Eligible',\r\n width: 80\r\n }\r\n ],\r\n dataValues: (apiData) => {\r\n return {\r\n percentGuaranteeAchieved: apiData.values[0].percentage,\r\n numberGuaranteeAchieved: apiData.values[0].count,\r\n percentGuaranteeNotAchieved: apiData.values[1].percentage,\r\n numberGuaranteeNotAchieved: apiData.values[1].count,\r\n percentNotEligible: apiData.values[2].percentage,\r\n numberNotEligible: apiData.values[2].count,\r\n };\r\n },\r\n valueColors: (apiData) => {\r\n return [\r\n apiData.values[0].color,\r\n '',\r\n apiData.values[1].color,\r\n '',\r\n apiData.values[2].color,\r\n '',\r\n ];\r\n }\r\n }\r\n },\r\n '/util_workload': {\r\n metricId: 30,\r\n serviceVsAmb: true,\r\n pageTitle: 'Utilization',\r\n filters: [],\r\n tileReference: {\r\n apiSource: '/metrics/util_workload',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n excludeLines: [4, 5]\r\n }\r\n },\r\n apiRequestHandler: '/metrics/util_workload_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'utilization.xlsx',\r\n level2DetailLink: 'details',\r\n colorRowDescriptions: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: '1ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '1MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: '3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '3MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: '12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '12MA',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'GOAL',\r\n stackIndex: 3\r\n }\r\n },\r\n {\r\n key: 'travel_labor_hrs',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Travel/ Labor Hrs',\r\n stackIndex: 4\r\n }\r\n },\r\n {\r\n key: 'availible_hrs',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Avail Hours',\r\n stackIndex: 5\r\n }\r\n }\r\n ],\r\n dataRows: ['1ma', '3ma', '12ma', 'goal', 'travel_labor_hrs', 'availible_hrs'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n apiData.linecolors[3],\r\n apiData.linecolors[4],\r\n apiData.linecolors[5],\r\n ];\r\n }\r\n }\r\n },\r\n '/tickets_per_day': {\r\n metricId: 32,\r\n serviceVsAmb: true,\r\n pageTitle: 'Tickets Per Day',\r\n filters: [],\r\n tileReference: {\r\n apiSource: '/metrics/tickets_per_day',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/tickets_per_day_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'tickets_per_day.xlsx',\r\n level2DetailLink: 'details',\r\n colorRowDescriptions: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: '1ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '1MA',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: '3ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '3MA',\r\n stackIndex: 1\r\n }\r\n },\r\n {\r\n key: '12ma',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: '12MA',\r\n stackIndex: 2\r\n }\r\n },\r\n {\r\n key: 'goal',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'GOAL',\r\n stackIndex: 3\r\n }\r\n }\r\n ],\r\n dataRows: ['1ma', '3ma', '12ma', 'goal'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n apiData.linecolors[2],\r\n apiData.linecolors[3],\r\n ];\r\n }\r\n }\r\n },\r\n '/servicegrossmargin_customerSGM': {\r\n metricId: 31,\r\n serviceVsAmb: true,\r\n pageTitle: 'Service Gross Margin (SGM)',\r\n subTitle: '(Country YTD, Customer 12MA)',\r\n filters: ['DetailCustomerFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/servicegrossmargin_customerSGM_details',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/servicegrossmargin_customerSGM_details_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'servicegrossmargin_customerSGM.xlsx',\r\n level2DetailLink: 'details',\r\n colorRowDescriptions: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'sgmPercent',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'SGM %',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'goalPercent',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal %',\r\n stackIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['sgmPercent', 'goalPercent'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n ];\r\n }\r\n }\r\n },\r\n '/customerswithoutservicecontracts': {\r\n metricId: 33,\r\n serviceVsAmb: true,\r\n pageTitle: 'Predictive Alerts w/o Service Contracts',\r\n filters: ['DetailCustomerFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/customerswithoutservicecontracts',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/customerswithoutservicecontracts_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'customerswithoutservicecontracts.xlsx',\r\n level2DetailLink: 'grid',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'alertCount',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Alert Count',\r\n stackIndex: 0\r\n }\r\n }\r\n ],\r\n dataRows: ['alertCount'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[0]\r\n ];\r\n }\r\n }\r\n },\r\n '/rnps': {\r\n metricId: 22,\r\n serviceVsAmb: false,\r\n pageTitle: 'rNPS',\r\n filters: [], // 'DetailCustomerFilterComponent'\r\n tileReference: {\r\n apiSource: '/metrics/rnps/intermediate',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false,\r\n yaxisleftlabel: 'NPS Score',\r\n min: -105\r\n }\r\n },\r\n apiRequestHandler: '/metrics/rnps/intermediate_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'rnps.xlsx',\r\n level2DetailLink: 'detail',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {},\r\n customValueIfBlank: 'N'\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'overallRNps',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Overall rNPS',\r\n stackIndex: 0\r\n }\r\n }\r\n ],\r\n dataRows: ['overallRNps'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0]\r\n ];\r\n }\r\n }\r\n },\r\n '/sales': {\r\n metricId: 26,\r\n serviceVsAmb: false,\r\n pageTitle: 'Sales',\r\n filters: [\r\n 'DetailAccountFilterComponent',\r\n 'DetailCategorySwitchesFilterComponent',\r\n 'DetailDiseaseStateFilterComponent',\r\n 'DetailAssayFilterComponent'\r\n ],\r\n tileReference: {\r\n apiSource: '/metrics/sales',\r\n componentName: 'AreaLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/sales_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'amb_sales.xlsx',\r\n level2DetailLink: 'summary',\r\n currencyStyleForAMB: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'cumulative',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Cumulative',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'monthly',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Monthly',\r\n stackIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['cumulative', 'monthly'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1]\r\n ];\r\n }\r\n }\r\n },\r\n '/rcs': {\r\n metricId: 27,\r\n serviceVsAmb: false,\r\n pageTitle: 'Reagent/Capital/Service',\r\n filters: [\r\n 'DetailAccountFilterComponent',\r\n 'DetailCapitalServiceAssaySwitchesFilterComponent',\r\n 'DetailDiseaseStateFilterComponent',\r\n 'DetailAssayFilterComponent'\r\n ],\r\n tileReference: {\r\n apiSource: '/metrics/rcs', // this is actually abbottlink installed but uses alconnected\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/rcs_0',\r\n table: {\r\n type: 'set-values',\r\n exportFileName: 'rcs.xlsx',\r\n level2DetailLink: 'summary',\r\n currencyStyleForAMB: true,\r\n dataCols: [\r\n {\r\n ref: 'percentReagent',\r\n description: '% Reagent',\r\n width: 80\r\n },\r\n {\r\n ref: 'reagentUSD',\r\n description: 'Reagent (USD)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentCapital',\r\n description: '% Capital',\r\n width: 80\r\n },\r\n {\r\n ref: 'capatalUSD',\r\n description: 'Capital (USD)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentService',\r\n description: '% Service',\r\n width: 80\r\n },\r\n {\r\n ref: 'serviceUSD',\r\n description: 'Service (USD)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentOther',\r\n description: '% Other',\r\n width: 80\r\n },\r\n {\r\n ref: 'otherUSD',\r\n description: 'Other (USD)',\r\n width: 80\r\n }\r\n ],\r\n dataColsLocal: [\r\n {\r\n ref: 'percentReagent',\r\n description: '% Reagent',\r\n width: 80\r\n },\r\n {\r\n ref: 'reagentLocal',\r\n description: 'Reagent (Local)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentCapital',\r\n description: '% Capital',\r\n width: 80\r\n },\r\n {\r\n ref: 'capitalLocal',\r\n description: 'Capital (Local)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentService',\r\n description: '% Service',\r\n width: 80\r\n },\r\n {\r\n ref: 'serviceLocal',\r\n description: 'Service (Local)',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentOther',\r\n description: '% Other',\r\n width: 80\r\n },\r\n {\r\n ref: 'otherLocal',\r\n description: 'Other (Local)',\r\n width: 80\r\n }\r\n ],\r\n dataValues: (apiData) => {\r\n return {\r\n percentReagent: apiData.values[0].percentage + ' %',\r\n reagentUSD: apiData.values[0].amtdollar,\r\n percentCapital: apiData.values[1].percentage + ' %',\r\n capatalUSD: apiData.values[1].amtdollar,\r\n percentService: apiData.values[2].percentage + ' %',\r\n serviceUSD: apiData.values[2].amtdollar,\r\n percentOther: apiData.values[3].percentage + ' %',\r\n otherUSD: apiData.values[3].amtdollar\r\n };\r\n },\r\n dataValuesLocal: (apiData) => {\r\n return {\r\n percentReagent: apiData.values[0].percentage + ' %',\r\n reagentLocal: apiData.values[0].amtlocal,\r\n percentCapital: apiData.values[1].percentage + ' %',\r\n capitalLocal: apiData.values[1].amtlocal,\r\n percentService: apiData.values[2].percentage + ' %',\r\n serviceLocal: apiData.values[2].amtlocal,\r\n percentOther: apiData.values[3].percentage + ' %',\r\n otherLocal: apiData.values[3].amtlocal\r\n };\r\n },\r\n valueColors: (apiData) => {\r\n return [\r\n apiData.values[0].color,\r\n '',\r\n apiData.values[1].color,\r\n '',\r\n apiData.values[2].color,\r\n '',\r\n apiData.values[3].color,\r\n ''\r\n ];\r\n }\r\n }\r\n },\r\n '/compliance': {\r\n metricId: 28,\r\n serviceVsAmb: false,\r\n pageTitle: 'Contract Compliance/Revenue Gain/Loss',\r\n filters: [\r\n 'DetailAccountFilterComponent',\r\n 'DetailDiseaseStateFilterComponent',\r\n 'DetailAssayFilterComponent'\r\n ],\r\n tileReference: {\r\n apiSource: '/metrics/compliance', // this is actually abbottlink installed but uses alconnected\r\n componentName: 'ComplianceChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/compliance_0',\r\n table: {\r\n type: 'custom-compliance',\r\n exportFileName: 'compliance.xlsx',\r\n level2DetailLink: 'details'\r\n }\r\n },\r\n '/amb_orders': {\r\n metricId: 25,\r\n serviceVsAmb: false,\r\n pageTitle: 'Customer Orders',\r\n filters: ['DetailAccountFilterComponent'],\r\n tileReference: {\r\n apiSource: '/amb_orders',\r\n componentName: 'PieChartComponent',\r\n preferences: {\r\n showGoal: false,\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/amb_orders_0',\r\n table: {\r\n type: 'set-values',\r\n exportFileName: 'amb_customer_orders.xlsx',\r\n level2DetailLink: 'intermediate',\r\n dataCols: [\r\n {\r\n ref: 'percentHold',\r\n description: '% Hold',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberHold',\r\n description: '# Hold',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentOpen',\r\n description: '% Open',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberOpen',\r\n description: '# Open',\r\n width: 80\r\n },\r\n {\r\n ref: 'percentClosed',\r\n description: '% Closed',\r\n width: 80\r\n },\r\n {\r\n ref: 'numberClosed',\r\n description: '# Closed',\r\n width: 80\r\n }\r\n ],\r\n dataValues: (apiData) => {\r\n return {\r\n percentHold: apiData.values[0].percentage,\r\n numberHold: apiData.values[0].quantity,\r\n percentOpen: apiData.values[1].percentage,\r\n numberOpen: apiData.values[1].quantity,\r\n percentClosed: apiData.values[2].percentage,\r\n numberClosed: apiData.values[2].quantity,\r\n };\r\n },\r\n valueColors: (apiData) => {\r\n return [\r\n apiData.values[0].color,\r\n '',\r\n apiData.values[1].color,\r\n '',\r\n apiData.values[2].color,\r\n '',\r\n ];\r\n }\r\n }\r\n },\r\n '/amb_servicegrossmargin_customerSGM': {\r\n metricId: 31,\r\n serviceVsAmb: false,\r\n pageTitle: 'Service Gross Margin (SGM)',\r\n subTitle: '(Country YTD, Customer 12MA)',\r\n filters: ['DetailAccountFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/amb_servicegrossmargin_customerSGM_details',\r\n componentName: 'MultiLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/amb_servicegrossmargin_customerSGM_details_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'amb_servicegrossmargin_customerSGM.xlsx',\r\n level2DetailLink: 'details',\r\n colorRowDescriptions: true,\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'sgmPercent',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'SGM %',\r\n stackIndex: 0\r\n }\r\n },\r\n {\r\n key: 'goalPercent',\r\n parser: 'pointValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Goal %',\r\n stackIndex: 1\r\n }\r\n }\r\n ],\r\n dataRows: ['sgmPercent', 'goalPercent'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.linecolors[0],\r\n apiData.linecolors[1],\r\n ];\r\n }\r\n }\r\n },\r\n '/amb_customerswithoutservicecontracts': {\r\n metricId: 33,\r\n serviceVsAmb: false,\r\n pageTitle: 'Predictive Alerts w/o Service Contracts',\r\n filters: ['DetailAccountFilterComponent'],\r\n tileReference: {\r\n apiSource: '/metrics/amb_customerswithoutservicecontracts',\r\n componentName: 'StackedBarLineChartComponent',\r\n preferences: {\r\n showTitle: false\r\n }\r\n },\r\n apiRequestHandler: '/metrics/amb_customerswithoutservicecontracts_0',\r\n table: {\r\n type: 'style1',\r\n exportFileName: 'amb_customerswithoutservicecontracts.xlsx',\r\n level2DetailLink: 'grid',\r\n dataCols: {\r\n parser: 'stackKeys',\r\n inject: 'apiData',\r\n attributes: {}\r\n },\r\n dataParse: [ // build the rows as array data\r\n {\r\n key: 'alertCount',\r\n parser: 'stackValues',\r\n inject: 'apiData',\r\n attributes: {\r\n label: 'Alert Count',\r\n stackIndex: 0\r\n }\r\n }\r\n ],\r\n dataRows: ['alertCount'], // arrange the rows\r\n rowColors: (apiData) => {\r\n return [\r\n apiData.stackcolors[0]\r\n ];\r\n }\r\n }\r\n },\r\n};\r\n","import {CompositeFilterDescriptor, FilterDescriptor, process, SortDescriptor, State} from '@progress/kendo-data-query';\nimport {PageChangeEvent, DataStateChangeEvent} from '@progress/kendo-angular-grid';\nimport * as _ from 'lodash';\nimport {ExcelExportData} from '@progress/kendo-angular-excel-export';\n\nexport class GridComponent {\n dataRows = [];\n dataCols = [];\n filterOnChildProperty = null;\n\n gridState: State = {\n skip: 0,\n take: 100,\n group: [],\n sort: [],\n filter: { logic: 'and', filters: [] }\n };\n gridData: any;\n exportState: State = {};\n\n constructor() {\n this.allData = this.allData.bind(this);\n }\n\n pageChange(gridState: PageChangeEvent): void {\n this.gridState.skip = gridState.skip;\n this.gridState.take = gridState.take;\n this.updateGrid();\n }\n\n sortChange(sort: SortDescriptor[]): void {\n // if sort changes return to first page\n // if (!_.isEqual(this.gridState.sort, sort)) {\n // this.gridState.skip = 0;\n // }\n this.gridState.sort = sort;\n this.updateGrid();\n }\n\n filterChange(filter: CompositeFilterDescriptor): void {\n // if filter change is called return to first page\n // menu filters are automatically updating this.gridState.filter making comparison not feasible\n // to do this without a check is a necessary compromise\n this.gridState.skip = 0;\n this.gridState.filter = filter;\n this.updateGrid();\n }\n\n dataStateChange(state: DataStateChangeEvent): void {\n this.gridState = state;\n this.updateGrid();\n }\n\n updateGrid() {\n /**\n * This was an attempt to make filters work the way existing data was structured\n * but it does not allow the indicator to work showing filters have been selected\n */\n // this.gridState.filter = this.updateFiltersToHandleChildProperty(this.gridState.filter);\n this.gridData = process(this.dataRows, this.gridState);\n }\n\n // use disabled\n updateFiltersToHandleChildProperty(inFilter) {\n if (this.filterOnChildProperty) {\n for (let key = 0; key < inFilter.filters.length; key++) {\n const item = inFilter.filters[key];\n if ((item as FilterDescriptor).field !== undefined\n && ((item as FilterDescriptor).field as string).indexOf(this.filterOnChildProperty) === -1\n ) {\n (inFilter.filters[key] as FilterDescriptor).field += '.' + this.filterOnChildProperty;\n } else if ((item as CompositeFilterDescriptor).filters !== undefined) {\n inFilter.filters[key] = this.updateFiltersToHandleChildProperty(item); // note: recursion\n }\n }\n return inFilter;\n }\n }\n\n public allData(): ExcelExportData {\n const result: ExcelExportData = {\n data: process(this.dataRows, this.exportState).data,\n group: []\n };\n return result;\n }\n\n public forceDataReload() {\n // this.updateGrid();\n this.loadData();\n }\n\n protected loadData() {\n console.log('refresh called!!');\n }\n\n protected detectMob() {\n return /iPad|iPhone|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n public getHeight() {\n return -1;\n }\n\n public getMaxHeight(): string {\n const userWindowHeight = window.screen.availHeight;\n const userWindowWidth = window.screen.availWidth;\n\n if (userWindowHeight < 300) {\n return 300 + 'px';\n } else if (userWindowWidth <= 768) {\n return (userWindowHeight - 100) + 'px';\n } else if (this.detectMob()) {\n return (userWindowHeight - 150) + 'px';\n }\n return (userWindowHeight - 250) + 'px';\n }\n\n}\n","import {StackKeys} from '../../details/row_parsers/stack-keys';\r\nimport {StackValues} from '../../details/row_parsers/stack-values';\r\nimport {StackTotals} from '../../details/row_parsers/stack-totals';\r\nimport {Percents} from '../../details/row_parsers/percents';\r\nimport {PercentGoals} from '../../details/row_parsers/percent-goals';\r\nimport {PointValues} from '../../details/row_parsers/point-values';\r\n\r\nexport const RowParsers = {\r\n stackKeys: StackKeys,\r\n stackValues: StackValues,\r\n stackTotals: StackTotals,\r\n percents: Percents,\r\n percentGoals: PercentGoals,\r\n pointValues: PointValues\r\n};\r\n","import { RowParserInterface } from '../row-parser-interface';\r\n\r\nexport class StackKeys implements RowParserInterface {\r\n get(sourceData, params) {\r\n const stackKeys = [];\r\n stackKeys.push({\r\n ref: 'description',\r\n description: 'YYYY-MM',\r\n width: '80',\r\n class: null\r\n });\r\n let i = 0;\r\n for (const value of sourceData.values) {\r\n const key = value.xlabel;\r\n stackKeys.push({\r\n ref: key,\r\n description: key,\r\n width: '65',\r\n class: null\r\n });\r\n i++;\r\n }\r\n return stackKeys;\r\n }\r\n}\r\n","import { RowParserInterface } from '../row-parser-interface';\r\n\r\nexport class StackValues implements RowParserInterface {\r\n get(sourceData, params) {\r\n const rowData = {\r\n description: params.label\r\n };\r\n\r\n for (const value of sourceData.values) {\r\n const key = value.xlabel;\r\n rowData[key] = value.stacks[params.stackIndex];\r\n }\r\n return rowData;\r\n }\r\n}\r\n","import { RowParserInterface } from '../row-parser-interface';\r\n\r\nexport class StackTotals implements RowParserInterface {\r\n get(sourceData, params) {\r\n const rowData = {\r\n description: params.label\r\n };\r\n\r\n for (const index of Object.keys(sourceData[0])) {\r\n if (index !== 'description') {\r\n rowData[index] = 0;\r\n for (const sourceItem of sourceData) {\r\n rowData[index] = rowData[index] + parseFloat(sourceItem[index]);\r\n }\r\n }\r\n }\r\n return rowData;\r\n }\r\n}\r\n","import { RowParserInterface } from '../row-parser-interface';\r\nimport * as _ from 'lodash';\r\n\r\nexport class Percents implements RowParserInterface {\r\n get(sourceData, params) {\r\n const rowData = {\r\n description: params.label\r\n };\r\n const totals = sourceData[0];\r\n const devideBy = sourceData[1];\r\n\r\n for (const index of Object.keys(totals)) {\r\n if (index !== 'description') {\r\n rowData[index] = _.round(100 / totals[index] * devideBy[index], 2);\r\n }\r\n }\r\n return rowData;\r\n }\r\n}\r\n","import { RowParserInterface } from '../row-parser-interface';\r\nimport * as _ from 'lodash';\r\n\r\nexport class PercentGoals implements RowParserInterface {\r\n get(sourceData, params) {\r\n const rowData = {\r\n description: params.label\r\n };\r\n\r\n for (const value of sourceData.values) {\r\n const key = value.xlabel;\r\n // rowData[key] = _.round(value.stackgoals[params.stackGoalsIndex], 2);\r\n rowData[key] = value.stackgoals[params.stackGoalsIndex];\r\n }\r\n return rowData;\r\n }\r\n}\r\n\r\n","import { RowParserInterface } from '../row-parser-interface';\r\n\r\nexport class PointValues implements RowParserInterface {\r\n get(sourceData, params) {\r\n const rowData = {\r\n description: params.label\r\n };\r\n\r\n for (const value of sourceData.values) {\r\n const key = value.xlabel;\r\n let pointValue = value.points[params.stackIndex];\r\n rowData[key] = pointValue;\r\n }\r\n return rowData;\r\n }\r\n}\r\n","import { fromArray } from './fromArray';\nimport { isArray } from '../util/isArray';\nimport { Subscriber } from '../Subscriber';\nimport { iterator as Symbol_iterator } from '../../internal/symbol/iterator';\nimport { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';\nexport function zip(...observables) {\n const resultSelector = observables[observables.length - 1];\n if (typeof resultSelector === 'function') {\n observables.pop();\n }\n return fromArray(observables, undefined).lift(new ZipOperator(resultSelector));\n}\nexport class ZipOperator {\n constructor(resultSelector) {\n this.resultSelector = resultSelector;\n }\n call(subscriber, source) {\n return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));\n }\n}\nexport class ZipSubscriber extends Subscriber {\n constructor(destination, resultSelector, values = Object.create(null)) {\n super(destination);\n this.resultSelector = resultSelector;\n this.iterators = [];\n this.active = 0;\n this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : undefined;\n }\n _next(value) {\n const iterators = this.iterators;\n if (isArray(value)) {\n iterators.push(new StaticArrayIterator(value));\n }\n else if (typeof value[Symbol_iterator] === 'function') {\n iterators.push(new StaticIterator(value[Symbol_iterator]()));\n }\n else {\n iterators.push(new ZipBufferIterator(this.destination, this, value));\n }\n }\n _complete() {\n const iterators = this.iterators;\n const len = iterators.length;\n this.unsubscribe();\n if (len === 0) {\n this.destination.complete();\n return;\n }\n this.active = len;\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n if (iterator.stillUnsubscribed) {\n const destination = this.destination;\n destination.add(iterator.subscribe());\n }\n else {\n this.active--;\n }\n }\n }\n notifyInactive() {\n this.active--;\n if (this.active === 0) {\n this.destination.complete();\n }\n }\n checkIterators() {\n const iterators = this.iterators;\n const len = iterators.length;\n const destination = this.destination;\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {\n return;\n }\n }\n let shouldComplete = false;\n const args = [];\n for (let i = 0; i < len; i++) {\n let iterator = iterators[i];\n let result = iterator.next();\n if (iterator.hasCompleted()) {\n shouldComplete = true;\n }\n if (result.done) {\n destination.complete();\n return;\n }\n args.push(result.value);\n }\n if (this.resultSelector) {\n this._tryresultSelector(args);\n }\n else {\n destination.next(args);\n }\n if (shouldComplete) {\n destination.complete();\n }\n }\n _tryresultSelector(args) {\n let result;\n try {\n result = this.resultSelector.apply(this, args);\n }\n catch (err) {\n this.destination.error(err);\n return;\n }\n this.destination.next(result);\n }\n}\nclass StaticIterator {\n constructor(iterator) {\n this.iterator = iterator;\n this.nextResult = iterator.next();\n }\n hasValue() {\n return true;\n }\n next() {\n const result = this.nextResult;\n this.nextResult = this.iterator.next();\n return result;\n }\n hasCompleted() {\n const nextResult = this.nextResult;\n return Boolean(nextResult && nextResult.done);\n }\n}\nclass StaticArrayIterator {\n constructor(array) {\n this.array = array;\n this.index = 0;\n this.length = 0;\n this.length = array.length;\n }\n [Symbol_iterator]() {\n return this;\n }\n next(value) {\n const i = this.index++;\n const array = this.array;\n return i < this.length ? { value: array[i], done: false } : { value: null, done: true };\n }\n hasValue() {\n return this.array.length > this.index;\n }\n hasCompleted() {\n return this.array.length === this.index;\n }\n}\nclass ZipBufferIterator extends SimpleOuterSubscriber {\n constructor(destination, parent, observable) {\n super(destination);\n this.parent = parent;\n this.observable = observable;\n this.stillUnsubscribed = true;\n this.buffer = [];\n this.isComplete = false;\n }\n [Symbol_iterator]() {\n return this;\n }\n next() {\n const buffer = this.buffer;\n if (buffer.length === 0 && this.isComplete) {\n return { value: null, done: true };\n }\n else {\n return { value: buffer.shift(), done: false };\n }\n }\n hasValue() {\n return this.buffer.length > 0;\n }\n hasCompleted() {\n return this.buffer.length === 0 && this.isComplete;\n }\n notifyComplete() {\n if (this.buffer.length > 0) {\n this.isComplete = true;\n this.parent.notifyInactive();\n }\n else {\n this.destination.complete();\n }\n }\n notifyNext(innerValue) {\n this.buffer.push(innerValue);\n this.parent.checkIterators();\n }\n subscribe() {\n return innerSubscribe(this.observable, new SimpleInnerSubscriber(this));\n }\n}\n//# sourceMappingURL=zip.js.map","import { switchMap } from './switchMap';\nexport function switchMapTo(innerObservable, resultSelector) {\n return resultSelector ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable);\n}\n//# sourceMappingURL=switchMapTo.js.map","import { Subscriber } from '../Subscriber';\nexport function distinctUntilChanged(compare, keySelector) {\n return (source) => source.lift(new DistinctUntilChangedOperator(compare, keySelector));\n}\nclass DistinctUntilChangedOperator {\n constructor(compare, keySelector) {\n this.compare = compare;\n this.keySelector = keySelector;\n }\n call(subscriber, source) {\n return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));\n }\n}\nclass DistinctUntilChangedSubscriber extends Subscriber {\n constructor(destination, compare, keySelector) {\n super(destination);\n this.keySelector = keySelector;\n this.hasKey = false;\n if (typeof compare === 'function') {\n this.compare = compare;\n }\n }\n compare(x, y) {\n return x === y;\n }\n _next(value) {\n let key;\n try {\n const { keySelector } = this;\n key = keySelector ? keySelector(value) : value;\n }\n catch (err) {\n return this.destination.error(err);\n }\n let result = false;\n if (this.hasKey) {\n try {\n const { compare } = this;\n result = compare(this.key, key);\n }\n catch (err) {\n return this.destination.error(err);\n }\n }\n else {\n this.hasKey = true;\n }\n if (!result) {\n this.key = key;\n this.destination.next(value);\n }\n }\n}\n//# sourceMappingURL=distinctUntilChanged.js.map","import { Subscriber } from '../Subscriber';\nexport function bufferCount(bufferSize, startBufferEvery = null) {\n return function bufferCountOperatorFunction(source) {\n return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));\n };\n}\nclass BufferCountOperator {\n constructor(bufferSize, startBufferEvery) {\n this.bufferSize = bufferSize;\n this.startBufferEvery = startBufferEvery;\n if (!startBufferEvery || bufferSize === startBufferEvery) {\n this.subscriberClass = BufferCountSubscriber;\n }\n else {\n this.subscriberClass = BufferSkipCountSubscriber;\n }\n }\n call(subscriber, source) {\n return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));\n }\n}\nclass BufferCountSubscriber extends Subscriber {\n constructor(destination, bufferSize) {\n super(destination);\n this.bufferSize = bufferSize;\n this.buffer = [];\n }\n _next(value) {\n const buffer = this.buffer;\n buffer.push(value);\n if (buffer.length == this.bufferSize) {\n this.destination.next(buffer);\n this.buffer = [];\n }\n }\n _complete() {\n const buffer = this.buffer;\n if (buffer.length > 0) {\n this.destination.next(buffer);\n }\n super._complete();\n }\n}\nclass BufferSkipCountSubscriber extends Subscriber {\n constructor(destination, bufferSize, startBufferEvery) {\n super(destination);\n this.bufferSize = bufferSize;\n this.startBufferEvery = startBufferEvery;\n this.buffers = [];\n this.count = 0;\n }\n _next(value) {\n const { bufferSize, startBufferEvery, buffers, count } = this;\n this.count++;\n if (count % startBufferEvery === 0) {\n buffers.push([]);\n }\n for (let i = buffers.length; i--;) {\n const buffer = buffers[i];\n buffer.push(value);\n if (buffer.length === bufferSize) {\n buffers.splice(i, 1);\n this.destination.next(buffer);\n }\n }\n }\n _complete() {\n const { buffers, destination } = this;\n while (buffers.length > 0) {\n let buffer = buffers.shift();\n if (buffer.length > 0) {\n destination.next(buffer);\n }\n }\n super._complete();\n }\n}\n//# sourceMappingURL=bufferCount.js.map","/**\n * A function that clones the passed date. The parameter could be `null`.\n *\n * @param date - The initial date value.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * cloneDate(new Date(2016, 0, 1)); // returns new Date(2016, 0, 1);\n * cloneDate(null); // returns null\n * ```\n */\nexport const cloneDate = (date) => date ? new Date(date.getTime()) : null;\n","import { cloneDate } from './clone-date';\n/**\n * @hidden\n */\nexport const adjustDST = (date, hour) => {\n const newDate = cloneDate(date);\n if (hour === 0 && newDate.getHours() === 23) {\n newDate.setHours(newDate.getHours() + 2);\n }\n return newDate;\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\n/**\n * A function that adds and subtracts days from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of days to add and subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDays(new Date(2016, 0, 1), 5); // 2016-1-6\n * addDays(new Date(2016, 0, 1), -5); // 2015-12-26\n * ```\n */\nexport const addDays = (date, offset) => {\n const newDate = cloneDate(date);\n newDate.setDate(newDate.getDate() + offset);\n return adjustDST(newDate, date.getHours());\n};\n","import { adjustDST } from './adjust-dst';\n/**\n * A function which returns a new `Date` instance.\n *\n * @param year - The year value.\n * @param month - The month value.\n * @param day - The day value.\n * @param hours - The hours value.\n * @param minutes - The minutes value.\n * @param seconds - The seconds value.\n * @param milliseconds - milliseconds value.\n * @returns The date instance.\n *\n * @example\n * ```ts-no-run\n * createDate(2016, 0, 15); // 2016-01-15 00:00:00\n * createDate(2016, 0, 15, 22, 22, 20); // 2016-01-15 22:22:20\n * ```\n */\nexport const createDate = (year, month, day, hours = 0, minutes = 0, seconds = 0, milliseconds = 0) => {\n const date = new Date(year, month, day, hours, minutes, seconds, milliseconds);\n if (year > -1 && year < 100) {\n date.setFullYear(date.getFullYear() - 1900);\n }\n return adjustDST(date, hours);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the passed date with a midnight time portion.\n *\n * @param date - The initial date.\n * @returns - The date with a midnight time portion.\n *\n * @example\n * ```ts-no-run\n * getDate(new Date(2016, 0, 15, 14, 30, 30)); // 2016-01-15 00:00:00\n * ```\n */\nexport const getDate = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n};\n","/**\n * A function that compares two dates. The comparison also includes the time portion.\n *\n * @param candidate - The candidate date.\n * @param expected - The expected date.\n * @returns - A Boolean value indicating whether the values are equal.\n *\n * @example\n * ```ts-no-run\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 1)); // true\n * isEqual(new Date(2016, 0, 1), new Date(2016, 0, 2)); // false\n * isEqual(new Date(2016, 0, 1, 10), new Date(2016, 0, 1, 20)); // false\n * ```\n */\nexport const isEqual = (candidate, expected) => {\n if (!candidate && !expected) {\n return true;\n }\n return candidate && expected && candidate.getTime() === expected.getTime();\n};\n","import { addDays } from './add-days';\nimport { createDate } from './create-date';\n/**\n * A function which returns the last date of the month.\n *\n * @param date - The initial date.\n * @returns - The last date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * lastDayOfMonth(new Date(2016, 0, 15)); // 2016-01-31\n * ```\n */\nexport const lastDayOfMonth = (date) => {\n const newDate = createDate(date.getFullYear(), date.getMonth() + 1, 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n return addDays(newDate, -1);\n};\n","import { adjustDST } from './adjust-dst';\nimport { cloneDate } from './clone-date';\nimport { lastDayOfMonth } from './last-day-of-month';\nconst MONTHS_LENGTH = 12;\nconst normalize = (date, expectedMonth) => (date.getMonth() !== expectedMonth ? lastDayOfMonth(addMonths(date, -1)) : date //tslint:disable-line:no-use-before-declare\n);\n/**\n * A function that adds and subtracts months from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of months to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addMonths(new Date(2016, 5, 1), 5); // 2016-11-1\n * addMonths(new Date(2016, 5, 1), -5); // 2015-1-1\n * ```\n */\nexport const addMonths = (date, offset) => {\n const newDate = cloneDate(date);\n const diff = (newDate.getMonth() + offset) % MONTHS_LENGTH;\n const expectedMonth = (MONTHS_LENGTH + diff) % MONTHS_LENGTH;\n newDate.setMonth(newDate.getMonth() + offset);\n return normalize(adjustDST(newDate, date.getHours()), expectedMonth);\n};\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setYear = (value, year) => {\n const month = value.getMonth();\n const candidate = createDate(year, month, value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getMonth() === month ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { adjustDST } from './adjust-dst';\nimport { setYear } from './set-year';\n/**\n * A function that adds and subtracts years from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of years to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addYears(new Date(2016, 5, 1), 5); // 2011-6-1\n * addYears(new Date(2016, 5, 1), -5); // 2021-6-1\n * ```\n */\nexport const addYears = (value, offset) => {\n return adjustDST(setYear(value, value.getFullYear() + offset), value.getHours());\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts decades from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of decades to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addDecades(new Date(2016, 5, 1), 5); // 2066-6-1\n * addDecades(new Date(2016, 5, 1), -5); // 1966-6-1\n * ```\n */\nexport const addDecades = (value, offset) => {\n return addYears(value, 10 * offset);\n};\n","import { addYears } from './add-years';\n/**\n * A function that adds and subtracts centuries from a `Date` object.\n *\n * @param date - The initial date value.\n * @param offset - The number of centuries to add or subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addCenturies(new Date(2016, 5, 1), 5); // 2516-6-1\n * addCenturies(new Date(2016, 5, 1), -5); // 1516-6-1\n * ```\n */\nexport const addCenturies = (value, offset) => {\n return addYears(value, 100 * offset);\n};\n","import { setYear } from './set-year';\n/**\n * @hidden\n */\nexport const normalizeYear = (value, year) => (setYear(value, year(value.getFullYear())));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first decade in a century.\n *\n * @param date - The start date value.\n * @returns - The first year in a century.\n *\n * @example\n * ```ts-no-run\n * firstDecadeOfCentury(new Date(2017, 0, 1)); // 2000-1-1\n * firstDecadeOfCentury(new Date(2007, 10, 22)); // 2000-11-22\n * firstDecadeOfCentury(new Date(2126, 0, 1)); // 2100-1-1\n * ```\n */\nexport const firstDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100)));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last decade in a century.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastDecadeOfCentury(new Date(2017, 0, 1)); // 2090-1-1\n * lastDecadeOfCentury(new Date(2007, 10, 22)); // 2090-11-22\n * lastDecadeOfCentury(new Date(2126, 0, 1)); // 2190-1-1\n * ```\n */\nexport const lastDecadeOfCentury = (value) => (normalizeYear(value, (y) => y - (y % 100) + 90));\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the first year in a decade.\n *\n * @param date - The start date value.\n * @returns - The first year in a decade.\n *\n * @example\n * ```ts-no-run\n * firstYearOfDecade(new Date(2017, 0, 1)); // 2010-1-1\n * firstYearOfDecade(new Date(2007, 10, 22)); // 2000-11-22\n * firstYearOfDecade(new Date(2026, 0, 1)); // 2020-1-1\n * ```\n */\nexport const firstYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10)));\n","import { firstDecadeOfCentury } from './first-decade-of-century';\n/**\n * A function that calculates duration in centuries between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInCenturies(new Date(2016, 0, 1), new Date(3216, 0, 1)); // 12\n * durationInCenturies(new Date(2016, 6, 1), new Date(2617, 0, 1)); // 6\n * durationInCenturies(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInCenturies = (start, end) => ((firstDecadeOfCentury(end).getFullYear() - firstDecadeOfCentury(start).getFullYear()) / 100);\n","import { normalizeYear } from './normalize-year';\n/**\n * A function that returns a `Date` object of the last year in a decade.\n *\n * @param date - The start date value.\n * @returns - The last year in a decade.\n *\n * @example\n * ```ts-no-run\n * lastYearOfDecade(new Date(2017, 0, 1)); // 2019-1-1\n * lastYearOfDecade(new Date(2007, 10, 22)); // 2009-11-22\n * lastYearOfDecade(new Date(2026, 0, 1)); // 2029-1-1\n * ```\n */\nexport const lastYearOfDecade = (value) => (normalizeYear(value, (y) => y - (y % 10) + 9));\n","import { firstYearOfDecade } from './first-year-of-decade';\n/**\n * A function that calculates duration in decades between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInDecades(new Date(2016, 0, 1), new Date(2136, 0, 1)); // 12\n * durationInDecades(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInDecades = (start, end) => ((firstYearOfDecade(end).getFullYear() - firstYearOfDecade(start).getFullYear()) / 10);\n","import { addDays } from './add-days';\n/**\n * A function that adds and subtracts weeks from a Date object.\n *\n * @param date - The initial date value.\n * @param offset - The number of weeks to add/subtract from the date.\n * @returns - A new `Date` instance.\n *\n * @example\n * ```ts-no-run\n * addWeeks(new Date(2016, 5, 1), 3); // 2016-6-22\n * addWeeks(new Date(2016, 5, 1), -3); // 2015-5-11\n * ```\n */\nexport const addWeeks = (date, offset) => {\n return addDays(date, offset * 7);\n};\n","import { createDate } from './create-date';\n/**\n * A function which returns the first date of the month.\n *\n * @param date - The initial date.\n * @returns - The first date of the initial date month.\n *\n * @example\n * ```ts-no-run\n * firstDayOfMonth(new Date(2016, 0, 15)); // 2016-01-01\n * ```\n */\nexport const firstDayOfMonth = (date) => {\n return createDate(date.getFullYear(), date.getMonth(), 1, date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());\n};\n","// tslint:disable:max-line-length\n/**\n * An enumeration which represents the horizontal direction. The `Forward` option moves forward. The `Backward` option moves backward.\n */\nexport var Direction;\n(function (Direction) {\n /**\n * The `Forward` value with an underlying `1` number value.\n */\n Direction[Direction[\"Forward\"] = 1] = \"Forward\";\n /**\n * The `Backward` value with an underlying `-1` (minus one) number value.\n */\n Direction[Direction[\"Backward\"] = -1] = \"Backward\";\n})(Direction || (Direction = {}));\n// tslint:enable:max-line-length\n","import { Direction } from \"./direction.enum\";\nimport { adjustDST } from \"./adjust-dst\";\nimport { cloneDate } from './clone-date';\n/**\n * @hidden\n *\n * A function which returns the next or previous date for a specific week day. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @param direction - The `Direction` enum specifying the calculation direction.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Forward); // 2016-01-06, Wednesday\n * dayOfWeek(new Date(2016, 0, 1), Day.Wednesday, Direction.Backward); // 2015-12-30, Wednesday\n * ```\n */\nexport const dayOfWeek = (date, weekDay, direction = Direction.Forward) => {\n const newDate = cloneDate(date);\n const newDay = ((weekDay - newDate.getDay()) + (7 * direction)) % 7;\n newDate.setDate(newDate.getDate() + newDay);\n return adjustDST(newDate, date.getHours());\n};\n","/**\n * A function that calculates duration in months between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in months.\n *\n * @example\n * ```ts-no-run\n * durationInMonths(new Date(2016, 0, 1), new Date(2017, 0, 1)); // 12\n * durationInMonths(new Date(2016, 6, 1), new Date(2017, 0, 1)); // 6\n * durationInMonths(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInMonths = (start, end) => (((end.getFullYear() - start.getFullYear())) * 12 + (end.getMonth() - start.getMonth()));\n","import { addMonths } from './add-months';\nimport { createDate } from './create-date';\nimport { lastDayOfMonth } from './last-day-of-month';\n/**\n * @hidden\n */\nexport const setMonth = (value, month) => {\n const day = value.getDate();\n const candidate = createDate(value.getFullYear(), month, day, value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds());\n return candidate.getDate() === day ? candidate : lastDayOfMonth(addMonths(candidate, -1));\n};\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the first month in a year.\n *\n * @param date - The start date value.\n * @returns - The first month in a year.\n *\n * @example\n * ```ts-no-run\n * firstMonthOfYear(new Date(2017, 11, 1)); // 2017-1-1\n * firstMonthOfYear(new Date(2017, 0, 1)); // 2017-1-1\n * ```\n */\nexport const firstMonthOfYear = (value) => setMonth(value, 0);\n","import { setMonth } from './set-month';\n/**\n * A function that returns a `Date` object of the last month in a year.\n *\n * @param date - The start date value.\n * @returns - The last month in a year.\n *\n * @example\n * ```ts-no-run\n * lastMonthOfYear(new Date(2017, 5, 3)); // 2017-12-3\n * lastMonthOfYear(new Date(2017, 11, 3)); // 2017-12-3\n * ```\n */\nexport const lastMonthOfYear = (value) => setMonth(value, 11);\n","/**\n * A function that calculates duration in years between two `Date` objects.\n *\n * @param start - The start date value.\n * @param end - The end date value.\n * @returns - The duration in years.\n *\n * @example\n * ```ts-no-run\n * durationInYears(new Date(2016, 0, 1), new Date(2028, 0, 1)); // 12\n * durationInYears(new Date(2016, 0, 1), new Date(2022, 0, 1)); // 6\n * durationInYears(new Date(2016, 0, 1), new Date(2016, 0, 1)); // 0\n * ```\n */\nexport const durationInYears = (start, end) => (end.getFullYear() - start.getFullYear());\n","/**\n * Enumeration which represents the week days.\n */\nexport var Day;\n(function (Day) {\n /**\n * The Sunday value with an underlying `0` number value.\n */\n Day[Day[\"Sunday\"] = 0] = \"Sunday\";\n /**\n * The Monday value with an underlying `1` number value.\n */\n Day[Day[\"Monday\"] = 1] = \"Monday\";\n /**\n * The Tuesday value with an underlying `2` number value.\n */\n Day[Day[\"Tuesday\"] = 2] = \"Tuesday\";\n /**\n * The Wednesday value with an underlying `3` number value.\n */\n Day[Day[\"Wednesday\"] = 3] = \"Wednesday\";\n /**\n * The Thursday value with an underlying `4` number value.\n */\n Day[Day[\"Thursday\"] = 4] = \"Thursday\";\n /**\n * The Friday value with an underlying `5` number value.\n */\n Day[Day[\"Friday\"] = 5] = \"Friday\";\n /**\n * The Saturday value with an underlying `6` number value.\n */\n Day[Day[\"Saturday\"] = 6] = \"Saturday\";\n})(Day || (Day = {}));\n","import { Day } from './day.enum';\nimport { addDays } from './add-days';\nimport { createDate } from './create-date';\nimport { prevDayOfWeek } from './prev-day-of-week';\nimport { MS_PER_DAY } from './constants';\nimport { getDate } from './get-date';\nconst moveDateToWeekStart = (date, weekStartDay) => {\n if (weekStartDay !== Day.Monday) {\n return addDays(prevDayOfWeek(date, weekStartDay), 4);\n }\n return addDays(date, (4 - (date.getDay() || 7)));\n};\nconst calcWeekInYear = (date, weekStartDay) => {\n const firstWeekInYear = createDate(date.getFullYear(), 0, 1, -6);\n const newDate = moveDateToWeekStart(date, weekStartDay);\n const diffInMS = newDate.getTime() - firstWeekInYear.getTime();\n const days = Math.floor(diffInMS / MS_PER_DAY);\n return 1 + Math.floor(days / 7);\n};\n/**\n * A function that returns the number of the week within a year, which is calculated in relation to the date.\n *\n * For more information, refer to the [**ISO week date**](https://en.wikipedia.org/wiki/ISO_week_date) article.\n *\n * @param date - The date used for the week number calculation.\n * @param weekStartDay - The first day of the week. By default, the first week day is Monday.\n * @returns - The number of the week within the year.\n *\n * @example\n * ```ts-no-run\n * weekInYear(new Date(2016, 0, 1)); // Week 53, 2015\n * weekInYear(new Date(2016, 0, 5)); // Week 1, 2016\n * weekInYear(new Date(2017, 0, 1)); // Week 52, 2016\n * weekInYear(new Date(2017, 0, 2)); // Week 1, 2017\n * ```\n */\nexport const weekInYear = (date, weekStartDay = Day.Monday) => {\n date = getDate(date);\n const prevWeekDate = addDays(date, -7);\n const nextWeekDate = addDays(date, 7);\n const weekNumber = calcWeekInYear(date, weekStartDay);\n if (weekNumber === 0) {\n return calcWeekInYear(prevWeekDate, weekStartDay) + 1;\n }\n if (weekNumber === 53 && calcWeekInYear(nextWeekDate, weekStartDay) > 1) {\n return 1;\n }\n return weekNumber;\n};\n","import { Direction } from \"./direction.enum\";\nimport { dayOfWeek } from './day-of-week';\n/**\n * A function which returns a date by a specific week name. For example, `Day.Monday`.\n *\n * @param date - The date to calculate from.\n * @param weekDay - The `Day` enum specifying the desired week day.\n * @returns - A `Date` instance.\n *\n * @example\n * ```ts-no-run\n * prevDayOfWeek(new Date(2016, 0, 1), Day.Wednesday); // 2015-12-30, Wednesday\n * ```\n */\nexport const prevDayOfWeek = (date, weekDay) => {\n return dayOfWeek(date, weekDay, Direction.Backward);\n};\n","/**\n * The number of milliseconds in one minute.\n */\nexport const MS_PER_MINUTE = 60000;\n/**\n * The number of milliseconds in one hour.\n */\nexport const MS_PER_HOUR = 3600000;\n/**\n * The number of milliseconds in one standard day.\n */\nexport const MS_PER_DAY = 86400000;\n","import { AsyncAction } from './AsyncAction';\nexport class QueueAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n schedule(state, delay = 0) {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n execute(state, delay) {\n return (delay > 0 || this.closed) ?\n super.execute(state, delay) :\n this._execute(state, delay);\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n return scheduler.flush(this);\n }\n}\n//# sourceMappingURL=QueueAction.js.map","import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\nexport const queueScheduler = new QueueScheduler(QueueAction);\nexport const queue = queueScheduler;\n//# sourceMappingURL=queue.js.map","import { AsyncScheduler } from './AsyncScheduler';\nexport class QueueScheduler extends AsyncScheduler {\n}\n//# sourceMappingURL=QueueScheduler.js.map","import { Subscriber } from '../Subscriber';\nimport { Notification } from '../Notification';\nexport function observeOn(scheduler, delay = 0) {\n return function observeOnOperatorFunction(source) {\n return source.lift(new ObserveOnOperator(scheduler, delay));\n };\n}\nexport class ObserveOnOperator {\n constructor(scheduler, delay = 0) {\n this.scheduler = scheduler;\n this.delay = delay;\n }\n call(subscriber, source) {\n return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));\n }\n}\nexport class ObserveOnSubscriber extends Subscriber {\n constructor(destination, scheduler, delay = 0) {\n super(destination);\n this.scheduler = scheduler;\n this.delay = delay;\n }\n static dispatch(arg) {\n const { notification, destination } = arg;\n notification.observe(destination);\n this.unsubscribe();\n }\n scheduleMessage(notification) {\n const destination = this.destination;\n destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));\n }\n _next(value) {\n this.scheduleMessage(Notification.createNext(value));\n }\n _error(err) {\n this.scheduleMessage(Notification.createError(err));\n this.unsubscribe();\n }\n _complete() {\n this.scheduleMessage(Notification.createComplete());\n this.unsubscribe();\n }\n}\nexport class ObserveOnMessage {\n constructor(notification, destination) {\n this.notification = notification;\n this.destination = destination;\n }\n}\n//# sourceMappingURL=observeOn.js.map","import { Subject } from './Subject';\nimport { queue } from './scheduler/queue';\nimport { Subscription } from './Subscription';\nimport { ObserveOnSubscriber } from './operators/observeOn';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nexport class ReplaySubject extends Subject {\n constructor(bufferSize = Number.POSITIVE_INFINITY, windowTime = Number.POSITIVE_INFINITY, scheduler) {\n super();\n this.scheduler = scheduler;\n this._events = [];\n this._infiniteTimeWindow = false;\n this._bufferSize = bufferSize < 1 ? 1 : bufferSize;\n this._windowTime = windowTime < 1 ? 1 : windowTime;\n if (windowTime === Number.POSITIVE_INFINITY) {\n this._infiniteTimeWindow = true;\n this.next = this.nextInfiniteTimeWindow;\n }\n else {\n this.next = this.nextTimeWindow;\n }\n }\n nextInfiniteTimeWindow(value) {\n if (!this.isStopped) {\n const _events = this._events;\n _events.push(value);\n if (_events.length > this._bufferSize) {\n _events.shift();\n }\n }\n super.next(value);\n }\n nextTimeWindow(value) {\n if (!this.isStopped) {\n this._events.push(new ReplayEvent(this._getNow(), value));\n this._trimBufferThenGetEvents();\n }\n super.next(value);\n }\n _subscribe(subscriber) {\n const _infiniteTimeWindow = this._infiniteTimeWindow;\n const _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();\n const scheduler = this.scheduler;\n const len = _events.length;\n let subscription;\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n else if (this.isStopped || this.hasError) {\n subscription = Subscription.EMPTY;\n }\n else {\n this.observers.push(subscriber);\n subscription = new SubjectSubscription(this, subscriber);\n }\n if (scheduler) {\n subscriber.add(subscriber = new ObserveOnSubscriber(subscriber, scheduler));\n }\n if (_infiniteTimeWindow) {\n for (let i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i]);\n }\n }\n else {\n for (let i = 0; i < len && !subscriber.closed; i++) {\n subscriber.next(_events[i].value);\n }\n }\n if (this.hasError) {\n subscriber.error(this.thrownError);\n }\n else if (this.isStopped) {\n subscriber.complete();\n }\n return subscription;\n }\n _getNow() {\n return (this.scheduler || queue).now();\n }\n _trimBufferThenGetEvents() {\n const now = this._getNow();\n const _bufferSize = this._bufferSize;\n const _windowTime = this._windowTime;\n const _events = this._events;\n const eventsCount = _events.length;\n let spliceCount = 0;\n while (spliceCount < eventsCount) {\n if ((now - _events[spliceCount].time) < _windowTime) {\n break;\n }\n spliceCount++;\n }\n if (eventsCount > _bufferSize) {\n spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);\n }\n if (spliceCount > 0) {\n _events.splice(0, spliceCount);\n }\n return _events;\n }\n}\nclass ReplayEvent {\n constructor(time, value) {\n this.time = time;\n this.value = value;\n }\n}\n//# sourceMappingURL=ReplaySubject.js.map","import { AsyncAction } from './AsyncAction';\nexport class AnimationFrameAction extends AsyncAction {\n constructor(scheduler, work) {\n super(scheduler, work);\n this.scheduler = scheduler;\n this.work = work;\n }\n requestAsyncId(scheduler, id, delay = 0) {\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n scheduler.actions.push(this);\n return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(() => scheduler.flush(null)));\n }\n recycleAsyncId(scheduler, id, delay = 0) {\n if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n if (scheduler.actions.length === 0) {\n cancelAnimationFrame(id);\n scheduler.scheduled = undefined;\n }\n return undefined;\n }\n}\n//# sourceMappingURL=AnimationFrameAction.js.map","import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\nexport const animationFrame = animationFrameScheduler;\n//# sourceMappingURL=animationFrame.js.map","import { AsyncScheduler } from './AsyncScheduler';\nexport class AnimationFrameScheduler extends AsyncScheduler {\n flush(action) {\n this.active = true;\n this.scheduled = undefined;\n const { actions } = this;\n let error;\n let index = -1;\n let count = actions.length;\n action = action || actions.shift();\n do {\n if (error = action.execute(action.state, action.delay)) {\n break;\n }\n } while (++index < count && (action = actions.shift()));\n this.active = false;\n if (error) {\n while (++index < count && (action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n//# sourceMappingURL=AnimationFrameScheduler.js.map","import { Subscriber } from '../Subscriber';\nexport function takeWhile(predicate, inclusive = false) {\n return (source) => source.lift(new TakeWhileOperator(predicate, inclusive));\n}\nclass TakeWhileOperator {\n constructor(predicate, inclusive) {\n this.predicate = predicate;\n this.inclusive = inclusive;\n }\n call(subscriber, source) {\n return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));\n }\n}\nclass TakeWhileSubscriber extends Subscriber {\n constructor(destination, predicate, inclusive) {\n super(destination);\n this.predicate = predicate;\n this.inclusive = inclusive;\n this.index = 0;\n }\n _next(value) {\n const destination = this.destination;\n let result;\n try {\n result = this.predicate(value, this.index++);\n }\n catch (err) {\n destination.error(err);\n return;\n }\n this.nextOrComplete(value, result);\n }\n nextOrComplete(value, predicateResult) {\n const destination = this.destination;\n if (Boolean(predicateResult)) {\n destination.next(value);\n }\n else {\n if (this.inclusive) {\n destination.next(value);\n }\n destination.complete();\n }\n }\n}\n//# sourceMappingURL=takeWhile.js.map","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Injectable, EventEmitter, Injector, InjectionToken, Component, Inject, ElementRef, Renderer2, NgZone, Input, Output, HostBinding, ChangeDetectionStrategy, ChangeDetectorRef, ViewChild, Directive, TemplateRef, isDevMode, forwardRef, Optional, ContentChild, ViewContainerRef, HostListener, ViewChildren, ContentChildren, IterableDiffers, NgModule } from '@angular/core';\nimport { NG_VALUE_ACCESSOR, NG_VALIDATORS, NgControl } from '@angular/forms';\nimport { LocalizationService, L10N_PREFIX, RTL, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { getDate, isEqual, cloneDate, addDays, addDecades, addCenturies, firstDecadeOfCentury, lastDecadeOfCentury, firstYearOfDecade, createDate, durationInCenturies, addYears, lastYearOfDecade, durationInDecades, addWeeks, addMonths, firstDayOfMonth, lastDayOfMonth, dayOfWeek, durationInMonths, firstMonthOfYear, lastMonthOfYear, durationInYears, weekInYear } from '@progress/kendo-date-math';\nimport { isDocumentAvailable, KendoInput, guid, hasObservers, Keys, EventsModule, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { IntlService, IntlModule } from '@progress/kendo-angular-intl';\nimport { ReplaySubject, Observable, Subject, combineLatest, of, interval, animationFrameScheduler, fromEvent, EMPTY, from, Subscription, BehaviorSubject, merge } from 'rxjs';\nimport { map, scan, takeWhile, tap, filter, debounceTime } from 'rxjs/operators';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { CommonModule } from '@angular/common';\nimport { touchEnabled } from '@progress/kendo-common';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-intl';\nimport * as ɵngcc2 from '@angular/common';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\nimport * as ɵngcc4 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc5 from '@progress/kendo-angular-popup';\n\nconst _c0 = [\"*\"];\nconst _c1 = [\"list\"];\nfunction NavigationComponent_li_4_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const date_r104 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r106 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r106.service.navigationTitle(date_r104));\n} }\nfunction NavigationComponent_li_4_ng_template_3_Template(rf, ctx) { }\nconst _c2 = function (a0, a1, a2) { return { $implicit: a0, activeView: a1, date: a2 }; };\nfunction NavigationComponent_li_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"span\");\n ɵngcc0.ɵɵtemplate(2, NavigationComponent_li_4_ng_template_2_Template, 1, 1, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(3, NavigationComponent_li_4_ng_template_3_Template, 0, 0, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r104 = ctx.$implicit;\n const index_r105 = ctx.index;\n const ctx_r103 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵattribute(\"data-date-index\", index_r105);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-calendar-navigation-marker\", ctx_r103.service.isRangeStart(date_r104));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r103.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r103.templateRef)(\"ngTemplateOutlet\", ctx_r103.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(7, _c2, ctx_r103.service.navigationTitle(date_r104), ctx_r103.activeViewValue, date_r104));\n} }\nconst _c3 = function (a0) { return { click: a0 }; };\nfunction ViewListComponent_table_1_th_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const name_r114 = ctx.$implicit;\n const ctx_r113 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r113.colWidth, \"%\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(name_r114);\n} }\nfunction ViewListComponent_table_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\", 6);\n ɵngcc0.ɵɵelementStart(1, \"thead\");\n ɵngcc0.ɵɵelementStart(2, \"tr\");\n ɵngcc0.ɵɵtemplate(3, ViewListComponent_table_1_th_3_Template, 2, 3, \"th\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r109 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r109.weekNames);\n} }\nfunction ViewListComponent_col_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} }\nfunction ViewListComponent_tbody_7_Template(rf, ctx) { if (rf & 1) {\n const _r118 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"tbody\", 8);\n ɵngcc0.ɵɵlistener(\"change\", function ViewListComponent_tbody_7_Template_tbody_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r118); const ctx_r117 = ɵngcc0.ɵɵnextContext(); return ctx_r117.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r116 = ctx.$implicit;\n const ctx_r112 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r112.activeView)(\"isActive\", ctx_r112.isActive)(\"min\", ctx_r112.min)(\"max\", ctx_r112.max)(\"cellUID\", ctx_r112.cellUID)(\"focusedDate\", ctx_r112.focusedDate)(\"selectedDate\", ctx_r112.value)(\"weekNumber\", ctx_r112.weekNumber)(\"templateRef\", ctx_r112.cellTemplateRef)(\"weekNumberTemplateRef\", ctx_r112.weekNumberTemplateRef)(\"viewDate\", date_r116);\n} }\nvar I18N_4;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.calendar.today\n */ \n const MSG_EXTERNAL_826701167553276328$$DIST_FESM2015_INDEX_JS_5 = goog.getMsg(\"TODAY\");\n I18N_4 = MSG_EXTERNAL_826701167553276328$$DIST_FESM2015_INDEX_JS_5;\n}\nelse {\n I18N_4 = $localize `:kendo.calendar.today|The label for the today button in the calendar header␟2df64767cd895a8fabe3e18b94b5b6b6f9e2e3f0␟826701167553276328:TODAY`;\n}\nconst _c6 = [\"today\", I18N_4];\nfunction CalendarComponent_kendo_calendar_navigation_2_Template(rf, ctx) { if (rf & 1) {\n const _r121 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-navigation\", 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function CalendarComponent_kendo_calendar_navigation_2_Template_kendo_calendar_navigation_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r121); const ctx_r120 = ɵngcc0.ɵɵnextContext(); return ctx_r120.handleNavigation($event); })(\"pageChange\", function CalendarComponent_kendo_calendar_navigation_2_Template_kendo_calendar_navigation_pageChange_0_listener() { ɵngcc0.ɵɵrestoreView(_r121); const ctx_r122 = ɵngcc0.ɵɵnextContext(); return ctx_r122.onPageChange(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r119 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r119.activeViewEnum)(\"focusedDate\", ctx_r119.focusedDate)(\"min\", ctx_r119.min)(\"max\", ctx_r119.max)(\"templateRef\", ctx_r119.navigationItemTemplate == null ? null : ctx_r119.navigationItemTemplate.templateRef);\n} }\nconst _c7 = [\"dateInput\"];\nconst _c8 = [\"wrap\"];\nvar I18N_9;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the **Increment** button in the DateInput\n * @meaning kendo.dateinput.increment\n */ \n const MSG_EXTERNAL_589112377451589685$$DIST_FESM2015_INDEX_JS_10 = goog.getMsg(\"Increase value\");\n I18N_9 = MSG_EXTERNAL_589112377451589685$$DIST_FESM2015_INDEX_JS_10;\n}\nelse {\n I18N_9 = $localize `:kendo.dateinput.increment|The label for the **Increment** button in the DateInput␟a55944f9de69e7cc86b91200fe96f980a947d704␟589112377451589685:Increase value`;\n}\nvar I18N_11;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the **Decrement** button in the DateInput\n * @meaning kendo.dateinput.decrement\n */ \n const MSG_EXTERNAL_6980524091606682769$$DIST_FESM2015_INDEX_JS_12 = goog.getMsg(\"Decrease value\");\n I18N_11 = MSG_EXTERNAL_6980524091606682769$$DIST_FESM2015_INDEX_JS_12;\n}\nelse {\n I18N_11 = $localize `:kendo.dateinput.decrement|The label for the **Decrement** button in the DateInput␟0eded761107e6dad120997006a7f915bade9b15c␟6980524091606682769:Decrease value`;\n}\nconst _c13 = [\"increment\", I18N_9, \"decrement\", I18N_11];\nfunction DateInputComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n const _r127 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵlistener(\"mousedown\", function DateInputComponent_span_6_Template_span_mousedown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r127); return $event.preventDefault(); });\n ɵngcc0.ɵɵelementStart(1, \"span\", 7);\n ɵngcc0.ɵɵlistener(\"mousedown\", function DateInputComponent_span_6_Template_span_mousedown_1_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r128 = ɵngcc0.ɵɵnextContext(); return ctx_r128.arrowDirection = ctx_r128.arrow.Up; })(\"mouseleave\", function DateInputComponent_span_6_Template_span_mouseleave_1_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r129 = ɵngcc0.ɵɵnextContext(); return ctx_r129.arrowDirection = ctx_r129.arrow.None; })(\"click\", function DateInputComponent_span_6_Template_span_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r130 = ɵngcc0.ɵɵnextContext(); return ctx_r130.handleButtonClick(1); });\n ɵngcc0.ɵɵelement(2, \"span\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 9);\n ɵngcc0.ɵɵlistener(\"click\", function DateInputComponent_span_6_Template_span_click_3_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r131 = ɵngcc0.ɵɵnextContext(); return ctx_r131.handleButtonClick(0 - 1); })(\"mousedown\", function DateInputComponent_span_6_Template_span_mousedown_3_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r132 = ɵngcc0.ɵɵnextContext(); return ctx_r132.arrowDirection = ctx_r132.arrow.Down; })(\"mouseleave\", function DateInputComponent_span_6_Template_span_mouseleave_3_listener() { ɵngcc0.ɵɵrestoreView(_r127); const ctx_r133 = ɵngcc0.ɵɵnextContext(); return ctx_r133.arrowDirection = ctx_r133.arrow.None; });\n ɵngcc0.ɵɵelement(4, \"span\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r125 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r125.arrowDirection === ctx_r125.arrow.Up);\n ɵngcc0.ɵɵproperty(\"title\", ctx_r125.localization.get(\"increment\"));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r125.localization.get(\"increment\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r125.arrowDirection === ctx_r125.arrow.Down);\n ɵngcc0.ɵɵproperty(\"title\", ctx_r125.localization.get(\"decrement\"));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r125.localization.get(\"decrement\"));\n} }\nconst _c14 = function (a0, a1, a2, a3, a4, a5, a6) { return { click: a0, focus: a1, mousedown: a2, touchstart: a3, dragstart: a4, drop: a5, blur: a6 }; };\nconst _c15 = [\"container\"];\nconst _c16 = [\"popupTemplate\"];\nconst _c17 = [\"wrapper\"];\nvar I18N_18;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.datepicker.today\n */ \n const MSG_EXTERNAL_1910980355989755624$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"TODAY\");\n I18N_18 = MSG_EXTERNAL_1910980355989755624$$DIST_FESM2015_INDEX_JS_19;\n}\nelse {\n I18N_18 = $localize `:kendo.datepicker.today|The label for the today button in the calendar header␟91a84f2d4871dbe7e90d84865d4a4d83c8ae041e␟1910980355989755624:TODAY`;\n}\nvar I18N_20;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the datepicker component\n * @meaning kendo.datepicker.toggle\n */ \n const MSG_EXTERNAL_4817467473728423164$$DIST_FESM2015_INDEX_JS_21 = goog.getMsg(\"Toggle calendar\");\n I18N_20 = MSG_EXTERNAL_4817467473728423164$$DIST_FESM2015_INDEX_JS_21;\n}\nelse {\n I18N_20 = $localize `:kendo.datepicker.toggle|The label for the toggle button in the datepicker component␟f6c28c2d80dbe993c4b33f4dc4010364f41cc2ae␟4817467473728423164:Toggle calendar`;\n}\nconst _c22 = [\"today\", I18N_18, \"toggle\", I18N_20];\nfunction DatePickerComponent_ng_template_10_ng_template_3_Template(rf, ctx) { }\nconst _c23 = function (a0) { return { keydown: a0 }; };\nfunction DatePickerComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {\n const _r142 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar\", 9, 10);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DatePickerComponent_ng_template_10_Template_kendo_calendar_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r142); const ctx_r141 = ɵngcc0.ɵɵnextContext(); return ctx_r141.handleChange(ctx_r141.mergeTime($event)); });\n ɵngcc0.ɵɵelement(2, \"kendo-calendar-messages\", 11);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, DatePickerComponent_ng_template_10_ng_template_3_Template, 0, 0, \"ng-template\");\n} if (rf & 2) {\n const ctx_r138 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"min\", ctx_r138.min)(\"max\", ctx_r138.max)(\"navigation\", ctx_r138.navigation)(\"activeView\", ctx_r138.activeView)(\"bottomView\", ctx_r138.bottomView)(\"topView\", ctx_r138.topView)(\"weekNumber\", ctx_r138.weekNumber)(\"cellTemplate\", ctx_r138.cellTemplate)(\"monthCellTemplate\", ctx_r138.monthCellTemplate)(\"yearCellTemplate\", ctx_r138.yearCellTemplate)(\"decadeCellTemplate\", ctx_r138.decadeCellTemplate)(\"centuryCellTemplate\", ctx_r138.centuryCellTemplate)(\"weekNumberTemplate\", ctx_r138.weekNumberTemplate)(\"headerTitleTemplate\", ctx_r138.headerTitleTemplate)(\"navigationItemTemplate\", ctx_r138.navigationItemTemplate)(\"focusedDate\", ctx_r138.focusedDate)(\"value\", ctx_r138.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(21, _c23, ctx_r138.handleKeydown))(\"scope\", ctx_r138)(\"disabledDates\", ctx_r138.disabledDates);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"today\", ctx_r138.localization.get(\"today\"));\n} }\nconst _c24 = function (a0, a1) { return { click: a0, mousedown: a1 }; };\nvar I18N_25;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the timepicker component\n * @meaning kendo.timepicker.accept\n */ \n const MSG_EXTERNAL_7519663530416240229$$DIST_FESM2015_INDEX_JS_26 = goog.getMsg(\"Set\");\n I18N_25 = MSG_EXTERNAL_7519663530416240229$$DIST_FESM2015_INDEX_JS_26;\n}\nelse {\n I18N_25 = $localize `:kendo.timepicker.accept|The Accept button text in the timepicker component␟4c3bf42192220c7611c09ece1c5de14855139dd0␟7519663530416240229:Set`;\n}\nvar I18N_27;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the timepicker component\n * @meaning kendo.timepicker.acceptLabel\n */ \n const MSG_EXTERNAL_4355879331538595758$$DIST_FESM2015_INDEX_JS_28 = goog.getMsg(\"Set time\");\n I18N_27 = MSG_EXTERNAL_4355879331538595758$$DIST_FESM2015_INDEX_JS_28;\n}\nelse {\n I18N_27 = $localize `:kendo.timepicker.acceptLabel|The label for the Accept button in the timepicker component␟93c2a9c3aa49f56e452c0aecbaabe3bb33fa4222␟4355879331538595758:Set time`;\n}\nvar I18N_29;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the timepicker component\n * @meaning kendo.timepicker.cancel\n */ \n const MSG_EXTERNAL_1086687567255473060$$DIST_FESM2015_INDEX_JS_30 = goog.getMsg(\"Cancel\");\n I18N_29 = MSG_EXTERNAL_1086687567255473060$$DIST_FESM2015_INDEX_JS_30;\n}\nelse {\n I18N_29 = $localize `:kendo.timepicker.cancel|The Cancel button text in the timepicker component␟132eefca16bd41d489b4647724b91e93793603aa␟1086687567255473060:Cancel`;\n}\nvar I18N_31;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the timepicker component\n * @meaning kendo.timepicker.cancelLabel\n */ \n const MSG_EXTERNAL_83621966901491941$$DIST_FESM2015_INDEX_JS_32 = goog.getMsg(\"Cancel changes\");\n I18N_31 = MSG_EXTERNAL_83621966901491941$$DIST_FESM2015_INDEX_JS_32;\n}\nelse {\n I18N_31 = $localize `:kendo.timepicker.cancelLabel|The label for the Cancel button in the timepicker component␟2cf6f4ca4470810944b4016c9b6f87943d3390ab␟83621966901491941:Cancel changes`;\n}\nvar I18N_33;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timepicker component\n * @meaning kendo.timepicker.now\n */ \n const MSG_EXTERNAL_5912507758515138116$$DIST_FESM2015_INDEX_JS_34 = goog.getMsg(\"Now\");\n I18N_33 = MSG_EXTERNAL_5912507758515138116$$DIST_FESM2015_INDEX_JS_34;\n}\nelse {\n I18N_33 = $localize `:kendo.timepicker.now|The Now button text in the timepicker component␟bbc99bb74ae75a503bd813aad0c7253d3553e923␟5912507758515138116:Now`;\n}\nvar I18N_35;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timepicker component\n * @meaning kendo.timepicker.nowLabel\n */ \n const MSG_EXTERNAL_371982627910576599$$DIST_FESM2015_INDEX_JS_36 = goog.getMsg(\"Select now\");\n I18N_35 = MSG_EXTERNAL_371982627910576599$$DIST_FESM2015_INDEX_JS_36;\n}\nelse {\n I18N_35 = $localize `:kendo.timepicker.nowLabel|The label for the Now button in the timepicker component␟df1a696f318275aa934e27850920889d494c2740␟371982627910576599:Select now`;\n}\nvar I18N_37;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the timepicker component\n * @meaning kendo.timepicker.toggle\n */ \n const MSG_EXTERNAL_6938407659294495526$$DIST_FESM2015_INDEX_JS_38 = goog.getMsg(\"Toggle time list\");\n I18N_37 = MSG_EXTERNAL_6938407659294495526$$DIST_FESM2015_INDEX_JS_38;\n}\nelse {\n I18N_37 = $localize `:kendo.timepicker.toggle|The label for the toggle button in the timepicker component␟f2c196786ed2d3ecb2369750c36aac9a4053fb30␟6938407659294495526:Toggle time list`;\n}\nconst _c39 = [\"accept\", I18N_25, \"acceptLabel\", I18N_27, \"cancel\", I18N_29, \"cancelLabel\", I18N_31, \"now\", I18N_33, \"nowLabel\", I18N_35, \"toggle\", I18N_37];\nconst _c40 = function (a0, a1) { return { keydown: a0, mousedown: a1 }; };\nfunction TimePickerComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n const _r150 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-timeselector\", 9, 10);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimePickerComponent_ng_template_8_Template_kendo_timeselector_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r150); const ctx_r149 = ɵngcc0.ɵɵnextContext(); return ctx_r149.handleChange($event); })(\"valueReject\", function TimePickerComponent_ng_template_8_Template_kendo_timeselector_valueReject_0_listener() { ɵngcc0.ɵɵrestoreView(_r150); const ctx_r151 = ɵngcc0.ɵɵnextContext(); return ctx_r151.handleReject(); });\n ɵngcc0.ɵɵelement(2, \"kendo-timeselector-messages\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r146 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"cancelButton\", ctx_r146.cancelButton)(\"nowButton\", ctx_r146.nowButton)(\"format\", ctx_r146.format)(\"min\", ctx_r146.min)(\"max\", ctx_r146.max)(\"steps\", ctx_r146.steps)(\"value\", ctx_r146.value)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(15, _c40, ctx_r146.handleKeydown, ctx_r146.handleMousedown))(\"scope\", ctx_r146);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"acceptLabel\", ctx_r146.localization.get(\"acceptLabel\"))(\"accept\", ctx_r146.localization.get(\"accept\"))(\"cancelLabel\", ctx_r146.localization.get(\"cancelLabel\"))(\"cancel\", ctx_r146.localization.get(\"cancel\"))(\"nowLabel\", ctx_r146.localization.get(\"nowLabel\"))(\"now\", ctx_r146.localization.get(\"now\"));\n} }\nvar I18N_41;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Date tab text in the datetimepicker popup header\n * @meaning kendo.datetimepicker.dateTab\n */ \n const MSG_EXTERNAL_3360129034450596425$$DIST_FESM2015_INDEX_JS_42 = goog.getMsg(\"Date\");\n I18N_41 = MSG_EXTERNAL_3360129034450596425$$DIST_FESM2015_INDEX_JS_42;\n}\nelse {\n I18N_41 = $localize `:kendo.datetimepicker.dateTab|The Date tab text in the datetimepicker popup header␟5bb17f81ae8dbc109499ce3792afffa6b7cef855␟3360129034450596425:Date`;\n}\nvar I18N_43;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Date tab in the datetimepicker popup header\n * @meaning kendo.datetimepicker.dateTabLabel\n */ \n const MSG_EXTERNAL_1810540079817643910$$DIST_FESM2015_INDEX_JS_44 = goog.getMsg(\"Date tab\");\n I18N_43 = MSG_EXTERNAL_1810540079817643910$$DIST_FESM2015_INDEX_JS_44;\n}\nelse {\n I18N_43 = $localize `:kendo.datetimepicker.dateTabLabel|The label for the Date tab in the datetimepicker popup header␟2a400c9e364a4c6d83ac39b5513c962805db54b2␟1810540079817643910:Date tab`;\n}\nvar I18N_45;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Time tab text in the datetimepicker popup header\n * @meaning kendo.datetimepicker.timeTab\n */ \n const MSG_EXTERNAL_3807284594201983607$$DIST_FESM2015_INDEX_JS_46 = goog.getMsg(\"Time\");\n I18N_45 = MSG_EXTERNAL_3807284594201983607$$DIST_FESM2015_INDEX_JS_46;\n}\nelse {\n I18N_45 = $localize `:kendo.datetimepicker.timeTab|The Time tab text in the datetimepicker popup header␟e9b2b760a6916040e7520a9a2926d65de175944d␟3807284594201983607:Time`;\n}\nvar I18N_47;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Time tab in the datetimepicker popup header\n * @meaning kendo.datetimepicker.timeTabLabel\n */ \n const MSG_EXTERNAL_2577682127494513393$$DIST_FESM2015_INDEX_JS_48 = goog.getMsg(\"Time tab\");\n I18N_47 = MSG_EXTERNAL_2577682127494513393$$DIST_FESM2015_INDEX_JS_48;\n}\nelse {\n I18N_47 = $localize `:kendo.datetimepicker.timeTabLabel|The label for the Time tab in the datetimepicker popup header␟13bf7e3a1036140119732c6d5952f7a20c22999e␟2577682127494513393:Time tab`;\n}\nvar I18N_49;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the toggle button in the datetimepicker component\n * @meaning kendo.datetimepicker.toggle\n */ \n const MSG_EXTERNAL_3159207801887264026$$DIST_FESM2015_INDEX_JS_50 = goog.getMsg(\"Toggle popup\");\n I18N_49 = MSG_EXTERNAL_3159207801887264026$$DIST_FESM2015_INDEX_JS_50;\n}\nelse {\n I18N_49 = $localize `:kendo.datetimepicker.toggle|The label for the toggle button in the datetimepicker component␟60296a83f0d3e3d07aaba87c4f8e91b0aca3c22a␟3159207801887264026:Toggle popup`;\n}\nvar I18N_51;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the datetimepicker component\n * @meaning kendo.datetimepicker.accept\n */ \n const MSG_EXTERNAL_3915774704336012538$$DIST_FESM2015_INDEX_JS_52 = goog.getMsg(\"Set\");\n I18N_51 = MSG_EXTERNAL_3915774704336012538$$DIST_FESM2015_INDEX_JS_52;\n}\nelse {\n I18N_51 = $localize `:kendo.datetimepicker.accept|The Accept button text in the datetimepicker component␟4359b59db7ded88e106ada877e744c71b188f8f9␟3915774704336012538:Set`;\n}\nvar I18N_53;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the datetimepicker component\n * @meaning kendo.datetimepicker.acceptLabel\n */ \n const MSG_EXTERNAL_4770689705864890748$$DIST_FESM2015_INDEX_JS_54 = goog.getMsg(\"Set\");\n I18N_53 = MSG_EXTERNAL_4770689705864890748$$DIST_FESM2015_INDEX_JS_54;\n}\nelse {\n I18N_53 = $localize `:kendo.datetimepicker.acceptLabel|The label for the Accept button in the datetimepicker component␟cbea4571cca81ad9767a6b29f0287d1f3f6372dc␟4770689705864890748:Set`;\n}\nvar I18N_55;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the datetimepicker component\n * @meaning kendo.datetimepicker.cancel\n */ \n const MSG_EXTERNAL_5100781969600382158$$DIST_FESM2015_INDEX_JS_56 = goog.getMsg(\"Cancel\");\n I18N_55 = MSG_EXTERNAL_5100781969600382158$$DIST_FESM2015_INDEX_JS_56;\n}\nelse {\n I18N_55 = $localize `:kendo.datetimepicker.cancel|The Cancel button text in the datetimepicker component␟17ab795d6f7527dd962a309759ca58cb4edd7e52␟5100781969600382158:Cancel`;\n}\nvar I18N_57;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the datetimepicker component\n * @meaning kendo.datetimepicker.cancelLabel\n */ \n const MSG_EXTERNAL_3535986227615756275$$DIST_FESM2015_INDEX_JS_58 = goog.getMsg(\"Cancel\");\n I18N_57 = MSG_EXTERNAL_3535986227615756275$$DIST_FESM2015_INDEX_JS_58;\n}\nelse {\n I18N_57 = $localize `:kendo.datetimepicker.cancelLabel|The label for the Cancel button in the datetimepicker component␟ba26795ab9f4c21d66b17549ba854a96fcdac1f9␟3535986227615756275:Cancel`;\n}\nvar I18N_59;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timepicker component\n * @meaning kendo.datetimepicker.now\n */ \n const MSG_EXTERNAL_5497093725885127701$$DIST_FESM2015_INDEX_JS_60 = goog.getMsg(\"NOW\");\n I18N_59 = MSG_EXTERNAL_5497093725885127701$$DIST_FESM2015_INDEX_JS_60;\n}\nelse {\n I18N_59 = $localize `:kendo.datetimepicker.now|The Now button text in the timepicker component␟7172e7e9a1741f6b63439ec89e498c995cb23b0d␟5497093725885127701:NOW`;\n}\nvar I18N_61;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timepicker component\n * @meaning kendo.datetimepicker.nowLabel\n */ \n const MSG_EXTERNAL_5046379108717037514$$DIST_FESM2015_INDEX_JS_62 = goog.getMsg(\"Select now\");\n I18N_61 = MSG_EXTERNAL_5046379108717037514$$DIST_FESM2015_INDEX_JS_62;\n}\nelse {\n I18N_61 = $localize `:kendo.datetimepicker.nowLabel|The label for the Now button in the timepicker component␟52d90641b26b1ce4c011cadf0437ce36c1dac1d5␟5046379108717037514:Select now`;\n}\nvar I18N_63;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.datetimepicker.today\n */ \n const MSG_EXTERNAL_7904626229769721311$$DIST_FESM2015_INDEX_JS_64 = goog.getMsg(\"TODAY\");\n I18N_63 = MSG_EXTERNAL_7904626229769721311$$DIST_FESM2015_INDEX_JS_64;\n}\nelse {\n I18N_63 = $localize `:kendo.datetimepicker.today|The label for the today button in the calendar header␟7ee30b9ae5918cc544fbd87a4135694397aeefaf␟7904626229769721311:TODAY`;\n}\nconst _c65 = [\"dateTab\", I18N_41, \"dateTabLabel\", I18N_43, \"timeTab\", I18N_45, \"timeTabLabel\", I18N_47, \"toggle\", I18N_49, \"accept\", I18N_51, \"acceptLabel\", I18N_53, \"cancel\", I18N_55, \"cancelLabel\", I18N_57, \"now\", I18N_59, \"nowLabel\", I18N_61, \"today\", I18N_63];\nfunction DateTimePickerComponent_ng_template_10_button_16_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 25);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r157 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(5, _c3, ctx_r157.handleCancel))(\"scope\", ctx_r157);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r157.localization.get(\"cancelLabel\"))(\"aria-label\", ctx_r157.localization.get(\"cancelLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r157.localization.get(\"cancel\"), \" \");\n} }\nconst _c66 = function (a0, a1) { return { mousedown: a0, keydown: a1 }; };\nconst _c67 = function (a0, a1) { return { focusin: a0, focusout: a1 }; };\nconst _c68 = function (a0, a1) { return { click: a0, keydown: a1 }; };\nconst _c69 = function (a0) { return { transitionend: a0 }; };\nconst _c70 = function (a0, a1, a2) { return { keydown: a0, focusin: a1, focusout: a2 }; };\nfunction DateTimePickerComponent_ng_template_10_Template(rf, ctx) { if (rf & 1) {\n const _r159 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 9);\n ɵngcc0.ɵɵelementStart(1, \"div\", 10);\n ɵngcc0.ɵɵelementStart(2, \"div\", 11);\n ɵngcc0.ɵɵelementStart(3, \"button\", 12);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"button\", 13);\n ɵngcc0.ɵɵtext(6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(7, \"div\", 14, 15);\n ɵngcc0.ɵɵelementStart(9, \"div\", 16);\n ɵngcc0.ɵɵelementStart(10, \"kendo-calendar\", 17);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateTimePickerComponent_ng_template_10_Template_kendo_calendar_valueChange_10_listener($event) { ɵngcc0.ɵɵrestoreView(_r159); const ctx_r158 = ɵngcc0.ɵɵnextContext(); return ctx_r158.calendarValue = $event; })(\"valueChange\", function DateTimePickerComponent_ng_template_10_Template_kendo_calendar_valueChange_10_listener() { ɵngcc0.ɵɵrestoreView(_r159); const ctx_r160 = ɵngcc0.ɵɵnextContext(); return ctx_r160.handleCalendarValueChange(); });\n ɵngcc0.ɵɵelement(11, \"kendo-calendar-messages\", 18);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(12, \"div\", 19);\n ɵngcc0.ɵɵelementStart(13, \"kendo-timeselector\", 20);\n ɵngcc0.ɵɵelement(14, \"kendo-timeselector-messages\", 21);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(15, \"div\", 22);\n ɵngcc0.ɵɵtemplate(16, DateTimePickerComponent_ng_template_10_button_16_Template, 2, 7, \"button\", 23);\n ɵngcc0.ɵɵelementStart(17, \"button\", 24);\n ɵngcc0.ɵɵtext(18);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const _r156 = ɵngcc0.ɵɵreference(8);\n const ctx_r155 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassMapInterpolate1(\"k-datetime-wrap k-\", ctx_r155.activeTab, \"-tab\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(58, _c66, ctx_r155.preventMouseDown, ctx_r155.handleKeyDown))(\"scope\", ctx_r155);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(61, _c67, ctx_r155.handleFocus, ctx_r155.handleBlur))(\"scope\", ctx_r155);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r155.activeTab === \"date\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(64, _c68, ctx_r155.changeActiveTab.bind(ctx_r155, \"date\"), ctx_r155.handleBackTabOut))(\"scope\", ctx_r155);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r155.localization.get(\"dateTabLabel\"))(\"aria-label\", ctx_r155.localization.get(\"dateTabLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r155.localization.get(\"dateTab\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-active\", ctx_r155.activeTab === \"time\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(67, _c3, ctx_r155.changeActiveTab.bind(ctx_r155, \"time\")));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r155.localization.get(\"timeTabLabel\"))(\"aria-label\", ctx_r155.localization.get(\"timeTabLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r155.localization.get(\"timeTab\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"transition\", ctx_r155.tabSwitchTransition);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(69, _c69, ctx_r155.handleTabChangeTransitionEnd.bind(ctx_r155, _r156)));\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r155.calendarValue)(\"min\", ctx_r155.calendarMin)(\"max\", ctx_r155.calendarMax)(\"focusedDate\", ctx_r155.focusedDate)(\"weekNumber\", ctx_r155.weekNumber)(\"navigation\", false)(\"cellTemplate\", ctx_r155.cellTemplate)(\"monthCellTemplate\", ctx_r155.monthCellTemplate)(\"yearCellTemplate\", ctx_r155.yearCellTemplate)(\"decadeCellTemplate\", ctx_r155.decadeCellTemplate)(\"centuryCellTemplate\", ctx_r155.centuryCellTemplate)(\"weekNumberTemplate\", ctx_r155.weekNumberTemplate)(\"headerTitleTemplate\", ctx_r155.headerTitleTemplate)(\"disabled\", ctx_r155.disableCalendar)(\"disabledDates\", ctx_r155.disabledDates);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"today\", ctx_r155.localization.get(\"today\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx_r155.value)(\"format\", ctx_r155.timeSelectorFormat)(\"min\", ctx_r155.timeSelectorMin)(\"max\", ctx_r155.timeSelectorMax)(\"setButton\", false)(\"cancelButton\", false)(\"steps\", ctx_r155.steps)(\"disabled\", ctx_r155.disableTimeSelector);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"now\", ctx_r155.localization.get(\"now\"))(\"nowLabel\", ctx_r155.localization.get(\"nowLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(71, _c70, ctx_r155.handleTabOut, ctx_r155.handleFocus, ctx_r155.handleBlur))(\"scope\", ctx_r155);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r155.cancelButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", !ctx_r155.calendarValue)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(75, _c3, ctx_r155.handleAccept))(\"scope\", ctx_r155);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r155.localization.get(\"acceptLabel\"))(\"aria-label\", ctx_r155.localization.get(\"acceptLabel\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r155.localization.get(\"accept\"), \" \");\n} }\nconst _c71 = function (a0, a1) { return { mousedown: a0, click: a1 }; };\nfunction HorizontalViewListComponent_tbody_2_Template(rf, ctx) { if (rf & 1) {\n const _r164 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"tbody\", 3);\n ɵngcc0.ɵɵlistener(\"change\", function HorizontalViewListComponent_tbody_2_Template_tbody_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r164); const ctx_r163 = ɵngcc0.ɵɵnextContext(); return ctx_r163.handleDateChange($event); })(\"cellEnter\", function HorizontalViewListComponent_tbody_2_Template_tbody_cellEnter_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r164); const ctx_r165 = ɵngcc0.ɵɵnextContext(); return ctx_r165.cellEnter.emit($event); })(\"cellLeave\", function HorizontalViewListComponent_tbody_2_Template_tbody_cellLeave_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r164); const ctx_r166 = ɵngcc0.ɵɵnextContext(); return ctx_r166.cellLeave.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const date_r162 = ctx.$implicit;\n const ctx_r161 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"activeView\", ctx_r161.activeView)(\"isActive\", ctx_r161.isActive)(\"min\", ctx_r161.min)(\"max\", ctx_r161.max)(\"cellUID\", ctx_r161.cellUID)(\"focusedDate\", ctx_r161.focusedDate)(\"selectedDate\", ctx_r161.value)(\"selectionRange\", ctx_r161.selectionRange)(\"activeRangeEnd\", ctx_r161.activeRangeEnd)(\"weekNumber\", ctx_r161.weekNumber)(\"templateRef\", ctx_r161.cellTemplateRef)(\"weekNumberTemplateRef\", ctx_r161.weekNumberTemplateRef)(\"viewDate\", date_r162);\n} }\nvar I18N_72;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the today button in the calendar header\n * @meaning kendo.multiviewcalendar.today\n */ \n const MSG_EXTERNAL_3892034896682737327$$DIST_FESM2015_INDEX_JS_73 = goog.getMsg(\"TODAY\");\n I18N_72 = MSG_EXTERNAL_3892034896682737327$$DIST_FESM2015_INDEX_JS_73;\n}\nelse {\n I18N_72 = $localize `:kendo.multiviewcalendar.today|The label for the today button in the calendar header␟063d99483243b27bc8282abfb5f2c76877e1112e␟3892034896682737327:TODAY`;\n}\nvar I18N_74;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the previous button in the Multiview calendar\n * @meaning kendo.multiviewcalendar.prevButtonTitle\n */ \n const MSG_EXTERNAL_9101635325676663492$$DIST_FESM2015_INDEX_JS_75 = goog.getMsg(\"Navigate to previous view\");\n I18N_74 = MSG_EXTERNAL_9101635325676663492$$DIST_FESM2015_INDEX_JS_75;\n}\nelse {\n I18N_74 = $localize `:kendo.multiviewcalendar.prevButtonTitle|The label for the previous button in the Multiview calendar␟e783e2af4828224b846fa92148ea1cc52b21bb13␟9101635325676663492:Navigate to previous view`;\n}\nvar I18N_76;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the next button in the Multiview calendar\n * @meaning kendo.multiviewcalendar.nextButtonTitle\n */ \n const MSG_EXTERNAL_3994336778698343633$$DIST_FESM2015_INDEX_JS_77 = goog.getMsg(\"Navigate to next view\");\n I18N_76 = MSG_EXTERNAL_3994336778698343633$$DIST_FESM2015_INDEX_JS_77;\n}\nelse {\n I18N_76 = $localize `:kendo.multiviewcalendar.nextButtonTitle|The label for the next button in the Multiview calendar␟3e3a529a242f39d22f841c3bd8045ec75b696b7a␟3994336778698343633:Navigate to next view`;\n}\nconst _c78 = [\"today\", I18N_72, \"prevButtonTitle\", I18N_74, \"nextButtonTitle\", I18N_76];\nconst _c79 = [\"defaultTemplate\"];\nfunction DateRangePopupComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-multiviewcalendar\", 2);\n} }\nfunction DateRangeComponent_kendo_daterange_popup_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-daterange-popup\");\n} }\nfunction HeaderComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r171 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate(ctx_r171.title);\n} }\nfunction HeaderComponent_ng_template_2_Template(rf, ctx) { }\nconst _c80 = [\"kendoCalendarView\", \"\"];\nfunction ViewComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 3);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n} }\nfunction ViewComponent_tr_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵelementStart(1, \"th\", 5);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r175 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"colSpan\", ctx_r175.colSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r175.title);\n} }\nfunction ViewComponent_tr_3_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\");\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const name_r179 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(name_r179);\n} }\nfunction ViewComponent_tr_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_3_th_1_Template, 2, 1, \"th\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r176 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r176.weekNames);\n} }\nfunction ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const row_r180 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r185 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r185.getWeekNumber(ctx_r185.firstDate(row_r180)), \" \");\n} }\nfunction ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template(rf, ctx) { }\nconst _c81 = function (a0, a1) { return { $implicit: a0, cellContext: a1 }; };\nfunction ViewComponent_tr_4_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 10);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_template_1_td_0_ng_template_1_Template, 1, 1, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_template_1_td_0_ng_template_2_Template, 0, 0, \"ng-template\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r180 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r184 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r184.weekNumberTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r184.weekNumberTemplateRef)(\"ngTemplateOutlet\", ctx_r184.weekNumberTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(4, _c81, ctx_r184.firstDate(row_r180), ctx_r184.getWeekNumberContext(row_r180)));\n} }\nfunction ViewComponent_tr_4_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_tr_4_ng_template_1_td_0_Template, 3, 7, \"td\", 9);\n} if (rf & 2) {\n const row_r180 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r182 = ɵngcc0.ɵɵnextContext();\n const _r173 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r182.firstDate(row_r180))(\"ngIfElse\", _r173);\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const cell_r190 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵtextInterpolate(cell_r190.formattedValue);\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template(rf, ctx) { }\nfunction ViewComponent_tr_4_ng_container_2_td_1_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_tr_4_ng_container_2_td_1_3_ng_template_0_Template, 0, 0, \"ng-template\", 16);\n} if (rf & 2) {\n const cell_r190 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r194 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r194.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c81, cell_r190.value, cell_r190));\n} }\nfunction ViewComponent_tr_4_ng_container_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 13);\n ɵngcc0.ɵɵelementStart(1, \"span\", 14);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_container_2_td_1_ng_template_2_Template, 1, 1, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(3, ViewComponent_tr_4_ng_container_2_td_1_3_Template, 1, 5, undefined, 15);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r198 = ɵngcc0.ɵɵnextContext();\n const cell_r190 = ctx_r198.$implicit;\n const cellIndex_r191 = ctx_r198.index;\n const rowIndex_r181 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r192 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r192.getStyles(cell_r190))(\"title\", cell_r190.title);\n ɵngcc0.ɵɵattribute(\"id\", cell_r190.id)(\"data-cell-index\", ctx_r192.tableCellIndex(rowIndex_r181, cellIndex_r191))(\"aria-selected\", cell_r190.isSelected || cell_r190.isRangeStart || cell_r190.isRangeMid || cell_r190.isRangeEnd)(\"aria-disabled\", cell_r190.isDisabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r192.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r192.templateRef);\n} }\nfunction ViewComponent_tr_4_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_container_2_td_1_Template, 4, 8, \"td\", 12);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const cell_r190 = ctx.$implicit;\n ɵngcc0.ɵɵnextContext(2);\n const _r173 = ɵngcc0.ɵɵreference(1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", cell_r190)(\"ngIfElse\", _r173);\n} }\nfunction ViewComponent_tr_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 4);\n ɵngcc0.ɵɵtemplate(1, ViewComponent_tr_4_ng_template_1_Template, 1, 2, \"ng-template\", 7);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_4_ng_container_2_Template, 2, 2, \"ng-container\", 8);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const row_r180 = ctx.$implicit;\n const ctx_r177 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r177.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", row_r180);\n} }\nfunction TimeListComponent_li_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 3);\n ɵngcc0.ɵɵelementStart(1, \"span\");\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r201 = ctx.$implicit;\n const index_r202 = ctx.index;\n ɵngcc0.ɵɵattribute(\"data-timelist-item-index\", index_r202);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(item_r201.text);\n} }\nconst _c82 = [\"accept\"];\nconst _c83 = [\"cancel\"];\nconst _c84 = [\"now\"];\nconst _c85 = [\"listWrapper\"];\nvar I18N_86;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Accept button text in the timeselector component\n * @meaning kendo.timeselector.accept\n */ \n const MSG_EXTERNAL_5362895271044573681$$DIST_FESM2015_INDEX_JS_87 = goog.getMsg(\"Set\");\n I18N_86 = MSG_EXTERNAL_5362895271044573681$$DIST_FESM2015_INDEX_JS_87;\n}\nelse {\n I18N_86 = $localize `:kendo.timeselector.accept|The Accept button text in the timeselector component␟801811aa1609e3f173c86baa82cee037f75a215f␟5362895271044573681:Set`;\n}\nvar I18N_88;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Accept button in the timeselector component\n * @meaning kendo.timeselector.acceptLabel\n */ \n const MSG_EXTERNAL_3417396278000787211$$DIST_FESM2015_INDEX_JS_89 = goog.getMsg(\"Set time\");\n I18N_88 = MSG_EXTERNAL_3417396278000787211$$DIST_FESM2015_INDEX_JS_89;\n}\nelse {\n I18N_88 = $localize `:kendo.timeselector.acceptLabel|The label for the Accept button in the timeselector component␟b4b1e5ac55f0330f6c4e32b866ae4339ad969978␟3417396278000787211:Set time`;\n}\nvar I18N_90;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Cancel button text in the timeselector component\n * @meaning kendo.timeselector.cancel\n */ \n const MSG_EXTERNAL_1890188482755567622$$DIST_FESM2015_INDEX_JS_91 = goog.getMsg(\"Cancel\");\n I18N_90 = MSG_EXTERNAL_1890188482755567622$$DIST_FESM2015_INDEX_JS_91;\n}\nelse {\n I18N_90 = $localize `:kendo.timeselector.cancel|The Cancel button text in the timeselector component␟3004d7704ffa6202a3b3925fcea490e486203a3e␟1890188482755567622:Cancel`;\n}\nvar I18N_92;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Cancel button in the timeselector component\n * @meaning kendo.timeselector.cancelLabel\n */ \n const MSG_EXTERNAL_5738120209397145846$$DIST_FESM2015_INDEX_JS_93 = goog.getMsg(\"Cancel changes\");\n I18N_92 = MSG_EXTERNAL_5738120209397145846$$DIST_FESM2015_INDEX_JS_93;\n}\nelse {\n I18N_92 = $localize `:kendo.timeselector.cancelLabel|The label for the Cancel button in the timeselector component␟08dfbdfffd662371a6ff4c0b6ed82b9faa48143b␟5738120209397145846:Cancel changes`;\n}\nvar I18N_94;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The Now button text in the timeselector component\n * @meaning kendo.timeselector.now\n */ \n const MSG_EXTERNAL_1926162752852226109$$DIST_FESM2015_INDEX_JS_95 = goog.getMsg(\"Now\");\n I18N_94 = MSG_EXTERNAL_1926162752852226109$$DIST_FESM2015_INDEX_JS_95;\n}\nelse {\n I18N_94 = $localize `:kendo.timeselector.now|The Now button text in the timeselector component␟98cba1ae36a7bbe15e1bac1837e07922ec109e7d␟1926162752852226109:Now`;\n}\nvar I18N_96;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the Now button in the timeselector component\n * @meaning kendo.timeselector.nowLabel\n */ \n const MSG_EXTERNAL_7789175884909488647$$DIST_FESM2015_INDEX_JS_97 = goog.getMsg(\"Select now\");\n I18N_96 = MSG_EXTERNAL_7789175884909488647$$DIST_FESM2015_INDEX_JS_97;\n}\nelse {\n I18N_96 = $localize `:kendo.timeselector.nowLabel|The label for the Now button in the timeselector component␟08e6a8a51d970609e138950fdd89c5cf201869f3␟7789175884909488647:Select now`;\n}\nconst _c98 = [\"accept\", I18N_86, \"acceptLabel\", I18N_88, \"cancel\", I18N_90, \"cancelLabel\", I18N_92, \"now\", I18N_94, \"nowLabel\", I18N_96];\nconst _c99 = function (a0, a1, a2) { return { click: a0, focus: a1, blur: a2 }; };\nfunction TimeSelectorComponent_button_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 8, 9);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r203 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c99, ctx_r203.handleNow, ctx_r203.handleFocus, ctx_r203.handleBlur))(\"scope\", ctx_r203)(\"disabled\", ctx_r203.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r203.localization.get(\"nowLabel\"))(\"aria-label\", ctx_r203.localization.get(\"nowLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r203.localization.get(\"now\"));\n} }\nconst _c100 = function (a0, a1) { return { focus: a0, blur: a1 }; };\nfunction TimeSelectorComponent_ng_template_8_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r213 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 12, 13);\n ɵngcc0.ɵɵelementStart(2, \"span\", 2);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-timelist\", 14);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimeSelectorComponent_ng_template_8_div_0_Template_kendo_timelist_valueChange_4_listener($event) { ɵngcc0.ɵɵrestoreView(_r213); const ctx_r212 = ɵngcc0.ɵɵnextContext(2); return ctx_r212.current = $event; });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r214 = ɵngcc0.ɵɵnextContext();\n const part_r207 = ctx_r214.$implicit;\n const idx_r208 = ctx_r214.index;\n const ctx_r209 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r209.intl.dateFieldName(part_r207));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"min\", ctx_r209.min)(\"max\", ctx_r209.max)(\"part\", part_r207)(\"step\", ctx_r209.partStep(part_r207))(\"disabled\", ctx_r209.disabled)(\"value\", ctx_r209.current)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(10, _c100, ctx_r209.handleListFocus, ctx_r209.handleBlur))(\"scope\", ctx_r209);\n ɵngcc0.ɵɵattribute(\"data-timelist-index\", idx_r208);\n} }\nfunction TimeSelectorComponent_ng_template_8_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 15);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const part_r207 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", part_r207.pattern, \" \");\n} }\nfunction TimeSelectorComponent_ng_template_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TimeSelectorComponent_ng_template_8_div_0_Template, 5, 13, \"div\", 10);\n ɵngcc0.ɵɵtemplate(1, TimeSelectorComponent_ng_template_8_div_1_Template, 2, 1, \"div\", 11);\n} if (rf & 2) {\n const part_r207 = ctx.$implicit;\n ɵngcc0.ɵɵproperty(\"ngIf\", part_r207.type !== \"literal\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", part_r207.type === \"literal\");\n} }\nfunction TimeSelectorComponent_div_9_button_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 19, 20);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r216 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c99, ctx_r216.handleReject, ctx_r216.handleFocus, ctx_r216.handleBlur))(\"scope\", ctx_r216)(\"disabled\", ctx_r216.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r216.localization.get(\"cancelLabel\"))(\"aria-label\", ctx_r216.localization.get(\"cancelLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r216.localization.get(\"cancel\"));\n} }\nfunction TimeSelectorComponent_div_9_button_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"button\", 21, 22);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r217 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction3(6, _c99, ctx_r217.handleAccept, ctx_r217.handleFocus, ctx_r217.handleBlur))(\"scope\", ctx_r217)(\"disabled\", ctx_r217.disabled);\n ɵngcc0.ɵɵattribute(\"title\", ctx_r217.localization.get(\"acceptLabel\"))(\"aria-label\", ctx_r217.localization.get(\"acceptLabel\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r217.localization.get(\"accept\"));\n} }\nfunction TimeSelectorComponent_div_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 16);\n ɵngcc0.ɵɵtemplate(1, TimeSelectorComponent_div_9_button_1_Template, 3, 10, \"button\", 17);\n ɵngcc0.ɵɵtemplate(2, TimeSelectorComponent_div_9_button_2_Template, 3, 10, \"button\", 18);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r205 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r205.cancelButton);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r205.setButton);\n} }\nvar Action;\n(function (Action) {\n Action[Action[\"Left\"] = 0] = \"Left\";\n Action[Action[\"Right\"] = 1] = \"Right\";\n Action[Action[\"Up\"] = 2] = \"Up\";\n Action[Action[\"Down\"] = 3] = \"Down\";\n Action[Action[\"PrevView\"] = 4] = \"PrevView\";\n Action[Action[\"NextView\"] = 5] = \"NextView\";\n Action[Action[\"FirstInView\"] = 6] = \"FirstInView\";\n Action[Action[\"LastInView\"] = 7] = \"LastInView\";\n Action[Action[\"LowerView\"] = 8] = \"LowerView\";\n Action[Action[\"UpperView\"] = 9] = \"UpperView\";\n})(Action || (Action = {}));\n\n/**\n * @hidden\n */\nconst EMPTY_SELECTIONRANGE = { start: null, end: null };\n\n/**\n * @hidden\n */\nconst MIDNIGHT_DATE = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MIN_DATE = new Date(1900, 0, 1);\n/**\n * @hidden\n */\nconst MAX_DATE = new Date(2099, 11, 31);\n/**\n * @hidden\n */\nconst MIN_TIME = new Date(1980, 0, 1);\n/**\n * @hidden\n */\nconst MAX_TIME = new Date(1980, 0, 1, 23, 59, 59);\n\n/* tslint:disable:no-bitwise max-line-length */\nconst isSet = (value) => value !== null && value !== undefined;\nconst setter = (method) => (date, value) => {\n const clone = cloneDate(date);\n clone[method](value);\n return clone;\n};\n/**\n * @hidden\n */\nconst setTime = (origin, candidate) => {\n const date = cloneDate(origin);\n date.setHours(candidate.getHours(), candidate.getMinutes(), candidate.getSeconds(), candidate.getMilliseconds());\n return date;\n};\nconst normalizeTimes = (candidate, min, max) => ({\n candidateValue: setTime(MIDNIGHT_DATE, candidate),\n maxValue: addDays(setTime(MIDNIGHT_DATE, max), min.getHours() < max.getHours() ||\n (min.getHours() === max.getHours() && min.getMinutes() < max.getMinutes()) ? 0 : 1),\n minValue: setTime(MIDNIGHT_DATE, min)\n});\n/**\n * @hidden\n */\nconst setHours = setter('setHours');\n/**\n * @hidden\n */\nconst setMinutes = setter('setMinutes');\n/**\n * @hidden\n */\nconst setSeconds = setter('setSeconds');\n/**\n * @hidden\n */\nconst range = (start, end, step = 1) => {\n const result = [];\n for (let i = start; i < end; i = i + step) {\n result.push(i);\n }\n return result;\n};\n/**\n * @hidden\n */\nconst isInRange = (candidate, min, max) => (!candidate || !((min && min > candidate) || (max && max < candidate)));\n/**\n * @hidden\n */\nconst isInTimeRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return true;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n return minValue <= candidateValue && candidateValue <= maxValue;\n};\n/**\n * @hidden\n */\nconst isValidRange = (min, max) => (!isSet(min) || !isSet(max) || min <= max);\n/**\n * @hidden\n */\nconst dateInRange = (candidate, min, max) => {\n if (!candidate) {\n return candidate;\n }\n if (min && candidate < min) {\n return cloneDate(min);\n }\n if (max && candidate > max) {\n return cloneDate(max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst timeInRange = (candidate, min, max) => {\n if (!candidate || !min || !max) {\n return candidate;\n }\n const { candidateValue, minValue, maxValue } = normalizeTimes(candidate, min, max);\n if (candidateValue < minValue) {\n return setTime(candidate, min);\n }\n if (candidateValue > maxValue) {\n return setTime(candidate, max);\n }\n return candidate;\n};\n/**\n * @hidden\n */\nconst getNow = () => new Date();\n/**\n * @hidden\n */\nconst getToday = () => getDate(new Date());\n/**\n * @hidden\n */\nconst noop = (_) => { }; // tslint:disable-line:no-empty\n/**\n * @hidden\n */\nconst isWindowAvailable = () => {\n return typeof window !== 'undefined';\n};\n/**\n * @hidden\n */\nconst stringifyClassObject = (classes) => {\n const pushToAcc = (acc, cls) => classes[cls] ? acc.concat(cls) : acc;\n return Object.keys(classes).reduce(pushToAcc, []).join(' ');\n};\n/**\n * @hidden\n */\nconst shiftWeekNames = (names, offset) => (names.slice(offset).concat(names.slice(0, offset)));\n/**\n * @hidden\n */\nconst approximateStringMatching = (oldTextOrigin, oldFormat, newTextOrigin, caret) => {\n // Remove the right part of the cursor.\n //oldFormat = oldFormat.substring(0, caret + oldText.length - newText.length);\n const oldIndex = caret + oldTextOrigin.length - newTextOrigin.length;\n const oldTextSeparator = oldTextOrigin[oldIndex];\n const oldText = oldTextOrigin.substring(0, caret + oldTextOrigin.length - newTextOrigin.length);\n const newText = newTextOrigin.substring(0, caret);\n const diff = [];\n // Handle typing a single character over the same selection.\n if (oldText === newText && caret > 0) {\n diff.push([oldFormat[caret - 1], newText[caret - 1]]);\n return diff;\n }\n if (oldText.indexOf(newText) === 0 && (newText.length === 0 || oldFormat[newText.length - 1] !== oldFormat[newText.length])) {\n // Handle Delete/Backspace.\n let deletedSymbol = \"\";\n //XXX:\n // Whole text is replaced with a same char\n // Nasty patch required to keep the selection in the first segment\n if (newText.length === 1) {\n diff.push([oldFormat[0], newText[0]]);\n }\n for (let i = newText.length; i < oldText.length; i++) {\n if (oldFormat[i] !== deletedSymbol && oldFormat[i] !== \"_\") {\n deletedSymbol = oldFormat[i];\n diff.push([deletedSymbol, \"\"]);\n }\n }\n return diff;\n }\n // Handle inserting text (the new text is longer than the previous one).\n // Handle typing over a literal as well.\n if (newText.indexOf(oldText) === 0 || oldFormat[caret - 1] === \"_\") {\n let symbol = oldFormat[0];\n for (let i = Math.max(0, oldText.length - 1); i < oldFormat.length; i++) {\n if (oldFormat[i] !== \"_\") {\n symbol = oldFormat[i];\n break;\n }\n }\n return [[symbol, newText[caret - 1]]];\n }\n // Handle entering a space or a separator, for navigation to the next item.\n if (newText[newText.length - 1] === \" \" || (newText[newText.length - 1] === oldTextSeparator && oldFormat[oldIndex] === '_')) {\n return [[oldFormat[caret - 1], \"_\"]];\n }\n // Handle typing over a correctly selected part.\n return [[oldFormat[caret - 1], newText[caret - 1]]];\n};\n/**\n * @hidden\n */\nconst domContainerFactory = (type) => (children, classes = \"\", styles = {}) => {\n const container = document.createElement(type);\n container.className = classes;\n Object.keys(styles).map(key => container.style[key] = styles[key]);\n if (typeof children === 'string') {\n container.innerHTML = children || '';\n }\n else {\n (children || []).forEach(child => child && container.appendChild(child));\n }\n return container;\n};\n/**\n * @hidden\n */\nconst hasChange = (changes, field) => changes[field] !== undefined;\n/**\n * @hidden\n */\nconst hasExistingValue = (changes, field) => changes[field] && changes[field].currentValue !== undefined && changes[field].currentValue !== null;\n/**\n * @hidden\n */\nconst isInSelectionRange = (value, selectionRange) => {\n const { start, end } = selectionRange || EMPTY_SELECTIONRANGE;\n if (!start || !end) {\n return false;\n }\n return start < value && value < end;\n};\n/**\n * @hidden\n */\nconst either = (value1, value2) => value1 || value2;\n/**\n * @hidden\n */\nconst clampRange = (value) => ({ start: value, end: value });\n/**\n * @hidden\n */\nconst isEqualRange = (initial, updated) => {\n const { start: initialStart, end: initialEnd } = initial || EMPTY_SELECTIONRANGE;\n const { start: updatedStart, end: updatedEnd } = updated || EMPTY_SELECTIONRANGE;\n return isEqual(initialStart, updatedStart) && isEqual(initialEnd, updatedEnd);\n};\n/**\n * @hidden\n *\n * Creates a new date based on the date information from the specified date portion\n * and the time information from the time portion.\n * If a parameter is not provided, returns `null`.\n */\nconst mergeDateAndTime = (date, time) => {\n if (!(date && time)) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());\n};\n/**\n * @hidden\n */\nconst lastMillisecondOfDate = (date) => {\n if (!date) {\n return null;\n }\n return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59, 999);\n};\n/**\n * @hidden\n *\n * Returns an array with dates ranging between and including the specified start and\n * end dates that are evaluated as disabled.\n */\nconst disabledDatesInRange = (start, end, isDateDisabled) => {\n if (!(start && end && isDateDisabled) || (start > end)) {\n return [];\n }\n const dates = [];\n let current = start;\n while (current <= end) {\n if (isDateDisabled(current)) {\n dates.push(current);\n }\n current = addDays(current, 1);\n }\n return dates;\n};\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA = [[]];\nconst CELLS_LENGTH = 5;\nconst ROWS_LENGTH = 2;\nconst ACTIONS = {\n [Action.Left]: (date) => addDecades(date, -1),\n [Action.Up]: (date) => addDecades(date, -5),\n [Action.Right]: (date) => addDecades(date, 1),\n [Action.Down]: (date) => addDecades(date, 5),\n [Action.PrevView]: (date) => addCenturies(date, -1),\n [Action.NextView]: (date) => addCenturies(date, 1),\n [Action.FirstInView]: (date) => firstDecadeOfCentury(date),\n [Action.LastInView]: (date) => lastDecadeOfCentury(date)\n};\n/**\n * @hidden\n */\nclass CenturyViewService {\n addToDate(min, skip) {\n return addCenturies(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addCenturies(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA;\n }\n const cells = range(0, CELLS_LENGTH);\n const firstDate = firstDecadeOfCentury(viewDate);\n const lastDate = lastDecadeOfCentury(viewDate);\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const today = getToday();\n return range(0, ROWS_LENGTH).map(rowOffset => {\n const baseDate = addDecades(firstDate, rowOffset * CELLS_LENGTH);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDecades(baseDate, cellOffset), min, max);\n if (!this.isInRange(cellDate, min, max)) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return firstYearOfDecade(candidate).getFullYear() === firstYearOfDecade(expected).getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 99);\n }\n isInRange(candidate, min, max) {\n const year = firstYearOfDecade(candidate).getFullYear();\n const aboveMin = !min || firstYearOfDecade(min).getFullYear() <= year;\n const belowMax = !max || year <= firstYearOfDecade(max).getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(firstDecadeOfCentury(date));\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 1000 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return firstYearOfDecade(value).getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstDecadeOfCentury(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstDecadeOfCentury(value).getFullYear()} - ${lastDecadeOfCentury(value).getFullYear()}`;\n }\n rowLength(_) {\n return CELLS_LENGTH;\n }\n skip(value, min) {\n return durationInCenturies(min, value);\n }\n total(min, max) {\n return durationInCenturies(min, max) + 1;\n }\n value(current) {\n return current ? firstYearOfDecade(current).getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const centuriesToSubtract = viewsCount - viewsInRange;\n return addCenturies(date, -1 * centuriesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nCenturyViewService.ɵfac = function CenturyViewService_Factory(t) { return new (t || CenturyViewService)(); };\nCenturyViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CenturyViewService, factory: CenturyViewService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CenturyViewService, [{\n type: Injectable\n }], null, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$1 = [[]];\nconst CELLS_LENGTH$1 = 5;\nconst ROWS_LENGTH$1 = 2;\nconst ACTIONS$1 = {\n [Action.Left]: (date) => addYears(date, -1),\n [Action.Up]: (date) => addYears(date, -5),\n [Action.Right]: (date) => addYears(date, 1),\n [Action.Down]: (date) => addYears(date, 5),\n [Action.PrevView]: (date) => addDecades(date, -1),\n [Action.NextView]: (date) => addDecades(date, 1),\n [Action.FirstInView]: (date) => firstYearOfDecade(date),\n [Action.LastInView]: (date) => lastYearOfDecade(date)\n};\n/**\n * @hidden\n */\nclass DecadeViewService {\n addToDate(min, skip) {\n return addDecades(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addDecades(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$1;\n }\n const cells = range(0, CELLS_LENGTH$1);\n const firstDate = firstYearOfDecade(viewDate);\n const lastDate = lastYearOfDecade(viewDate);\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const today = getToday();\n return range(0, ROWS_LENGTH$1).map(rowOffset => {\n const baseDate = addYears(firstDate, rowOffset * CELLS_LENGTH$1);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addYears(baseDate, cellOffset), min, max);\n if (!this.isInRange(cellDate, min, max)) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= (dates[dates.length - 1].getFullYear() + 9);\n }\n isInRange(candidate, min, max) {\n const year = candidate.getFullYear();\n const aboveMin = !min || min.getFullYear() <= year;\n const belowMax = !max || year <= max.getFullYear();\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n const firstYear = firstYearOfDecade(date);\n return createDate(firstYear.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 100 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$1[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return value.getFullYear().toString();\n }\n navigationTitle(value) {\n return value ? firstYearOfDecade(value).getFullYear().toString() : '';\n }\n title(value) {\n if (!value) {\n return '';\n }\n return `${firstYearOfDecade(value).getFullYear()} - ${lastYearOfDecade(value).getFullYear()}`;\n }\n rowLength(_) {\n return CELLS_LENGTH$1;\n }\n skip(value, min) {\n return durationInDecades(min, value);\n }\n total(min, max) {\n return durationInDecades(min, max) + 1;\n }\n value(current) {\n return current ? current.getFullYear().toString() : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const decadesToSubtract = viewsCount - viewsInRange;\n return addDecades(date, -1 * decadesToSubtract);\n }\n return date;\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nDecadeViewService.ɵfac = function DecadeViewService_Factory(t) { return new (t || DecadeViewService)(); };\nDecadeViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DecadeViewService, factory: DecadeViewService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DecadeViewService, [{\n type: Injectable\n }], null, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$2 = [[]];\nconst CELLS_LENGTH$2 = 7;\nconst ROWS_LENGTH$2 = 6;\nconst ACTIONS$2 = {\n [Action.Left]: (date) => addDays(date, -1),\n [Action.Up]: (date) => addWeeks(date, -1),\n [Action.Right]: (date) => addDays(date, 1),\n [Action.Down]: (date) => addWeeks(date, 1),\n [Action.PrevView]: (date) => addMonths(date, -1),\n [Action.NextView]: (date) => addMonths(date, 1),\n [Action.FirstInView]: (date) => firstDayOfMonth(date),\n [Action.LastInView]: (date) => lastDayOfMonth(date)\n};\n/**\n * @hidden\n */\nclass MonthViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n }\n addToDate(min, skip) {\n return addMonths(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addMonths(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate, isDateDisabled = () => false } = options;\n if (!viewDate) {\n return EMPTY_DATA$2;\n }\n const firstMonthDate = firstDayOfMonth(viewDate);\n const firstMonthDay = getDate(firstMonthDate);\n const lastMonthDate = lastDayOfMonth(viewDate);\n const lastMonthDay = getDate(lastMonthDate);\n const backward = -1;\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const date = dayOfWeek(firstMonthDate, this._intlService.firstDay(), backward);\n const cells = range(0, CELLS_LENGTH$2);\n const today = getToday();\n return range(0, ROWS_LENGTH$2).map(rowOffset => {\n const baseDate = addDays(date, rowOffset * CELLS_LENGTH$2);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addDays(baseDate, cellOffset), min, max);\n const cellDay = getDate(cellDate);\n const otherMonth = cellDay < firstMonthDay || cellDay > lastMonthDay;\n const outOfRange = cellDate < min || cellDate > max;\n if (otherMonth || outOfRange) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: this.value(cellDate),\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: this.isWeekend(cellDate),\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstMonthDate),\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastMonthDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate,\n isDisabled: isDateDisabled(cellDate)\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return getDate(candidate).getTime() === getDate(expected).getTime();\n }\n isInArray(date, dates) {\n if (dates.length === 0) {\n return false;\n }\n const lowerBound = this.beginningOfPeriod(dates[0]);\n const upperBound = this.beginningOfPeriod(addMonths(dates[dates.length - 1], 1));\n return lowerBound <= date && date < upperBound;\n }\n isInRange(candidate, min, max) {\n const value = getDate(candidate);\n const aboveMin = !min || getDate(min) <= value;\n const belowMax = !max || value <= getDate(max);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), date.getMonth(), 1);\n }\n isRangeStart(value) {\n return !value.getMonth();\n }\n move(value, action) {\n const modifier = ACTIONS$2[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return this._intlService.formatDate(value, 'D');\n }\n navigationTitle(value) {\n if (!value) {\n return '';\n }\n return this.isRangeStart(value) ? value.getFullYear().toString() : this.abbrMonthNames()[value.getMonth()];\n }\n title(current) {\n return `${this.wideMonthNames()[current.getMonth()]} ${current.getFullYear()}`;\n }\n rowLength(prependCell) {\n return CELLS_LENGTH$2 + (prependCell ? 1 : 0);\n }\n skip(value, min) {\n return durationInMonths(min, value);\n }\n total(min, max) {\n return durationInMonths(min, max) + 1;\n }\n value(current) {\n return current ? current.getDate().toString() : \"\";\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const monthsToSubtract = viewsCount - viewsInRange;\n return addMonths(date, -1 * monthsToSubtract);\n }\n return date;\n }\n isWeekend(date) {\n const { start, end } = this._intlService.weekendRange();\n const day = date.getDay();\n if (end < start) {\n return day <= end || start <= day;\n }\n return start <= day && day <= end;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n wideMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'wide', type: 'months' });\n }\n}\nMonthViewService.ɵfac = function MonthViewService_Factory(t) { return new (t || MonthViewService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nMonthViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MonthViewService, factory: MonthViewService.ɵfac });\n/** @nocollapse */\nMonthViewService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MonthViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/* tslint:disable:object-literal-sort-keys */\nconst EMPTY_DATA$3 = [[]];\nconst CELLS_LENGTH$3 = 5;\nconst ROWS_LENGTH$3 = 3;\nconst upStep = (month) => {\n if (month > 4) {\n return -5;\n }\n if (month < 2) {\n return -2;\n }\n return -7;\n};\nconst downStep = (month) => {\n if (month < 7) {\n return 5;\n }\n if (month < 10) {\n return 7;\n }\n return 2;\n};\nconst ACTIONS$3 = {\n [Action.Left]: (date) => addMonths(date, -1),\n [Action.Up]: (date) => addMonths(date, upStep(date.getMonth())),\n [Action.Right]: (date) => addMonths(date, 1),\n [Action.Down]: (date) => addMonths(date, downStep(date.getMonth())),\n [Action.PrevView]: (date) => addYears(date, -1),\n [Action.NextView]: (date) => addYears(date, 1),\n [Action.FirstInView]: (date) => firstMonthOfYear(date),\n [Action.LastInView]: (date) => lastMonthOfYear(date)\n};\n/**\n * @hidden\n */\nclass YearViewService {\n constructor(_intlService) {\n this._intlService = _intlService;\n }\n addToDate(min, skip) {\n return addYears(min, skip);\n }\n datesList(start, count) {\n return range(0, count).map(i => addYears(start, i));\n }\n data(options) {\n const { cellUID, focusedDate, isActiveView, max, min, selectedDate, selectionRange = EMPTY_SELECTIONRANGE, viewDate } = options;\n if (!viewDate) {\n return EMPTY_DATA$3;\n }\n const months = this.abbrMonthNames();\n const isSelectedDateInRange = isInRange(selectedDate, min, max);\n const firstDate = firstMonthOfYear(viewDate);\n const lastDate = lastMonthOfYear(viewDate);\n const currentYear = firstDate.getFullYear();\n const cells = range(0, CELLS_LENGTH$3);\n const today = getToday();\n return range(0, ROWS_LENGTH$3).map(rowOffset => {\n const baseDate = addMonths(firstDate, rowOffset * CELLS_LENGTH$3);\n return cells.map(cellOffset => {\n const cellDate = this.normalize(addMonths(baseDate, cellOffset), min, max);\n const changedYear = currentYear < cellDate.getFullYear();\n if (!this.isInRange(cellDate, min, max) || changedYear) {\n return null;\n }\n const isRangeStart = this.isEqual(cellDate, selectionRange.start);\n const isRangeEnd = this.isEqual(cellDate, selectionRange.end);\n const isInMiddle = !isRangeStart && !isRangeEnd;\n const isRangeMid = isInMiddle && isInSelectionRange(cellDate, selectionRange);\n return {\n formattedValue: months[cellDate.getMonth()],\n id: `${cellUID}${cellDate.getTime()}`,\n isFocused: this.isEqual(cellDate, focusedDate),\n isSelected: isActiveView && isSelectedDateInRange && this.isEqual(cellDate, selectedDate),\n isWeekend: false,\n isRangeStart: isRangeStart,\n isRangeMid: isRangeMid,\n isRangeEnd: isRangeEnd,\n isRangeSplitEnd: isRangeMid && this.isEqual(cellDate, lastDate),\n isRangeSplitStart: isRangeMid && this.isEqual(cellDate, firstDate),\n isToday: this.isEqual(cellDate, today),\n title: this.cellTitle(cellDate),\n value: cellDate\n };\n });\n });\n }\n isEqual(candidate, expected) {\n if (!candidate || !expected) {\n return false;\n }\n return candidate.getFullYear() === expected.getFullYear() &&\n candidate.getMonth() === expected.getMonth();\n }\n isInArray(date, dates) {\n if (!dates.length) {\n return false;\n }\n const year = date.getFullYear();\n return dates[0].getFullYear() <= year && year <= dates[dates.length - 1].getFullYear();\n }\n isInRange(candidate, min, max) {\n const candidateValue = createDate(candidate.getFullYear(), candidate.getMonth(), 1);\n const aboveMin = !min || createDate(min.getFullYear(), min.getMonth(), 1) <= candidateValue;\n const belowMax = !max || candidateValue <= createDate(max.getFullYear(), max.getMonth(), 1);\n return aboveMin && belowMax;\n }\n beginningOfPeriod(date) {\n if (!date) {\n return date;\n }\n return createDate(date.getFullYear(), 0, 1);\n }\n isRangeStart(value) {\n return value.getFullYear() % 10 === 0;\n }\n move(value, action) {\n const modifier = ACTIONS$3[action];\n if (!modifier) {\n return value;\n }\n return modifier(value);\n }\n cellTitle(value) {\n return `${value.getFullYear()} ${this.value(value)}`;\n }\n navigationTitle(value) {\n return this.title(value);\n }\n title(current) {\n return current ? current.getFullYear().toString() : '';\n }\n rowLength(_) {\n return CELLS_LENGTH$3;\n }\n skip(value, min) {\n return durationInYears(min, value);\n }\n total(min, max) {\n return durationInYears(min, max) + 1;\n }\n value(current) {\n return current ? this.abbrMonthNames()[current.getMonth()] : '';\n }\n viewDate(date, max, viewsCount = 1) {\n const viewsInRange = this.total(date, max);\n if (viewsInRange < viewsCount) {\n const yearsToSubtract = viewsCount - viewsInRange;\n return addYears(date, -1 * yearsToSubtract);\n }\n return date;\n }\n abbrMonthNames() {\n return this._intlService.dateFormatNames({ nameType: 'abbreviated', type: 'months' });\n }\n normalize(cellDate, min, max) {\n if (cellDate < min && this.isEqual(cellDate, min)) {\n return cloneDate(min);\n }\n if (cellDate > max && this.isEqual(cellDate, max)) {\n return cloneDate(max);\n }\n return cellDate;\n }\n}\nYearViewService.ɵfac = function YearViewService_Factory(t) { return new (t || YearViewService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nYearViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: YearViewService, factory: YearViewService.ɵfac });\n/** @nocollapse */\nYearViewService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(YearViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/**\n * @hidden\n *\n * The Enum which defines all possible Calendar view types.\n */\nvar CalendarViewEnum;\n(function (CalendarViewEnum) {\n CalendarViewEnum[CalendarViewEnum[\"month\"] = 0] = \"month\";\n CalendarViewEnum[CalendarViewEnum[\"year\"] = 1] = \"year\";\n CalendarViewEnum[CalendarViewEnum[\"decade\"] = 2] = \"decade\";\n CalendarViewEnum[CalendarViewEnum[\"century\"] = 3] = \"century\";\n})(CalendarViewEnum || (CalendarViewEnum = {}));\n\nconst services = {\n [CalendarViewEnum.month]: MonthViewService,\n [CalendarViewEnum.year]: YearViewService,\n [CalendarViewEnum.decade]: DecadeViewService,\n [CalendarViewEnum.century]: CenturyViewService\n};\nconst viewOffset = (view, offset) => {\n const candidate = CalendarViewEnum[CalendarViewEnum[view + offset]];\n return candidate !== undefined ? candidate : view;\n};\n/**\n * @hidden\n */\nclass BusViewService {\n constructor(injector) {\n this.injector = injector;\n this.viewChanged = new EventEmitter();\n this.bottom = CalendarViewEnum.month;\n this.top = CalendarViewEnum.century;\n }\n configure(bottom, top) {\n this.bottom = bottom;\n this.top = top;\n }\n service(view) {\n const serviceType = services[view];\n return serviceType ? this.injector.get(serviceType) : null;\n }\n moveDown(view) {\n this.move(view, -1);\n }\n moveUp(view) {\n this.move(view, 1);\n }\n moveToBottom(activeView) {\n if (activeView === this.bottom) {\n return;\n }\n this.viewChanged.emit({ view: this.bottom });\n }\n canMoveDown(view) {\n return this.bottom < view;\n }\n canMoveUp(view) {\n return view < this.top;\n }\n clamp(view) {\n if (view < this.bottom) {\n return this.bottom;\n }\n if (view > this.top) {\n return this.top;\n }\n return view;\n }\n move(view, offset) {\n const candidate = this.clamp(viewOffset(view, offset));\n if (candidate === view) {\n return;\n }\n this.viewChanged.emit({ view: candidate });\n }\n}\nBusViewService.ɵfac = function BusViewService_Factory(t) { return new (t || BusViewService)(ɵngcc0.ɵɵinject(ɵngcc0.Injector)); };\nBusViewService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BusViewService, factory: BusViewService.ɵfac });\n/** @nocollapse */\nBusViewService.ctorParameters = () => [\n { type: Injector }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BusViewService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.Injector }]; }, null); })();\n\n/**\n * @hidden\n */\nconst requiresZoneOnBlur = (ngControl) => ngControl &&\n (!ngControl.touched || (ngControl.control && ngControl.control.updateOn === 'blur'));\n/**\n * @hidden\n */\nconst preventDefault = (args) => args.preventDefault();\n/**\n * @hidden\n */\nconst currentFocusTarget = (blurArgs) => blurArgs.relatedTarget || document.activeElement;\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== undefined && value !== null;\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are numbers, returns `true.\n */\nconst isNumberArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => typeof item === 'number');\n/**\n * @hidden\n *\n * If the provided parameter is an array with at least one item\n * and all items in the array are dates, returns `true`.\n */\nconst isDateArray = (value) => Array.isArray(value) && value.length > 0 && value.every(item => item instanceof Date);\n\nconst div = domContainerFactory('div');\nconst ul = domContainerFactory('ul');\nconst li = domContainerFactory('li');\nconst td = domContainerFactory('td');\nconst th = domContainerFactory('th');\nconst tr = domContainerFactory('tr');\nconst tbody = domContainerFactory('tbody');\nconst thead = domContainerFactory('thead');\nconst table = domContainerFactory('table');\nconst monthHeader = () => (div(`\n March 2017\n TODAY\n `, 'k-calendar-header'));\nconst monthWeekHeader = () => (table([\n thead([\n tr([th('MO')])\n ])\n], 'k-calendar-weekdays'));\nconst repeat = (count, mapper) => new Array(count).fill('1').map(mapper);\nconst content = (rows, cells = 1) => (table([\n tbody([tr([th('1')])].concat(repeat(rows, () => tr(repeat(cells, c => td(`${c}`))))))\n]));\nconst scrollable = (children) => div(children, 'k-content k-scrollable');\nconst view = (contentElement, className, renderWeekHeader) => (div([\n monthHeader(),\n renderWeekHeader ? monthWeekHeader() : null,\n scrollable([contentElement, contentElement])\n], className, { left: '-10000px', position: 'absolute' }));\nconst ɵ6 = () => {\n let navElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!navElement) {\n navElement = div([scrollable([ul([li('FEB')])])], 'k-calendar-navigation', { left: '0px', position: 'absolute' });\n }\n return navElement;\n };\n};\nconst navigationList = (ɵ6)();\nconst viewFactory = ({ cells, rows }, className, renderWeekHeader) => {\n let viewElement;\n return () => {\n if (!isDocumentAvailable) {\n return null;\n }\n if (!viewElement) {\n viewElement = view(content(rows, cells), className, renderWeekHeader);\n }\n return viewElement;\n };\n};\nconst getScrollable = (element) => element.querySelector('.k-scrollable');\nconst horizontal = element => {\n const scrollableElement = getScrollable(element);\n scrollableElement.classList.add('k-scrollable-horizontal');\n return element;\n};\nconst monthView = viewFactory({ cells: 7, rows: 6 }, 'k-calendar-view k-calendar-monthview', true);\nconst yearView = viewFactory({ cells: 5, rows: 3 }, 'k-calendar-view k-calendar-yearview', false);\nconst decadeView = viewFactory({ cells: 5, rows: 2 }, 'k-calendar-view k-calendar-decadeview', false);\nconst horzMonthView = () => horizontal(monthView());\nconst horzYearView = () => horizontal(yearView());\nconst horzDecadeView = () => horizontal(decadeView());\nconst height = (element) => (parseFloat(window.getComputedStyle(element).height) || element.offsetHeight);\nconst width = (element) => {\n const styles = window.getComputedStyle(element);\n const computed = parseFloat(styles.width)\n + parseFloat(styles.paddingLeft)\n + parseFloat(styles.paddingRight);\n return computed || element.offsetWidth;\n};\nconst getBody = (element) => element.querySelector('tbody');\n/**\n * @hidden\n */\nclass CalendarDOMService {\n ensureHeights() {\n if (this.calendarHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n this.hostContainer = container;\n this.batch(monthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarHeight = height(contentElement);\n this.monthViewHeight = height(viewElement);\n this.headerHeight = height(viewElement.children[0]);\n this.scrollableContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzMonthView(), (contentElement) => {\n const viewElement = getBody(contentElement);\n this.calendarWidth = width(contentElement);\n this.monthViewWidth = width(viewElement);\n this.scrollableContentWidth = width(getScrollable(contentElement));\n });\n this.batch(yearView(), (contentElement) => {\n this.yearViewHeight = height(getBody(contentElement));\n this.scrollableYearContentHeight = height(getScrollable(contentElement));\n });\n this.batch(horzYearView(), (contentElement) => {\n this.yearViewWidth = width(getBody(contentElement));\n });\n this.batch(decadeView(), (contentElement) => {\n this.decadeViewHeight = height(getBody(contentElement));\n this.centuryViewHeight = this.decadeViewHeight;\n });\n this.batch(horzDecadeView(), (contentElement) => {\n this.decadeViewWidth = width(getBody(contentElement));\n this.centuryViewWidth = this.decadeViewWidth;\n });\n this.batch(navigationList(), (contentElement) => {\n this.navigationItemHeight = height(contentElement.querySelector('li'));\n });\n }\n viewHeight(viewType) {\n return this.viewDimension(viewType, 'height');\n }\n viewWidth(viewType) {\n return this.viewDimension(viewType, 'width');\n }\n viewDimension(viewType, dimension) {\n const viewProp = dimension === 'height' ? 'ViewHeight' : 'ViewWidth';\n switch (viewType) {\n case CalendarViewEnum.month:\n return this[`month${viewProp}`];\n case CalendarViewEnum.year:\n return this[`year${viewProp}`];\n case CalendarViewEnum.decade:\n return this[`decade${viewProp}`];\n case CalendarViewEnum.century:\n return this[`century${viewProp}`];\n default:\n return 1;\n }\n }\n batch(contentElement, action) {\n if (!isPresent(this.hostContainer)) {\n return;\n }\n const hostClone = this.hostContainer.cloneNode();\n document.body.appendChild(hostClone);\n try {\n const appendedContent = hostClone.appendChild(contentElement);\n action(appendedContent);\n }\n catch (error) {\n throw error;\n }\n finally {\n document.body.removeChild(hostClone);\n }\n }\n}\nCalendarDOMService.ɵfac = function CalendarDOMService_Factory(t) { return new (t || CalendarDOMService)(); };\nCalendarDOMService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CalendarDOMService, factory: CalendarDOMService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarDOMService, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst update = (arr, idx, value) => ([\n ...arr.slice(0, idx + 1),\n ...(arr.slice(idx + 1).map(x => x + value))\n]);\n/**\n * @hidden\n */\nclass RowHeightService {\n constructor(total = 0, rowHeight, detailRowHeight) {\n this.total = total;\n this.rowHeight = rowHeight;\n this.detailRowHeight = detailRowHeight;\n this.offsets = [];\n this.heights = [];\n let agg = 0;\n for (let idx = 0; idx < total; idx++) {\n this.offsets.push(agg);\n agg += rowHeight;\n this.heights.push(rowHeight);\n }\n }\n height(rowIndex) {\n return this.heights[rowIndex];\n }\n expandDetail(rowIndex) {\n if (this.height(rowIndex) === this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight);\n }\n }\n collapseDetail(rowIndex) {\n if (this.height(rowIndex) > this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight * -1);\n }\n }\n index(position) {\n if (position < 0) {\n return undefined;\n }\n const result = this.offsets.reduce((prev, current, idx) => {\n if (prev !== undefined) {\n return prev;\n }\n else if (current === position) {\n return idx;\n }\n else if (current > position) {\n return idx - 1;\n }\n return undefined;\n }, undefined); // tslint:disable-line:align\n return result === undefined ? this.total - 1 : result;\n }\n offset(rowIndex) {\n return this.offsets[rowIndex];\n }\n totalHeight() {\n return this.heights.reduce((prev, curr) => prev + curr, 0);\n }\n updateRowHeight(rowIndex, value) {\n this.heights[rowIndex] += value;\n this.offsets = update(this.offsets, rowIndex, value);\n }\n}\n\nconst normalize = x => Math.max(x, 0);\n/**\n * @hidden\n */\nclass ScrollAction {\n constructor(offset) {\n this.offset = offset;\n }\n}\n/**\n * @hidden\n */\nclass PageAction {\n constructor(skip) {\n this.skip = skip;\n }\n}\n/**\n * @hidden\n */\nclass ScrollerService {\n constructor(scrollObservable) {\n this.scrollObservable = scrollObservable;\n this.firstLoaded = 0;\n this.bottomOffset = 0;\n this.topOffset = 0;\n }\n create(rowHeightService, skip, take, total, topOffset = 0, bottomOffset = 0, direction = 'vertical') {\n this.rowHeightService = rowHeightService;\n this.firstLoaded = skip;\n this.lastLoaded = skip + take;\n this.take = take;\n this.total = total;\n this.lastScroll = 0;\n this.topOffset = topOffset;\n this.bottomOffset = bottomOffset;\n this.direction = direction;\n const subject = new ReplaySubject(2);\n const offsetBufferRows = this.rowsForHeight(topOffset);\n const skipWithOffset = normalize(skip - offsetBufferRows);\n subject.next(new ScrollAction(this.rowOffset(skipWithOffset)));\n if (offsetBufferRows) {\n subject.next(new PageAction(skipWithOffset));\n }\n this.subscription = Observable.create(observer => {\n this.unsubscribe();\n this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));\n }).subscribe(x => subject.next(x));\n return subject;\n }\n destroy() {\n this.unsubscribe();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n onScroll({ scrollLeft, scrollTop, offsetHeight, offsetWidth }, observer) {\n const scrollPosition = this.direction === 'vertical' ? scrollTop : scrollLeft;\n const offsetSize = this.direction === 'vertical' ? offsetHeight : offsetWidth;\n if (this.lastScroll === scrollPosition) {\n return;\n }\n const up = this.lastScroll >= scrollPosition;\n this.lastScroll = scrollPosition;\n const firstItemIndex = this.rowHeightService.index(normalize(scrollPosition - this.topOffset));\n const lastItemIndex = this.rowHeightService.index(normalize(scrollPosition + offsetSize - this.bottomOffset));\n if (!up && lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total) {\n this.firstLoaded = firstItemIndex;\n observer.next(new ScrollAction(this.rowOffset(firstItemIndex)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n if (up && firstItemIndex <= this.firstLoaded) {\n const nonVisibleBuffer = Math.floor(this.take * 0.3);\n this.firstLoaded = normalize(firstItemIndex - nonVisibleBuffer);\n observer.next(new ScrollAction(this.rowOffset(this.firstLoaded)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded));\n }\n }\n rowOffset(index) {\n return this.rowHeightService.offset(index) + this.topOffset;\n }\n rowsForHeight(height) {\n return Math.ceil(height / this.rowHeightService.height(0));\n }\n unsubscribe() {\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = null;\n }\n }\n}\n\n/* tslint:disable:component-selector-name component-selector-type */\n/**\n * @hidden\n */\nconst SCROLLER_FACTORY_TOKEN = new InjectionToken('dateinputs-scroll-service-factory');\n/**\n * @hidden\n */\nfunction DEFAULT_SCROLLER_FACTORY(observable) {\n return new ScrollerService(observable);\n}\n/**\n * @hidden\n */\nvar ScrollDirection;\n(function (ScrollDirection) {\n ScrollDirection[ScrollDirection[\"Backward\"] = 0] = \"Backward\";\n ScrollDirection[ScrollDirection[\"Forward\"] = 1] = \"Forward\";\n})(ScrollDirection || (ScrollDirection = {}));\nconst FRAME_DURATION = 17;\nconst scrollModifiers = {\n [ScrollDirection.Forward]: (step) => value => value + step,\n [ScrollDirection.Backward]: (step) => value => value - step\n};\nconst scrollNormalizers = {\n [ScrollDirection.Forward]: (end) => value => Math.min(value, end),\n [ScrollDirection.Backward]: (end) => value => Math.max(value, end)\n};\nconst scrollValidators = {\n [ScrollDirection.Forward]: end => start => start < end,\n [ScrollDirection.Backward]: end => start => start > end\n};\nconst differenceToScroll = (scrollTop, staticOffset, maxScrollDifference) => {\n return Math.min(Math.abs(staticOffset - scrollTop), maxScrollDifference);\n};\n/**\n * @hidden\n */\nclass VirtualizationComponent {\n constructor(scrollerFactory, container, renderer, zone) {\n this.container = container;\n this.renderer = renderer;\n this.zone = zone;\n this.direction = 'vertical';\n this.itemHeight = 1;\n this.itemWidth = 1;\n this.topOffset = 0;\n this.bottomOffset = 0;\n this.maxScrollDifference = 100;\n this.scrollOffsetSize = 0;\n this.scrollDuration = 150;\n this.activeIndexChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.scrollChange = new EventEmitter();\n this.resolvedPromise = Promise.resolve(null);\n this.dispatcher = new Subject();\n this.scroller = scrollerFactory(this.dispatcher);\n }\n get totalVertexLength() {\n const value = `${this.totalSize}px`;\n return this.direction === 'vertical' ? { height: value } : { width: value };\n }\n get containerOffsetSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'offsetHeight' : 'offsetWidth');\n }\n get containerScrollSize() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollHeight' : 'scrollWidth');\n }\n get containerScrollPosition() {\n return this.getContainerProperty(this.direction === 'vertical' ? 'scrollTop' : 'scrollLeft');\n }\n get wrapperClasses() {\n return true;\n }\n get horizontalClass() {\n return this.direction === 'horizontal';\n }\n ngOnChanges(changes) {\n if (changes.direction || changes.take || changes.total) {\n this.initServices();\n this.totalSize = this.rowHeightService.totalHeight() + this.bottomOffset;\n }\n }\n ngOnInit() {\n if (!this.rowHeightService) {\n this.rowHeightService = this.createRowHeightService();\n }\n }\n ngAfterViewInit() {\n this.zone.runOutsideAngular(() => {\n this.containerScrollSubscription = this.scroll$()\n .pipe(map((event) => event.target))\n .subscribe(t => {\n this.dispatcher.next(t);\n this.emitActiveIndex();\n });\n });\n }\n ngOnDestroy() {\n if (this.containerScrollSubscription) {\n this.containerScrollSubscription.unsubscribe();\n }\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n }\n getContainerProperty(propertyName) {\n return this.container.nativeElement[propertyName];\n }\n activeIndex() {\n return this.itemIndex(Math.ceil(this.containerScrollPosition)); //handle subpixeling\n }\n itemIndex(offset) {\n return this.rowHeightService.index(offset);\n }\n itemOffset(index) {\n return this.rowHeightService.offset(index);\n }\n isIndexVisible(index) {\n if (!this.rowHeightService) {\n return false;\n }\n const containerTop = this.containerScrollPosition;\n const containerBottom = containerTop + this.containerOffsetSize;\n const top = this.rowHeightService.offset(index);\n const bottom = top + this.rowHeightService.height(index);\n return top >= containerTop && bottom <= containerBottom;\n }\n isListScrolled(index) {\n return this.containerScrollPosition !== this.rowHeightService.offset(index);\n }\n scrollTo(value) {\n const scrollProperty = this.direction === \"vertical\" ? 'scrollTop' : 'scrollLeft';\n this.renderer.setProperty(this.container.nativeElement, scrollProperty, value);\n }\n scrollToIndex(index) {\n //XXX: scrolling with tick is required to prevent list jump in Chrome.\n //Original issue: focus first day in the month and press LEFT arrow.\n //Notice how the view jumps on every day change.\n //\n this.zone.runOutsideAngular(() => {\n this.resolvedPromise.then(() => {\n this.scrollTo(this.rowHeightService.offset(index));\n });\n });\n }\n scrollToBottom() {\n this.scrollTo(this.totalSize);\n }\n animateToIndex(index) {\n if (this.animationSubscription) {\n this.animationSubscription.unsubscribe();\n }\n const indexOffset = this.rowHeightService.offset(index);\n const direction = this.getContainerScrollDirection(indexOffset);\n const { start, end } = this.scrollRange(indexOffset, direction);\n if (start === end) {\n return;\n }\n const step = this.scrollStep(start, end);\n const modifyScroll = scrollModifiers[direction](step);\n const normalizeScroll = scrollNormalizers[direction](end);\n const isScrollValid = scrollValidators[direction](modifyScroll(end));\n this.zone.runOutsideAngular(() => {\n this.animationSubscription =\n combineLatest(of(start), interval(0, animationFrameScheduler)).pipe(map(stream => stream[0]), scan(modifyScroll), takeWhile(isScrollValid), map(normalizeScroll)).subscribe((x) => this.scrollTo(x));\n });\n }\n scrollRange(indexOffset, direction) {\n const containerScroll = this.containerScrollPosition;\n if (parseInt(indexOffset, 10) === parseInt(containerScroll, 10)) {\n return { start: indexOffset, end: indexOffset };\n }\n const maxScroll = this.containerMaxScroll();\n const sign = direction === ScrollDirection.Backward ? 1 : -1;\n const difference = differenceToScroll(containerScroll, indexOffset, this.maxScrollDifference);\n const end = Math.min(indexOffset, maxScroll);\n const start = Math.min(Math.max(end + (sign * difference), 0), maxScroll);\n return { start, end };\n }\n scrollStep(start, end) {\n return Math.abs(end - start) / (this.scrollDuration / FRAME_DURATION);\n }\n scroll$() {\n return isDocumentAvailable() ? fromEvent(this.container.nativeElement, 'scroll') : EMPTY;\n }\n initServices() {\n this.rowHeightService = this.createRowHeightService();\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n }\n this.scrollSubscription = this.scroller\n .create(this.rowHeightService, this.skip, this.take, this.total, this.topOffset, this.scrollOffsetSize, this.direction)\n .subscribe((x) => {\n if (x instanceof PageAction) {\n this.pageChange.emit(x);\n }\n else {\n this.scrollChange.emit(x);\n }\n });\n }\n createRowHeightService() {\n const dimension = this.direction === 'vertical' ? this.itemHeight : this.itemWidth;\n return new RowHeightService(this.total, dimension, 0);\n }\n emitActiveIndex() {\n const index = this.rowHeightService.index(this.containerScrollPosition - this.topOffset);\n if (this.lastActiveIndex !== index) {\n this.lastActiveIndex = index;\n this.activeIndexChange.emit(index);\n }\n }\n containerMaxScroll() {\n return this.containerScrollSize - this.containerOffsetSize;\n }\n getContainerScrollDirection(indexOffset) {\n return indexOffset < this.containerScrollPosition ? ScrollDirection.Backward : ScrollDirection.Forward;\n }\n}\nVirtualizationComponent.ɵfac = function VirtualizationComponent_Factory(t) { return new (t || VirtualizationComponent)(ɵngcc0.ɵɵdirectiveInject(SCROLLER_FACTORY_TOKEN), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nVirtualizationComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: VirtualizationComponent, selectors: [[\"kendo-virtualization\"]], hostVars: 6, hostBindings: function VirtualizationComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-content\", ctx.wrapperClasses)(\"k-scrollable\", ctx.wrapperClasses)(\"k-scrollable-horizontal\", ctx.horizontalClass);\n } }, inputs: { direction: \"direction\", itemHeight: \"itemHeight\", itemWidth: \"itemWidth\", topOffset: \"topOffset\", bottomOffset: \"bottomOffset\", maxScrollDifference: \"maxScrollDifference\", scrollOffsetSize: \"scrollOffsetSize\", scrollDuration: \"scrollDuration\", skip: \"skip\", take: \"take\", total: \"total\" }, outputs: { activeIndexChange: \"activeIndexChange\", pageChange: \"pageChange\", scrollChange: \"scrollChange\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c0, decls: 2, vars: 3, consts: [[1, \"k-scrollable-placeholder\", 3, \"ngStyle\"]], template: function VirtualizationComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelement(1, \"div\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-scrollable-horizontal-placeholder\", ctx.direction === \"horizontal\");\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.totalVertexLength);\n } }, directives: [ɵngcc2.NgStyle], encapsulation: 2 });\n/** @nocollapse */\nVirtualizationComponent.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [SCROLLER_FACTORY_TOKEN,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nVirtualizationComponent.propDecorators = {\n direction: [{ type: Input }],\n itemHeight: [{ type: Input }],\n itemWidth: [{ type: Input }],\n topOffset: [{ type: Input }],\n bottomOffset: [{ type: Input }],\n maxScrollDifference: [{ type: Input }],\n scrollOffsetSize: [{ type: Input }],\n scrollDuration: [{ type: Input }],\n skip: [{ type: Input }],\n take: [{ type: Input }],\n total: [{ type: Input }],\n activeIndexChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n scrollChange: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-content',] }, { type: HostBinding, args: ['class.k-scrollable',] }],\n horizontalClass: [{ type: HostBinding, args: ['class.k-scrollable-horizontal',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(VirtualizationComponent, [{\n type: Component,\n args: [{\n providers: [{\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }],\n selector: 'kendo-virtualization',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [SCROLLER_FACTORY_TOKEN]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { direction: [{\n type: Input\n }], itemHeight: [{\n type: Input\n }], itemWidth: [{\n type: Input\n }], topOffset: [{\n type: Input\n }], bottomOffset: [{\n type: Input\n }], maxScrollDifference: [{\n type: Input\n }], scrollOffsetSize: [{\n type: Input\n }], scrollDuration: [{\n type: Input\n }], activeIndexChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], scrollChange: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-content']\n }, {\n type: HostBinding,\n args: ['class.k-scrollable']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-scrollable-horizontal']\n }], skip: [{\n type: Input\n }], take: [{\n type: Input\n }], total: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst ITEMS_COUNT = 30;\n/**\n * @hidden\n */\nclass NavigationComponent {\n constructor(bus, dom, intl, cdr, renderer) {\n this.bus = bus;\n this.dom = dom;\n this.intl = intl;\n this.cdr = cdr;\n this.renderer = renderer;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.focusedDate = new Date();\n this.valueChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.dates = [];\n this.take = ITEMS_COUNT;\n this.indexToScroll = -1;\n }\n get getComponentClass() {\n return true;\n }\n ngOnInit() {\n this.dom.ensureHeights();\n const calendarHeight = this.dom.calendarHeight;\n this.itemHeight = this.dom.navigationItemHeight;\n this.maxViewHeight = this.dom.monthViewHeight;\n this.topOffset = (calendarHeight - this.itemHeight) / 2;\n this.bottomOffset = calendarHeight - this.itemHeight;\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n const viewDate = dateInRange(this.focusedDate, this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n if (totalChanged || !this.service.isInArray(viewDate, this.dates)) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!!changes.focusedDate || totalChanged) {\n this.indexToScroll = this.service.skip(this.focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n handleDateChange(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-date-index'), this.list.nativeElement);\n if (item) {\n const index = parseInt(item.getAttribute('data-date-index'), 10);\n const candidate = this.dates[index];\n this.valueChange.emit(cloneDate(candidate));\n }\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n intlChange() {\n if (this.activeView === CalendarViewEnum.month) {\n this.cdr.markForCheck();\n }\n }\n}\nNavigationComponent.ɵfac = function NavigationComponent_Factory(t) { return new (t || NavigationComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nNavigationComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NavigationComponent, selectors: [[\"kendo-calendar-navigation\"]], viewQuery: function NavigationComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(VirtualizationComponent, true);\n ɵngcc0.ɵɵstaticViewQuery(_c1, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.list = _t.first);\n } }, hostVars: 2, hostBindings: function NavigationComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-navigation\", ctx.getComponentClass);\n } }, inputs: { min: \"min\", max: \"max\", focusedDate: \"focusedDate\", activeView: \"activeView\", templateRef: \"templateRef\" }, outputs: { valueChange: \"valueChange\", pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 12, consts: [[1, \"k-calendar-navigation-highlight\"], [3, \"skip\", \"take\", \"total\", \"itemHeight\", \"topOffset\", \"bottomOffset\", \"maxScrollDifference\", \"pageChange\", \"scrollChange\"], [1, \"k-reset\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"list\", \"\"], [4, \"kFor\", \"kForOf\"], [3, \"ngIf\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function NavigationComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-virtualization\", 1);\n ɵngcc0.ɵɵlistener(\"pageChange\", function NavigationComponent_Template_kendo_virtualization_pageChange_1_listener($event) { return ctx.onPageChange($event); })(\"scrollChange\", function NavigationComponent_Template_kendo_virtualization_scrollChange_1_listener($event) { return ctx.scrollChange($event); });\n ɵngcc0.ɵɵelementStart(2, \"ul\", 2, 3);\n ɵngcc0.ɵɵtemplate(4, NavigationComponent_li_4_Template, 4, 11, \"li\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"skip\", ctx.skip)(\"take\", ctx.take)(\"total\", ctx.total)(\"itemHeight\", ctx.itemHeight)(\"topOffset\", ctx.topOffset)(\"bottomOffset\", ctx.bottomOffset)(\"maxScrollDifference\", ctx.maxViewHeight);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(10, _c3, ctx.handleDateChange))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [VirtualizationComponent, ɵngcc3.EventsOutsideAngularDirective, KForOf, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nNavigationComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: CalendarDOMService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: Renderer2 }\n];\nNavigationComponent.propDecorators = {\n activeView: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n focusedDate: [{ type: Input }],\n templateRef: [{ type: Input }],\n valueChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent,] }],\n list: [{ type: ViewChild, args: ['list', { static: true },] }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-navigation\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-navigation',\n template: `\n \n \n
    \n
  • \n \n {{service.navigationTitle(date)}}\n \n \n
  • \n
\n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.Renderer2 }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-navigation\"]\n }], activeView: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }] }); })();\n\nconst VIEWS_COUNT = 5;\nconst isEqualMonthYear = (date1, date2) => (date1 && date2 &&\n date1.getFullYear() === date2.getFullYear() &&\n date1.getMonth() === date2.getMonth());\n/**\n * @hidden\n */\nclass ViewListComponent {\n constructor(bus, cdr, intl, dom, renderer) {\n this.bus = bus;\n this.cdr = cdr;\n this.intl = intl;\n this.dom = dom;\n this.renderer = renderer;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.activeDateChange = new EventEmitter();\n this.valueChange = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.dates = [];\n this.cols = [];\n this.weekNames = [];\n this.take = VIEWS_COUNT;\n this.animateToIndex = true;\n this.indexToScroll = -1;\n this.minViewsToRender = 1;\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get getComponentClass() {\n return true;\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnInit() {\n this.weekNames = this.getWeekNames();\n this.bottomOffset = this.getBottomOffset();\n this.viewOffset = -1 * this.dom.headerHeight;\n this.viewHeight = this.dom.viewHeight(this.activeView);\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n this.cols = new Array(this.service.rowLength(this.weekNumber)).fill('');\n this.colWidth = Math.round(100 / this.cols.length);\n this.weekNames = hasChange(changes, 'weekNumber') && this.weekNumber ? this.getWeekNames() : this.weekNames;\n const activeViewChanged = hasChange(changes, 'activeView');\n const focusedDate = this.focusedDate;\n const viewDate = dateInRange(this.service.viewDate(focusedDate, this.max, this.minViewsToRender), this.min, this.max);\n const total = this.service.total(this.min, this.max);\n const totalChanged = this.total && this.total !== total;\n const generateDates = totalChanged || !this.service.isInArray(focusedDate, this.dates);\n this.skip = this.service.skip(viewDate, this.min);\n this.total = total;\n this.animateToIndex = !activeViewChanged;\n this.bottomOffset = this.getBottomOffset();\n this.viewHeight = this.dom.viewHeight(this.activeView);\n if (generateDates) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n }\n if (!isEqualMonthYear(this.activeDate, focusedDate)) {\n this.activeDate = cloneDate(focusedDate);\n }\n const updateIndex = hasChange(changes, 'focusedDate') || activeViewChanged;\n if (generateDates || updateIndex || this.virtualization.isIndexVisible(this.skip)) {\n this.indexToScroll = this.service.skip(focusedDate, this.min);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n }\n ngAfterViewInit() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization.scrollToIndex(this.indexToScroll);\n this.indexToScroll = -1;\n }\n ngAfterViewChecked() {\n if (this.indexToScroll === -1) {\n return;\n }\n this.virtualization[this.animateToIndex ? 'animateToIndex' : 'scrollToIndex'](this.indexToScroll);\n this.animateToIndex = true;\n this.indexToScroll = -1;\n }\n onPageChange({ skip }) {\n this.dates = this.service.datesList(this.service.addToDate(this.min, skip), this.getTake(skip));\n this.pageChange.emit();\n }\n scrollChange({ offset }) {\n const el = this.list.nativeElement;\n const translate = `translateY(${offset}px)`;\n this.renderer.setStyle(el, 'transform', translate);\n this.renderer.setStyle(el, '-ms-transform', translate);\n }\n setActiveDate(index) {\n const candidate = this.service.addToDate(this.min, index);\n if (isEqual(this.activeDate, candidate)) {\n return;\n }\n this.activeDate = candidate;\n this.activeDateChange.emit(candidate);\n this.cdr.detectChanges();\n }\n handleDateChange(candidate) {\n this.valueChange.emit(candidate);\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n isScrolled() {\n return this.virtualization.isListScrolled(this.service.skip(this.focusedDate, this.min));\n }\n getBottomOffset() {\n return this.getScrollableHeight() - this.dom.viewHeight(this.activeView);\n }\n getScrollableHeight() {\n return this.activeView === CalendarViewEnum.month ?\n this.dom.scrollableContentHeight :\n this.dom.scrollableYearContentHeight;\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.take);\n }\n getWeekNames() {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return this.weekNumber ? [''].concat(weekNames) : weekNames;\n }\n intlChange() {\n this.weekNames = this.getWeekNames();\n if (this.isMonthView()) {\n this.cdr.markForCheck();\n }\n }\n}\nViewListComponent.ɵfac = function ViewListComponent_Factory(t) { return new (t || ViewListComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nViewListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ViewListComponent, selectors: [[\"kendo-calendar-viewlist\"]], viewQuery: function ViewListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(VirtualizationComponent, true);\n ɵngcc0.ɵɵstaticViewQuery(_c1, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.list = _t.first);\n } }, hostVars: 10, hostBindings: function ViewListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-view\", ctx.getComponentClass)(\"k-calendar-monthview\", ctx.getComponentMonthClass)(\"k-calendar-yearview\", ctx.getComponentYearClass)(\"k-calendar-decadeview\", ctx.getComponentDecadeClass)(\"k-calendar-centuryview\", ctx.getComponentCenturyClass);\n } }, inputs: { isActive: \"isActive\", min: \"min\", max: \"max\", weekNumber: \"weekNumber\", cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", headerTitleTemplateRef: \"headerTitleTemplateRef\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", value: \"value\" }, outputs: { activeDateChange: \"activeDateChange\", valueChange: \"valueChange\", pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 8, vars: 17, consts: [[3, \"currentDate\", \"min\", \"max\", \"activeView\", \"templateRef\", \"today\"], [\"class\", \"k-calendar-weekdays\", \"style\", \"table-layout: auto;\", 4, \"ngIf\"], [3, \"tabindex\", \"skip\", \"take\", \"total\", \"itemHeight\", \"topOffset\", \"bottomOffset\", \"scrollOffsetSize\", \"maxScrollDifference\", \"pageChange\", \"scrollChange\", \"activeIndexChange\"], [\"list\", \"\"], [4, \"ngFor\", \"ngForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", 4, \"kFor\", \"kForOf\"], [1, \"k-calendar-weekdays\", 2, \"table-layout\", \"auto\"], [3, \"width\", 4, \"ngFor\", \"ngForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\"]], template: function ViewListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-header\", 0);\n ɵngcc0.ɵɵlistener(\"today\", function ViewListComponent_Template_kendo_calendar_header_today_0_listener($event) { return ctx.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(1, ViewListComponent_table_1_Template, 4, 1, \"table\", 1);\n ɵngcc0.ɵɵelementStart(2, \"kendo-virtualization\", 2);\n ɵngcc0.ɵɵlistener(\"pageChange\", function ViewListComponent_Template_kendo_virtualization_pageChange_2_listener($event) { return ctx.onPageChange($event); })(\"scrollChange\", function ViewListComponent_Template_kendo_virtualization_scrollChange_2_listener($event) { return ctx.scrollChange($event); })(\"activeIndexChange\", function ViewListComponent_Template_kendo_virtualization_activeIndexChange_2_listener($event) { return ctx.setActiveDate($event); });\n ɵngcc0.ɵɵelementStart(3, \"table\", null, 3);\n ɵngcc0.ɵɵelementStart(5, \"colgroup\");\n ɵngcc0.ɵɵtemplate(6, ViewListComponent_col_6_Template, 1, 0, \"col\", 4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, ViewListComponent_tbody_7_Template, 1, 11, \"tbody\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentDate\", ctx.activeDate)(\"min\", ctx.min)(\"max\", ctx.max)(\"activeView\", ctx.activeView)(\"templateRef\", ctx.headerTitleTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isMonthView());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"tabindex\", 0 - 1)(\"skip\", ctx.skip)(\"take\", ctx.take)(\"total\", ctx.total)(\"itemHeight\", ctx.viewHeight)(\"topOffset\", ctx.viewOffset)(\"bottomOffset\", ctx.bottomOffset)(\"scrollOffsetSize\", ctx.viewOffset)(\"maxScrollDifference\", ctx.viewHeight);\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.cols);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [HeaderComponent, ɵngcc2.NgIf, VirtualizationComponent, ɵngcc2.NgForOf, KForOf,\n ViewComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nViewListComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef },\n { type: IntlService },\n { type: CalendarDOMService },\n { type: Renderer2 }\n];\nViewListComponent.propDecorators = {\n cellTemplateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n headerTitleTemplateRef: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n isActive: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n value: [{ type: Input }],\n weekNumber: [{ type: Input }],\n activeDateChange: [{ type: Output }],\n valueChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent,] }],\n list: [{ type: ViewChild, args: ['list', { static: true },] }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-view\",] }],\n getComponentMonthClass: [{ type: HostBinding, args: [\"class.k-calendar-monthview\",] }],\n getComponentYearClass: [{ type: HostBinding, args: [\"class.k-calendar-yearview\",] }],\n getComponentDecadeClass: [{ type: HostBinding, args: [\"class.k-calendar-decadeview\",] }],\n getComponentCenturyClass: [{ type: HostBinding, args: [\"class.k-calendar-centuryview\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ViewListComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-viewlist',\n template: `\n \n \n \n \n \n \n \n \n
{{name}}
\n \n \n \n\n \n
\n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.IntlService }, { type: CalendarDOMService }, { type: ɵngcc0.Renderer2 }]; }, { isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], activeDateChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }], cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], headerTitleTemplateRef: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], value: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent]\n }], list: [{\n type: ViewChild,\n args: ['list', { static: true }]\n }] }); })();\n\nconst KEY_TO_ACTION = {\n '33': Action.PrevView,\n '34': Action.NextView,\n '35': Action.LastInView,\n '36': Action.FirstInView,\n '37': Action.Left,\n '38': Action.Up,\n '39': Action.Right,\n '40': Action.Down,\n 'meta+38': Action.UpperView,\n 'meta+40': Action.LowerView\n};\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(bus) {\n this.bus = bus;\n }\n action(event) {\n const action = `${event.ctrlKey || event.metaKey ? 'meta+' : ''}${event.keyCode}`;\n return KEY_TO_ACTION[action];\n }\n move(value, action, activeView) {\n const service = this.bus.service(activeView);\n if (!service) {\n return value;\n }\n if (action === Action.UpperView && this.bus.canMoveUp(activeView)) {\n this.bus.moveUp(activeView);\n return value;\n }\n if (action === Action.LowerView && this.bus.canMoveDown(activeView)) {\n this.bus.moveDown(activeView);\n return value;\n }\n return service.move(value, action);\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(BusViewService)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: BusViewService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: BusViewService }]; }, null); })();\n\nconst divideByMagnitude = (magnitude) => x => Math.floor(x / magnitude);\nconst powerByMagnitude = (magnitude) => x => x * magnitude;\n/**\n * @hidden\n */\nclass ScrollSyncService {\n constructor(dom, zone) {\n this.dom = dom;\n this.zone = zone;\n }\n configure(activeView) {\n const magnitude = Math.max(this.dom.viewHeight(activeView) / this.dom.navigationItemHeight, 1);\n this.divideByMagnitude = divideByMagnitude(magnitude);\n this.powerByMagnitude = powerByMagnitude(magnitude);\n }\n sync(navigator, view) {\n this.unsubscribe();\n if (!navigator || !view) {\n return;\n }\n this.navigator = navigator;\n this.view = view;\n this.zone.runOutsideAngular(() => {\n let navScrolled, monthScrolled;\n this.navSubscription = navigator.scroll$()\n .subscribe((e) => {\n if (monthScrolled) {\n monthScrolled = false;\n return;\n }\n navScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n this.viewSubscription = view.scroll$()\n .subscribe((e) => {\n if (navScrolled) {\n navScrolled = false;\n return;\n }\n monthScrolled = true;\n this.scrollSiblingOf(e.target);\n });\n });\n }\n scrollSiblingOf(scrolledElement) {\n const component = this.siblingComponent(scrolledElement);\n const scrollTop = this.calculateScroll(component, scrolledElement.scrollTop);\n component.scrollTo(scrollTop);\n }\n siblingComponent(scrollableElement) {\n return this.navigator.container.nativeElement === scrollableElement ? this.view : this.navigator;\n }\n calculateScroll(component, scrollTop) {\n const modifier = component === this.navigator ? this.divideByMagnitude : this.powerByMagnitude;\n return modifier(scrollTop);\n }\n destroy() {\n this.unsubscribe();\n }\n unsubscribe() {\n if (this.navSubscription) {\n this.navSubscription.unsubscribe();\n }\n if (this.viewSubscription) {\n this.viewSubscription.unsubscribe();\n }\n }\n}\nScrollSyncService.ɵfac = function ScrollSyncService_Factory(t) { return new (t || ScrollSyncService)(ɵngcc0.ɵɵinject(CalendarDOMService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nScrollSyncService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollSyncService, factory: ScrollSyncService.ɵfac });\n/** @nocollapse */\nScrollSyncService.ctorParameters = () => [\n { type: CalendarDOMService },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollSyncService, [{\n type: Injectable\n }], function () { return [{ type: CalendarDOMService }, { type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * Used for rendering the cell content of the Calendar. To define the cell template, nest an `` tag\n * with the `kendoCalendarCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details\n * about the current cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * > `kendoCalendarCellTemplate` is equivalent to\n * > [`kendoCalendarMonthCellTemplate`]({% slug api_dateinputs_monthcelltemplatedirective %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{date.getDate()}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCellTemplateDirective.ɵfac = function CellTemplateDirective_Factory(t) { return new (t || CellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CellTemplateDirective, selectors: [[\"\", \"kendoCalendarCellTemplate\", \"\"]] });\n/** @nocollapse */\nCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the month cell content of the Calendar. To define the month cell template, nest an `` tag\n * with the `kendoCalendarMonthCellTemplate` directive inside the component tag. The template context is set to the current\n * component. To get a reference to the current date, use the `let-date` directive. To provide more details about the current\n * month cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MonthCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nMonthCellTemplateDirective.ɵfac = function MonthCellTemplateDirective_Factory(t) { return new (t || MonthCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nMonthCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MonthCellTemplateDirective, selectors: [[\"\", \"kendoCalendarMonthCellTemplate\", \"\"]] });\n/** @nocollapse */\nMonthCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MonthCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarMonthCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the year cell content of the Calendar. To define the year cell template, nest an\n * `` tag with the `kendoCalendarYearCellTemplate` directive inside the component tag.\n * The template context is set to the current component. To get a reference to the current date, use\n * the `let-date` directive. To provide more details about the current year cell, get a reference to the\n * current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'year';\n * }\n * ```\n */\nclass YearCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nYearCellTemplateDirective.ɵfac = function YearCellTemplateDirective_Factory(t) { return new (t || YearCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nYearCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: YearCellTemplateDirective, selectors: [[\"\", \"kendoCalendarYearCellTemplate\", \"\"]] });\n/** @nocollapse */\nYearCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(YearCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarYearCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the decade cell content of the Calendar. To define the decade cell template, nest an ``\n * tag with the `kendoCalendarDecadeCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current decade cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'decade';\n * }\n * ```\n */\nclass DecadeCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDecadeCellTemplateDirective.ɵfac = function DecadeCellTemplateDirective_Factory(t) { return new (t || DecadeCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nDecadeCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DecadeCellTemplateDirective, selectors: [[\"\", \"kendoCalendarDecadeCellTemplate\", \"\"]] });\n/** @nocollapse */\nDecadeCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DecadeCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarDecadeCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the century cell content of the Calendar. To define the century cell template, nest an ``\n * tag with the `kendoCalendarCenturyCellTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current date, use the `let-date` directive. To provide more details about\n * the current century cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent {\n * public activeView: CalendarView = 'century';\n * }\n * ```\n */\nclass CenturyCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCenturyCellTemplateDirective.ɵfac = function CenturyCellTemplateDirective_Factory(t) { return new (t || CenturyCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nCenturyCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CenturyCellTemplateDirective, selectors: [[\"\", \"kendoCalendarCenturyCellTemplate\", \"\"]] });\n/** @nocollapse */\nCenturyCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CenturyCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarCenturyCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the week number cell content in the month view of the Calendar. To define the month week number cell template,\n * nest an `` tag with the `kendoCalendarWeekNumberCellTemplate` directive inside the component tag. The template\n * context is set to the current component. To get a reference to the current date, use the `let-date` directive. To provide more\n * details about the current week number cell, get a reference to the current `cellContext` by using the `let-cellContext` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{context.formattedValue}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass WeekNumberCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nWeekNumberCellTemplateDirective.ɵfac = function WeekNumberCellTemplateDirective_Factory(t) { return new (t || WeekNumberCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nWeekNumberCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: WeekNumberCellTemplateDirective, selectors: [[\"\", \"kendoCalendarWeekNumberCellTemplate\", \"\"]] });\n/** @nocollapse */\nWeekNumberCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WeekNumberCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarWeekNumberCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the header title of the Calendar. To define the header title template, nest an `` tag\n * with the `kendoCalendarHeaderTitleTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current title, use the `let-title` directive. To provide more details about\n * the current title, get a reference to the current `date` by using the `let-date` directive or get a reference to the\n * current active view by using the `let-activeView` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass HeaderTitleTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTitleTemplateDirective.ɵfac = function HeaderTitleTemplateDirective_Factory(t) { return new (t || HeaderTitleTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nHeaderTitleTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: HeaderTitleTemplateDirective, selectors: [[\"\", \"kendoCalendarHeaderTitleTemplate\", \"\"]] });\n/** @nocollapse */\nHeaderTitleTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderTitleTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarHeaderTitleTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Used for rendering the navigation item of the Calendar. To define the navigation item template, nest an ``\n * tag with the `kendoCalendarNavigationItemTemplate` directive inside the component tag. The template context is set to the\n * current component. To get a reference to the current item value, use the `let-title` directive. To provide more details\n * about the current title, get a reference to the current `date` by using the `let-date='date'` directive or get a reference\n * to the current active view by using the `let-activeView='activeView'` directive.\n *\n * For more examples, refer to the article on [templates]({% slug templates_calendar %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * styles: ['.custom { color: red; }'],\n * template: `\n * \n * \n * {{title}}\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass NavigationItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNavigationItemTemplateDirective.ɵfac = function NavigationItemTemplateDirective_Factory(t) { return new (t || NavigationItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nNavigationItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NavigationItemTemplateDirective, selectors: [[\"\", \"kendoCalendarNavigationItemTemplate\", \"\"]] });\n/** @nocollapse */\nNavigationItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCalendarNavigationItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PickerService {\n constructor() {\n this.onFocus = new EventEmitter();\n this.onBlur = new EventEmitter();\n this.sameDateSelected = new EventEmitter();\n this.dateCompletenessChange = new EventEmitter();\n }\n}\nPickerService.ɵfac = function PickerService_Factory(t) { return new (t || PickerService)(); };\nPickerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PickerService, factory: PickerService.ɵfac });\n\n\n/**\n * @hidden\n */\nconst minValidator = (minValue) => {\n return (control) => {\n const err = {\n minError: {\n minValue: minValue,\n value: control.value\n }\n };\n if (!minValue || !control.value) {\n return null;\n }\n return control.value < minValue ? err : null;\n };\n};\n\n/**\n * @hidden\n */\nconst maxValidator = (maxValue) => {\n return (control) => {\n const err = {\n maxError: {\n maxValue: maxValue,\n value: control.value\n }\n };\n if (!maxValue || !control.value) {\n return null;\n }\n return control.value > maxValue ? err : null;\n };\n};\n\nconst noop$1 = () => false;\nconst DISABLED_DATES_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/disabled-dates/';\n/**\n * @hidden\n */\nclass DisabledDatesService {\n constructor() {\n /**\n * Emits every time the `isDateDisabled` method changes.\n */\n this.changes = new Subject();\n /**\n * Based on the user-defined `disabledDates` input evaluates if the date is disabled.\n * If not set, returns `false`.\n */\n this.isDateDisabled = noop$1;\n }\n /**\n * Configures the `isDateDisabled` function.\n *\n * * If a function is provided, uses it as-is and passes each date to it for evaluation.\n * The time part is set to `midnight`.\n * * If a `Date[]` is provided, creates a function that checks the targeted date against\n * the listed dates and, if the targeted date is listed, marks it as disabled.\n * * If a `Day[]` is provided, creates a function that evaluates the provided days of the\n * week as disabled.\n */\n initialize(disabledDates) {\n if (typeof disabledDates === 'function') {\n this.isDateDisabled = (date) => disabledDates(getDate(date));\n }\n else if (isNumberArray(disabledDates)) {\n const disabledWeekDays = new Set(disabledDates);\n this.isDateDisabled = (date) => disabledWeekDays.has(date.getDay());\n }\n else if (isDateArray(disabledDates)) {\n const normalizedDisabledDates = new Set(disabledDates.map(date => getDate(date).getTime()));\n this.isDateDisabled = (date) => normalizedDisabledDates.has(getDate(date).getTime());\n }\n else {\n this.isDateDisabled = noop$1;\n this.notifyInvalidInput(disabledDates);\n }\n this.notifyServiceChange();\n }\n notifyInvalidInput(disabledDates) {\n if (isPresent(disabledDates) && isDevMode()) {\n throw new Error(`The 'disabledDates' value should be a function, a Day array or a Date array. Check ${DISABLED_DATES_DOC_LINK} for more information.`);\n }\n }\n notifyServiceChange() {\n this.changes.next();\n }\n}\nDisabledDatesService.ɵfac = function DisabledDatesService_Factory(t) { return new (t || DisabledDatesService)(); };\nDisabledDatesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DisabledDatesService, factory: DisabledDatesService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DisabledDatesService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/* tslint:disable:no-forward-ref */\nconst BOTTOM_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\nconst virtualizationProp = x => x ? x.virtualization : null;\n/**\n * @hidden\n */\nconst CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst KENDO_INPUT_PROVIDER = {\n provide: KendoInput,\n useExisting: forwardRef(() => CalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * Represents the [Kendo UI Calendar component for Angular]({% slug overview_calendar %}#toc-basic-usage).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass CalendarComponent {\n constructor(bus, dom, element, navigator, renderer, cdr, ngZone, injector, scrollSyncService, disabledDatesService, pickerService) {\n this.bus = bus;\n this.dom = dom;\n this.element = element;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.ngZone = ngZone;\n this.injector = injector;\n this.scrollSyncService = scrollSyncService;\n this.disabledDatesService = disabledDatesService;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_calendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar will be displayed\n * ([see example]({% slug sidebar_calendar %})).\n */\n this.navigation = true;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_calendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view to which the user can navigate\n * ([see example]({% slug dates_calendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view to which the user can navigate\n * ([see example]({% slug sidebar_calendar %}#toc-partial-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_calendar %})).\n */\n this.weekNumber = false;\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when the active view date is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.activeViewDateChange = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_calendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n this.isActive = false;\n this.cellUID = guid();\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.syncNavigation = true;\n this.domEvents = [];\n this.resolvedPromise = Promise.resolve(null);\n this.destroyed = false;\n this.setClasses(element.nativeElement);\n if (this.pickerService) {\n this.pickerService.calendar = this;\n }\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_calendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n this._focusedDate = focusedDate || getToday();\n this.setAriaActivedescendant();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value\n * ([see example]({% slug dateranges_calendar %})).\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = cloneDate(candidate);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the Calendar that will be disabled\n * ([see example]({% slug disabled_dates_calendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n /**\n * @hidden\n */\n set navigationItemTemplateRef(template) {\n this.navigationItemTemplate = template;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get widgetRole() {\n return 'grid';\n }\n get calendarTabIndex() {\n return this.disabled ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n ngOnInit() {\n this.dom.calculateHeights(this.element.nativeElement);\n this.scrollSyncService.configure(this.activeViewEnum);\n this.viewChangeSubscription = this.bus.viewChanged.subscribe(({ view }) => {\n this.activeView = CalendarViewEnum[view];\n this.emitEvent(this.activeViewChange, this.activeView);\n this.scrollSyncService.configure(view);\n this.detectChanges(); // requires zone if templates\n });\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n this.scrollSyncService.configure(this.activeViewEnum);\n const useValue = hasExistingValue(changes, 'value') && !hasExistingValue(changes, 'focusedDate');\n const focusedDate = dateInRange(cloneDate(useValue ? this.value : this.focusedDate), this.min, this.max);\n this.focusedDate = !isEqual(this.focusedDate, focusedDate) ? focusedDate : this.focusedDate;\n if (changes.navigation) {\n this.syncNavigation = true;\n }\n if (changes.min || changes.max || changes.rangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.onValidatorChange();\n }\n }\n ngAfterViewInit() {\n this.setAriaActivedescendant();\n }\n ngAfterViewChecked() {\n if (!this.syncNavigation) {\n return;\n }\n this.syncNavigation = false;\n this.scrollSyncService.sync(virtualizationProp(this.navigationView), virtualizationProp(this.monthView));\n }\n ngOnDestroy() {\n this.scrollSyncService.destroy();\n this.viewChangeSubscription.unsubscribe();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n if (this.pickerService) {\n this.pickerService.calendar = null;\n }\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n this.destroyed = true;\n }\n /**\n * @hidden\n */\n onResize() {\n this.focusedDate = new Date(this.focusedDate);\n this.cdr.detectChanges();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n /**\n * @hidden\n */\n handleNavigation(candidate) {\n if (this.disabled) {\n return;\n }\n const focusTarget = candidate ? new Date(cloneDate(candidate).setDate(1)) : this.focusedDate;\n this.focusedDate = dateInRange(focusTarget, this.min, this.max);\n this.detectChanges();\n }\n /**\n * @hidden\n */\n onPageChange() {\n if (!NgZone.isInAngularZone()) {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n this.pageChangeSubscription = from(this.resolvedPromise)\n .subscribe(() => {\n this.detectChanges(); // requires zone if templates\n });\n }\n }\n /**\n * @hidden\n */\n handleDateChange(candidate) {\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const isSameDate = !canNavigateDown && isEqual(candidate, this.value);\n this.focusedDate = cloneDate(candidate) || this.focusedDate;\n if (this.disabled) {\n return;\n }\n if (isSameDate) {\n this.emitSameDate();\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (!this.disabledDatesService.isDateDisabled(candidate)) {\n this.ngZone.run(() => {\n this.value = cloneDate(candidate);\n this.onControlChange(cloneDate(candidate));\n this.valueChange.emit(cloneDate(candidate));\n this.cdr.markForCheck();\n });\n }\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.focusedDate = dateInRange(cloneDate(candidate) || this.focusedDate, this.min, this.max);\n this.value = cloneDate(candidate);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplate || this.cellTemplate;\n case CalendarViewEnum.year:\n return this.yearCellTemplate;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplate;\n case CalendarViewEnum.century:\n return this.centuryCellTemplate;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n emitEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.ngZone.run(() => {\n emitter.emit(args);\n });\n }\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, 'k-calendar-infinite');\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK} and ${MAX_DOC_LINK}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK} and ${TOP_VIEW_DOC_LINK}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK} for possible resolution.`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'blur', this.handleBlur.bind(this)), this.renderer.listen(element, 'focus', this.handleFocus.bind(this)), this.renderer.listen(element, 'mousedown', preventDefault), this.renderer.listen(element, 'click', this.handleClick.bind(this)), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus() {\n if (this.pickerService) {\n this.pickerService.onFocus.emit();\n }\n }\n handleBlur(args) {\n this.isActive = false;\n // the injector can get the NgControl instance of the parent component (for example, the DateTimePicker)\n // and enters the zone for no reason because the parent component is still untouched\n if (!this.pickerService && requiresZoneOnBlur(this.control)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n this.detectChanges();\n }\n }\n handleFocus() {\n this.isActive = true;\n if (!NgZone.isInAngularZone()) {\n this.detectChanges();\n }\n this.emitFocus();\n }\n handleClick() {\n if (!this.isActive) {\n if (this.monthView.isScrolled()) {\n this.focusedDate = cloneDate(this.focusedDate); //XXX: forces change detect\n this.detectChanges();\n }\n this.focus();\n }\n }\n handleKeydown(args) {\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowUp, Keys.ArrowRight, Keys.ArrowDown, Keys.ArrowLeft].indexOf(args.keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && args.altKey) {\n return;\n }\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(args), this.activeViewEnum), this.min, this.max);\n if (!isEqual(this.focusedDate, candidate)) {\n this.focusedDate = candidate;\n this.detectChanges();\n args.preventDefault();\n }\n if (args.keyCode === Keys.Enter) {\n this.handleDateChange(this.focusedDate);\n }\n }\n detectChanges() {\n if (!this.destroyed) {\n this.cdr.detectChanges();\n }\n }\n emitSameDate() {\n if (this.pickerService) {\n this.pickerService.sameDateSelected.emit();\n }\n }\n setAriaActivedescendant() {\n if (!isPresent(this.element)) {\n return;\n }\n const focusedCellId = this.cellUID + this.focusedDate.getTime();\n this.renderer.setAttribute(this.element.nativeElement, 'aria-activedescendant', focusedCellId);\n }\n}\nCalendarComponent.ɵfac = function CalendarComponent_Factory(t) { return new (t || CalendarComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(CalendarDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nCalendarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CalendarComponent, selectors: [[\"kendo-calendar\"]], contentQueries: function CalendarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, NavigationItemTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationItemTemplate = _t.first);\n } }, viewQuery: function CalendarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(NavigationComponent, true);\n ɵngcc0.ɵɵviewQuery(ViewListComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationView = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthView = _t.first);\n } }, hostVars: 8, hostBindings: function CalendarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.widgetId)(\"role\", ctx.widgetRole)(\"tabindex\", ctx.calendarTabIndex)(\"aria-disabled\", ctx.ariaDisabled);\n ɵngcc0.ɵɵclassProp(\"k-week-number\", ctx.weekNumber)(\"k-state-disabled\", ctx.ariaDisabled);\n } }, inputs: { id: \"id\", rangeValidation: \"rangeValidation\", disabled: \"disabled\", tabindex: \"tabindex\", navigation: \"navigation\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"] }, outputs: { activeViewChange: \"activeViewChange\", activeViewDateChange: \"activeViewDateChange\", valueChange: \"valueChange\" }, exportAs: [\"kendo-calendar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 12, consts: [[\"kendoCalendarLocalizedMessages\", \"\", 6, \"today\"], [3, \"activeView\", \"focusedDate\", \"min\", \"max\", \"templateRef\", \"valueChange\", \"pageChange\", 4, \"ngIf\"], [3, \"activeView\", \"isActive\", \"cellTemplateRef\", \"headerTitleTemplateRef\", \"weekNumberTemplateRef\", \"cellUID\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"value\", \"valueChange\", \"activeDateChange\", \"pageChange\"], [3, \"resize\"], [3, \"activeView\", \"focusedDate\", \"min\", \"max\", \"templateRef\", \"valueChange\", \"pageChange\"]], template: function CalendarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c6);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵtemplate(2, CalendarComponent_kendo_calendar_navigation_2_Template, 1, 5, \"kendo-calendar-navigation\", 1);\n ɵngcc0.ɵɵelementStart(3, \"kendo-calendar-viewlist\", 2);\n ɵngcc0.ɵɵlistener(\"valueChange\", function CalendarComponent_Template_kendo_calendar_viewlist_valueChange_3_listener($event) { return ctx.handleDateChange($event); })(\"activeDateChange\", function CalendarComponent_Template_kendo_calendar_viewlist_activeDateChange_3_listener($event) { return ctx.emitEvent(ctx.activeViewDateChange, $event); })(\"pageChange\", function CalendarComponent_Template_kendo_calendar_viewlist_pageChange_3_listener() { return ctx.onPageChange(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-resize-sensor\", 3);\n ɵngcc0.ɵɵlistener(\"resize\", function CalendarComponent_Template_kendo_resize_sensor_resize_4_listener() { return ctx.onResize(); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n var tmp_3_0 = null;\n const currVal_3 = (tmp_3_0 = ctx.activeCellTemplate()) == null ? null : tmp_3_0.templateRef;\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.navigation);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeViewEnum)(\"isActive\", ctx.isActive)(\"cellTemplateRef\", currVal_3)(\"headerTitleTemplateRef\", ctx.headerTitleTemplate == null ? null : ctx.headerTitleTemplate.templateRef)(\"weekNumberTemplateRef\", ctx.weekNumberTemplate == null ? null : ctx.weekNumberTemplate.templateRef)(\"cellUID\", ctx.cellUID)(\"min\", ctx.min)(\"max\", ctx.max)(\"focusedDate\", ctx.focusedDate)(\"weekNumber\", ctx.weekNumber)(\"value\", ctx.value);\n } }, directives: function () { return [CalendarLocalizedMessagesDirective, ɵngcc2.NgIf, ViewListComponent, ɵngcc3.ResizeSensorComponent, NavigationComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nCalendarComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: CalendarDOMService },\n { type: ElementRef },\n { type: NavigationService },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: NgZone },\n { type: Injector },\n { type: ScrollSyncService },\n { type: DisabledDatesService },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nCalendarComponent.propDecorators = {\n id: [{ type: Input }],\n focusedDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n disabled: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n navigation: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }, { type: HostBinding, args: ['class.k-week-number',] }],\n activeViewChange: [{ type: Output }],\n activeViewDateChange: [{ type: Output }],\n valueChange: [{ type: Output }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective, { static: true },] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective, { static: true },] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective, { static: true },] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective, { static: true },] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective, { static: true },] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective, { static: true },] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective, { static: true },] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n navigationItemTemplate: [{ type: ContentChild, args: [NavigationItemTemplateDirective, { static: true },] }],\n navigationItemTemplateRef: [{ type: Input, args: ['navigationItemTemplate',] }],\n navigationView: [{ type: ViewChild, args: [NavigationComponent,] }],\n monthView: [{ type: ViewChild, args: [ViewListComponent,] }],\n widgetId: [{ type: HostBinding, args: ['attr.id',] }],\n widgetRole: [{ type: HostBinding, args: ['attr.role',] }],\n calendarTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-calendar',\n providers: [\n BusViewService,\n CALENDAR_VALUE_ACCESSOR,\n CALENDAR_RANGE_VALIDATORS,\n KENDO_INPUT_PROVIDER,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.calendar'\n },\n NavigationService,\n ScrollSyncService\n ],\n selector: 'kendo-calendar',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: CalendarDOMService }, { type: ɵngcc0.ElementRef }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ScrollSyncService }, { type: DisabledDatesService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { id: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], navigation: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['class.k-week-number']\n }], activeViewChange: [{\n type: Output\n }], activeViewDateChange: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: true }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: true }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: true }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: true }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: true }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: true }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: true }]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective, { static: true }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], widgetRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], navigationView: [{\n type: ViewChild,\n args: [NavigationComponent]\n }], monthView: [{\n type: ViewChild,\n args: [ViewListComponent]\n }] }); })();\n\n/**\n * @hidden\n */\nconst incompleteDateValidator = () => {\n return (control, incomplete) => {\n if (!isPresent(control.value) && incomplete) {\n return { incompleteDate: true };\n }\n else {\n return null;\n }\n };\n};\n\n/**\n * @hidden\n */\nvar Arrow;\n(function (Arrow) {\n Arrow[Arrow[\"Up\"] = 0] = \"Up\";\n Arrow[Arrow[\"Down\"] = 1] = \"Down\";\n Arrow[Arrow[\"None\"] = 2] = \"None\";\n})(Arrow || (Arrow = {}));\n\n/* tslint:disable:max-line-length */\nconst MIN_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-min';\nconst MAX_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DateInputComponent/#toc-max';\nconst VALUE_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/dateinput/#toc-using-with-json';\nconst DATE_PART_REGEXP = /year|month|/;\nconst TIME_PART_REGEXP = /hour|minute|second|millisecond/;\nconst SHORT_PATTERN_LENGTH_REGEXP = /d|M|H|h|m|s/;\nconst padZero = (length) => new Array(Math.max(length, 0)).fill('0').join('');\nconst unpadZero = (value) => value.replace(/^0*/, '');\nclass Mask {\n constructor() {\n this.symbols = \"\";\n }\n}\nclass KendoDate {\n constructor(intl, formatPlaceholder, format, value) {\n this.intl = intl;\n this.formatPlaceholder = formatPlaceholder;\n this.format = format;\n this.year = true;\n this.month = true;\n this.date = true;\n this.hours = true;\n this.minutes = true;\n this.seconds = true;\n this.milliseconds = true;\n this.leadingZero = null;\n this.monthNames = null;\n this.typedMonthPart = \"\";\n this.value = getDate(new Date());\n this.knownParts = \"adHhmMsEy\";\n this.symbols = {\n \"E\": \"E\",\n \"H\": \"H\",\n \"M\": \"M\",\n \"a\": \"a\",\n \"d\": \"d\",\n \"h\": \"h\",\n \"m\": \"m\",\n \"s\": \"s\",\n \"y\": \"y\"\n };\n this.monthNames = this.allFormatedMonths();\n this.dayPeriods = this.allDayPeriods();\n if (!value) {\n this.value = getDate(new Date());\n const sampleFormat = this.dateFormatString(this.value, this.format).symbols;\n for (let i = 0; i < sampleFormat.length; i++) {\n this.setExisting(sampleFormat[i], false);\n }\n }\n else {\n this.value = cloneDate(value);\n }\n }\n hasValue() {\n const pred = (a, p) => a || p.type !== 'literal' && p.type !== 'dayperiod' && this.getExisting(p.pattern[0]);\n return this.intl.splitDateFormat(this.format).reduce(pred, false);\n }\n getDateObject() {\n for (let i = 0; i < this.knownParts.length; i++) {\n if (!this.getExisting(this.knownParts[i])) {\n return null;\n }\n }\n return cloneDate(this.value);\n }\n getTextAndFormat() {\n return this.merge(this.intl.formatDate(this.value, this.format), this.dateFormatString(this.value, this.format));\n }\n getExisting(symbol) {\n switch (symbol) {\n case \"y\": return this.year;\n case \"M\":\n case \"L\": return this.month;\n case \"d\": return this.date;\n case \"E\": return this.date && this.month && this.year;\n case \"h\":\n case \"H\": return this.hours;\n case \"m\": return this.minutes;\n case \"s\": return this.seconds;\n default: return true;\n }\n }\n setExisting(symbol, value) {\n switch (symbol) {\n case \"y\":\n this.year = value;\n if (value === false) {\n this.value.setFullYear(2000);\n }\n break; //allow 2/29 dates\n case \"M\":\n this.month = value;\n if (value === false) {\n this.value.setMonth(0);\n }\n break; //make sure you can type 31 at day part\n case \"d\":\n this.date = value;\n break;\n case \"h\":\n case \"H\":\n this.hours = value;\n break;\n case \"m\":\n this.minutes = value;\n break;\n case \"s\":\n this.seconds = value;\n break;\n default: return;\n }\n }\n modifyPart(symbol, offset) {\n let newValue = cloneDate(this.value);\n switch (symbol) {\n case \"y\":\n newValue.setFullYear(newValue.getFullYear() + offset);\n break;\n case \"M\":\n newValue = addMonths(this.value, offset);\n break;\n case \"d\":\n case \"E\":\n newValue.setDate(newValue.getDate() + offset);\n break;\n case \"h\":\n case \"H\":\n newValue.setHours(newValue.getHours() + offset);\n break;\n case \"m\":\n newValue.setMinutes(newValue.getMinutes() + offset);\n break;\n case \"s\":\n newValue.setSeconds(newValue.getSeconds() + offset);\n break;\n case \"a\":\n newValue.setHours(newValue.getHours() + (12 * offset));\n break;\n default: break;\n }\n if (newValue.getFullYear() > 0) {\n this.setExisting(symbol, true);\n this.value = newValue;\n }\n }\n parsePart(symbol, currentChar, resetSegmentValue) {\n if (!currentChar) {\n this.resetLeadingZero();\n this.setExisting(symbol, false);\n return { value: null, switchToNext: false };\n }\n let baseDate = this.intl.formatDate(this.value, this.format);\n let dateParts = this.dateFormatString(this.value, this.format);\n let baseFormat = dateParts.symbols;\n let replaced = false;\n let prefix = \"\";\n let current = \"\";\n let suffix = \"\";\n for (let i = 0; i < baseDate.length; i++) {\n if (baseFormat[i] === symbol) {\n current += this.getExisting(symbol) ? baseDate[i] : \"0\";\n replaced = true;\n }\n else if (!replaced) {\n prefix += baseDate[i];\n }\n else {\n suffix += baseDate[i];\n }\n }\n let currentMaxLength = current.length - 3;\n let parsedDate = null;\n const month = this.matchMonth(currentChar);\n const dayPeriod = this.matchDayPeriod(currentChar, symbol);\n const isZeroCurrentChar = currentChar === '0';\n const leadingZero = (this.leadingZero || {})[symbol] || 0;\n if (isZeroCurrentChar) {\n let valueNumber = parseInt(resetSegmentValue ? currentChar : current + currentChar, 10);\n if (valueNumber === 0 && !this.isAbbrMonth(dateParts.partMap, symbol)) {\n this.incrementLeadingZero(symbol);\n }\n }\n else {\n this.resetLeadingZero();\n }\n for (let i = Math.max(0, currentMaxLength); i <= current.length; i++) {\n let middle = resetSegmentValue ? currentChar : (current.substring(i) + currentChar);\n let middleNumber = parseInt(middle, 10);\n parsedDate = this.intl.parseDate(prefix + middle + suffix, this.format);\n if (!parsedDate && !isNaN(middleNumber) && !isNaN(parseInt(currentChar, 10))) {\n if (symbol === 'M' && !month) {\n const monthNumber = middleNumber - 1;\n if (monthNumber > -1 && monthNumber < 12) {\n parsedDate = cloneDate(this.value);\n parsedDate.setMonth(monthNumber);\n if (parsedDate.getMonth() !== monthNumber) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (symbol === 'y') {\n parsedDate = createDate(parseInt(middle, 10), this.month ? this.value.getMonth() : 0, this.date ? this.value.getDate() : 1, this.hours ? this.value.getHours() : 0, this.minutes ? this.value.getMinutes() : 0, this.seconds ? this.value.getSeconds() : 0, this.milliseconds ? this.value.getMilliseconds() : 0);\n if (this.date && parsedDate.getDate() !== this.value.getDate()) {\n parsedDate = lastDayOfMonth(addMonths(parsedDate, -1));\n }\n }\n }\n if (parsedDate) {\n //move to next segment if the part will overflow with next char\n //when start from empty date (01, then 010), padded zeros should be trimmed\n const patternValue = this.partPattern(dateParts.partMap, symbol).pattern;\n const peekDate = this.intl.parseDate(`${prefix}${this.peek(middle, patternValue)}${suffix}`, this.format);\n const patternLength = this.patternLength(patternValue) || patternValue.length;\n const patternSatisfied = (leadingZero + (unpadZero(middle) || currentChar).length) >= patternLength;\n const switchToNext = peekDate === null || patternSatisfied;\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: switchToNext };\n }\n }\n if (month) {\n parsedDate = this.intl.parseDate(prefix + month + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n this.setExisting(symbol, true);\n return { value: this.value, switchToNext: false };\n }\n }\n if (dayPeriod) {\n parsedDate = this.intl.parseDate(prefix + dayPeriod + suffix, this.format);\n if (parsedDate) {\n this.value = parsedDate;\n return { value: this.value, switchToNext: true };\n }\n }\n if (isZeroCurrentChar) {\n this.setExisting(symbol, false);\n }\n return { value: null, switchToNext: false };\n }\n resetLeadingZero() {\n const hasLeadingZero = this.leadingZero !== null;\n this.setLeadingZero(null);\n return hasLeadingZero;\n }\n setLeadingZero(leadingZero) {\n this.leadingZero = leadingZero;\n }\n incrementLeadingZero(symbol) {\n const leadingZero = this.leadingZero || {};\n leadingZero[symbol] = (leadingZero[symbol] || 0) + 1;\n this.leadingZero = leadingZero;\n }\n isAbbrMonth(parts, symbol) {\n const pattern = this.partPattern(parts, symbol);\n return pattern.type === 'month' && pattern.names;\n }\n partPattern(parts, symbol) {\n return parts.filter((part) => part.pattern.indexOf(symbol) !== -1)[0];\n }\n peek(value, pattern) {\n const peekValue = unpadZero(value) + '0';\n return padZero(pattern.length - peekValue.length) + peekValue;\n }\n matchMonth(typedChar) {\n this.typedMonthPart += typedChar.toLowerCase();\n if (!this.monthNames) {\n return \"\";\n }\n while (this.typedMonthPart.length > 0) {\n for (let i = 0; i < this.monthNames.length; i++) {\n if (this.monthNames[i].toLowerCase().indexOf(this.typedMonthPart) === 0) {\n return this.monthNames[i];\n }\n }\n const monthAsNum = parseInt(this.typedMonthPart, 10);\n if (monthAsNum >= 1 && monthAsNum <= 12 && monthAsNum.toString() === this.typedMonthPart /*ensure they exact match*/) {\n return this.monthNames[monthAsNum - 1];\n }\n this.typedMonthPart = this.typedMonthPart.substring(1, this.typedMonthPart.length);\n }\n return \"\";\n }\n matchDayPeriod(typedChar, symbol) {\n const lowerChart = String(typedChar).toLowerCase();\n if (symbol === 'a' && this.dayPeriods) {\n if (this.dayPeriods.am.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.am;\n }\n else if (this.dayPeriods.pm.toLowerCase().startsWith(lowerChart)) {\n return this.dayPeriods.pm;\n }\n }\n return '';\n }\n allFormatedMonths() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"month\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n allDayPeriods() {\n const dateFormatParts = this.intl.splitDateFormat(this.format);\n for (let i = 0; i < dateFormatParts.length; i++) {\n if (dateFormatParts[i].type === \"dayperiod\" && dateFormatParts[i].names) {\n return this.intl.dateFormatNames(dateFormatParts[i].names);\n }\n }\n return null;\n }\n patternLength(pattern) {\n if (pattern[0] === 'y') {\n return 4;\n }\n if (SHORT_PATTERN_LENGTH_REGEXP.test(pattern)) {\n return 2;\n }\n return 0;\n }\n //TODO: REMOVE!\n dateFormatString(date, format) {\n const dateFormatParts = this.intl.splitDateFormat(format);\n const parts = [];\n const partMap = [];\n for (let i = 0; i < dateFormatParts.length; i++) {\n let partLength = this.intl.formatDate(date, { pattern: dateFormatParts[i].pattern }).length;\n while (partLength > 0) {\n parts.push(this.symbols[dateFormatParts[i].pattern[0]] || \"_\");\n partMap.push(dateFormatParts[i]);\n partLength--;\n }\n }\n const returnValue = new Mask();\n returnValue.symbols = parts.join(\"\");\n returnValue.partMap = partMap;\n return returnValue;\n }\n merge(text, mask) {\n // Important: right to left.\n let resultText = \"\";\n let resultFormat = \"\";\n let format = mask.symbols;\n for (let r = format.length - 1; r >= 0; r--) {\n if (this.knownParts.indexOf(format[r]) === -1 || this.getExisting(format[r])) {\n resultText = text[r] + resultText;\n resultFormat = format[r] + resultFormat;\n }\n else {\n const currentSymbol = format[r];\n while (r >= 0 && currentSymbol === format[r]) {\n r--;\n }\n r++;\n if (this.leadingZero && this.leadingZero[currentSymbol]) {\n resultText = '0' + resultText;\n }\n else {\n resultText = this.dateFieldName(mask.partMap[r]) + resultText;\n }\n while (resultFormat.length < resultText.length) {\n resultFormat = format[r] + resultFormat;\n }\n }\n }\n return [resultText, resultFormat];\n }\n dateFieldName(part) {\n const formatPlaceholder = this.formatPlaceholder || 'wide';\n if (formatPlaceholder[part.type]) {\n return formatPlaceholder[part.type];\n }\n if (formatPlaceholder === 'formatPattern') {\n return part.pattern;\n }\n return this.intl.dateFieldName(Object.assign(part, { nameType: formatPlaceholder }));\n }\n}\n/**\n * Represents the [Kendo UI DateInput component for Angular]({% slug overview_dateinput %}#toc-basic-usage).\n */\nclass DateInputComponent {\n constructor(cdr, intl, renderer, element, ngZone, injector, localization, pickerService) {\n this.cdr = cdr;\n this.intl = intl;\n this.renderer = renderer;\n this.element = element;\n this.ngZone = ngZone;\n this.injector = injector;\n this.localization = localization;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the DateInput and\n * determines whether the component is active\n * ([see example]({% slug disabled_dateinput %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the read-only state of the DateInput\n * ([see example]({% slug readonly_dateinput %})).\n */\n this.readonly = false;\n /**\n * Sets the title of the input element of the DateInput.\n */\n this.title = \"\";\n /**\n * Sets or gets the `tabIndex` property of the DateInput.\n * .\n */\n this.tabindex = 0;\n /**\n * @hidden\n */\n this.role = 'spinbutton';\n /**\n * @hidden\n */\n this.ariaReadOnly = false;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_dateinput %})).\n */\n this.format = \"d\";\n /**\n * Specifies the hint the DateInput displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_dateinput %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Determines whether the built-in min or max validators are to be enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * @hidden\n * Based on the min and max values, specifies whether the value will be auto-corrected while typing.\n */\n this.autoCorrect = false;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * For more information, refer to the article on\n * [spinner buttons]({% slug spinbuttons_dateinput %}).\n */\n this.spinners = false;\n /**\n * @hidden\n */\n this.isPopupOpen = false;\n /**\n * @hidden\n */\n this.hasPopup = false;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n */\n this.valueUpdate = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n *\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_dateinput %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n *\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n this.arrow = Arrow;\n this.arrowDirection = Arrow.None;\n this.formatSections = { date: false, time: false };\n this.hasMousedown = false;\n this.focusedPriorToMousedown = false;\n /**\n * @hidden\n */\n this.isDateIncomplete = false;\n this.currentValue = \"\";\n this.currentFormat = \"\";\n this.backspace = false;\n this.resetSegmentValue = true;\n this.minValidator = noop;\n this.maxValidator = noop;\n this.incompleteValidator = noop;\n this._value = null;\n this._active = false;\n this.kendoDate = null;\n this.paste = false;\n this.domEvents = [];\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n if (this.pickerService) {\n this.pickerService.input = this;\n }\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the DateInput component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n if (this.autoCorrect && !isInRange(value, this.min, this.max)) {\n return;\n }\n this._value = cloneDate(value);\n this.valueUpdate.emit(cloneDate(value));\n }\n get value() {\n return this._value;\n }\n get wrapperClass() {\n return true;\n }\n get disabledClass() {\n return this.disabled;\n }\n get inputElement() {\n return this.dateInput ? this.dateInput.nativeElement : null;\n }\n get inputValue() {\n return (this.inputElement || {}).value || '';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrap) {\n return;\n }\n if (!isPresent(this.pickerService)) {\n const element = this.wrap.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.currentValue || !String(this.currentValue).trim();\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifyRange();\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.minValidator = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidator = this.rangeValidation ? maxValidator(this.max) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.symbolsMap = this.dateSymbolMap();\n this.updateFormatSections();\n }\n const isEqualToKendoDate = this.kendoDate && isEqual(this.value, this.kendoDate.getDateObject());\n if (changes.format || !isEqualToKendoDate || changes.placeholder) {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n }\n ngOnDestroy() {\n if (this.intlSubscription) {\n this.intlSubscription.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.input = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidator(control) || this.maxValidator(control) || this.incompleteValidator(control, this.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue();\n this.intlSubscription = this.intl.changes.subscribe(this.intlChange.bind(this));\n this.ngControl = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.ngZone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n //ngModel binding\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.kendoDate = this.getKendoDate(value);\n this.value = cloneDate(value);\n this.updateElementValue(this.isActive);\n }\n /**\n * @hidden\n */\n triggerChange() {\n const value = this.kendoDate.getDateObject();\n if (+value !== +this.value) {\n this.value = cloneDate(value);\n this.notify();\n }\n }\n /**\n * @hidden\n */\n notify() {\n this.ngZone.run(() => {\n this.onControlChange(cloneDate(this.value));\n this.valueChange.emit(cloneDate(this.value));\n });\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * Focuses the DateInput component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const input = this.inputElement;\n if (input) {\n input.focus();\n this.selectDateSegment(this.currentFormat[0]);\n }\n }\n /**\n * Blurs the DateInput component.\n */\n blur() {\n const input = this.inputElement;\n if (input) {\n input.blur();\n }\n }\n /**\n * @hidden\n */\n handleButtonClick(offset) {\n this.arrowDirection = Arrow.None;\n this.modifyDateSegmentValue(offset);\n }\n /**\n * @hidden\n */\n modifyDateSegmentValue(offset) {\n const caret = this.caret();\n const symbol = this.currentFormat[caret[0]];\n const step = (this.steps || {})[this.symbolsMap[symbol]] || 1;\n this.kendoDate.modifyPart(symbol, offset * step);\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.selectDateSegment(symbol);\n this.updateIncompleteValidationStatus();\n }\n /**\n * @hidden\n */\n switchDateSegment(offset) {\n const caret = this.caret();\n if (this.kendoDate.resetLeadingZero()) {\n this.updateElementValue(this.isActive);\n }\n if (caret[0] < caret[1] && this.currentFormat[caret[0]] !== this.currentFormat[caret[1] - 1]) {\n this.selectNearestSegment(offset > 0 ? caret[0] : caret[1] - 1);\n this.resetSegmentValue = true;\n return true;\n }\n const previousFormatSymbol = this.currentFormat[caret[0]];\n let a = caret[0] + offset;\n while (a > 0 && a < this.currentFormat.length) {\n if (this.currentFormat[a] !== previousFormatSymbol &&\n this.currentFormat[a] !== \"_\") {\n break;\n }\n a += offset;\n }\n if (this.currentFormat[a] === \"_\") {\n //there is not known symbol found\n return false;\n }\n let b = a;\n while (b >= 0 && b < this.currentFormat.length) {\n if (this.currentFormat[b] !== this.currentFormat[a]) {\n break;\n }\n b += offset;\n }\n if (a > b && (b + 1 !== caret[0] || a + 1 !== caret[1])) {\n this.caret(b + 1, a + 1);\n this.resetSegmentValue = true;\n return true;\n }\n else if (a < b && (a !== caret[0] || b !== caret[1])) {\n this.caret(a, b);\n this.resetSegmentValue = true;\n return true;\n }\n return false;\n }\n /**\n * @hidden\n */\n selectDateSegment(symbol) {\n let begin = -1;\n let end = 0;\n for (let i = 0; i < this.currentFormat.length; i++) {\n if (this.currentFormat[i] === symbol) {\n end = i + 1;\n if (begin === -1) {\n begin = i;\n }\n }\n }\n if (begin < 0) {\n begin = 0;\n }\n this.caret(0, 0);\n this.caret(begin, end);\n }\n /**\n * @hidden\n */\n handleClick() {\n this.hasMousedown = false;\n if (this.isActive) {\n const selectionPresent = this.inputElement.selectionStart !== this.inputElement.selectionEnd;\n const placeholderToggled = isPresent(this.placeholder) && !this.kendoDate.hasValue() && !this.focusedPriorToMousedown;\n // focus first segment if the user hasn't selected something during mousedown and if the placeholder was just toggled\n const selectFirstSegment = !selectionPresent && placeholderToggled;\n const index = selectFirstSegment ? 0 : this.caret()[0];\n this.selectNearestSegment(index);\n }\n }\n /**\n * @hidden\n */\n handleDragAndDrop(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleMousedown() {\n this.hasMousedown = true;\n this.focusedPriorToMousedown = this.isActive;\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n this.isActive = true;\n this.updateElementValue();\n if (!this.hasMousedown) {\n this.caret(0, this.inputValue.length);\n }\n this.hasMousedown = false;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => {\n this.emitFocus(args);\n });\n }\n else {\n this.emitFocus(args);\n }\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n this.isActive = false;\n this.resetSegmentValue = true;\n this.kendoDate.resetLeadingZero();\n this.updateElementValue();\n if (hasObservers(this.onBlur) || requiresZoneOnBlur(this.ngControl)) {\n this.ngZone.run(() => {\n this.onControlTouched();\n this.emitBlur(args);\n this.cdr.markForCheck();\n });\n }\n else {\n this.emitBlur(args);\n }\n }\n getKendoDate(value) {\n const { leadingZero } = (this.kendoDate || {}) || null;\n const kendoDate = new KendoDate(this.intl, this.formatPlaceholder, this.format, value);\n kendoDate.setLeadingZero(this.isActive ? leadingZero : null);\n return kendoDate;\n }\n dateSymbolMap() {\n const reducer = (map$$1, part) => {\n map$$1[part.pattern[0]] = part.type;\n return map$$1;\n };\n return this.intl.splitDateFormat(this.format).reduce(reducer, {});\n }\n updateElementValue(isActive) {\n const start = this.caret()[0]; //XXX: get caret position before input is updated\n const texts = this.kendoDate.getTextAndFormat();\n const showPlaceholder = !this.isActive && isPresent(this.placeholder) && !this.kendoDate.hasValue();\n const input = this.inputElement;\n this.currentFormat = texts[1];\n this.currentValue = !showPlaceholder ? texts[0] : '';\n this.renderer.setProperty(input, \"value\", this.currentValue);\n if (input.placeholder !== this.placeholder) {\n this.renderer.setProperty(input, \"placeholder\", this.placeholder);\n }\n if (isActive) {\n this.selectNearestSegment(start);\n }\n }\n caret(start, end = start) {\n const isPosition = start !== undefined;\n let returnValue = [start, start];\n const element = this.inputElement;\n if (isPosition && (this.disabled || this.readonly)) {\n return undefined;\n }\n try {\n if (element.selectionStart !== undefined) {\n if (isPosition) {\n if (isDocumentAvailable() && document.activeElement !== element) {\n element.focus();\n }\n element.setSelectionRange(start, end);\n }\n returnValue = [element.selectionStart, element.selectionEnd];\n }\n }\n catch (e) {\n returnValue = [];\n }\n return returnValue;\n }\n selectNearestSegment(index) {\n // Finds the nearest (in both directions) known part.\n for (let i = index, j = index - 1; i < this.currentFormat.length || j >= 0; i++, j--) {\n if (i < this.currentFormat.length && this.currentFormat[i] !== \"_\") {\n this.selectDateSegment(this.currentFormat[i]);\n return;\n }\n if (j >= 0 && this.currentFormat[j] !== \"_\") {\n this.selectDateSegment(this.currentFormat[j]);\n return;\n }\n }\n }\n verifyRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$1} and ${MAX_DOC_LINK$1}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$1} for possible resolution.`);\n }\n }\n putDateInRange() {\n const currentDate = this.kendoDate.getDateObject();\n const candidate = dateInRange(currentDate, this.min, this.max);\n if (this.autoCorrect && !isEqual(currentDate, candidate)) {\n this.kendoDate = this.getKendoDate(candidate);\n }\n }\n updateFormatSections() {\n this.formatSections = this.intl.splitDateFormat(this.format)\n .reduce(({ date, time }, p) => {\n return {\n date: date || DATE_PART_REGEXP.test(p.type),\n time: time || TIME_PART_REGEXP.test(p.type)\n };\n }, { date: false, time: false });\n }\n intlChange() {\n this.updateFormatSections();\n this.kendoDate = this.getKendoDate(this.value);\n this.updateElementValue(this.isActive);\n }\n updateOnPaste() {\n const value = this.intl.parseDate(this.inputValue, this.format) || this.value;\n const notify = +value !== +this.value;\n this.writeValue(value);\n if (notify) {\n this.notify();\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n const mousewheelHandler = this.handleMouseWheel.bind(this);\n this.domEvents.push(this.renderer.listen(element, 'DOMMouseScroll', mousewheelHandler), this.renderer.listen(element, 'mousewheel', mousewheelHandler), this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)), this.renderer.listen(element, 'paste', this.handlePaste.bind(this)), this.renderer.listen(element, 'input', this.handleInput.bind(this)));\n }\n handleMouseWheel(event) {\n if (this.disabled || this.readonly || !this.isActive) {\n return;\n }\n event = window.event || event;\n if (event.shiftKey) {\n this.switchDateSegment((event.wheelDelta || -event.detail) > 0 ? -1 : 1);\n }\n else {\n this.modifyDateSegmentValue((event.wheelDelta || -event.detail) > 0 ? 1 : -1);\n }\n event.returnValue = false;\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n }\n handlePaste() {\n this.paste = true;\n }\n handleKeydown(event) {\n if (this.disabled || this.readonly || event.altKey || event.ctrlKey || event.metaKey) {\n return;\n }\n if (event.keyCode === Keys.Tab) {\n const moved = this.switchDateSegment(event.shiftKey ? -1 : 1);\n if (moved) {\n event.preventDefault();\n }\n return;\n }\n if (event.keyCode === Keys.Backspace) {\n this.backspace = true;\n return;\n }\n switch (event.keyCode) {\n case Keys.ArrowDown:\n this.modifyDateSegmentValue(-1);\n break;\n case Keys.ArrowUp:\n this.modifyDateSegmentValue(1);\n break;\n case Keys.ArrowRight:\n this.switchDateSegment(1);\n break;\n case Keys.ArrowLeft:\n this.switchDateSegment(-1);\n break;\n case Keys.Home:\n this.selectNearestSegment(0);\n break;\n case Keys.End:\n this.selectNearestSegment(this.inputValue.length);\n break;\n default:\n return; //skip the preventDefault if we didn't handled the keyCode\n }\n event.preventDefault();\n }\n handleInput() {\n if (this.disabled || this.readonly) {\n return;\n }\n if (this.paste) {\n this.updateOnPaste();\n this.paste = false;\n return;\n }\n const diff = approximateStringMatching(this.currentValue, this.currentFormat, this.inputValue, this.caret()[0]);\n const navigationOnly = (diff.length === 1 && diff[0][1] === \"_\");\n let switchPart = false;\n if (!navigationOnly) {\n let parsedPart;\n for (let i = 0; i < diff.length; i++) {\n parsedPart = this.kendoDate.parsePart(diff[i][0], diff[i][1], this.resetSegmentValue);\n switchPart = parsedPart.switchToNext;\n }\n const candidate = this.kendoDate.getDateObject();\n if (this.value && candidate && !this.formatSections.date) {\n this.kendoDate = this.getKendoDate(setTime(this.value, candidate));\n }\n }\n this.resetSegmentValue = false;\n this.putDateInRange();\n this.updateElementValue(this.isActive);\n this.triggerChange();\n this.updateIncompleteValidationStatus();\n if (diff.length && diff[0][0] !== \"_\") {\n this.selectDateSegment(diff[0][0]);\n }\n if (switchPart || navigationOnly) {\n this.switchDateSegment(1);\n }\n if (this.backspace) {\n this.switchDateSegment(-1);\n }\n this.backspace = false;\n }\n emitFocus(args) {\n this.onFocus.emit();\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n emitBlur(args) {\n this.onBlur.emit();\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n updateIncompleteValidationStatus() {\n const previousValue = this.isDateIncomplete;\n this.isDateIncomplete = this.kendoDate.hasValue() && this.value === null;\n if (previousValue === this.isDateIncomplete || !this.incompleteDateValidation) {\n return;\n }\n if (isPresent(this.ngControl) && !isPresent(this.pickerService)) {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n else if (isPresent(this.pickerService)) {\n this.pickerService.dateCompletenessChange.emit();\n }\n }\n}\nDateInputComponent.ɵfac = function DateInputComponent_Factory(t) { return new (t || DateInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nDateInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateInputComponent, selectors: [[\"kendo-dateinput\"]], viewQuery: function DateInputComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c7, true);\n ɵngcc0.ɵɵviewQuery(_c8, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dateInput = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrap = _t.first);\n } }, hostVars: 6, hostBindings: function DateInputComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClass)(\"k-dateinput\", ctx.wrapperClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", title: \"title\", tabindex: \"tabindex\", role: \"role\", ariaReadOnly: \"ariaReadOnly\", format: \"format\", placeholder: \"placeholder\", rangeValidation: \"rangeValidation\", autoCorrect: \"autoCorrect\", incompleteDateValidation: \"incompleteDateValidation\", spinners: \"spinners\", isPopupOpen: \"isPopupOpen\", hasPopup: \"hasPopup\", tabIndex: \"tabIndex\", value: \"value\", formatPlaceholder: \"formatPlaceholder\", steps: \"steps\", max: \"max\", min: \"min\" }, outputs: { valueChange: \"valueChange\", valueUpdate: \"valueUpdate\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendo-dateinput\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 7, vars: 21, consts: [[\"kendoDateInputLocalizedMessages\", \"\", 6, \"increment\", \"decrement\"], [1, \"k-dateinput-wrap\"], [\"wrap\", \"\"], [\"autocomplete\", \"off\", \"autocorrect\", \"off\", \"autocapitalize\", \"off\", \"spellcheck\", \"false\", 1, \"k-input\", 3, \"id\", \"title\", \"tabindex\", \"disabled\", \"readonly\", \"placeholder\", \"kendoEventsOutsideAngular\", \"scope\"], [\"dateInput\", \"\"], [\"class\", \"k-select\", 3, \"mousedown\", 4, \"ngIf\"], [1, \"k-select\", 3, \"mousedown\"], [1, \"k-link\", \"k-link-increase\", 3, \"title\", \"mousedown\", \"mouseleave\", \"click\"], [1, \"k-icon\", \"k-i-arrow-n\"], [1, \"k-link\", \"k-link-decrease\", 3, \"title\", \"click\", \"mousedown\", \"mouseleave\"], [1, \"k-icon\", \"k-i-arrow-s\"]], template: function DateInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c13);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"span\", 1, 2);\n ɵngcc0.ɵɵelement(4, \"input\", 3, 4);\n ɵngcc0.ɵɵtemplate(6, DateInputComponent_span_6_Template, 5, 8, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵproperty(\"id\", ctx.focusableId)(\"title\", ctx.title)(\"tabindex\", ctx.tabindex)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly)(\"placeholder\", ctx.placeholder)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction7(13, _c14, ctx.handleClick, ctx.handleFocus, ctx.handleMousedown, ctx.handleMousedown, ctx.handleDragAndDrop, ctx.handleDragAndDrop, ctx.handleBlur))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"aria-readonly\", ctx.ariaReadOnly)(\"aria-expanded\", ctx.isPopupOpen)(\"aria-haspopup\", ctx.hasPopup);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.spinners);\n } }, directives: function () { return [DateInputLocalizedMessagesDirective, ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgIf]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDateInputComponent.ctorParameters = () => [\n { type: ChangeDetectorRef },\n { type: IntlService },\n { type: Renderer2 },\n { type: ElementRef },\n { type: NgZone },\n { type: Injector },\n { type: LocalizationService },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nDateInputComponent.propDecorators = {\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n title: [{ type: Input }],\n tabindex: [{ type: Input }],\n role: [{ type: Input }],\n ariaReadOnly: [{ type: Input }],\n tabIndex: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n steps: [{ type: Input }],\n max: [{ type: Input }],\n min: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n autoCorrect: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n value: [{ type: Input }],\n spinners: [{ type: Input }],\n isPopupOpen: [{ type: Input }],\n hasPopup: [{ type: Input }],\n valueChange: [{ type: Output }],\n valueUpdate: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n dateInput: [{ type: ViewChild, args: ['dateInput', { static: true },] }],\n wrap: [{ type: ViewChild, args: ['wrap',] }],\n wrapperClass: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-dateinput',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-dateinput',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateInputComponent), multi: true },\n { provide: L10N_PREFIX, useValue: 'kendo.dateinput' },\n { provide: KendoInput, useExisting: forwardRef(() => DateInputComponent) },\n LocalizationService\n ],\n selector: 'kendo-dateinput',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Injector }, { type: ɵngcc4.LocalizationService }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], title: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], role: [{\n type: Input\n }], ariaReadOnly: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], autoCorrect: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], spinners: [{\n type: Input\n }], isPopupOpen: [{\n type: Input\n }], hasPopup: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueUpdate: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], tabIndex: [{\n type: Input\n }], value: [{\n type: Input\n }], wrapperClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-dateinput']\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], formatPlaceholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], max: [{\n type: Input\n }], min: [{\n type: Input\n }], dateInput: [{\n type: ViewChild,\n args: ['dateInput', { static: true }]\n }], wrap: [{\n type: ViewChild,\n args: ['wrap']\n }] }); })();\n\n/**\n * A preventable event instance which is triggered by the `open` and `close` events.\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * If the event is prevented by any of its subscribers, returns `true`.\n *\n * @returns `true` if the default action was prevented. Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * @hidden\n */\nconst TOUCH_ENABLED = new InjectionToken('dateinputs-touch-enabled');\n\n/**\n * @hidden\n */\nconst disabledDatesValidator = (isDateDisabled) => {\n return (control) => {\n if (!isDateDisabled || !control.value) {\n return null;\n }\n const error = {\n disabledDate: true\n };\n return isDateDisabled(control.value) ? error : null;\n };\n};\n\n/* tslint:disable:max-line-length */\nconst MIN_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-min';\nconst MAX_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/DatePickerComponent/#toc-max';\nconst VALUE_DOC_LINK$2 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/datepicker/#toc-using-with-json';\n/**\n * Represents the [Kendo UI DatePicker component for Angular]({% slug overview_datepicker %}#toc-basic-usage).\n */\nclass DatePickerComponent {\n constructor(zone, localization, cdr, popupService, element, renderer, injector, pickerService, disabledDatesService, touchEnabled$$1) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.element = element;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.disabledDatesService = disabledDatesService;\n this.touchEnabled = touchEnabled$$1;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_datepicker %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost Calendar view to which the user can navigate\n * ([see example]({% slug dates_datepicker %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost Calendar view to which the user can navigate\n * ([see example]({% slug dates_datepicker %}#toc-partial-dates)).\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Sets or gets the `disabled` property of the DatePicker and determines whether the component is active\n * ([see example]({% slug disabled_datepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DatePicker\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-datepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DatePicker input field\n * ([see example]({% slug readonly_datepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Sets or gets the `navigation` property of the Calendar\n * and determines whether the navigation side-bar is displayed.\n * ([see example]({% slug sidebar_datepicker %})).\n */\n this.navigation = true;\n /**\n * Specifies the smallest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n */\n this.min = cloneDate(MIN_DATE);\n /**\n * Specifies the biggest valid date\n * ([see example]({% slug dateranges_datepicker %})).\n */\n this.max = cloneDate(MAX_DATE);\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Specifies the focused date of the Calendar component\n * ([see example]({% slug dates_datepicker %})).\n */\n this.focusedDate = null;\n /**\n * Specifies the date format that is used to display the input value\n * ([see example]({% slug formats_datepicker %})).\n */\n this.format = \"d\";\n /**\n * Specifies the hint the DatePicker displays when its value is `null`.\n * ([more information and exaples]({% slug placeholders_datepicker %})).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Sets or gets the `tabindex` property of the DatePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the DatePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether to display a week number column in the `month` view of the Calendar\n * ([see example]({% slug weeknumcolumn_datepicker %})).\n */\n this.weekNumber = false;\n /**\n * Fires each time the user selects a new value\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open\n * ([more information and example]({% slug overview_datepicker %}#toc-events)).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this._popupSettings = { animate: true };\n this._show = false;\n this._value = null;\n this._active = false;\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesValidateFn = noop;\n this.incompleteValidator = noop;\n this.resolvedPromise = Promise.resolve(null);\n this.domEvents = [];\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleSameSelection.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n /**\n * @hidden\n */\n set navigationItemTemplateRef(template) {\n this.navigationItemTemplate = template;\n }\n /**\n * Configures the popup options of the DatePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the value of the DatePicker component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the DatePicker that will be disabled\n * ([see example]({% slug disabled_dates_datepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty.\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n this.verifySettings();\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the DatePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the DatePicker component.\n */\n blur() {\n (this.calendar || this.input)['blur'](); //tslint:disable-line:no-string-literal\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicitly call the handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleChange(value) {\n this.cdr.markForCheck();\n this.focusInput();\n this.value = value;\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n this.handleChange(this.input.formatSections.time ? value : this.mergeTime(value));\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-calendar-container',\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n get input() {\n return this.pickerService.input;\n }\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(value, this.value) : value;\n }\n /**\n * @hidden\n */\n handleKeydown(e) {\n const { altKey, keyCode } = e;\n if (keyCode === Keys.Escape) {\n this.show = false;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n }\n if (keyCode === Keys.Tab && this.show && this.calendar.isActive) {\n this.input.focus();\n this.show = false;\n }\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this._show) {\n return;\n }\n this._show = show;\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.subscription = this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n this.subscription.unsubscribe();\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.calendar) {\n this.cdr.detectChanges();\n }\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifySettings() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$2} and ${MAX_DOC_LINK$2}.`);\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$2} for possible resolution.`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.calendar && this.calendar.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.cdr.detectChanges();\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleSameSelection() {\n if (this.show) {\n this.focusInput();\n this.show = false;\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n}\nDatePickerComponent.ɵfac = function DatePickerComponent_Factory(t) { return new (t || DatePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nDatePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DatePickerComponent, selectors: [[\"kendo-datepicker\"]], contentQueries: function DatePickerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NavigationItemTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.navigationItemTemplate = _t.first);\n } }, viewQuery: function DatePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c15, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c16, true);\n ɵngcc0.ɵɵviewQuery(_c17, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n } }, hostVars: 6, hostBindings: function DatePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClasses)(\"k-datepicker\", ctx.wrapperClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", navigation: \"navigation\", min: \"min\", max: \"max\", incompleteDateValidation: \"incompleteDateValidation\", focusedDate: \"focusedDate\", format: \"format\", placeholder: \"placeholder\", tabindex: \"tabindex\", title: \"title\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", weekNumber: \"weekNumber\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], navigationItemTemplateRef: [\"navigationItemTemplate\", \"navigationItemTemplateRef\"], popupSettings: \"popupSettings\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", formatPlaceholder: \"formatPlaceholder\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendo-datepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 12, vars: 25, consts: [[\"kendoDatePickerLocalizedMessages\", \"\", 6, \"today\", \"toggle\"], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"role\", \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"disabled\", \"readonly\", \"ariaReadOnly\", \"tabindex\", \"title\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"incompleteDateValidation\", \"value\", \"valueChange\"], [\"input\", \"\"], [\"role\", \"button\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-icon\", \"k-i-calendar\"], [\"container\", \"\"], [\"popupTemplate\", \"\"], [3, \"min\", \"max\", \"navigation\", \"activeView\", \"bottomView\", \"topView\", \"weekNumber\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"navigationItemTemplate\", \"focusedDate\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"disabledDates\", \"valueChange\"], [\"calendar\", \"\"], [3, \"today\"]], template: function DatePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c22);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(4, \"kendo-dateinput\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DatePickerComponent_Template_kendo_dateinput_valueChange_4_listener($event) { return ctx.handleInputChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"span\", 5);\n ɵngcc0.ɵɵelement(7, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(8, null, 7);\n ɵngcc0.ɵɵtemplate(10, DatePickerComponent_ng_template_10_Template, 4, 23, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"role\", ctx.inputRole)(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.show)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"ariaReadOnly\", ctx.readonly)(\"tabindex\", ctx.tabindex)(\"title\", ctx.title)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.min)(\"max\", ctx.max)(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(22, _c24, ctx.handleIconClick, ctx.handleMousedown))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n } }, directives: function () { return [DatePickerLocalizedMessagesDirective,\n DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, CalendarComponent,\n CalendarCustomMessagesComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDatePickerComponent.ctorParameters = () => [\n { type: NgZone },\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PopupService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: Injector },\n { type: PickerService },\n { type: DisabledDatesService },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [TOUCH_ENABLED,] }] }\n];\nDatePickerComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective,] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective,] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective,] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective,] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective,] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective,] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n navigationItemTemplate: [{ type: ContentChild, args: [NavigationItemTemplateDirective,] }],\n navigationItemTemplateRef: [{ type: Input, args: ['navigationItemTemplate',] }],\n focusableId: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n popupSettings: [{ type: Input }],\n navigation: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n focusedDate: [{ type: Input }],\n value: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n title: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesValidation: [{ type: Input }],\n weekNumber: [{ type: Input }],\n valueChange: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-datepicker',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-datepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DatePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DatePickerComponent) },\n LocalizationService,\n PickerService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.datepicker'\n }\n ],\n selector: 'kendo-datepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc5.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: PickerService }, { type: DisabledDatesService }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], navigation: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-datepicker']\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective]\n }], navigationItemTemplateRef: [{\n type: Input,\n args: ['navigationItemTemplate']\n }], navigationItemTemplate: [{\n type: ContentChild,\n args: [NavigationItemTemplateDirective]\n }], popupSettings: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst TIME_PART = {\n dayperiod: 'dayperiod',\n hour: 'hour',\n millisecond: 'millisecond',\n minute: 'minute',\n second: 'second'\n};\n\n/**\n * @hidden\n */\nconst timeRangeValidator = (min, max) => {\n return (control) => {\n if (!min || !max || !control.value) {\n return null;\n }\n const err = {\n timeRangeError: {\n maxValue: max,\n minValue: min,\n value: control.value\n }\n };\n return isInTimeRange(control.value, min, max) ? null : err;\n };\n};\n\nconst VALUE_DOC_LINK$3 = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/timepicker/#toc-integration-with-json';\nconst INTL_DATE_FORMAT = 'https://github.com/telerik/kendo-intl/blob/master/docs/date-formatting/index.md';\nconst formatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.dayperiod}|literal`);\n/**\n * Represents the [Kendo UI TimePicker component for Angular]({% slug overview_timepicker %}#toc-basic-usage).\n */\nclass TimePickerComponent {\n constructor(zone, localization, cdr, popupService, element, renderer, injector, pickerService, intl, touchEnabled$$1) {\n this.zone = zone;\n this.localization = localization;\n this.cdr = cdr;\n this.popupService = popupService;\n this.element = element;\n this.renderer = renderer;\n this.injector = injector;\n this.pickerService = pickerService;\n this.intl = intl;\n this.touchEnabled = touchEnabled$$1;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets or gets the `disabled` property of the TimePicker and\n * determines whether the component is active\n * ([see example]({% slug disabled_timepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the TimePicker\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-timepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the TimePicker input field\n * ([see example]({% slug readonly_timepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_timepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Specifies the time format that is used to display the input value\n * ([see example]({% slug formats_timepicker %})).\n */\n this.format = 't';\n /**\n * Specifies the hint the TimePicker displays when its value is `null`.\n * For more information, refer to the article on\n * [placeholders]({% slug placeholders_timepicker %}).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n this.placeholder = null;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `tabindex` property of the TimePicker.\n */\n this.tabindex = 0;\n /**\n * Sets the title of the input element of the TimePicker.\n */\n this.title = \"\";\n /**\n * Determines whether the built-in min or max validators are enforced when a form is being validated.\n */\n this.rangeValidation = true;\n /**\n * Fires each time the user selects a new value.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user focuses the input element.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onFocus` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleFocus(): void {\n * console.log(\"Component is focused\");\n * }\n * }\n * ```\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the input element gets blurred.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n *\n * > To wire the event programmatically, use the `onBlur` property.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public handleBlur(): void {\n * console.log(\"Component is blurred\");\n * }\n * }\n * ```\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_timepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.wrapperClasses = true;\n this.popupUID = guid();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.resolvedPromise = Promise.resolve(null);\n this.timeRangeValidateFn = noop;\n this.incompleteValidator = noop;\n this._min = cloneDate(MIN_TIME);\n this._max = cloneDate(MAX_TIME);\n this._popupSettings = { animate: true };\n this._show = false;\n this._steps = {};\n this._value = null;\n this._active = false;\n this.domEvents = [];\n this.pickerSubscriptions = this.pickerService.onFocus.subscribe(this.handleFocus.bind(this));\n this.pickerSubscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.pickerSubscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n }\n /**\n * Specifies the smallest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set min(min) {\n this._min = cloneDate(min || MIN_TIME);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid time value\n * ([see example]({% slug timeranges_timepicker %})).\n */\n set max(max) {\n this._max = cloneDate(max || MAX_TIME);\n }\n get max() {\n return this._max;\n }\n /**\n * Configures the incremental steps of the TimePicker.\n * For more information, refer to the article on\n * [incremental steps]({% slug incrementalsteps_timepicker %}).\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15 };\n * }\n * ```\n *\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n /**\n * Configures the popup of the TimePicker.\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Specifies the value of the TimePicker component.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n }\n get value() {\n return this._value;\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n get isActive() {\n return this._active;\n }\n set isActive(value) {\n this._active = value;\n if (!this.wrapper) {\n return;\n }\n const element = this.wrapper.nativeElement;\n if (value) {\n this.renderer.addClass(element, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(element, 'k-state-focused');\n }\n }\n get show() {\n return this._show;\n }\n set show(show) {\n if (show && (this.disabled || this.readonly)) {\n return;\n }\n const skipZone = !show && (!this._show || !hasObservers(this.close));\n if (!skipZone) {\n this.zone.run(() => {\n this.togglePopup(show);\n });\n }\n else {\n this.togglePopup(show);\n }\n }\n get input() {\n return this.pickerService.input;\n }\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * @hidden\n * Used by the TextBoxContainer to determine if the component is empty\n */\n isEmpty() {\n return !this.value && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.cdr.markForCheck());\n this.control = this.injector.get(NgControl, null);\n if (this.element) {\n this.renderer.removeAttribute(this.element.nativeElement, 'tabindex');\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (changes.min || changes.max || changes.rangeValidation || changes.incompleteDateValidation) {\n this.timeRangeValidateFn = this.rangeValidation ? timeRangeValidator(this.min, this.max) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n if (changes.format) {\n this.verifyFormat();\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.isActive = false;\n this.show = false;\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n this.pickerSubscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape) {\n this.show = false;\n return;\n }\n if (altKey) {\n if (keyCode === Keys.ArrowUp) {\n this.show = false;\n }\n if (keyCode === Keys.ArrowDown && !this.show) {\n this.show = true;\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.verifyValue(value);\n this.value = cloneDate(value);\n this.cdr.markForCheck();\n if (!value && this.input) {\n this.input.placeholder = this.placeholder;\n this.input.writeValue(value);\n }\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.timeRangeValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * Focuses the TimePicker component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n this.input.focus();\n }\n /**\n * Blurs the TimePicker component.\n */\n blur() {\n (this.timeSelector || this.input)['blur'](); //tslint:disable-line:no-string-literal\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly) {\n return;\n }\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * Returns the current open state of the popup.\n */\n get isOpen() {\n return this.show;\n }\n /**\n * @hidden\n */\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n /**\n * @hidden\n */\n handleChange(value) {\n if (isEqual(this.value, value)) {\n this.focusInput();\n this.show = false;\n return;\n }\n this.value = cloneDate(value);\n this.zone.run(() => {\n this.focusInput();\n this.show = false;\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n });\n }\n /**\n * @hidden\n */\n handleReject() {\n this.show = false;\n }\n /**\n * @hidden\n */\n handleInputChange(value) {\n const val = this.input.formatSections.date ? value : this.mergeTime(value);\n this.handleChange(val);\n }\n /**\n * @hidden\n */\n handleMousedown(args) {\n args.preventDefault();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n event.preventDefault();\n this.focusInput();\n //XXX: explicit call handleFocus handler here\n //due to async IE focus event\n this.handleFocus();\n this.show = !this.show;\n }\n /**\n * @hidden\n */\n get popupClasses() {\n return [\n 'k-group',\n 'k-reset'\n ].concat(this.popupSettings.popupClass || []);\n }\n /**\n * @hidden\n */\n normalizeTime(date) {\n return setTime(MIDNIGHT_DATE, date);\n }\n /**\n * @hidden\n */\n mergeTime(value) {\n return this.value && value ? setTime(this.value, value) : value;\n }\n togglePopup(show) {\n const event = new PreventableEvent();\n if (!this._show && show) {\n this.open.emit(event);\n }\n else if (this._show && !show) {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n this.toggleFocus();\n }\n _toggle(show) {\n if (show === this.isOpen) {\n return;\n }\n this._show = show;\n this.cdr.markForCheck();\n if (show) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n content: this.popupTemplate,\n popupAlign: { vertical: 'top', horizontal: direction },\n popupClass: this.popupClasses,\n positionMode: 'absolute'\n });\n this.popupRef.popupElement.setAttribute('id', this.popupUID);\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.show = false);\n }\n else {\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n focusInput() {\n if (this.touchEnabled) {\n return;\n }\n this.input.focus();\n }\n toggleFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.show) {\n if (!this.timeSelector) {\n this.cdr.detectChanges();\n }\n if (this.isActive) {\n this.timeSelector.focus();\n }\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (value && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$3} for possible resolution.`);\n }\n }\n verifyFormat() {\n if (!isDevMode()) {\n return;\n }\n const formatContainsDateParts = this.intl.splitDateFormat(this.format).some(part => !formatRegExp.test(part.type));\n if (formatContainsDateParts) {\n throw new Error(`Provided format is not supported. Supported specifiers are T|t|H|h|m|s|a. See ${INTL_DATE_FORMAT}`);\n }\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'keydown', this.handleKeydown.bind(this)));\n if (isWindowAvailable()) {\n this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this));\n }\n }\n handleWindowBlur() {\n if (!this.isOpen) {\n return;\n }\n this.show = false;\n }\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.zone.run(() => {\n this.onFocus.emit();\n });\n }\n }\n handleBlur(args) {\n const currentTarget = args && currentFocusTarget(args);\n if (currentTarget && (this.input.containsElement(currentTarget) ||\n (this.timeSelector && this.timeSelector.containsElement(currentTarget)))) {\n return;\n }\n if (hasObservers(this.onBlur) || (this.show && hasObservers(this.close)) || requiresZoneOnBlur(this.control)) {\n this.zone.run(() => {\n this.blurComponent();\n this.cdr.markForCheck();\n });\n }\n else {\n this.blurComponent();\n }\n }\n blurComponent() {\n this.isActive = false; // order is important ¯\\_(ツ)_/¯\n this.show = false;\n this.onControlTouched();\n this.onBlur.emit();\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.zone.run(() => this.onValidatorChange());\n }\n}\nTimePickerComponent.ɵfac = function TimePickerComponent_Factory(t) { return new (t || TimePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED, 8)); };\nTimePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimePickerComponent, selectors: [[\"kendo-timepicker\"]], viewQuery: function TimePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c15, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c16, true);\n ɵngcc0.ɵɵviewQuery(_c17, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n } }, hostVars: 6, hostBindings: function TimePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.wrapperClasses)(\"k-timepicker\", ctx.wrapperClasses)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { focusableId: \"focusableId\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", format: \"format\", placeholder: \"placeholder\", incompleteDateValidation: \"incompleteDateValidation\", cancelButton: \"cancelButton\", nowButton: \"nowButton\", tabindex: \"tabindex\", title: \"title\", rangeValidation: \"rangeValidation\", min: \"min\", max: \"max\", steps: \"steps\", popupSettings: \"popupSettings\", tabIndex: \"tabIndex\", value: \"value\", formatPlaceholder: \"formatPlaceholder\" }, outputs: { valueChange: \"valueChange\", onFocus: \"focus\", onBlur: \"blur\", open: \"open\", close: \"close\" }, exportAs: [\"kendo-timepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 12, vars: 26, consts: [[\"kendoTimePickerLocalizedMessages\", \"\", 6, \"accept\", \"acceptLabel\", \"cancel\", \"cancelLabel\", \"now\", \"nowLabel\", \"toggle\"], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"disabled\", \"readonly\", \"role\", \"ariaReadOnly\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"incompleteDateValidation\", \"steps\", \"tabindex\", \"title\", \"value\", \"valueChange\"], [\"input\", \"\"], [\"role\", \"button\", 1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-icon\", \"k-i-clock\"], [\"popupTemplate\", \"\"], [\"container\", \"\"], [3, \"cancelButton\", \"nowButton\", \"format\", \"min\", \"max\", \"steps\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\", \"valueReject\"], [\"timeSelector\", \"\"], [3, \"acceptLabel\", \"accept\", \"cancelLabel\", \"cancel\", \"nowLabel\", \"now\"]], template: function TimePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c39);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(4, \"kendo-dateinput\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function TimePickerComponent_Template_kendo_dateinput_valueChange_4_listener($event) { return ctx.handleInputChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"span\", 5);\n ɵngcc0.ɵɵelement(7, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, TimePickerComponent_ng_template_8_Template, 3, 18, \"ng-template\", null, 7, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(10, null, 8);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.show)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"role\", ctx.inputRole)(\"ariaReadOnly\", ctx.readonly)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.normalizeTime(ctx.min))(\"max\", ctx.normalizeTime(ctx.max))(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"steps\", ctx.steps)(\"tabindex\", !ctx.show ? ctx.tabindex : 0 - 1)(\"title\", ctx.title)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(23, _c24, ctx.handleIconClick, ctx.handleMousedown))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n } }, directives: function () { return [TimePickerLocalizedMessagesDirective,\n DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, TimeSelectorComponent,\n TimeSelectorCustomMessagesComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nTimePickerComponent.ctorParameters = () => [\n { type: NgZone },\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PopupService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: Injector },\n { type: PickerService },\n { type: IntlService },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [TOUCH_ENABLED,] }] }\n];\nTimePickerComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n focusableId: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n cancelButton: [{ type: Input }],\n nowButton: [{ type: Input }],\n steps: [{ type: Input }],\n popupSettings: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n title: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n wrapperClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-timepicker',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timepicker',\n providers: [\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => TimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => TimePickerComponent) },\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timepicker'\n },\n PickerService\n ],\n selector: 'kendo-timepicker',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc5.PopupService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.Injector }, { type: PickerService }, { type: ɵngcc1.IntlService }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }]; }, { focusableId: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], format: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], title: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], wrapperClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-timepicker']\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], steps: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], value: [{\n type: Input\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate']\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }] }); })();\n\nconst timeFormatRegExp = new RegExp(`${TIME_PART.hour}|${TIME_PART.minute}|${TIME_PART.second}|${TIME_PART.dayperiod}|literal`);\nconst VALUE_DOC_LINK$4 = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/integration-with-json/';\nconst MIN_MAX_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/dateinputs/datetimepicker/date-time-limits/';\nconst DEFAULT_ACTIVE_TAB = 'date';\nconst DEFAULT_DATEINPUT_FORMAT = 'g';\nconst DEFAULT_TIMESELECTOR_FORMAT = 't';\n/**\n * Represents the [Kendo UI DateTimePicker component for Angular]({% slug overview_datetimepicker %}).\n */\nclass DateTimePickerComponent {\n constructor(popupService, intl, cdr, pickerService, ngZone, host, touchEnabled$$1, localization, disabledDatesService, renderer) {\n this.popupService = popupService;\n this.intl = intl;\n this.cdr = cdr;\n this.pickerService = pickerService;\n this.ngZone = ngZone;\n this.host = host;\n this.touchEnabled = touchEnabled$$1;\n this.localization = localization;\n this.disabledDatesService = disabledDatesService;\n this.renderer = renderer;\n /**\n * @hidden\n */\n this.hostClasses = true;\n /**\n * @hidden\n */\n this.focusableId = `k-${guid()}`;\n /**\n * Sets the title of the input element of the DateTimePicker.\n */\n this.title = '';\n /**\n * Sets or gets the `disabled` property of the DateTimePicker and determines whether the component is active\n * ([see example]({% slug disabled_datetimepicker %})).\n */\n this.disabled = false;\n /**\n * Sets the read-only state of the DateTimePicker\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-datetimepicker)).\n */\n this.readonly = false;\n /**\n * Sets the read-only state of the DateTimePicker input field\n * ([see example]({% slug readonly_datetimepicker %}#toc-read-only-input)).\n *\n * > Note that if you set the [`readonly`]({% slug api_dateinputs_datetimepickercomponent %}#toc-readonly) property value to `true`,\n * the input will be rendered in a read-only state regardless of the `readOnlyInput` value.\n */\n this.readOnlyInput = false;\n /**\n * Determines whether to display the **Cancel** button in the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-toggling-the-cancel-button)).\n */\n this.cancelButton = true;\n /**\n * Determines whether to display a week number column in the `month` view of the popup Calendar\n * ([see example]({% slug datetimepicker_calendar_options %}#toc-week-number-column)).\n */\n this.weekNumber = false;\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form\n * ([see example]({% slug dateranges_datetimepicker %}#toc-prevent-invalid-input)).\n */\n this.rangeValidation = true;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_datetimepicker %}#toc-validation)).\n */\n this.disabledDatesValidation = true;\n /**\n * Determines whether the built-in validation for incomplete dates is to be enforced when a form is being validated.\n */\n this.incompleteDateValidation = false;\n /**\n * Fires each time the user selects a new value.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain closed.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event by setting `event.preventDefault()`, the popup will remain open.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the user focuses the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onFocus = new EventEmitter();\n /**\n * Fires each time the user blurs the component.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n */\n this.onBlur = new EventEmitter();\n /**\n * @hidden\n *\n * Controls whether the Calendar or the TimeSelector will be displayed.\n */\n this.activeTab = DEFAULT_ACTIVE_TAB;\n /**\n * @hidden\n *\n * Specifies the stripped time-related format that is used in the TimeSelector.\n * Updates each time the `format` property value changes.\n */\n this.timeSelectorFormat = DEFAULT_TIMESELECTOR_FORMAT;\n /**\n * @hidden\n */\n this.timeSelectorMin = cloneDate(MIN_TIME);\n /**\n * @hidden\n */\n this.timeSelectorMax = cloneDate(MAX_TIME);\n /**\n * @hidden\n */\n this.calendarValue = null;\n /**\n * @hidden\n */\n this.calendarMin = cloneDate(MIN_DATE);\n /**\n * @hidden\n */\n this.calendarMax = lastMillisecondOfDate(MAX_DATE);\n this._popupSettings = { animate: true };\n this._value = null;\n this._format = DEFAULT_DATEINPUT_FORMAT;\n this._tabindex = 0;\n this._defaultTab = DEFAULT_ACTIVE_TAB;\n this._min = mergeDateAndTime(MIN_DATE, MIN_TIME);\n this._max = mergeDateAndTime(MAX_DATE, MAX_TIME);\n this._isActive = false;\n this.onControlTouched = noop;\n this.onControlChange = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesValidateFn = noop;\n this.incompleteValidator = noop;\n this.subscriptions = new Subscription();\n }\n /**\n * @hidden\n */\n get input() {\n return this.pickerService.input;\n }\n /**\n * @hidden\n */\n get calendar() {\n return this.pickerService.calendar;\n }\n /**\n * @hidden\n */\n get timeSelector() {\n return this.pickerService.timeSelector;\n }\n /**\n * Specifies the value of the DateTimePicker component.\n *\n * > The `value` has to be a valid [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n set value(value) {\n this.verifyValue(value);\n this._value = cloneDate(value);\n this.setCalendarValue(value);\n this.cdr.markForCheck();\n }\n get value() {\n return this._value;\n }\n /**\n * Specifies the date format for displaying the input value\n * ([see example]({% slug formats_datetimepicker %})).\n */\n set format(value) {\n this._format = value;\n this.timeSelectorFormat = this.getTimeSelectorFormat(value);\n }\n get format() {\n return this._format;\n }\n /**\n * Specifies the [`tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) of the DateTimePicker.\n */\n set tabindex(value) {\n const tabindex = Number(value);\n const defaultValue = 0;\n this._tabindex = !isNaN(tabindex) ? tabindex : defaultValue;\n }\n get tabindex() {\n return this.disabled ? -1 : this._tabindex;\n }\n /**\n * Sets the dates of the DateTimePicker that will be disabled\n * ([see example]({% slug disabled_dates_datetimepicker %})).\n */\n set disabledDates(value) {\n this._disabledDates = value;\n this.disabledDatesService.initialize(value);\n }\n get disabledDates() {\n return this._disabledDates;\n }\n /**\n * Configures the popup settings of the DateTimePicker\n * ([see example]({% slug datetimepicker_popup_options %}#toc-customizing-the-popup)).\n *\n * The available options are:\n * - `animate: Boolean`—Controls the popup animation. By default, the open and close animations are enabled.\n * - `appendTo: 'root' | 'component' | ViewContainerRef`—Controls the popup container. By default, the popup will be appended to the root component.\n * - `popupClass: String`—Specifies a list of CSS classes that are used to style the popup.\n */\n set popupSettings(settings) {\n this._popupSettings = Object.assign({}, { animate: true }, settings);\n }\n get popupSettings() {\n return this._popupSettings;\n }\n /**\n * Specifies the smallest valid date.\n * The Calendar will not display dates before this value.\n * If the `min` value of the Calendar is selected, the TimePicker will not display\n * time entries before the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set min(value) {\n if (!isPresent(value)) {\n return;\n }\n this._min = cloneDate(value);\n this.calendarMin = getDate(value);\n }\n get min() {\n return this._min;\n }\n /**\n * Specifies the biggest valid date.\n * The Calendar will not display dates after this value.\n * If the `max` value of the Calendar is selected, the TimePicker will not display\n * time entries after the specified time portion of this value\n * ([see example]({% slug dateranges_datetimepicker %})).\n */\n set max(value) {\n if (!isPresent(value)) {\n return;\n }\n this._max = cloneDate(value);\n this.calendarMax = lastMillisecondOfDate(value);\n }\n get max() {\n return this._max;\n }\n /**\n * Indicates whether the component is currently open.\n */\n get isOpen() {\n return isPresent(this.popupRef);\n }\n /**\n * Indicates whether the component or its popup content is focused.\n */\n get isActive() {\n return this._isActive;\n }\n set isActive(value) {\n if (value) {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-state-focused');\n }\n else {\n this.renderer.removeClass(this.wrapper.nativeElement, 'k-state-focused');\n }\n this._isActive = value;\n }\n /**\n * Sets the active tab on opening the popup\n * ([see example]({% slug datetimepicker_popup_options %}#toc-setting-the-default-tab)).\n */\n set defaultTab(tab) {\n this._defaultTab = tab || DEFAULT_ACTIVE_TAB;\n this.activeTab = this.defaultTab;\n }\n get defaultTab() {\n return this._defaultTab;\n }\n /**\n * @hidden\n */\n get tabSwitchTransition() {\n /*\n When the popup is opening, disables the set transition in the themes. When `defaultTab` is set to `time`,\n the popup opens with an active **Time** tab and the animation of the initial transition is undesired.\n Setting the inline transition style to `none` overrides the set animation in the themes.\n Setting the inline transition style to `null` does not apply any inline styles or override the themes CSS.\n */\n return this.isOpen ? null : 'none';\n }\n /**\n * @hidden\n *\n * Indicates whether the Calendar will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableCalendar() {\n return this.activeTab !== 'date' && !this.calendar.isActive;\n }\n /**\n * @hidden\n */\n get inputRole() {\n return this.readOnlyInput ? 'listbox' : 'spinbutton';\n }\n /**\n * @hidden\n *\n * Indicates whether the TimeSelector will be disabled.\n * The inactive tab component gets disabled and becomes inaccessible on tab click.\n */\n get disableTimeSelector() {\n return this.activeTab !== 'time' && !this.timeSelector.isActive;\n }\n get activeTabComponent() {\n if (!this.isOpen) {\n return;\n }\n if (!(isPresent(this.calendar) || isPresent(this.timeSelector))) {\n this.cdr.detectChanges();\n }\n return this.activeTab === 'date' ? this.calendar : this.timeSelector;\n }\n get appendTo() {\n const { appendTo } = this.popupSettings;\n if (!isPresent(appendTo) || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n ngOnInit() {\n this.subscriptions.add(this.pickerService.onFocus\n // detect popup changes to disable the inactive view mark-up when the popup is open\n .pipe(tap(this.detectPopupChanges.bind(this)))\n .subscribe(this.handleFocus.bind(this)));\n this.subscriptions.add(this.pickerService.onBlur.subscribe(this.handleBlur.bind(this)));\n this.subscriptions.add(this.pickerService.sameDateSelected.subscribe(this.handleCalendarValueChange.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(() => this.cdr.markForCheck()));\n this.subscriptions.add(this.pickerService.dateCompletenessChange.subscribe(this.handleDateCompletenessChange.bind(this)));\n if (isWindowAvailable()) {\n this.subscriptions.add(this.ngZone.runOutsideAngular(() => fromEvent(window, 'blur').subscribe(this.handleCancel.bind(this))));\n }\n }\n ngOnChanges(changes) {\n if (isPresent(changes.min) || isPresent(changes.max)) {\n this.verifyMinMaxRange();\n }\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDatesValidation || changes.disabledDates || changes.incompleteDateValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesValidateFn = this.disabledDatesValidation ? disabledDatesValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.incompleteValidator = this.incompleteDateValidation ? incompleteDateValidator() : noop;\n this.onValidatorChange();\n }\n }\n ngOnDestroy() {\n if (this.isOpen) {\n this.closePopup();\n }\n this.subscriptions.unsubscribe();\n }\n /**\n * * If the popup is closed, focuses the DateTimePicker input.\n * * If the popup is open, the focus is moved to its content.\n */\n focus() {\n if (this.disabled) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else {\n this.input.focus();\n }\n }\n /**\n * Blurs the DateTimePicker.\n */\n blur() {\n if (this.isOpen && this.activeTabComponent.isActive) {\n this.activeTabComponent.blur();\n }\n else {\n this.input.blur();\n }\n }\n /**\n * Toggles the visibility of the popup. If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n * ([more information and example]({% slug overview_datetimepicker %}#toc-methods-and-events)).\n *\n * @param show - The state of the popup.\n */\n toggle(show) {\n if (this.disabled || this.readonly || show === this.isOpen) {\n return;\n }\n const shouldOpen = isPresent(show) ? show : !this.isOpen;\n if (shouldOpen) {\n this.openPopup();\n }\n else {\n this.closePopup();\n // Changes the tab and the calendar or clock icon to the designated default.\n if (this.activeTab !== this.defaultTab) {\n this.activeTab = this.defaultTab;\n this.cdr.detectChanges();\n }\n }\n }\n /**\n * @hidden\n */\n writeValue(value) {\n this.value = value;\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(disabled) {\n this.disabled = disabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesValidateFn(control) || this.incompleteValidator(control, this.input && this.input.isDateIncomplete);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n *\n * Used by the TextBoxContainer to determine if the floating label will render in the input.\n */\n isEmpty() {\n return !isPresent(this.value) && this.input.isEmpty();\n }\n /**\n * @hidden\n */\n handleIconClick(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n // prevents the event default to evade focusing the DateInput input when placed inside a label (FF/IE/Edge)\n event.preventDefault();\n const runInZone = !this.isOpen || hasObservers(this.close);\n this.run(runInZone, () => {\n const shouldOpen = !this.isOpen;\n // handle focus first to maintain correct event order `focus` => `open`\n this.handleFocus();\n this.togglePopup(shouldOpen);\n this.switchFocus();\n });\n }\n /**\n * @hidden\n */\n handleFocus() {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n if (hasObservers(this.onFocus)) {\n this.ngZone.run(() => this.onFocus.emit());\n }\n }\n /**\n * @hidden\n */\n handleBlur(event) {\n if (!this.isActive || this.focusTargetInComponent(event)) {\n return;\n }\n this.isActive = false;\n const isNgControlUntouched = this.host.nativeElement.classList.contains('ng-untouched');\n const runInZone = isNgControlUntouched || hasObservers(this.onBlur) || (this.isOpen && hasObservers(this.close));\n this.run(runInZone, () => {\n this.onBlur.emit();\n this.onControlTouched();\n this.togglePopup(false);\n this.cdr.markForCheck();\n });\n }\n /**\n * @hidden\n */\n changeActiveTab(tab) {\n if (!this.isOpen || this.activeTab === tab) {\n return;\n }\n // persists the Tcurrent value of the TimeSelector when switching between tabs\n if (!isEqual(this.timeSelector.value, this.timeSelector.current)) {\n this.timeSelector.handleAccept();\n }\n this.activeTab = tab;\n this.cdr.detectChanges();\n this.detectPopupChanges();\n }\n /**\n * @hidden\n */\n handleTabChangeTransitionEnd(dateTimeSelector, event) {\n // handle only the .k-datetime-selector element transition, ignore any child element transitions\n if (event.target !== dateTimeSelector) {\n return;\n }\n this.activeTabComponent.focus();\n }\n /**\n * @hidden\n */\n handleAccept() {\n if (!this.isOpen) {\n return;\n }\n const candidate = mergeDateAndTime(this.calendar.value, this.timeSelector.current);\n const valueChangePresent = !isEqual(this.value, candidate);\n const runInZone = valueChangePresent || hasObservers(this.close);\n this.run(runInZone, () => {\n this.handleValueChange(candidate);\n this.togglePopup(false);\n });\n }\n /**\n * @hidden\n */\n handleCancel() {\n if (!this.isOpen) {\n return;\n }\n const runInZone = hasObservers(this.close);\n this.run(runInZone, () => this.togglePopup(false));\n }\n /**\n * @hidden\n */\n handleInputValueChange(value) {\n this.handleValueChange(value);\n if (this.isOpen) {\n this.togglePopup(false);\n }\n }\n /**\n * @hidden\n */\n handleCalendarValueChange() {\n this.setTimeSelectorMinMax(this.calendar.value);\n this.changeActiveTab('time');\n }\n /**\n * @hidden\n */\n handleKeyDown(event) {\n if (this.disabled || this.readonly) {\n return;\n }\n const { keyCode, altKey } = event;\n switch (keyCode) {\n case altKey && Keys.ArrowUp:\n case Keys.Escape:\n this.handleCancel();\n break;\n case !this.isOpen && altKey && Keys.ArrowDown:\n this.ngZone.run(() => this.togglePopup(true));\n break;\n case altKey && Keys.ArrowRight:\n this.changeActiveTab('time');\n break;\n case altKey && Keys.ArrowLeft:\n this.changeActiveTab('date');\n break;\n case this.isOpen && this.timeSelector.isActive && isPresent(this.calendarValue) && Keys.Enter:\n this.handleAccept();\n break;\n default: return;\n }\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleTabOut(event) {\n const { keyCode, shiftKey, target } = event;\n // if no focusable next sibling elements exist in the controls sections, the user is tabbing out of the popup\n const focusableSiblingAvailable = isPresent(target.nextElementSibling) && !target.nextElementSibling.disabled;\n if (keyCode === Keys.Tab && !shiftKey && !focusableSiblingAvailable) {\n this.input.focus();\n this.handleCancel();\n }\n }\n /**\n * @hidden\n */\n handleBackTabOut(event) {\n const { keyCode, shiftKey } = event;\n if (keyCode === Keys.Tab && shiftKey) {\n this.input.focus();\n }\n }\n /**\n * @hidden\n *\n * Prevents the diversion of the focus from the currently active element in the component.\n */\n preventMouseDown(event) {\n event.preventDefault();\n }\n verifyValue(value) {\n if (!isDevMode()) {\n return;\n }\n if (isPresent(value) && !(value instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$4} for possible resolution.`);\n }\n }\n verifyMinMaxRange() {\n if (!isDevMode()) {\n return;\n }\n if (!isValidRange(this.min, this.max)) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_MAX_DOC_LINK}.`);\n }\n }\n /**\n * Extracts the time slots and the literals that are not preceded by date parts\n * and concatenates the resulting parts into a string.\n * If the provided format value does not contain any time parts,\n * returns the designated format of the default popup component of the TimePicker.\n */\n getTimeSelectorFormat(format) {\n const timeSelectorFormat = this.intl\n .splitDateFormat(format)\n .filter(this.timeFormatPartFilter)\n .reduce((format, part) => format += part.pattern, '');\n return timeSelectorFormat || DEFAULT_TIMESELECTOR_FORMAT;\n }\n /**\n * The filter expression that filters out all format parts\n * except for `hour`, `minute`, `second`, `dayperiod`, and specific literals.\n * Literals will be left only if they are not preceded by date parts.\n */\n timeFormatPartFilter(part, index, parts) {\n const previousPart = index >= 1 && parts[index - 1];\n if (previousPart && part.type === 'literal') {\n return timeFormatRegExp.test(previousPart.type);\n }\n return timeFormatRegExp.test(part.type);\n }\n togglePopup(open) {\n if (open === this.isOpen) {\n return;\n }\n const event = new PreventableEvent();\n open ? this.open.emit(event) : this.close.emit(event);\n if (event.isDefaultPrevented()) {\n return;\n }\n this.toggle(open);\n this.switchFocus();\n }\n switchFocus() {\n if (!this.isActive) {\n return;\n }\n if (this.isOpen) {\n this.activeTabComponent.focus();\n }\n else if (!this.touchEnabled) {\n this.input.focus();\n }\n else if (!this.input.isActive) {\n this.handleBlur();\n }\n }\n openPopup() {\n this.setCalendarValue(this.value);\n this.setTimeSelectorMinMax(this.value);\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.wrapper,\n content: this.popupTemplate,\n positionMode: 'absolute',\n animate: this.popupSettings.animate,\n appendTo: this.appendTo,\n popupClass: `k-datetime-container ${this.popupSettings.popupClass || ''}`,\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction }\n });\n this.popupRef.popupAnchorViewportLeave.subscribe(() => this.handleCancel());\n }\n closePopup() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.close();\n this.popupRef = null;\n }\n handleValueChange(value) {\n if (isEqual(this.value, value)) {\n return;\n }\n this.value = cloneDate(value);\n this.onControlChange(cloneDate(value));\n this.valueChange.emit(cloneDate(value));\n }\n /**\n * Indicates whether the focus target is part of this component,\n * that is, whether the focus target is inside the component wrapper or in the popup.\n */\n focusTargetInComponent(event) {\n if (!isPresent(event)) {\n return false;\n }\n const relatedTarget = event.relatedTarget || document.activeElement;\n const focusInPopup = isPresent(this.popupRef) && this.popupRef.popupElement.contains(relatedTarget);\n const focusInWrapper = this.wrapper.nativeElement.contains(relatedTarget);\n return focusInPopup || focusInWrapper;\n }\n setTimeSelectorMinMax(selectedDate) {\n const minDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.min));\n this.timeSelectorMin = cloneDate(minDateSelected ? this.min : MIN_TIME);\n const maxDateSelected = isPresent(selectedDate) && isEqual(getDate(selectedDate), getDate(this.max));\n this.timeSelectorMax = cloneDate(maxDateSelected ? this.max : MAX_TIME);\n }\n setCalendarValue(value) {\n const isInCalendarRange = isPresent(value) && isInRange(value, this.calendarMin, this.calendarMax);\n this.calendarValue = isInCalendarRange ? getDate(value) : null;\n }\n /**\n * If the popup is available, runs a popup change detection.\n */\n detectPopupChanges() {\n if (!this.isOpen) {\n return;\n }\n this.popupRef.popup.changeDetectorRef.detectChanges();\n }\n /**\n * Depending on the predicate `runInZone` value that is passed,\n * runs the provided function either in the Angular or in the current zone.\n */\n run(runInZone, fn) {\n if (runInZone) {\n this.ngZone.run(() => fn());\n }\n else {\n fn();\n }\n }\n handleDateCompletenessChange() {\n this.cdr.markForCheck();\n this.ngZone.run(() => this.onValidatorChange());\n }\n}\nDateTimePickerComponent.ɵfac = function DateTimePickerComponent_Factory(t) { return new (t || DateTimePickerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PickerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(TOUCH_ENABLED), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nDateTimePickerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateTimePickerComponent, selectors: [[\"kendo-datetimepicker\"]], contentQueries: function DateTimePickerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n } }, viewQuery: function DateTimePickerComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c17, true);\n ɵngcc0.ɵɵviewQuery(_c15, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c16, true, TemplateRef);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.wrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.popupTemplate = _t.first);\n } }, hostVars: 4, hostBindings: function DateTimePickerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-datetimepicker\", ctx.hostClasses);\n } }, inputs: { focusableId: \"focusableId\", title: \"title\", disabled: \"disabled\", readonly: \"readonly\", readOnlyInput: \"readOnlyInput\", cancelButton: \"cancelButton\", weekNumber: \"weekNumber\", rangeValidation: \"rangeValidation\", disabledDatesValidation: \"disabledDatesValidation\", incompleteDateValidation: \"incompleteDateValidation\", value: \"value\", format: \"format\", tabindex: \"tabindex\", disabledDates: \"disabledDates\", popupSettings: \"popupSettings\", min: \"min\", max: \"max\", defaultTab: \"defaultTab\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", steps: \"steps\", focusedDate: \"focusedDate\" }, outputs: { valueChange: \"valueChange\", open: \"open\", close: \"close\", onFocus: \"focus\", onBlur: \"blur\" }, exportAs: [\"kendo-datetimepicker\"], features: [ɵngcc0.ɵɵProvidersFeature([\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 12, vars: 34, consts: [[\"kendoDateTimePickerLocalizedMessages\", \"\", 6, \"dateTab\", \"dateTabLabel\", \"timeTab\", \"timeTabLabel\", \"toggle\", \"accept\", \"acceptLabel\", \"cancel\", \"cancelLabel\", \"now\", \"nowLabel\", \"today\"], [1, \"k-picker-wrap\"], [\"wrapper\", \"\"], [3, \"value\", \"format\", \"min\", \"max\", \"incompleteDateValidation\", \"formatPlaceholder\", \"placeholder\", \"disabled\", \"readonly\", \"role\", \"ariaReadOnly\", \"steps\", \"tabindex\", \"title\", \"focusableId\", \"hasPopup\", \"isPopupOpen\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\"], [1, \"k-select\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-link\", \"k-link-date\"], [1, \"k-icon\"], [\"container\", \"\"], [\"popupTemplate\", \"\"], [3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-datetime-buttongroup\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [1, \"k-button-group\", \"k-button-group-stretched\"], [\"type\", \"button\", 1, \"k-button\", \"k-date-tab\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-tab\", 3, \"kendoEventsOutsideAngular\"], [1, \"k-datetime-selector\", 3, \"kendoEventsOutsideAngular\"], [\"dateTimeSelector\", \"\"], [1, \"k-datetime-calendar-wrap\"], [3, \"value\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"navigation\", \"cellTemplate\", \"monthCellTemplate\", \"yearCellTemplate\", \"decadeCellTemplate\", \"centuryCellTemplate\", \"weekNumberTemplate\", \"headerTitleTemplate\", \"disabled\", \"disabledDates\", \"valueChange\"], [3, \"today\"], [1, \"k-datetime-time-wrap\"], [3, \"value\", \"format\", \"min\", \"max\", \"setButton\", \"cancelButton\", \"steps\", \"disabled\"], [3, \"now\", \"nowLabel\"], [1, \"k-datetime-footer\", \"k-action-buttons\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", \"class\", \"k-button k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-time-accept\", \"k-button\", \"k-primary\", 3, \"disabled\", \"kendoEventsOutsideAngular\", \"scope\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\"]], template: function DateTimePickerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c65);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"span\", 1, 2);\n ɵngcc0.ɵɵelementStart(4, \"kendo-dateinput\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateTimePickerComponent_Template_kendo_dateinput_valueChange_4_listener($event) { return ctx.handleInputValueChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"span\", 4);\n ɵngcc0.ɵɵelementStart(6, \"span\", 5);\n ɵngcc0.ɵɵelement(7, \"span\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainer(8, null, 7);\n ɵngcc0.ɵɵtemplate(10, DateTimePickerComponent_ng_template_10_Template, 19, 77, \"ng-template\", null, 8, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"value\", ctx.value)(\"format\", ctx.format)(\"min\", ctx.min)(\"max\", ctx.max)(\"incompleteDateValidation\", ctx.incompleteDateValidation)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"disabled\", ctx.disabled)(\"readonly\", ctx.readonly || ctx.readOnlyInput)(\"role\", ctx.inputRole)(\"ariaReadOnly\", ctx.readonly)(\"steps\", ctx.steps)(\"tabindex\", ctx.tabindex)(\"title\", ctx.title)(\"focusableId\", ctx.focusableId)(\"hasPopup\", true)(\"isPopupOpen\", ctx.isOpen)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(29, _c23, ctx.handleKeyDown))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(31, _c71, ctx.preventMouseDown, ctx.handleIconClick))(\"scope\", ctx);\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"toggle\"))(\"aria-label\", ctx.localization.get(\"toggle\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-i-calendar\", ctx.activeTab === \"date\")(\"k-i-clock\", ctx.activeTab === \"time\");\n } }, directives: function () { return [LocalizedMessagesDirective,\n DateInputComponent, ɵngcc3.EventsOutsideAngularDirective, CalendarComponent,\n CalendarCustomMessagesComponent,\n TimeSelectorComponent,\n TimeSelectorCustomMessagesComponent, ɵngcc2.NgIf]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nDateTimePickerComponent.ctorParameters = () => [\n { type: PopupService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: PickerService },\n { type: NgZone },\n { type: ElementRef },\n { type: Boolean, decorators: [{ type: Inject, args: [TOUCH_ENABLED,] }] },\n { type: LocalizationService },\n { type: DisabledDatesService },\n { type: Renderer2 }\n];\nDateTimePickerComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-datetimepicker',] }],\n wrapper: [{ type: ViewChild, args: ['wrapper',] }],\n value: [{ type: Input }],\n format: [{ type: Input }],\n tabindex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n popupSettings: [{ type: Input }],\n focusableId: [{ type: Input }],\n title: [{ type: Input }],\n disabled: [{ type: Input }],\n readonly: [{ type: Input }],\n readOnlyInput: [{ type: Input }],\n cancelButton: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n steps: [{ type: Input }],\n focusedDate: [{ type: Input }],\n weekNumber: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesValidation: [{ type: Input }],\n incompleteDateValidation: [{ type: Input }],\n valueChange: [{ type: Output }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onFocus: [{ type: Output, args: ['focus',] }],\n onBlur: [{ type: Output, args: ['blur',] }],\n defaultTab: [{ type: Input }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective,] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective,] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective,] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective,] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective,] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective,] }],\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n popupTemplate: [{ type: ViewChild, args: ['popupTemplate', { read: TemplateRef },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-datetimepicker',\n exportAs: 'kendo-datetimepicker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n PickerService,\n LocalizationService,\n DisabledDatesService,\n { provide: L10N_PREFIX, useValue: 'kendo.datetimepicker' },\n { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: NG_VALIDATORS, useExisting: forwardRef(() => DateTimePickerComponent), multi: true },\n { provide: KendoInput, useExisting: forwardRef(() => DateTimePickerComponent) }\n ],\n template: `\n \n
\n\n \n \n \n \n \n \n \n \n \n \n\n \n\n \n \n
\n
\n \n {{localization.get('dateTab')}}\n \n \n {{localization.get('timeTab')}}\n \n
\n
\n \n
\n \n \n \n \n
\n
\n \n \n \n \n
\n \n \n \n {{localization.get('cancel')}}\n \n \n {{localization.get('accept')}}\n \n \n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc5.PopupService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PickerService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: Boolean, decorators: [{\n type: Inject,\n args: [TOUCH_ENABLED]\n }] }, { type: ɵngcc4.LocalizationService }, { type: DisabledDatesService }, { type: ɵngcc0.Renderer2 }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-datetimepicker']\n }], focusableId: [{\n type: Input\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], readonly: [{\n type: Input\n }], readOnlyInput: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesValidation: [{\n type: Input\n }], incompleteDateValidation: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], value: [{\n type: Input\n }], format: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], popupSettings: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], defaultTab: [{\n type: Input\n }], wrapper: [{\n type: ViewChild,\n args: ['wrapper']\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], steps: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective]\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective]\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective]\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective]\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective]\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective]\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], popupTemplate: [{\n type: ViewChild,\n args: ['popupTemplate', { read: TemplateRef }]\n }] }); })();\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst DEFAULT_VIEWS_LENGTH = 2;\n/**\n * @hidden\n */\nclass HorizontalViewListComponent {\n constructor(bus, cdr) {\n this.bus = bus;\n this.cdr = cdr;\n this.activeView = CalendarViewEnum.month;\n this.isActive = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.views = DEFAULT_VIEWS_LENGTH;\n this.valueChange = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.dates = [];\n }\n get weekNumber() {\n return this.showWeekNumbers && this.isMonthView();\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n get getComponentClass() {\n return true;\n }\n get getComponentMonthClass() {\n return this.activeView === CalendarViewEnum.month;\n }\n get getComponentYearClass() {\n return this.activeView === CalendarViewEnum.year;\n }\n get getComponentDecadeClass() {\n return this.activeView === CalendarViewEnum.decade;\n }\n get getComponentCenturyClass() {\n return this.activeView === CalendarViewEnum.century;\n }\n ngOnChanges(changes) {\n this.initService();\n if (!this.service) {\n return;\n }\n this.views = this.views || DEFAULT_VIEWS_LENGTH;\n const focusedDate = this.focusedDate;\n const viewDate = this.clampDate(this.service.viewDate(focusedDate, this.max, this.views));\n this.skip = this.service.skip(viewDate, this.min);\n this.total = this.service.total(this.min, this.max);\n const activeViewChanged = hasChange(changes, 'activeView');\n const viewsHasChanged = this.views > 0 && hasChange(changes, 'views');\n if (activeViewChanged || !this.isInDates(focusedDate) || viewsHasChanged || !this.activeDate) {\n this.dates = this.service.datesList(viewDate, this.getTake(this.skip));\n this.activeDate = cloneDate(this.dates[0]);\n }\n }\n initService() {\n this.service = this.bus.service(this.activeView);\n }\n handleDateChange(candidate) {\n this.valueChange.emit(candidate);\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n navigate(action) {\n const candidate = this.move(action);\n const list = this.service.datesList(candidate, this.getTake(this.skip));\n if (this.isListInRange(list)) {\n this.dates = list;\n }\n this.activeDate = cloneDate(this.dates[0]);\n this.focusedDate = cloneDate(candidate);\n this.cdr.markForCheck();\n return cloneDate(candidate);\n }\n canNavigate(action) {\n if (!this.service) {\n return false;\n }\n return this.isListInRange(this.service.datesList(this.move(action), this.getTake(this.skip)));\n }\n clampDate(value) {\n return dateInRange(value, this.min, this.max);\n }\n move(action) {\n return this.service.move(this.dates[0] || this.focusedDate, action);\n }\n isListInRange(list) {\n const lowerBound = this.service.beginningOfPeriod(this.min);\n const upperBound = this.service.beginningOfPeriod(this.service.addToDate(this.max, 1));\n return lowerBound <= list[0] && list[list.length - 1] < upperBound;\n }\n isInDates(value) {\n return this.service.isInArray(value, this.dates);\n }\n getTake(skip) {\n return Math.min(this.total - skip, this.views);\n }\n}\nHorizontalViewListComponent.ɵfac = function HorizontalViewListComponent_Factory(t) { return new (t || HorizontalViewListComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nHorizontalViewListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HorizontalViewListComponent, selectors: [[\"kendo-calendar-horizontal\"]], hostVars: 10, hostBindings: function HorizontalViewListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-view\", ctx.getComponentClass)(\"k-calendar-monthview\", ctx.getComponentMonthClass)(\"k-calendar-yearview\", ctx.getComponentYearClass)(\"k-calendar-decadeview\", ctx.getComponentDecadeClass)(\"k-calendar-centuryview\", ctx.getComponentCenturyClass);\n } }, inputs: { activeView: \"activeView\", isActive: \"isActive\", min: \"min\", max: \"max\", views: \"views\", weekNumber: \"weekNumber\", focusedDate: \"focusedDate\", cellTemplateRef: \"cellTemplateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\", headerTitleTemplateRef: \"headerTitleTemplateRef\", activeRangeEnd: \"activeRangeEnd\", cellUID: \"cellUID\", selectionRange: \"selectionRange\", value: \"value\" }, outputs: { valueChange: \"valueChange\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 3, vars: 7, consts: [[3, \"activeView\", \"currentDate\", \"min\", \"max\", \"rangeLength\", \"templateRef\", \"today\"], [1, \"k-content\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", \"direction\", \"horizontal\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"selectionRange\", \"activeRangeEnd\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", \"cellEnter\", \"cellLeave\", 4, \"kFor\", \"kForOf\"], [\"kendoCalendarView\", \"\", \"role\", \"rowgroup\", \"direction\", \"horizontal\", 3, \"activeView\", \"isActive\", \"min\", \"max\", \"cellUID\", \"focusedDate\", \"selectedDate\", \"selectionRange\", \"activeRangeEnd\", \"weekNumber\", \"templateRef\", \"weekNumberTemplateRef\", \"viewDate\", \"change\", \"cellEnter\", \"cellLeave\"]], template: function HorizontalViewListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-calendar-header\", 0);\n ɵngcc0.ɵɵlistener(\"today\", function HorizontalViewListComponent_Template_kendo_calendar_header_today_0_listener($event) { return ctx.handleDateChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"table\", 1);\n ɵngcc0.ɵɵtemplate(2, HorizontalViewListComponent_tbody_2_Template, 1, 13, \"tbody\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeView)(\"currentDate\", ctx.activeDate)(\"min\", ctx.min)(\"max\", ctx.max)(\"rangeLength\", ctx.views)(\"templateRef\", ctx.headerTitleTemplateRef);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.dates);\n } }, directives: function () { return [HeaderComponent,\n KForOf,\n ViewComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nHorizontalViewListComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef }\n];\nHorizontalViewListComponent.propDecorators = {\n cellTemplateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n headerTitleTemplateRef: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n isActive: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n selectionRange: [{ type: Input }],\n value: [{ type: Input }],\n views: [{ type: Input }],\n weekNumber: [{ type: Input }],\n valueChange: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-view\",] }],\n getComponentMonthClass: [{ type: HostBinding, args: [\"class.k-calendar-monthview\",] }],\n getComponentYearClass: [{ type: HostBinding, args: [\"class.k-calendar-yearview\",] }],\n getComponentDecadeClass: [{ type: HostBinding, args: [\"class.k-calendar-decadeview\",] }],\n getComponentCenturyClass: [{ type: HostBinding, args: [\"class.k-calendar-centuryview\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HorizontalViewListComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-calendar-horizontal',\n template: `\n \n \n \n \n
\n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { activeView: [{\n type: Input\n }], isActive: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], views: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-view\"]\n }], getComponentMonthClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-monthview\"]\n }], getComponentYearClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-yearview\"]\n }], getComponentDecadeClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-decadeview\"]\n }], getComponentCenturyClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-centuryview\"]\n }], focusedDate: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }], headerTitleTemplateRef: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\nconst noop$2 = () => null;\n/**\n * @hidden\n */\nconst disabledDatesRangeValidator = (isDateDisabled) => {\n if (!isPresent(isDateDisabled)) {\n return noop$2;\n }\n return (selectedRange) => {\n const isRangeComplete = isPresent(selectedRange) && isPresent(selectedRange.start) && isPresent(selectedRange.end);\n if (!isRangeComplete || selectedRange.start > selectedRange.end) {\n return null;\n }\n const disabledDates = disabledDatesInRange(selectedRange.start, selectedRange.end, isDateDisabled);\n const error = {\n disabledDatesInRange: disabledDates\n };\n return disabledDates.length ? error : null;\n };\n};\n\n/* tslint:disable:no-forward-ref */\nconst BOTTOM_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-bottomview';\nconst TOP_VIEW_DOC_LINK$1 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-topview';\nconst MIN_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-min';\nconst MAX_DOC_LINK$3 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/api/CalendarComponent/#toc-max';\nconst VALUE_DOC_LINK$5 = 'http://www.telerik.com/kendo-angular-ui/components/dateinputs/calendar/#toc-using-with-json';\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_VALUE_ACCESSOR = {\n multi: true,\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MultiViewCalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * @hidden\n */\nconst RANGE_CALENDAR_RANGE_VALIDATORS = {\n multi: true,\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MultiViewCalendarComponent) //tslint:disable-line:no-use-before-declare\n};\n/**\n * Represents the Kendo UI MultiViewCalendar component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\nclass MultiViewCalendarComponent {\n constructor(bus, element, localization, navigator, renderer, cdr, zone, disabledDatesService) {\n this.bus = bus;\n this.element = element;\n this.localization = localization;\n this.navigator = navigator;\n this.renderer = renderer;\n this.cdr = cdr;\n this.zone = zone;\n this.disabledDatesService = disabledDatesService;\n /**\n * @hidden\n */\n this.id = guid();\n /**\n * Determines whether the built-in min or max validators are enforced when validating a form.\n */\n this.rangeValidation = false;\n /**\n * Determines whether the built-in validator for disabled\n * date ranges is enforced when validating a form\n * ([see example]({% slug disabled_dates_multiviewcalendar %}#toc-validation)).\n */\n this.disabledDatesRangeValidation = false;\n /**\n * Sets or gets the `disabled` property of the Calendar and\n * determines whether the component is active\n * ([see example]({% slug disabled_multiviewcalendar %})).\n */\n this.disabled = false;\n /**\n * Sets or gets the `tabindex` property of the Calendar. Based on the\n * [HTML `tabindex`](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex) behavior,\n * it determines whether the component is focusable.\n */\n this.tabindex = 0;\n /**\n * Defines the active view that the Calendar initially renders\n * ([see example]({% slug activeview_multiviewcalendar %})).\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the bottommost view, to which the user can navigate\n * ([see example]({% slug dates_multiviewcalendar %}#toc-partial-dates)).\n */\n this.bottomView = CalendarViewEnum[CalendarViewEnum.month];\n /**\n * Defines the topmost view, to which the user can navigate.\n */\n this.topView = CalendarViewEnum[CalendarViewEnum.century];\n /**\n * Determines whether to display a week number column in the `month` view\n * ([see example]({% slug weeknumcolumn_multiviewcalendar %})).\n */\n this.weekNumber = false;\n /**\n * Sets or gets the `views` property of the Calendar and\n * defines the number of rendered months.\n */\n this.views = 2;\n /**\n * Fires when the active view is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.activeViewChange = new EventEmitter();\n /**\n * Fires when a view cell is entered\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellEnter = new EventEmitter();\n /**\n * Fires when a view cell is leaved\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.cellLeave = new EventEmitter();\n /**\n * Fires when the value is changed\n * ([more information and example]({% slug overview_multiviewcalendar %}#toc-events)).\n */\n this.valueChange = new EventEmitter();\n this.cellUID = guid();\n this.isActive = false;\n this.isHovered = false;\n this.isPrevDisabled = true;\n this.isNextDisabled = true;\n this.prevView = Action.PrevView;\n this.nextView = Action.NextView;\n this._min = new Date(MIN_DATE);\n this._max = new Date(MAX_DATE);\n this._focusedDate = getToday();\n this.resolvedPromise = Promise.resolve();\n this.onControlChange = noop;\n this.onControlTouched = noop;\n this.onValidatorChange = noop;\n this.minValidateFn = noop;\n this.maxValidateFn = noop;\n this.disabledDatesRangeValidateFn = noop;\n this.subscriptions = new Subscription(() => { });\n this.setClasses(element.nativeElement);\n }\n /**\n * Sets or gets the `focusedDate` property of the Calendar and\n * defines the focused date of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-focused-dates)).\n *\n * > If the Calendar is out of the min or max range, it normalizes the defined `focusedDate`.\n */\n set focusedDate(focusedDate) {\n this._focusedDate = focusedDate || getToday();\n }\n get focusedDate() {\n return this._focusedDate;\n }\n /**\n * Sets or gets the `min` property of the Calendar and\n * defines the minimum allowed date value.\n * By default, the `min` value is `1900-1-1`.\n */\n set min(min) {\n this._min = min || new Date(MIN_DATE);\n }\n get min() {\n return this._min;\n }\n /**\n * Sets or gets the `max` property of the Calendar and\n * defines the maximum allowed date value.\n * By default, the `max` value is `2099-12-31`.\n */\n set max(max) {\n this._max = max || new Date(MAX_DATE);\n }\n get max() {\n return this._max;\n }\n /**\n * Sets or gets the `value` property of the Calendar and defines the selected value of the component.\n *\n * > The `value` has to be a valid\n * [JavaScript `Date`](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date) instance.\n */\n get value() {\n return this._value;\n }\n set value(candidate) {\n this.verifyValue(candidate);\n this._value = cloneDate(candidate);\n }\n /**\n * @hidden\n */\n set tabIndex(tabIndex) {\n this.tabindex = tabIndex;\n }\n get tabIndex() {\n return this.tabindex;\n }\n /**\n * Sets the dates of the MultiViewCalendar that will be disabled\n * ([see example]({% slug disabled_dates_multiviewcalendar %})).\n */\n set disabledDates(value) {\n this.disabledDatesService.initialize(value);\n }\n /**\n * Sets or gets the `selectionRange` property of the Calendar and\n * defines the selection range of the component\n * ([see example]({% slug dates_multiviewcalendar %}#toc-selection-range)).\n */\n set selectionRange(range$$1) {\n this._selectionRange = range$$1;\n if (this.disabledDatesRangeValidation) {\n this.onValidatorChange();\n }\n }\n get selectionRange() {\n return this._selectionRange;\n }\n /**\n * @hidden\n */\n set cellTemplateRef(template) {\n this.cellTemplate = template;\n }\n /**\n * @hidden\n */\n set monthCellTemplateRef(template) {\n this.monthCellTemplate = template;\n }\n /**\n * @hidden\n */\n set yearCellTemplateRef(template) {\n this.yearCellTemplate = template;\n }\n /**\n * @hidden\n */\n set decadeCellTemplateRef(template) {\n this.decadeCellTemplate = template;\n }\n /**\n * @hidden\n */\n set centuryCellTemplateRef(template) {\n this.centuryCellTemplate = template;\n }\n /**\n * @hidden\n */\n set weekNumberTemplateRef(template) {\n this.weekNumberTemplate = template;\n }\n /**\n * @hidden\n */\n set headerTitleTemplateRef(template) {\n this.headerTitleTemplate = template;\n }\n get activeViewEnum() {\n const activeView = CalendarViewEnum[this.activeView];\n return activeView < this.bottomViewEnum ? this.bottomViewEnum : activeView;\n }\n get bottomViewEnum() {\n return CalendarViewEnum[this.bottomView];\n }\n get topViewEnum() {\n return CalendarViewEnum[this.topView];\n }\n get widgetId() {\n return this.id;\n }\n get widgetRole() {\n return 'grid';\n }\n get calendarTabIndex() {\n return this.disabled ? undefined : this.tabIndex;\n }\n get ariaDisabled() {\n return this.disabled;\n }\n get ariaActivedescendant() {\n return this.cellUID + this.focusedDate.getTime();\n }\n /**\n * @hidden\n */\n handleBlur() {\n this.onControlTouched();\n this.isActive = false;\n this.isHovered = false; //ensure that hovered is also not active\n }\n /**\n * @hidden\n */\n handleFocus() {\n this.isActive = true;\n }\n /**\n * @hidden\n */\n handleMouseEnter() {\n this.isHovered = true;\n }\n /**\n * @hidden\n */\n handleMouseLeave() {\n this.isHovered = false;\n }\n /**\n * @hidden\n */\n handleMousedown(event) {\n event.preventDefault();\n }\n /**\n * @hidden\n */\n handleClick() {\n if (this.isActive) {\n return;\n }\n this.focus();\n }\n /**\n * @hidden\n */\n keydown(event) {\n const candidate = dateInRange(this.navigator.move(this.focusedDate, this.navigator.action(event), this.activeViewEnum), this.min, this.max);\n if (isEqual(this.focusedDate, candidate)) {\n return;\n }\n this.focusedDate = candidate;\n event.preventDefault();\n }\n /**\n * @hidden\n */\n enter() {\n this.handleDateChange(this.focusedDate);\n }\n ngOnInit() {\n this.setMessages();\n this.subscriptions.add(this.localization.changes.subscribe(() => this.setMessages()));\n this.subscriptions.add(this.bus.viewChanged.subscribe(({ view }) => {\n this.activeView = CalendarViewEnum[view];\n this.activeViewChange.emit(this.activeView);\n this.cdr.detectChanges();\n this.updateButtonState();\n }));\n }\n ngOnChanges(changes) {\n this.verifyChanges();\n this.bus.configure(this.bottomViewEnum, this.topViewEnum);\n const useValue = hasExistingValue(changes, 'value') && !hasExistingValue(changes, 'focusedDate');\n const focusedDate = dateInRange(cloneDate(useValue ? this.value : this.focusedDate), this.min, this.max);\n this.focusedDate = !isEqual(this.focusedDate, focusedDate) ? focusedDate : this.focusedDate;\n if (changes.min || changes.max || changes.rangeValidation || changes.disabledDates || changes.disabledDatesRangeValidation) {\n this.minValidateFn = this.rangeValidation ? minValidator(this.min) : noop;\n this.maxValidateFn = this.rangeValidation ? maxValidator(this.max) : noop;\n this.disabledDatesRangeValidateFn = this.disabledDatesRangeValidation ? disabledDatesRangeValidator(this.disabledDatesService.isDateDisabled) : noop;\n this.onValidatorChange();\n }\n if (changes.min || changes.max || changes.focusedDate || changes.activeView) {\n this.updateButtonState();\n }\n }\n ngOnDestroy() {\n clearTimeout(this.messagesTimeout);\n this.subscriptions.unsubscribe();\n }\n ngAfterViewInit() {\n this.updateButtonState();\n }\n /**\n * Focuses the host element of the Calendar.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the Calendar component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n /**\n * @hidden\n */\n handleDateChange(candidate) {\n const canNavigateDown = this.bus.canMoveDown(this.activeViewEnum);\n const isSameDate = !canNavigateDown && isEqual(candidate, this.value);\n this.focusedDate = cloneDate(candidate) || this.focusedDate;\n if (this.disabled || isSameDate) {\n return;\n }\n if (canNavigateDown) {\n this.bus.moveDown(this.activeViewEnum);\n return;\n }\n if (!this.disabledDatesService.isDateDisabled(candidate)) {\n this.value = cloneDate(candidate);\n this.onControlChange(cloneDate(candidate));\n this.valueChange.emit(cloneDate(candidate));\n }\n }\n /**\n * @hidden\n */\n writeValue(candidate) {\n this.verifyValue(candidate);\n this.focusedDate = dateInRange(cloneDate(candidate) || this.focusedDate, this.min, this.max);\n this.value = cloneDate(candidate);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n registerOnChange(fn) {\n this.onControlChange = fn;\n }\n /**\n * @hidden\n */\n registerOnTouched(fn) {\n this.onControlTouched = fn;\n }\n /**\n * @hidden\n */\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n validate(control) {\n return this.minValidateFn(control) || this.maxValidateFn(control) || this.disabledDatesRangeValidateFn(this.selectionRange);\n }\n /**\n * @hidden\n */\n registerOnValidatorChange(fn) {\n this.onValidatorChange = fn;\n }\n /**\n * @hidden\n */\n activeCellTemplate() {\n switch (this.activeViewEnum) {\n case CalendarViewEnum.month:\n return this.monthCellTemplate || this.cellTemplate;\n case CalendarViewEnum.year:\n return this.yearCellTemplate;\n case CalendarViewEnum.decade:\n return this.decadeCellTemplate;\n case CalendarViewEnum.century:\n return this.centuryCellTemplate;\n default:\n return null;\n }\n }\n /**\n * @hidden\n */\n navigate(action) {\n this.focusedDate = this.viewList.navigate(action);\n this.updateButtonState();\n }\n /**\n * @hidden\n */\n emitCellEvent(emitter, args) {\n if (hasObservers(emitter)) {\n this.zone.run(() => {\n emitter.emit(args);\n });\n }\n }\n setClasses(element) {\n this.renderer.addClass(element, 'k-widget');\n this.renderer.addClass(element, 'k-calendar');\n this.renderer.addClass(element, 'k-calendar-infinite');\n this.renderer.addClass(element, 'k-calendar-range');\n }\n setMessages() {\n this.zone.runOutsideAngular(() => {\n clearTimeout(this.messagesTimeout);\n this.messagesTimeout = setTimeout(() => {\n this.prevButtonTitle = this.localization.get('prevButtonTitle');\n this.nextButtonTitle = this.localization.get('nextButtonTitle');\n this.cdr.detectChanges();\n });\n });\n }\n verifyChanges() {\n if (!isDevMode()) {\n return;\n }\n if (this.min > this.max) {\n throw new Error(`The max value should be bigger than the min. See ${MIN_DOC_LINK$3} and ${MAX_DOC_LINK$3}.`);\n }\n if (this.bottomViewEnum > this.topViewEnum) {\n throw new Error(`The topView should be greater than bottomView. See ${BOTTOM_VIEW_DOC_LINK$1} and ${TOP_VIEW_DOC_LINK$1}.`);\n }\n }\n verifyValue(candidate) {\n if (!isDevMode()) {\n return;\n }\n if (candidate && !(candidate instanceof Date)) {\n throw new Error(`The 'value' should be a valid JavaScript Date instance. Check ${VALUE_DOC_LINK$5} for possible resolution.`);\n }\n }\n updateButtonState() {\n this.resolvedPromise.then(() => {\n this.isPrevDisabled = !this.viewList.canNavigate(this.prevView);\n this.isNextDisabled = !this.viewList.canNavigate(this.nextView);\n this.cdr.markForCheck();\n });\n }\n}\nMultiViewCalendarComponent.ɵfac = function MultiViewCalendarComponent_Factory(t) { return new (t || MultiViewCalendarComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nMultiViewCalendarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MultiViewCalendarComponent, selectors: [[\"kendo-multiviewcalendar\"]], contentQueries: function MultiViewCalendarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, MonthCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, YearCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, DecadeCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, CenturyCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, WeekNumberCellTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, HeaderTitleTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.monthCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.yearCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.decadeCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.centuryCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.weekNumberTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTitleTemplate = _t.first);\n } }, viewQuery: function MultiViewCalendarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(HorizontalViewListComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewList = _t.first);\n } }, hostVars: 7, hostBindings: function MultiViewCalendarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"blur\", function MultiViewCalendarComponent_blur_HostBindingHandler() { return ctx.handleBlur(); })(\"focus\", function MultiViewCalendarComponent_focus_HostBindingHandler() { return ctx.handleFocus(); })(\"mouseenter\", function MultiViewCalendarComponent_mouseenter_HostBindingHandler() { return ctx.handleMouseEnter(); })(\"mouseleave\", function MultiViewCalendarComponent_mouseleave_HostBindingHandler() { return ctx.handleMouseLeave(); })(\"mousedown\", function MultiViewCalendarComponent_mousedown_HostBindingHandler($event) { return ctx.handleMousedown($event); })(\"click\", function MultiViewCalendarComponent_click_HostBindingHandler() { return ctx.handleClick(); })(\"keydown\", function MultiViewCalendarComponent_keydown_HostBindingHandler($event) { return ctx.keydown($event); })(\"keydown.enter\", function MultiViewCalendarComponent_keydown_enter_HostBindingHandler() { return ctx.enter(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.widgetId)(\"role\", ctx.widgetRole)(\"tabindex\", ctx.calendarTabIndex)(\"aria-disabled\", ctx.ariaDisabled)(\"aria-activedescendant\", ctx.ariaActivedescendant);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.ariaDisabled);\n } }, inputs: { id: \"id\", rangeValidation: \"rangeValidation\", disabledDatesRangeValidation: \"disabledDatesRangeValidation\", disabled: \"disabled\", tabindex: \"tabindex\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", views: \"views\", focusedDate: \"focusedDate\", min: \"min\", max: \"max\", value: \"value\", tabIndex: \"tabIndex\", disabledDates: \"disabledDates\", selectionRange: \"selectionRange\", cellTemplateRef: [\"cellTemplate\", \"cellTemplateRef\"], monthCellTemplateRef: [\"monthCellTemplate\", \"monthCellTemplateRef\"], yearCellTemplateRef: [\"yearCellTemplate\", \"yearCellTemplateRef\"], decadeCellTemplateRef: [\"decadeCellTemplate\", \"decadeCellTemplateRef\"], centuryCellTemplateRef: [\"centuryCellTemplate\", \"centuryCellTemplateRef\"], weekNumberTemplateRef: [\"weekNumberTemplate\", \"weekNumberTemplateRef\"], headerTitleTemplateRef: [\"headerTitleTemplate\", \"headerTitleTemplateRef\"], activeRangeEnd: \"activeRangeEnd\" }, outputs: { activeViewChange: \"activeViewChange\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\", valueChange: \"valueChange\" }, exportAs: [\"kendo-multiviewcalendar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 7, vars: 20, consts: [[\"kendoMultiViewCalendarLocalizedMessages\", \"\", 6, \"today\", \"prevButtonTitle\", \"nextButtonTitle\"], [\"type\", \"button\", 1, \"k-button\", \"k-prev-view\", 3, \"disabled\", \"title\", \"click\"], [1, \"k-icon\", \"k-i-arrow-chevron-left\"], [3, \"activeView\", \"isActive\", \"cellTemplateRef\", \"headerTitleTemplateRef\", \"weekNumberTemplateRef\", \"cellUID\", \"views\", \"min\", \"max\", \"focusedDate\", \"weekNumber\", \"activeRangeEnd\", \"selectionRange\", \"value\", \"valueChange\", \"cellEnter\", \"cellLeave\"], [\"type\", \"button\", 1, \"k-button\", \"k-next-view\", 3, \"disabled\", \"title\", \"click\"], [1, \"k-icon\", \"k-i-arrow-chevron-right\"]], template: function MultiViewCalendarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c78);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function MultiViewCalendarComponent_Template_button_click_2_listener() { return ctx.navigate(ctx.prevView); });\n ɵngcc0.ɵɵelement(3, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(4, \"kendo-calendar-horizontal\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_valueChange_4_listener($event) { return ctx.handleDateChange($event); })(\"cellEnter\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_cellEnter_4_listener($event) { return ctx.emitCellEvent(ctx.cellEnter, $event); })(\"cellLeave\", function MultiViewCalendarComponent_Template_kendo_calendar_horizontal_cellLeave_4_listener($event) { return ctx.emitCellEvent(ctx.cellLeave, $event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(5, \"button\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function MultiViewCalendarComponent_Template_button_click_5_listener() { return ctx.navigate(ctx.nextView); });\n ɵngcc0.ɵɵelement(6, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n var tmp_5_0 = null;\n const currVal_5 = (tmp_5_0 = ctx.activeCellTemplate()) == null ? null : tmp_5_0.templateRef;\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.isPrevDisabled)(\"title\", ctx.prevButtonTitle);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.isPrevDisabled);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"activeView\", ctx.activeViewEnum)(\"isActive\", ctx.isActive || ctx.isHovered)(\"cellTemplateRef\", currVal_5)(\"headerTitleTemplateRef\", ctx.headerTitleTemplate == null ? null : ctx.headerTitleTemplate.templateRef)(\"weekNumberTemplateRef\", ctx.weekNumberTemplate == null ? null : ctx.weekNumberTemplate.templateRef)(\"cellUID\", ctx.cellUID)(\"views\", ctx.views)(\"min\", ctx.min)(\"max\", ctx.max)(\"focusedDate\", ctx.focusedDate)(\"weekNumber\", ctx.weekNumber)(\"activeRangeEnd\", ctx.activeRangeEnd)(\"selectionRange\", ctx.selectionRange)(\"value\", ctx.value);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.isNextDisabled)(\"title\", ctx.nextButtonTitle);\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.isNextDisabled);\n } }, directives: function () { return [MultiViewCalendarLocalizedMessagesDirective,\n HorizontalViewListComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nMultiViewCalendarComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ElementRef },\n { type: LocalizationService },\n { type: NavigationService },\n { type: Renderer2 },\n { type: ChangeDetectorRef },\n { type: NgZone },\n { type: DisabledDatesService }\n];\nMultiViewCalendarComponent.propDecorators = {\n id: [{ type: Input }],\n focusedDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeValidation: [{ type: Input }],\n disabledDatesRangeValidation: [{ type: Input }],\n value: [{ type: Input }],\n disabled: [{ type: Input }],\n tabindex: [{ type: Input }],\n tabIndex: [{ type: Input }],\n disabledDates: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n selectionRange: [{ type: Input }],\n views: [{ type: Input }],\n activeViewChange: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }],\n valueChange: [{ type: Output }],\n cellTemplate: [{ type: ContentChild, args: [CellTemplateDirective, { static: true },] }],\n cellTemplateRef: [{ type: Input, args: ['cellTemplate',] }],\n monthCellTemplate: [{ type: ContentChild, args: [MonthCellTemplateDirective, { static: true },] }],\n monthCellTemplateRef: [{ type: Input, args: ['monthCellTemplate',] }],\n yearCellTemplate: [{ type: ContentChild, args: [YearCellTemplateDirective, { static: true },] }],\n yearCellTemplateRef: [{ type: Input, args: ['yearCellTemplate',] }],\n decadeCellTemplate: [{ type: ContentChild, args: [DecadeCellTemplateDirective, { static: true },] }],\n decadeCellTemplateRef: [{ type: Input, args: ['decadeCellTemplate',] }],\n centuryCellTemplate: [{ type: ContentChild, args: [CenturyCellTemplateDirective, { static: true },] }],\n centuryCellTemplateRef: [{ type: Input, args: ['centuryCellTemplate',] }],\n weekNumberTemplate: [{ type: ContentChild, args: [WeekNumberCellTemplateDirective, { static: true },] }],\n weekNumberTemplateRef: [{ type: Input, args: ['weekNumberTemplate',] }],\n headerTitleTemplate: [{ type: ContentChild, args: [HeaderTitleTemplateDirective, { static: true },] }],\n headerTitleTemplateRef: [{ type: Input, args: ['headerTitleTemplate',] }],\n viewList: [{ type: ViewChild, args: [HorizontalViewListComponent,] }],\n widgetId: [{ type: HostBinding, args: ['attr.id',] }],\n widgetRole: [{ type: HostBinding, args: ['attr.role',] }],\n calendarTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }],\n ariaActivedescendant: [{ type: HostBinding, args: ['attr.aria-activedescendant',] }],\n handleBlur: [{ type: HostListener, args: [\"blur\",] }],\n handleFocus: [{ type: HostListener, args: [\"focus\",] }],\n handleMouseEnter: [{ type: HostListener, args: [\"mouseenter\",] }],\n handleMouseLeave: [{ type: HostListener, args: [\"mouseleave\",] }],\n handleMousedown: [{ type: HostListener, args: [\"mousedown\", ['$event'],] }],\n handleClick: [{ type: HostListener, args: [\"click\",] }],\n keydown: [{ type: HostListener, args: [\"keydown\", [\"$event\"],] }],\n enter: [{ type: HostListener, args: [\"keydown.enter\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-multiviewcalendar',\n providers: [\n BusViewService,\n RANGE_CALENDAR_VALUE_ACCESSOR,\n RANGE_CALENDAR_RANGE_VALIDATORS,\n LocalizationService,\n DisabledDatesService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.multiviewcalendar'\n },\n NavigationService\n ],\n selector: 'kendo-multiviewcalendar',\n template: `\n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc4.LocalizationService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.NgZone }, { type: DisabledDatesService }]; }, { id: [{\n type: Input\n }], rangeValidation: [{\n type: Input\n }], disabledDatesRangeValidation: [{\n type: Input\n }], disabled: [{\n type: Input\n }], tabindex: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }], views: [{\n type: Input\n }], activeViewChange: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], valueChange: [{\n type: Output\n }], focusedDate: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], value: [{\n type: Input\n }], tabIndex: [{\n type: Input\n }], disabledDates: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], cellTemplateRef: [{\n type: Input,\n args: ['cellTemplate']\n }], cellTemplate: [{\n type: ContentChild,\n args: [CellTemplateDirective, { static: true }]\n }], monthCellTemplateRef: [{\n type: Input,\n args: ['monthCellTemplate']\n }], monthCellTemplate: [{\n type: ContentChild,\n args: [MonthCellTemplateDirective, { static: true }]\n }], yearCellTemplateRef: [{\n type: Input,\n args: ['yearCellTemplate']\n }], yearCellTemplate: [{\n type: ContentChild,\n args: [YearCellTemplateDirective, { static: true }]\n }], decadeCellTemplateRef: [{\n type: Input,\n args: ['decadeCellTemplate']\n }], decadeCellTemplate: [{\n type: ContentChild,\n args: [DecadeCellTemplateDirective, { static: true }]\n }], centuryCellTemplateRef: [{\n type: Input,\n args: ['centuryCellTemplate']\n }], centuryCellTemplate: [{\n type: ContentChild,\n args: [CenturyCellTemplateDirective, { static: true }]\n }], weekNumberTemplateRef: [{\n type: Input,\n args: ['weekNumberTemplate']\n }], weekNumberTemplate: [{\n type: ContentChild,\n args: [WeekNumberCellTemplateDirective, { static: true }]\n }], headerTitleTemplateRef: [{\n type: Input,\n args: ['headerTitleTemplate']\n }], headerTitleTemplate: [{\n type: ContentChild,\n args: [HeaderTitleTemplateDirective, { static: true }]\n }], widgetId: [{\n type: HostBinding,\n args: ['attr.id']\n }], widgetRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], calendarTabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], ariaActivedescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], handleBlur: [{\n type: HostListener,\n args: [\"blur\"]\n }], handleFocus: [{\n type: HostListener,\n args: [\"focus\"]\n }], handleMouseEnter: [{\n type: HostListener,\n args: [\"mouseenter\"]\n }], handleMouseLeave: [{\n type: HostListener,\n args: [\"mouseleave\"]\n }], handleMousedown: [{\n type: HostListener,\n args: [\"mousedown\", ['$event']]\n }], handleClick: [{\n type: HostListener,\n args: [\"click\"]\n }], keydown: [{\n type: HostListener,\n args: [\"keydown\", [\"$event\"]]\n }], enter: [{\n type: HostListener,\n args: [\"keydown.enter\"]\n }], activeRangeEnd: [{\n type: Input\n }], viewList: [{\n type: ViewChild,\n args: [HorizontalViewListComponent]\n }] }); })();\n\n/**\n * A directive which renders the content of the DateRange Popup. To define the cell template, nest an\n * `` tag with the `kendoRangePopupTemplate` directive inside the component tag.\n */\nclass DateRangePopupTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDateRangePopupTemplateDirective.ɵfac = function DateRangePopupTemplateDirective_Factory(t) { return new (t || DateRangePopupTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nDateRangePopupTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangePopupTemplateDirective, selectors: [[\"\", \"kendoDateRangePopupTemplate\", \"\"]] });\n/** @nocollapse */\nDateRangePopupTemplateDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangePopupTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangePopupTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\nconst isActive = (cmp) => (cmp && cmp.isActive) || false;\nconst hasActiveContent = (popup) => popup && popup.hasActiveContent();\n/**\n * A service that handles the communication between the components that are placed inside the DateRangeComponent.\n * For example, the start and end `DateInput` and `DateRangePopup` components.\n */\nclass DateRangeService {\n constructor() {\n /**\n * An Observable instance that notifies when the `activeRangeEnd` state is changed.\n */\n this.activeRangeEnd$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `focusedDate` is changed.\n */\n this.focusedDate$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the end `DateInput` component is changed.\n * For example, when a new end `DateInput` is attached or when the old one is detached.\n */\n this.endInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the start `DateInput` component is changed.\n * For example, when a new start `DateInput` is attached or the old one is detached.\n */\n this.startInput$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the `DateRangePopup` component is changed.\n */\n this.dateRangePopup$ = new BehaviorSubject(null);\n /**\n * An Observable instance that notifies when the state of the selection range is changed.\n */\n this.range$ = new BehaviorSubject(EMPTY_SELECTIONRANGE);\n }\n /**\n * Gets the current `activeRangeEnd` value.\n */\n get activeRangeEnd() {\n return this.activeRangeEnd$.value;\n }\n /**\n * Gets the current `focusedDate` value.\n */\n get focusedDate() {\n return this.focusedDate$.value;\n }\n /**\n * Gets the `min` range value.\n * The `min` value is extracted from the `start` DateInput value or the `min` value of the Calendar.\n */\n get min() {\n return (this.startInput$.value || {}).min || null;\n }\n /**\n * Gets the `max` range value.\n * The `max` value is extracted from the `end` DateInput value or the `max` value of the Calendar.\n */\n get max() {\n return (this.endInput$.value || {}).max || null;\n }\n /**\n * Gets the current `selectionRange` value.\n */\n get selectionRange() {\n return this.range$.value;\n }\n /**\n * Activates the registered `DateRangePopup` component.\n * The method opens the popup and focuses the calendar.\n */\n activatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!dateRangePopup) {\n return;\n }\n dateRangePopup.activate();\n }\n /**\n * Deactivates the registered `DateRangePopup` component.\n * The method closes the popup.\n */\n deactivatePopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.show = false;\n }\n /**\n * @hidden\n *\n * Deactivates the registered `DateRangePopup` component and fires the `cancel` event.\n * The method closes the popup.\n */\n cancelPopup() {\n const dateRangePopup = this.dateRangePopup$.value;\n if (!(dateRangePopup && dateRangePopup.show)) {\n return;\n }\n dateRangePopup.cancelPopup();\n }\n /**\n * Completes all observables to mitigate possible memory leaks.\n * Calls the method when a component that uses it is destroyed.\n */\n destroy() {\n this.activeRangeEnd$.complete();\n this.dateRangePopup$.complete();\n this.focusedDate$.complete();\n this.endInput$.complete();\n this.startInput$.complete();\n this.range$.complete();\n }\n /**\n * Returns `true` when an active component that is placed inside the `DateRangeComponent` is detected.\n * For example, the opened popup or the focused DateInput.\n *\n * @returns `true` if an active component is present.\n */\n hasActiveComponent() {\n const popup = this.dateRangePopup$.value;\n const isPopup = isActive(popup);\n const isStart = isActive(this.startInput$.value);\n const isEnd = isActive(this.endInput$.value);\n return isPopup || isStart || isEnd || hasActiveContent(popup) || false;\n }\n /**\n * Registers a new start `DateInput` component. Notifies all `startInput$` listeners.\n */\n registerStartInput(startInput) {\n this.startInput$.next(startInput);\n }\n /**\n * Registers a new end `DateInput` component. Notifies all `endInput$` listeners.\n */\n registerEndInput(endInput) {\n this.endInput$.next(endInput);\n }\n /**\n * Registers a new `DateRangePopup` component. Notifies all `dateRangePopup$` listeners.\n */\n registerPopup(dateRangePopup) {\n this.dateRangePopup$.next(dateRangePopup);\n }\n /**\n * Updates the `activeRangeEnd` value. Notifies all `activeRangeEnd$` listeners.\n */\n setActiveRangeEnd(activeRange) {\n if (!activeRange || this.activeRangeEnd === activeRange) {\n return;\n }\n this.activeRangeEnd$.next(activeRange);\n }\n /**\n * Updates the focused date. Notifies all `focusedDate$` listeners.\n */\n setFocusedDate(value) {\n if (isEqual(this.focusedDate$.value, value)) {\n return;\n }\n this.focusedDate$.next(value);\n }\n /**\n * Updates the selection range. Notifies all `range$` listeners.\n */\n setRange(range = EMPTY_SELECTIONRANGE) {\n this.range$.next(range);\n }\n}\nDateRangeService.ɵfac = function DateRangeService_Factory(t) { return new (t || DateRangeService)(); };\nDateRangeService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DateRangeService, factory: DateRangeService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Represents the Kendo UI DateRangePopup component for Angular.\n *\n * @example\n * ```ts\n * import { DateInputsModule, DateRangeService } from '@progress/kendo-angular-dateinputs';\n *\n * _@Component({\n * providers: [DateRangeService],\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent {\n * }\n * ```\n */\nclass DateRangePopupComponent {\n constructor(popupService, dateRangeService, zone, rtl) {\n this.popupService = popupService;\n this.dateRangeService = dateRangeService;\n this.zone = zone;\n this.rtl = rtl;\n /**\n * Controls the popup animation.\n * By default, the opening and closing animations are enabled.\n * For more information about controlling the popup animations,\n * refer to the article on [animations]({% slug animations_popup %}).\n */\n this.animate = true;\n /**\n * Configures the collision behavior of the popup.\n * For more information, refer to the article on\n * [viewport boundary detection]({% slug viewportboundarydetection_popup %}).\n */\n this.collision = { horizontal: 'fit', vertical: 'flip' };\n /**\n * Fires each time the popup is about to open.\n * This event is preventable. If you cancel the event, the popup will remain closed.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.open = new EventEmitter();\n /**\n * Fires each time the popup is about to close.\n * This event is preventable. If you cancel the event, the popup will remain open.\n * For more information, refer to the section on\n * [events]({% slug overview_datepicker %}#toc-events).\n */\n this.close = new EventEmitter();\n /**\n * Fires each time the calendar element is blurred.\n */\n this.onBlur = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the calendar element is focused.\n */\n this.onFocus = new EventEmitter(); //tslint:disable-line:no-output-rename\n /**\n * Fires each time the popup is closed either on `ESC` keypress or on leaving the viewport.\n */\n this.cancel = new EventEmitter();\n /**\n * @hidden\n */\n this.popupUID = guid();\n this.calendarSubscriptions = new Subscription(() => { });\n this.popupSubscriptions = new Subscription(() => { });\n this.resolvedPromise = Promise.resolve();\n }\n /**\n * The active calendar that is visible in the popup.\n *\n * > When the popup is closed, the property returns `null`.\n */\n get calendar() {\n return this._calendar;\n }\n set calendar(calendar) {\n this._calendar = calendar;\n this.subscribeFocusBlur(calendar);\n }\n /**\n * Gets the active state of the component.\n * When the opened calendar is active, returns `true`.\n */\n get isActive() {\n return this.calendar && this.calendar.isActive;\n }\n /**\n * Gets or sets the visibility state of the component.\n */\n set show(show) {\n if (this._show === show) {\n return;\n }\n const event = new PreventableEvent();\n if (show) {\n this.open.emit(event);\n }\n else {\n this.close.emit(event);\n }\n if (event.isDefaultPrevented()) {\n return;\n }\n this._toggle(show);\n }\n get show() {\n return this._show;\n }\n ngOnInit() {\n this.dateRangeService.registerPopup(this);\n }\n ngAfterViewInit() {\n this.calendarSubscriptions.add(this.contentCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n this.calendarSubscriptions.add(this.viewCalendar.changes.subscribe((changes) => this.calendar = changes.first));\n if (isWindowAvailable()) {\n this.zone.runOutsideAngular(() => this.windowBlurSubscription = fromEvent(window, 'blur').subscribe(this.handleWindowBlur.bind(this)));\n }\n }\n ngOnDestroy() {\n this.destroyPopup();\n this.calendarSubscriptions.unsubscribe();\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (this.windowBlurSubscription) {\n this.windowBlurSubscription.unsubscribe();\n }\n }\n /**\n * Opens the popup component and focuses the calendar.\n */\n activate() {\n if (this.show === true) {\n return;\n }\n if (this.activateSubscription) {\n this.activateSubscription.unsubscribe();\n }\n this.show = true;\n this.zone.runOutsideAngular(() => {\n this.activateSubscription = merge(this.contentCalendar.changes, this.viewCalendar.changes)\n .pipe(filter(changes => changes && changes.first), map(changes => changes.first))\n .subscribe((calendar) => setTimeout(() => calendar.focus()));\n });\n }\n /**\n * Focuses the calendar (if available).\n */\n focus() {\n if (this.calendar) {\n this.calendar.focus();\n }\n }\n /**\n * Checks if a focused element ids placed inside the popup.\n *\n * @return boolean;\n */\n hasActiveContent() {\n if (!isDocumentAvailable() || !this.popupRef) {\n return false;\n }\n return this.popupRef.popupElement.contains(document.activeElement);\n }\n /**\n * Toggles the visibility of the popup.\n * If you use the `toggle` method to show or hide the popup,\n * the `open` and `close` events do not fire.\n *\n * @param show The state of the popup.\n */\n toggle(show) {\n this.resolvedPromise.then(() => {\n this._toggle((show === undefined) ? !this.show : show);\n });\n }\n /**\n * @hidden\n *\n * Closes the popup and triggers the `cancel` event.\n */\n cancelPopup() {\n this.show = false;\n this.cancel.emit();\n }\n handleWindowBlur() {\n if (!this.show) {\n return;\n }\n if (hasObservers(this.close)) {\n this.zone.run(() => this.show = false);\n }\n else {\n this.show = false;\n }\n }\n handleMouseLeave() {\n this.dateRangeService.setRange(this.dateRangeService.selectionRange);\n }\n handleKeydown(event) {\n const { altKey, keyCode } = event;\n if (keyCode === Keys.Escape || (altKey && keyCode === Keys.ArrowUp)) {\n this.zone.run(() => this.cancelPopup());\n }\n }\n subscribeFocusBlur(calendar) {\n if (this.blurSubscription) {\n this.blurSubscription.unsubscribe();\n this.focusSubscription.unsubscribe();\n }\n if (!calendar) {\n return;\n }\n const nativeElement = calendar.element.nativeElement;\n this.blurSubscription = fromEvent(nativeElement, 'blur').subscribe(() => this.onBlur.emit());\n this.focusSubscription = fromEvent(nativeElement, 'focus').subscribe(() => this.onFocus.emit());\n }\n addPopupSubscriptions(...subscriptions) {\n if (!isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions = new Subscription();\n }\n subscriptions.map(s => this.popupSubscriptions.add(s));\n }\n get _appendTo() {\n const appendTo = this.appendTo;\n if (!appendTo || appendTo === 'root') {\n return undefined;\n }\n return appendTo === 'component' ? this.container : appendTo;\n }\n _toggle(show) {\n this._show = show;\n if (this.popupRef) {\n this.destroyPopup();\n }\n if (this._show) {\n const direction = this.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: this.anchor,\n anchorAlign: this.anchorAlign || { vertical: 'bottom', horizontal: direction },\n animate: this.animate,\n appendTo: this._appendTo,\n collision: this.collision,\n content: (this.contentTemplate || {}).templateRef || this.defaultTemplate,\n margin: this.margin,\n popupAlign: this.popupAlign || { vertical: 'top', horizontal: direction },\n positionMode: 'absolute'\n });\n const { popupElement, popupAnchorViewportLeave } = this.popupRef;\n popupElement.setAttribute('id', this.popupUID);\n this.addPopupSubscriptions(this.zone.runOutsideAngular(() => fromEvent(popupElement, 'keydown').subscribe(this.handleKeydown.bind(this))), fromEvent(popupElement, 'mouseleave').subscribe(this.handleMouseLeave.bind(this)), popupAnchorViewportLeave.subscribe(() => this.cancelPopup()));\n }\n }\n destroyPopup() {\n if (isPresent(this.popupRef)) {\n this.popupRef.close();\n this.popupRef = null;\n }\n if (isPresent(this.popupSubscriptions)) {\n this.popupSubscriptions.unsubscribe();\n }\n }\n}\nDateRangePopupComponent.ɵfac = function DateRangePopupComponent_Factory(t) { return new (t || DateRangePopupComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc5.PopupService), ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(RTL, 8)); };\nDateRangePopupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateRangePopupComponent, selectors: [[\"kendo-daterange-popup\"]], contentQueries: function DateRangePopupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DateRangePopupTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, MultiViewCalendarComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentCalendar = _t);\n } }, viewQuery: function DateRangePopupComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c15, true, ViewContainerRef);\n ɵngcc0.ɵɵviewQuery(_c79, true);\n ɵngcc0.ɵɵviewQuery(MultiViewCalendarComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.defaultTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewCalendar = _t);\n } }, inputs: { animate: \"animate\", collision: \"collision\", anchor: \"anchor\", anchorAlign: \"anchorAlign\", appendTo: \"appendTo\", popupAlign: \"popupAlign\", margin: \"margin\" }, outputs: { open: \"open\", close: \"close\", onBlur: \"blur\", onFocus: \"focus\", cancel: \"cancel\" }, exportAs: [\"kendo-daterange-popup\"], decls: 4, vars: 0, consts: [[\"container\", \"\"], [\"defaultTemplate\", \"\"], [\"kendoDateRangeSelection\", \"\"]], template: function DateRangePopupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, null, 0);\n ɵngcc0.ɵɵtemplate(2, DateRangePopupComponent_ng_template_2_Template, 1, 0, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } }, directives: function () { return [MultiViewCalendarComponent,\n DateRangeSelectionDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nDateRangePopupComponent.ctorParameters = () => [\n { type: PopupService },\n { type: DateRangeService },\n { type: NgZone },\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [RTL,] }] }\n];\nDateRangePopupComponent.propDecorators = {\n container: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }],\n defaultTemplate: [{ type: ViewChild, args: ['defaultTemplate',] }],\n contentTemplate: [{ type: ContentChild, args: [DateRangePopupTemplateDirective,] }],\n viewCalendar: [{ type: ViewChildren, args: [MultiViewCalendarComponent,] }],\n contentCalendar: [{ type: ContentChildren, args: [MultiViewCalendarComponent,] }],\n animate: [{ type: Input }],\n anchor: [{ type: Input }],\n anchorAlign: [{ type: Input }],\n appendTo: [{ type: Input }],\n collision: [{ type: Input }],\n popupAlign: [{ type: Input }],\n margin: [{ type: Input }],\n open: [{ type: Output }],\n close: [{ type: Output }],\n onBlur: [{ type: Output, args: ['blur',] }],\n onFocus: [{ type: Output, args: ['focus',] }],\n cancel: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangePopupComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendo-daterange-popup',\n selector: 'kendo-daterange-popup',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc5.PopupService }, { type: DateRangeService }, { type: ɵngcc0.NgZone }, { type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [RTL]\n }] }]; }, { animate: [{\n type: Input\n }], collision: [{\n type: Input\n }], open: [{\n type: Output\n }], close: [{\n type: Output\n }], onBlur: [{\n type: Output,\n args: ['blur']\n }], onFocus: [{\n type: Output,\n args: ['focus']\n }], cancel: [{\n type: Output\n }], container: [{\n type: ViewChild,\n args: ['container', { read: ViewContainerRef }]\n }], defaultTemplate: [{\n type: ViewChild,\n args: ['defaultTemplate']\n }], contentTemplate: [{\n type: ContentChild,\n args: [DateRangePopupTemplateDirective]\n }], viewCalendar: [{\n type: ViewChildren,\n args: [MultiViewCalendarComponent]\n }], contentCalendar: [{\n type: ContentChildren,\n args: [MultiViewCalendarComponent]\n }], anchor: [{\n type: Input\n }], anchorAlign: [{\n type: Input\n }], appendTo: [{\n type: Input\n }], popupAlign: [{\n type: Input\n }], margin: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the Kendo UI DateRange component for Angular.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public dateRange: any = { start: null, end: null };\n * }\n * ```\n */\nclass DateRangeComponent {\n constructor() {\n /**\n * @hidden\n */\n this.showDefault = false;\n }\n get hasContentPopup() {\n return this.contentPopup.length > 0;\n }\n ngAfterContentInit() {\n this.showDefault = !this.hasContentPopup;\n this.subscription = this.contentPopup.changes.subscribe(() => {\n this.showDefault = !this.hasContentPopup;\n });\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n}\nDateRangeComponent.ɵfac = function DateRangeComponent_Factory(t) { return new (t || DateRangeComponent)(); };\nDateRangeComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateRangeComponent, selectors: [[\"kendo-daterange\"]], contentQueries: function DateRangeComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DateRangePopupComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentPopup = _t);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([DateRangeService])], ngContentSelectors: _c0, decls: 2, vars: 1, consts: [[4, \"ngIf\"]], template: function DateRangeComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵtemplate(1, DateRangeComponent_kendo_daterange_popup_1_Template, 1, 0, \"kendo-daterange-popup\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showDefault);\n } }, directives: [ɵngcc2.NgIf, DateRangePopupComponent], encapsulation: 2 });\nDateRangeComponent.propDecorators = {\n contentPopup: [{ type: ContentChildren, args: [DateRangePopupComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeComponent, [{\n type: Component,\n args: [{\n providers: [DateRangeService],\n selector: 'kendo-daterange',\n template: `\n \n \n `\n }]\n }], function () { return []; }, { contentPopup: [{\n type: ContentChildren,\n args: [DateRangePopupComponent]\n }] }); })();\n\n/**\n * @hidden\n */\nclass DateRangeInput {\n constructor(activeRangeEnd, dateRangeService, input, element, renderer, zone) {\n this.activeRangeEnd = activeRangeEnd;\n this.dateRangeService = dateRangeService;\n this.input = input;\n this.element = element;\n this.renderer = renderer;\n this.zone = zone;\n this.navigateCalendarOnFocus = false;\n this.popupSubscriptions = new Subscription(() => { });\n this.subscriptions = new Subscription(() => { });\n }\n get isActiveEnd() {\n return this.dateRangeService.activeRangeEnd === this.activeRangeEnd;\n }\n get popupCalendarActivated() {\n const popup = this.dateRangeService.dateRangePopup$.value;\n return isPresent(popup) && isPresent(popup.calendar);\n }\n init() {\n if (this.input.value) {\n this.dateRangeService.setRange(this.getRange(this.input.value));\n }\n [\n this.input.onBlur.subscribe(() => this.deactivate()),\n this.input.onFocus.pipe(filter(() => !this.popupCalendarActivated)).subscribe(() => this.activate()),\n this.input.valueUpdate.subscribe(value => this.updateRange(value, 'change')),\n this.dateRangeService.activeRangeEnd$.subscribe(() => {\n if (this.navigateCalendarOnFocus) {\n this.focusActiveDate();\n }\n this.toggleActiveClass(this.isActiveEnd);\n }),\n this.dateRangeService.dateRangePopup$.subscribe(popup => this.initPopup(popup)),\n this.dateRangeService.range$.subscribe(range => this.updateInputValue(range)),\n fromEvent(this.element.nativeElement, 'click').subscribe(() => this.activate()),\n fromEvent(this.element.nativeElement, 'keydown').subscribe((event) => this.togglePopup(event || {}))\n ].map(s => this.subscriptions.add(s));\n }\n destroy() {\n this.subscriptions.unsubscribe();\n this.unsubscribePopup();\n }\n initPopup(popup) {\n if (!popup) {\n this.unsubscribePopup();\n return;\n }\n if (!popup.anchor) {\n popup.anchor = this.element.nativeElement;\n }\n [\n popup.cancel.subscribe(() => this.isActiveEnd && this.input.focus()),\n popup.onFocus.subscribe(() => this.toggleActiveClass(this.isActiveEnd)),\n popup.onBlur.subscribe(() => this.deactivate())\n ].map(s => this.popupSubscriptions.add(s));\n }\n unsubscribePopup() {\n this.popupSubscriptions.unsubscribe();\n this.popupSubscriptions = new Subscription(() => { });\n }\n activate() {\n this.dateRangeService.setActiveRangeEnd(this.activeRangeEnd);\n this.dateRangeService.activatePopup();\n }\n deactivate() {\n this.zone.runOutsideAngular(() => {\n setTimeout(() => {\n this.updateRange(this.input.value, 'blur');\n if (this.dateRangeService.hasActiveComponent()) {\n return;\n }\n this.toggleActiveClass(false);\n this.zone.run(() => this.dateRangeService.deactivatePopup());\n });\n });\n }\n updateRange(value, correctOn) {\n const range = this.getRange(value, correctOn);\n if (range) {\n this.focusActiveDate();\n this.dateRangeService.setRange(range);\n }\n }\n togglePopup({ altKey, keyCode }) {\n if (keyCode === Keys.Escape) {\n this.dateRangeService.cancelPopup();\n }\n else if (altKey && keyCode === Keys.ArrowDown) {\n this.dateRangeService.activatePopup();\n }\n }\n focusActiveDate() {\n if (this.input.value && this.isActiveEnd) {\n this.dateRangeService.setFocusedDate(cloneDate(this.input.value));\n }\n }\n toggleActiveClass(show) {\n const action = show ? 'addClass' : 'removeClass';\n const nativeElement = this.element.nativeElement;\n if (nativeElement && nativeElement.querySelector) {\n this.renderer[action](nativeElement.querySelector('.k-dateinput-wrap'), 'k-state-focused');\n }\n }\n}\n\n/**\n * A directive which manages the end range selection.\n *\n * > You can use the DateRangeEndInputDirective only with a DateInput component.\n */\nclass DateRangeEndInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('end', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus. When enabled,\n * the calendar navigates to the value of the focused input. Otherwise, the calendar displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
Toggle input focus to see the calendar navigating between range ends.
\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerEndInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { start } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && isPresent(value) && value < start;\n return shouldClamp ? clampRange(value) : { start, end: cloneDate(value) };\n }\n updateInputValue(range$$1) {\n const { end } = range$$1 || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, end) || !isInRange(end, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(end));\n this.dateInput.notify();\n }\n}\nDateRangeEndInputDirective.ɵfac = function DateRangeEndInputDirective_Factory(t) { return new (t || DateRangeEndInputDirective)(ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(DateInputComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDateRangeEndInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeEndInputDirective, selectors: [[\"\", \"kendoDateRangeEndInput\", \"\"]], inputs: { navigateCalendarOnFocus: \"navigateCalendarOnFocus\", autoCorrectOn: \"autoCorrectOn\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateRangeEndInputDirective.ctorParameters = () => [\n { type: DateRangeService },\n { type: DateInputComponent },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nDateRangeEndInputDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n navigateCalendarOnFocus: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeEndInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeEndInput]'\n }]\n }], function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { navigateCalendarOnFocus: [{\n type: Input\n }], autoCorrectOn: [{\n type: Input\n }] }); })();\n\n/**\n * A directive which manages the start selection range.\n *\n * > You can use the DateRangeStartInputDirective only with a DateInput component.\n */\nclass DateRangeStartInputDirective extends DateRangeInput {\n constructor(rangeService, dateInput, element, renderer, zone) {\n super('start', rangeService, dateInput, element, renderer, zone);\n this.rangeService = rangeService;\n this.dateInput = dateInput;\n /**\n * Specifies the navigation behavior of the calendar when the active end is changed on input focus.\n * When enabled, the calendar navigates to the value of the focused input. Otherwise, the calendar\n * displays the last picked date.\n *\n * By default, the automatic navigation behavior on input focus is disabled.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
Toggle input focus to see the calendar navigating between range ends.
\n * \n * \n * \n * \n * `\n * })\n * export class AppComponent {\n * public start: Date = new Date(2018, 3, 10);\n * public end: Date = new Date(2018, 10, 20);\n * }\n * ```\n */\n this.navigateCalendarOnFocus = false;\n }\n ngOnInit() {\n this.rangeService.registerStartInput(this.dateInput);\n super.init();\n }\n ngOnDestroy() {\n super.destroy();\n }\n getRange(value, correctOn) {\n const { min, max } = this.dateInput;\n if (!isInRange(value, min, max)) {\n return null;\n }\n const { end } = this.rangeService.selectionRange || EMPTY_SELECTIONRANGE;\n const shouldClamp = this.autoCorrectOn === correctOn && end && value > end;\n return shouldClamp ? clampRange(value) : { start: cloneDate(value), end };\n }\n updateInputValue(range$$1) {\n const { start } = range$$1 || EMPTY_SELECTIONRANGE;\n const { min, max } = this.dateInput;\n if (isEqual(this.dateInput.value, start) || !isInRange(start, min, max)) {\n return;\n }\n this.dateInput.writeValue(cloneDate(start));\n this.dateInput.notify();\n }\n}\nDateRangeStartInputDirective.ɵfac = function DateRangeStartInputDirective_Factory(t) { return new (t || DateRangeStartInputDirective)(ɵngcc0.ɵɵdirectiveInject(DateRangeService), ɵngcc0.ɵɵdirectiveInject(DateInputComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nDateRangeStartInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeStartInputDirective, selectors: [[\"\", \"kendoDateRangeStartInput\", \"\"]], inputs: { navigateCalendarOnFocus: \"navigateCalendarOnFocus\", autoCorrectOn: \"autoCorrectOn\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateRangeStartInputDirective.ctorParameters = () => [\n { type: DateRangeService },\n { type: DateInputComponent },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nDateRangeStartInputDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n navigateCalendarOnFocus: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeStartInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeStartInput]'\n }]\n }], function () { return [{ type: DateRangeService }, { type: DateInputComponent }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { navigateCalendarOnFocus: [{\n type: Input\n }], autoCorrectOn: [{\n type: Input\n }] }); })();\n\n/**\n * A directive which manages the MultiViewCalendar range selection.\n */\nclass DateRangeSelectionDirective {\n constructor(calendar, cdr, element, renderer, dateRangeService) {\n this.calendar = calendar;\n this.cdr = cdr;\n this.element = element;\n this.dateRangeService = dateRangeService;\n /**\n * Specifies the auto-correction behavior. If the start date is greater than the end date,\n * the directive fixes the date range to a single date either on input change or on blur\n * ([see example]({% slug autocorrect_daterange %}#toc-configuring-the-calendar-selection-directive)).\n *\n * By default, the auto-correction is triggered on change.\n * To disable this behavior, set the `autoCorrectOn` property to `none`.\n */\n this.autoCorrectOn = 'change';\n /**\n * Fires when the active range end is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.activeRangeEndChange = new EventEmitter();\n /**\n * Fires when the selection range is changed. For more information, refer to\n * the section on [events]({% slug overview_multiviewcalendar %}#toc-events).\n */\n this.selectionRangeChange = new EventEmitter();\n this.calendarSubscriptions = new Subscription(() => { });\n this.dateRangeService = this.dateRangeService || new DateRangeService();\n renderer.setAttribute(element.nativeElement, 'aria-multiselectable', 'true');\n }\n /**\n * Gets or sets the selection range of the calendar. When a new range is set,\n * the connected DateRangeService notifies all related parties.\n */\n get selectionRange() {\n return this.calendar ? this.calendar.selectionRange : null;\n }\n set selectionRange(range$$1) {\n if (!this.isEqualCalendarRange(range$$1)) {\n this.setSelectionRange(range$$1);\n }\n if (!isEqualRange(this.dateRangeService.selectionRange, range$$1)) {\n this.dateRangeService.setRange(range$$1);\n }\n this.updateFocusedDate(range$$1);\n }\n /**\n * Gets or sets the active end of the selection range. This option determines which range end will be updated on\n * user interaction. When a new active end is set, the connected DateRangeService notifies all related parties.\n */\n /**\n * Specifies which end of the selection range will be marked as active. The active end gets modified upon user\n * interaction. When a new active end is set, the wired DateRangeService notifies all related components. For\n * example, the start and end DateInput components.\n *\n * > If the selection range is undefined, the value is ignored.\n */\n get activeRangeEnd() {\n return this.calendar.activeRangeEnd;\n }\n set activeRangeEnd(activeRange) {\n if (this.dateRangeService.activeRangeEnd === activeRange) {\n return;\n }\n this.calendar.activeRangeEnd = activeRange;\n this.dateRangeService.setActiveRangeEnd(activeRange);\n }\n get calendarRange() {\n return this.selectionRange || EMPTY_SELECTIONRANGE;\n }\n ngOnInit() {\n const calendar = this.calendar;\n const dateRangeService = this.dateRangeService;\n calendar.min = either(dateRangeService.min, calendar.min);\n calendar.max = either(dateRangeService.max, calendar.max);\n this.addSubscriptions(calendar.cellEnter.subscribe((value) => this.handleHover(value)), calendar.valueChange.subscribe((value) => this.handleChange(value)), dateRangeService.focusedDate$.subscribe(focusedDate => {\n if (!isEqual(calendar.focusedDate, focusedDate)) {\n calendar.focusedDate = focusedDate;\n }\n }), dateRangeService.activeRangeEnd$.subscribe(rangeEnd => {\n if (calendar.activeRangeEnd === rangeEnd) {\n return;\n }\n calendar.activeRangeEnd = rangeEnd;\n this.activeRangeEndChange.emit(rangeEnd);\n this.cdr.markForCheck();\n }), dateRangeService.range$.subscribe(range$$1 => {\n if (!this.isEqualCalendarRange(range$$1)) {\n this.acceptAndEmit(range$$1);\n }\n this.updateFocusedDate(range$$1);\n }), fromEvent(this.element.nativeElement, 'blur').subscribe(() => this.handleBlur()));\n }\n ngOnDestroy() {\n this.calendarSubscriptions.unsubscribe();\n }\n addSubscriptions(...subscriptions) {\n subscriptions.map(s => this.calendarSubscriptions.add(s));\n }\n isEqualCalendarRange(range$$1) {\n return isEqualRange(this.calendar.selectionRange, range$$1);\n }\n handleBlur() {\n const { start, end } = this.calendarRange;\n const autoCorrect = this.autoCorrectOn === 'blur' && start !== null && end !== null && end < start;\n if (autoCorrect) {\n this.dateRangeService.setRange(clampRange(start));\n }\n }\n handleChange(value) {\n const service = this.dateRangeService;\n const autoCorrect = this.autoCorrectOn === 'change' && this.shouldAutoCorrect(value);\n const activeEnd = this.calendar.activeRangeEnd !== 'end' ? 'end' : (autoCorrect ? 'end' : 'start');\n const range$$1 = autoCorrect ? clampRange(value) : this.updateRange(value);\n if (!isEqualRange(service.selectionRange, range$$1)) {\n this.acceptAndEmit(range$$1);\n service.setActiveRangeEnd(activeEnd);\n service.setRange(range$$1);\n }\n }\n handleHover(value) {\n if (this.hasCompleteRange()) {\n return;\n }\n const { start, end } = this.calendarRange;\n const activeRangeEnd = this.calendar.activeRangeEnd;\n const updateRange = (start && activeRangeEnd === 'end') || (end && activeRangeEnd === 'start');\n if (updateRange) {\n this.setSelectionRange(this.updateRange(value));\n }\n }\n hasCompleteRange() {\n const { start, end } = this.dateRangeService.selectionRange || EMPTY_SELECTIONRANGE;\n return Boolean(start) && Boolean(end);\n }\n shouldAutoCorrect(value) {\n const { end, start } = this.calendarRange;\n if (this.calendar.activeRangeEnd !== 'end') {\n return end !== null && value > end;\n }\n else {\n return start !== null && value < start;\n }\n }\n updateFocusedDate(range$$1) {\n if (!range$$1 || this.dateRangeService.focusedDate) {\n return;\n }\n this.dateRangeService.setFocusedDate(range$$1.start || range$$1.end);\n }\n updateRange(value) {\n const { end, start } = this.calendarRange;\n return this.calendar.activeRangeEnd !== 'end' ? ({ start: value, end }) : ({ start, end: value });\n }\n setSelectionRange(range$$1) {\n this.calendar.selectionRange = range$$1;\n this.calendar.writeValue(null);\n }\n acceptAndEmit(range$$1) {\n this.setSelectionRange(range$$1);\n this.selectionRangeChange.emit(range$$1);\n }\n}\nDateRangeSelectionDirective.ɵfac = function DateRangeSelectionDirective_Factory(t) { return new (t || DateRangeSelectionDirective)(ɵngcc0.ɵɵdirectiveInject(MultiViewCalendarComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DateRangeService, 8)); };\nDateRangeSelectionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateRangeSelectionDirective, selectors: [[\"\", \"kendoDateRangeSelection\", \"\"]], inputs: { autoCorrectOn: \"autoCorrectOn\", selectionRange: \"selectionRange\", activeRangeEnd: \"activeRangeEnd\" }, outputs: { activeRangeEndChange: \"activeRangeEndChange\", selectionRangeChange: \"selectionRangeChange\" } });\n/** @nocollapse */\nDateRangeSelectionDirective.ctorParameters = () => [\n { type: MultiViewCalendarComponent },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: Renderer2 },\n { type: DateRangeService, decorators: [{ type: Optional }] }\n];\nDateRangeSelectionDirective.propDecorators = {\n autoCorrectOn: [{ type: Input }],\n selectionRange: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n activeRangeEndChange: [{ type: Output }],\n selectionRangeChange: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeSelectionDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDateRangeSelection]'\n }]\n }], function () { return [{ type: MultiViewCalendarComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: DateRangeService, decorators: [{\n type: Optional\n }] }]; }, { autoCorrectOn: [{\n type: Input\n }], activeRangeEndChange: [{\n type: Output\n }], selectionRangeChange: [{\n type: Output\n }], selectionRange: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:directive-class-suffix directive-selector */\n/**\n * @hidden\n */\nclass KForOfContext {\n constructor($implicit, kForOf, index, count) {\n this.$implicit = $implicit;\n this.kForOf = kForOf;\n this.index = index;\n this.count = count;\n }\n get first() { return this.index === 0; }\n get last() { return this.index === this.count - 1; }\n get even() { return this.index % 2 === 0; }\n get odd() { return !this.even; }\n}\n/**\n * @hidden\n */\nclass KForOf {\n constructor(_viewContainer, _template, _differs) {\n this._viewContainer = _viewContainer;\n this._template = _template;\n this._differs = _differs;\n this._differ = null;\n }\n set kForTemplate(value) {\n if (value) {\n this._template = value;\n }\n }\n ngOnChanges(changes) {\n if ('kForOf' in changes) {\n const value = changes.kForOf.currentValue;\n if (this._differ || !value) {\n return;\n }\n try {\n this._differ = this._differs.find(value).create(this.kForTrackBy);\n }\n catch (e) {\n throw new Error(`Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'.`);\n }\n }\n }\n ngDoCheck() {\n if (this._differ) {\n const changes = this._differ.diff(this.kForOf);\n if (changes) {\n this._applyChanges(changes);\n }\n }\n }\n _applyChanges(changes) {\n if (!isDocumentAvailable()) {\n return;\n }\n const viewContainerLength = this._viewContainer.length;\n const dataLength = this.kForOf.length;\n const tuples = {};\n changes.forEachOperation((record, _, currentIndex) => {\n if (currentIndex !== null) {\n tuples[currentIndex] = record.item;\n }\n });\n for (let i = viewContainerLength; i < dataLength; i++) {\n this._viewContainer.createEmbeddedView(this._template, new KForOfContext(null, this.kForOf, -1, -1), i);\n }\n for (let i = this._viewContainer.length; i > dataLength; i--) {\n this._viewContainer.remove(i - 1);\n }\n for (let i = 0; i < this._viewContainer.length; i++) {\n const view = this._viewContainer.get(i);\n view.context.index = i;\n view.context.count = length;\n view.context.$implicit = tuples[i] || null;\n }\n }\n}\nKForOf.ɵfac = function KForOf_Factory(t) { return new (t || KForOf)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.IterableDiffers)); };\nKForOf.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: KForOf, selectors: [[\"\", \"kFor\", \"\", \"kForOf\", \"\"]], inputs: { kForTemplate: \"kForTemplate\", kForOf: \"kForOf\", kForTrackBy: \"kForTrackBy\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nKForOf.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: TemplateRef },\n { type: IterableDiffers }\n];\nKForOf.propDecorators = {\n kForOf: [{ type: Input }],\n kForTrackBy: [{ type: Input }],\n kForTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(KForOf, [{\n type: Directive,\n args: [{ selector: '[kFor][kForOf]' }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.TemplateRef }, { type: ɵngcc0.IterableDiffers }]; }, { kForTemplate: [{\n type: Input\n }], kForOf: [{\n type: Input\n }], kForTrackBy: [{\n type: Input\n }] }); })();\n/**\n * @hidden\n */\nfunction getTypeNameForDebugging(type) {\n return type.name || typeof type;\n}\n\n/**\n * @hidden\n */\nclass HeaderComponent {\n constructor(bus, cdr, localization, intl, disabledDatesService) {\n this.bus = bus;\n this.cdr = cdr;\n this.localization = localization;\n this.intl = intl;\n this.disabledDatesService = disabledDatesService;\n this.navigate = true;\n this.todayAvailable = true;\n this.min = new Date(MIN_DATE);\n this.max = new Date(MAX_DATE);\n this.rangeLength = 1;\n this.today = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n get getComponentClass() {\n return true;\n }\n ngOnInit() {\n this.subscriptions\n .add(this.intl.changes.subscribe(this.intlChange.bind(this)))\n .add(this.localization.changes.subscribe(this.l10nChange.bind(this)))\n .add(this.disabledDatesService.changes.subscribe(this.setTodayAvailability.bind(this)));\n }\n ngOnChanges(_) {\n const service = this.bus.service(this.activeView);\n if (!service) {\n return;\n }\n this.activeViewValue = CalendarViewEnum[this.activeView];\n this.todayMessage = this.localization.get('today');\n this.setTodayAvailability();\n this.navigate = this.bus.canMoveUp(this.activeView);\n this.title = this.getTitle();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n handleTodayClick() {\n if (!this.todayAvailable) {\n return;\n }\n this.bus.moveToBottom(this.activeView);\n this.today.emit(dateInRange(getToday(), this.min, this.max));\n }\n handleNavigation() {\n if (!this.navigate) {\n return;\n }\n this.bus.moveUp(this.activeView);\n }\n intlChange() {\n if (this.currentDate && this.bus.service(this.activeView)) {\n this.title = this.getTitle();\n this.cdr.markForCheck();\n }\n }\n l10nChange() {\n this.todayMessage = this.localization.get('today');\n this.cdr.markForCheck();\n }\n getTitle() {\n if (!this.currentDate) {\n return '';\n }\n const service = this.bus.service(this.activeView);\n const take = this.rangeLength - 1;\n const title = service.title(this.currentDate);\n const nextDate = service.addToDate(this.currentDate, take);\n if (take < 1 || !service.isInRange(nextDate, this.min, this.max)) {\n return title;\n }\n return `${title} - ${service.title(nextDate)}`;\n }\n setTodayAvailability() {\n const today = getToday();\n const isTodayInRange = isInRange(today, getDate(this.min), getDate(this.max));\n const isDisabled = this.disabledDatesService.isDateDisabled(today);\n this.todayAvailable = isTodayInRange && !isDisabled;\n this.cdr.markForCheck();\n }\n}\nHeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HeaderComponent, selectors: [[\"kendo-calendar-header\"]], hostVars: 2, hostBindings: function HeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-calendar-header\", ctx.getComponentClass);\n } }, inputs: { min: \"min\", max: \"max\", rangeLength: \"rangeLength\", activeView: \"activeView\", currentDate: \"currentDate\", templateRef: \"templateRef\" }, outputs: { today: \"today\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 5, vars: 21, consts: [[1, \"k-button\", \"k-bare\", \"k-title\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [3, \"ngIf\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"k-today\", 3, \"kendoEventsOutsideAngular\", \"scope\"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_1_Template, 1, 1, \"ng-template\", 1);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_2_Template, 0, 0, \"ng-template\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"span\", 3);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", !ctx.navigate);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(13, _c3, ctx.handleNavigation))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.templateRef)(\"ngTemplateOutlet\", ctx.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(15, _c2, ctx.title, ctx.activeViewValue, ctx.currentDate));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", !ctx.todayAvailable);\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(19, _c3, ctx.handleTodayClick))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.todayMessage, \" \");\n } }, directives: [ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgIf, ɵngcc2.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nHeaderComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: ChangeDetectorRef },\n { type: LocalizationService },\n { type: IntlService },\n { type: DisabledDatesService }\n];\nHeaderComponent.propDecorators = {\n activeView: [{ type: Input }],\n currentDate: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n rangeLength: [{ type: Input }],\n templateRef: [{ type: Input }],\n today: [{ type: Output }],\n getComponentClass: [{ type: HostBinding, args: [\"class.k-calendar-header\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-calendar-header',\n template: `\n \n {{title}}\n
\n \n \n {{todayMessage}}\n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc4.LocalizationService }, { type: ɵngcc1.IntlService }, { type: DisabledDatesService }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], rangeLength: [{\n type: Input\n }], today: [{\n type: Output\n }], getComponentClass: [{\n type: HostBinding,\n args: [\"class.k-calendar-header\"]\n }], activeView: [{\n type: Input\n }], currentDate: [{\n type: Input\n }], templateRef: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass WeekNamesService {\n constructor(intl) {\n this.intl = intl;\n }\n getWeekNames(includeWeekNumber = false) {\n const weekNames = shiftWeekNames(this.intl.dateFormatNames({ nameType: 'short', type: 'days' }), this.intl.firstDay());\n return includeWeekNumber ? [''].concat(weekNames) : weekNames;\n }\n}\nWeekNamesService.ɵfac = function WeekNamesService_Factory(t) { return new (t || WeekNamesService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nWeekNamesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: WeekNamesService, factory: WeekNamesService.ɵfac });\n/** @nocollapse */\nWeekNamesService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(WeekNamesService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ViewComponent {\n constructor(bus, intl, cdr, weekService, element, zone, renderer, disabledDatesService) {\n this.bus = bus;\n this.intl = intl;\n this.cdr = cdr;\n this.weekService = weekService;\n this.element = element;\n this.zone = zone;\n this.renderer = renderer;\n this.disabledDatesService = disabledDatesService;\n this.direction = 'vertical';\n this.isActive = true;\n this.change = new EventEmitter();\n this.cellEnter = new EventEmitter();\n this.cellLeave = new EventEmitter();\n this.weekNames = [];\n this.colSpan = 0;\n this.subscriptions = new Subscription();\n this.domEvents = [];\n this.subscriptions\n .add(this.intl.changes.subscribe(this.intlChange.bind(this)))\n .add(this.disabledDatesService.changes.subscribe(this.disabledDatesChange.bind(this)));\n }\n get weekNumber() {\n return this.showWeekNumbers && this.activeView === CalendarViewEnum.month;\n }\n set weekNumber(showWeekNumbers) {\n this.showWeekNumbers = showWeekNumbers;\n }\n ngOnInit() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnChanges(changes) {\n this.service = this.bus.service(this.activeView);\n if (!this.service) {\n return;\n }\n const generateWeekNames = this.isHorizontal() && this.weekNames.length === 0;\n if (generateWeekNames && (changes.weekNumber || changes.direction)) {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n }\n this.colSpan = this.service.rowLength(this.weekNumber);\n this.title = this.service.title(this.viewDate);\n this.updateData();\n if (changes.activeView) {\n this.currentCellIndex = null;\n }\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.domEvents.forEach(unsubscribeCallback => unsubscribeCallback());\n }\n isHorizontal() {\n return this.direction === 'horizontal';\n }\n isMonthView() {\n return this.activeView === CalendarViewEnum.month;\n }\n firstDate(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n return ctx ? ctx.value : null;\n }\n getWeekNumber(date) {\n if (!this.weekNumber) {\n return null;\n }\n return weekInYear(date, this.intl.firstDay());\n }\n getWeekNumberContext(rowCtx) {\n const ctx = this.firstWeekDateContext(rowCtx);\n if (!this.weekNumber || !ctx) {\n return null;\n }\n const weekNumber = weekInYear(ctx.value, this.intl.firstDay()).toString();\n return {\n formattedValue: weekNumber,\n id: null,\n isFocused: false,\n isSelected: false,\n isWeekend: false,\n title: weekNumber,\n value: cloneDate(ctx.value)\n };\n }\n getStyles(context) {\n const { isRangeEnd, isRangeStart } = context;\n const isEndActive = this.activeRangeEnd === 'end' && isRangeEnd;\n const isStartActive = this.activeRangeEnd === 'start' && isRangeStart;\n return stringifyClassObject({\n 'k-range-end': isRangeEnd,\n 'k-range-mid': context.isRangeMid,\n 'k-range-split-end': context.isRangeSplitEnd,\n 'k-range-split-start': context.isRangeSplitStart,\n 'k-range-start': isRangeStart,\n 'k-state-active': isStartActive || isEndActive,\n 'k-state-focused': this.isActive && context.isFocused,\n 'k-state-selected': context.isSelected || isRangeStart || isRangeEnd,\n 'k-today': context.isToday,\n 'k-weekend': context.isWeekend,\n 'k-state-disabled': context.isDisabled\n });\n }\n tableCellIndex(rowIndex, cellIndex) {\n return `${rowIndex}:${cellIndex}`;\n }\n firstWeekDateContext(rowCtx) {\n if (!this.weekNumber) {\n return null;\n }\n let idx = 0;\n let ctx = rowCtx[idx];\n while (!ctx && idx < rowCtx.length) {\n ctx = rowCtx[++idx];\n }\n return ctx;\n }\n updateData() {\n const time = this.selectedDate || getToday();\n const viewDate = setTime(this.viewDate, time);\n this.data = this.service.data({\n cellUID: this.cellUID,\n focusedDate: this.focusedDate,\n isActiveView: !this.bus.canMoveDown(this.activeView),\n max: this.max,\n min: this.min,\n selectedDate: this.selectedDate,\n selectionRange: this.selectionRange,\n viewDate: viewDate,\n isDateDisabled: this.disabledDatesService.isDateDisabled\n });\n }\n intlChange() {\n this.updateData();\n if (this.isHorizontal()) {\n this.weekNames = this.weekService.getWeekNames(this.weekNumber);\n }\n this.cdr.markForCheck();\n }\n disabledDatesChange() {\n this.updateData();\n this.cdr.markForCheck();\n }\n bindEvents() {\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', this.cellMouseoverHandler.bind(this)), this.renderer.listen(element, 'mouseleave', this.mouseLeaveHandler.bind(this)), this.renderer.listen(element, 'click', this.clickHandler.bind(this)));\n }\n clickHandler(args) {\n const cell = this.closestCell(args);\n if (cell) {\n const index = cell.getAttribute('data-cell-index');\n const cellContext = this.cellByIndex(index);\n if (!cellContext.isDisabled) {\n this.change.emit(cellContext.value);\n }\n }\n }\n mouseLeaveHandler() {\n if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n cellMouseoverHandler(args) {\n const cell = this.closestCell(args);\n if (cell) {\n const index = cell.getAttribute('data-cell-index');\n if (this.currentCellIndex && this.currentCellIndex !== index) {\n this.emitCellLeave();\n }\n const value = this.cellByIndex(index).value;\n this.cellEnter.emit(value);\n this.currentCellIndex = index;\n }\n else if (this.currentCellIndex) {\n this.emitCellLeave();\n }\n }\n closestCell(eventArgs) {\n return closestInScope(eventArgs.target, node => node.hasAttribute('data-cell-index'), this.element.nativeElement);\n }\n emitCellLeave() {\n const item = this.cellByIndex(this.currentCellIndex);\n if (item) {\n this.cellLeave.emit(item.value);\n }\n this.currentCellIndex = null;\n }\n cellByIndex(index) {\n const [rowIndex, cellIndex] = index.split(':');\n return this.data[rowIndex][cellIndex];\n }\n}\nViewComponent.ɵfac = function ViewComponent_Factory(t) { return new (t || ViewComponent)(ɵngcc0.ɵɵdirectiveInject(BusViewService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(WeekNamesService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(DisabledDatesService)); };\nViewComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ViewComponent, selectors: [[\"\", \"kendoCalendarView\", \"\"]], inputs: { direction: \"direction\", isActive: \"isActive\", weekNumber: \"weekNumber\", activeView: \"activeView\", cellUID: \"cellUID\", focusedDate: \"focusedDate\", selectedDate: \"selectedDate\", viewDate: \"viewDate\", activeRangeEnd: \"activeRangeEnd\", selectionRange: \"selectionRange\", min: \"min\", max: \"max\", viewIndex: \"viewIndex\", templateRef: \"templateRef\", weekNumberTemplateRef: \"weekNumberTemplateRef\" }, outputs: { change: \"change\", cellEnter: \"cellEnter\", cellLeave: \"cellLeave\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c80, decls: 5, vars: 3, consts: [[\"emptyCell\", \"\"], [\"role\", \"row\", 4, \"ngIf\"], [\"role\", \"row\", 4, \"kFor\", \"kForOf\"], [1, \"k-empty\"], [\"role\", \"row\"], [\"scope\", \"col\", 3, \"colSpan\"], [4, \"ngFor\", \"ngForOf\"], [3, \"ngIf\"], [4, \"kFor\", \"kForOf\"], [\"class\", \"k-alt\", 4, \"ngIf\", \"ngIfElse\"], [1, \"k-alt\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"role\", \"gridcell\", 3, \"ngClass\", \"title\", 4, \"ngIf\", \"ngIfElse\"], [\"role\", \"gridcell\", 3, \"ngClass\", \"title\"], [1, \"k-link\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function ViewComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ViewComponent_ng_template_0_Template, 2, 0, \"ng-template\", null, 0, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(2, ViewComponent_tr_2_Template, 3, 2, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(3, ViewComponent_tr_3_Template, 2, 1, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(4, ViewComponent_tr_4_Template, 3, 2, \"tr\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.isHorizontal());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isMonthView() && ctx.isHorizontal());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kForOf\", ctx.data);\n } }, directives: [ɵngcc2.NgIf, KForOf, ɵngcc2.NgForOf, ɵngcc2.NgTemplateOutlet, ɵngcc2.NgClass], encapsulation: 2 });\n/** @nocollapse */\nViewComponent.ctorParameters = () => [\n { type: BusViewService },\n { type: IntlService },\n { type: ChangeDetectorRef },\n { type: WeekNamesService },\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 },\n { type: DisabledDatesService }\n];\nViewComponent.propDecorators = {\n direction: [{ type: Input }],\n isActive: [{ type: Input }],\n activeView: [{ type: Input }],\n cellUID: [{ type: Input }],\n focusedDate: [{ type: Input }],\n selectedDate: [{ type: Input }],\n viewDate: [{ type: Input }],\n activeRangeEnd: [{ type: Input }],\n selectionRange: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n weekNumber: [{ type: Input }],\n viewIndex: [{ type: Input }],\n templateRef: [{ type: Input }],\n weekNumberTemplateRef: [{ type: Input }],\n change: [{ type: Output }],\n cellEnter: [{ type: Output }],\n cellLeave: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ViewComponent, [{\n type: Component,\n args: [{\n selector: '[kendoCalendarView]',\n template: `\n  \n {{title}}\n \n {{name}}\n \n \n \n \n \n {{getWeekNumber(firstDate(row))}}\n \n \n \n \n \n \n \n {{cell.formattedValue}}\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: BusViewService }, { type: ɵngcc1.IntlService }, { type: ɵngcc0.ChangeDetectorRef }, { type: WeekNamesService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: DisabledDatesService }]; }, { direction: [{\n type: Input\n }], isActive: [{\n type: Input\n }], change: [{\n type: Output\n }], cellEnter: [{\n type: Output\n }], cellLeave: [{\n type: Output\n }], weekNumber: [{\n type: Input\n }], activeView: [{\n type: Input\n }], cellUID: [{\n type: Input\n }], focusedDate: [{\n type: Input\n }], selectedDate: [{\n type: Input\n }], viewDate: [{\n type: Input\n }], activeRangeEnd: [{\n type: Input\n }], selectionRange: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], viewIndex: [{\n type: Input\n }], templateRef: [{\n type: Input\n }], weekNumberTemplateRef: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `HeaderComponent`—The component that renders the UI for vertical navigation.\n * - `ViewComponent`—The component that renders the active Calendar view.\n */\nclass CalendarCommonModule {\n}\nCalendarCommonModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarCommonModule });\nCalendarCommonModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarCommonModule_Factory(t) { return new (t || CalendarCommonModule)(); }, imports: [[CommonModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarCommonModule, { declarations: function () { return [KForOf,\n HeaderComponent,\n ViewComponent]; }, imports: function () { return [CommonModule, EventsModule]; }, exports: function () { return [KForOf,\n HeaderComponent,\n ViewComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarCommonModule, [{\n type: NgModule,\n args: [{\n declarations: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n exports: [\n KForOf,\n HeaderComponent,\n ViewComponent\n ],\n imports: [CommonModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n *\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n */\nclass TemplatesModule {\n}\nTemplatesModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TemplatesModule });\nTemplatesModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TemplatesModule_Factory(t) { return new (t || TemplatesModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TemplatesModule, { declarations: [CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective], exports: [CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplatesModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ],\n exports: [\n CellTemplateDirective,\n MonthCellTemplateDirective,\n YearCellTemplateDirective,\n DecadeCellTemplateDirective,\n CenturyCellTemplateDirective,\n WeekNumberCellTemplateDirective,\n HeaderTitleTemplateDirective,\n NavigationItemTemplateDirective\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass CalendarMessages extends ComponentMessages {\n}\nCalendarMessages.ɵfac = function CalendarMessages_Factory(t) { return ɵCalendarMessages_BaseFactory(t || CalendarMessages); };\nCalendarMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CalendarMessages, inputs: { today: \"today\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nCalendarMessages.propDecorators = {\n today: [{ type: Input }]\n};\nconst ɵCalendarMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(CalendarMessages);\n\n/**\n * @hidden\n */\nclass CalendarLocalizedMessagesDirective extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nCalendarLocalizedMessagesDirective.ɵfac = function CalendarLocalizedMessagesDirective_Factory(t) { return new (t || CalendarLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nCalendarLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CalendarLocalizedMessagesDirective, selectors: [[\"\", \"kendoCalendarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nCalendarLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoCalendarLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass CalendarCustomMessagesComponent extends CalendarMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCalendarCustomMessagesComponent.ɵfac = function CalendarCustomMessagesComponent_Factory(t) { return new (t || CalendarCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nCalendarCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CalendarCustomMessagesComponent, selectors: [[\"kendo-calendar-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CalendarCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCalendarCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: CalendarMessages,\n useExisting: forwardRef(() => CalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-calendar-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES = [\n VirtualizationComponent\n];\n/**\n * @hidden\n *\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Virtualization component.\n */\nclass VirtualizationModule {\n}\nVirtualizationModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: VirtualizationModule });\nVirtualizationModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function VirtualizationModule_Factory(t) { return new (t || VirtualizationModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(VirtualizationModule, { declarations: function () { return [VirtualizationComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [VirtualizationComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(VirtualizationModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES],\n exports: [COMPONENT_DIRECTIVES],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n * - `NavigationItemTemplateDirective`—The navigation item template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendar module\n * import { CalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarModule], // import Calendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarModule {\n}\nCalendarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarModule });\nCalendarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarModule_Factory(t) { return new (t || CalendarModule)(); }, providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ],\n CalendarCommonModule,\n TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarModule, { declarations: function () { return [CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent]; }, imports: function () { return [CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule]; }, exports: function () { return [CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent,\n CalendarCommonModule,\n TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarModule, [{\n type: NgModule,\n args: [{\n declarations: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent\n ],\n exports: [\n CalendarComponent,\n NavigationComponent,\n CalendarCustomMessagesComponent,\n CalendarLocalizedMessagesDirective,\n ViewListComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n VirtualizationModule,\n EventsModule,\n ResizeSensorModule\n ],\n providers: [\n CalendarDOMService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { today: \"today\", prevButtonTitle: \"prevButtonTitle\", nextButtonTitle: \"nextButtonTitle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n today: [{ type: Input }],\n prevButtonTitle: [{ type: Input }],\n nextButtonTitle: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass MultiViewCalendarLocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nMultiViewCalendarLocalizedMessagesDirective.ɵfac = function MultiViewCalendarLocalizedMessagesDirective_Factory(t) { return new (t || MultiViewCalendarLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nMultiViewCalendarLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: MultiViewCalendarLocalizedMessagesDirective, selectors: [[\"\", \"kendoMultiViewCalendarLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nMultiViewCalendarLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoMultiViewCalendarLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass MultiViewCalendarCustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nMultiViewCalendarCustomMessagesComponent.ɵfac = function MultiViewCalendarCustomMessagesComponent_Factory(t) { return new (t || MultiViewCalendarCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nMultiViewCalendarCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: MultiViewCalendarCustomMessagesComponent, selectors: [[\"kendo-multiviewcalendar-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function MultiViewCalendarCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nMultiViewCalendarCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => MultiViewCalendarCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-multiviewcalendar-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * The package exports:\n * - `CellTemplateDirective`—The month cell template directive.\n * - `MonthCellTemplateDirective`—The month cell template directive.\n * - `YearCellTemplateDirective`—The year cell template directive.\n * - `DecadeCellTemplateDirective`—The decade cell template directive.\n * - `CenturyCellTemplateDirective`—The century cell template directive.\n * - `WeekNumberCellTemplateDirective`—The month week number cell template directive.\n * - `HeaderTitleTemplateDirective`—The header title template directive.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the MultiViewCalendar module\n * import { MultiViewCalendarModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, MultiViewCalendarModule], // import MultiViewCalendar module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n */\nclass MultiViewCalendarModule {\n}\nMultiViewCalendarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: MultiViewCalendarModule });\nMultiViewCalendarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function MultiViewCalendarModule_Factory(t) { return new (t || MultiViewCalendarModule)(); }, providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ], imports: [[CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, PopupModule],\n CalendarCommonModule,\n TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(MultiViewCalendarModule, { declarations: function () { return [HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent]; }, imports: function () { return [CommonModule,\n CalendarCommonModule,\n IntlModule,\n TemplatesModule,\n PopupModule]; }, exports: function () { return [HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent,\n CalendarCommonModule,\n TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MultiViewCalendarModule, [{\n type: NgModule,\n args: [{\n declarations: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent\n ],\n exports: [\n HorizontalViewListComponent,\n MultiViewCalendarLocalizedMessagesDirective,\n MultiViewCalendarCustomMessagesComponent,\n MultiViewCalendarComponent,\n CalendarCommonModule,\n TemplatesModule\n ],\n imports: [CommonModule, CalendarCommonModule, IntlModule, TemplatesModule, PopupModule],\n providers: [\n NavigationService,\n CenturyViewService,\n DecadeViewService,\n MonthViewService,\n YearViewService,\n WeekNamesService\n ]\n }]\n }], null, null); })();\n\n/**\n * The exported package module.\n *\n * The package exports:\n * - `CalendarModule`—The calendar module.\n * - `MultiViewCalendarModule`—The multi-view calendar module.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Calendars module\n * import { CalendarsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, CalendarsModule], // import the Calendars module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass CalendarsModule {\n}\nCalendarsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CalendarsModule });\nCalendarsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CalendarsModule_Factory(t) { return new (t || CalendarsModule)(); }, imports: [[\n CalendarModule,\n MultiViewCalendarModule\n ],\n CalendarModule,\n MultiViewCalendarModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CalendarsModule, { imports: [CalendarModule,\n MultiViewCalendarModule], exports: [CalendarModule,\n MultiViewCalendarModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CalendarsModule, [{\n type: NgModule,\n args: [{\n exports: [\n CalendarModule,\n MultiViewCalendarModule\n ],\n imports: [\n CalendarModule,\n MultiViewCalendarModule\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass DateInputMessages extends ComponentMessages {\n}\nDateInputMessages.ɵfac = function DateInputMessages_Factory(t) { return ɵDateInputMessages_BaseFactory(t || DateInputMessages); };\nDateInputMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateInputMessages, inputs: { decrement: \"decrement\", increment: \"increment\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDateInputMessages.propDecorators = {\n decrement: [{ type: Input }],\n increment: [{ type: Input }]\n};\nconst ɵDateInputMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(DateInputMessages);\n\n/**\n * @hidden\n */\nclass DateInputLocalizedMessagesDirective extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDateInputLocalizedMessagesDirective.ɵfac = function DateInputLocalizedMessagesDirective_Factory(t) { return new (t || DateInputLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateInputLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateInputLocalizedMessagesDirective, selectors: [[\"\", \"kendoDateInputLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDateInputLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoDateInputLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateInputCustomMessagesComponent extends DateInputMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateInputCustomMessagesComponent.ɵfac = function DateInputCustomMessagesComponent_Factory(t) { return new (t || DateInputCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateInputCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateInputCustomMessagesComponent, selectors: [[\"kendo-dateinput-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DateInputCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDateInputCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DateInputMessages,\n useExisting: forwardRef(() => DateInputCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-dateinput-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateInput component.\n */\nclass DateInputModule {\n}\nDateInputModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateInputModule });\nDateInputModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateInputModule_Factory(t) { return new (t || DateInputModule)(); }, imports: [[CommonModule, IntlModule, EventsModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateInputModule, { declarations: function () { return [DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective]; }, imports: function () { return [CommonModule, IntlModule, EventsModule]; }, exports: function () { return [DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputModule, [{\n type: NgModule,\n args: [{\n declarations: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n exports: [\n DateInputComponent,\n DateInputCustomMessagesComponent,\n DateInputLocalizedMessagesDirective\n ],\n imports: [CommonModule, IntlModule, EventsModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass DatePickerMessages extends ComponentMessages {\n}\nDatePickerMessages.ɵfac = function DatePickerMessages_Factory(t) { return ɵDatePickerMessages_BaseFactory(t || DatePickerMessages); };\nDatePickerMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DatePickerMessages, inputs: { today: \"today\", toggle: \"toggle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDatePickerMessages.propDecorators = {\n today: [{ type: Input }],\n toggle: [{ type: Input }]\n};\nconst ɵDatePickerMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(DatePickerMessages);\n\n/**\n * @hidden\n */\nclass DatePickerLocalizedMessagesDirective extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nDatePickerLocalizedMessagesDirective.ɵfac = function DatePickerLocalizedMessagesDirective_Factory(t) { return new (t || DatePickerLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDatePickerLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DatePickerLocalizedMessagesDirective, selectors: [[\"\", \"kendoDatePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nDatePickerLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoDatePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DatePickerCustomMessagesComponent extends DatePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDatePickerCustomMessagesComponent.ɵfac = function DatePickerCustomMessagesComponent_Factory(t) { return new (t || DatePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDatePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DatePickerCustomMessagesComponent, selectors: [[\"kendo-datepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DatePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDatePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: DatePickerMessages,\n useExisting: forwardRef(() => DatePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-datepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst ɵ0$e = touchEnabled;\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DatePicker component.\n */\nclass DatePickerModule {\n}\nDatePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DatePickerModule });\nDatePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DatePickerModule_Factory(t) { return new (t || DatePickerModule)(); }, providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$e }], imports: [[\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ],\n TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DatePickerModule, { declarations: function () { return [DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective]; }, imports: function () { return [CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule]; }, exports: function () { return [DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective,\n TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DatePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective\n ],\n exports: [\n DatePickerComponent,\n DatePickerCustomMessagesComponent,\n DatePickerLocalizedMessagesDirective,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n DateInputModule,\n CalendarModule,\n IntlModule,\n PopupModule,\n TemplatesModule,\n EventsModule\n ],\n providers: [{ provide: TOUCH_ENABLED, useValue: ɵ0$e }]\n }]\n }], null, null); })();\n\nconst COMPONENT_DIRECTIVES$1 = [\n DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective\n];\nconst COMPONENT_MODULES = [\n MultiViewCalendarModule,\n DateInputModule,\n PopupModule,\n EventsModule\n];\n/**\n * The exported package module.\n *\n * The package exports:\n * - `DateRangeComponent`—The DateRange component class.\n * - `DateRangePopupComponent`—The DateRangePopup component class.\n * - `DateRangeSelectionDirective`—The MultiviewCalendar date range selection directive.\n * - `DateRangeEndInputDirective`—The end DateInput date range selection directive.\n * - `DateRangeStartInputDirective`—The start DateInput date range selection directive.\n * - `DateRangePopupTemplateDirective`—The DateRangePopup content template directive.\n * - `MultiViewCalendarModule`—The MultiViewCalendar module.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the DateRange module\n * import { DateRangeModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, DateRangeModule], // import DateRange module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateRangeModule {\n}\nDateRangeModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateRangeModule });\nDateRangeModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateRangeModule_Factory(t) { return new (t || DateRangeModule)(); }, imports: [[CommonModule, COMPONENT_MODULES]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateRangeModule, { declarations: function () { return [DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective]; }, imports: function () { return [CommonModule,\n MultiViewCalendarModule,\n DateInputModule,\n PopupModule,\n EventsModule]; }, exports: function () { return [DateRangeComponent,\n DateRangePopupComponent,\n DateRangePopupTemplateDirective,\n DateRangeSelectionDirective,\n DateRangeStartInputDirective,\n DateRangeEndInputDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateRangeModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$1],\n exports: [COMPONENT_DIRECTIVES$1],\n imports: [CommonModule, COMPONENT_MODULES]\n }]\n }], null, null); })();\n\nconst div$1 = domContainerFactory('div');\nconst ul$1 = domContainerFactory('ul');\nconst li$1 = domContainerFactory('li');\nconst listItem = () => li$1('02', 'k-item');\nconst list = () => ul$1([listItem()], 'k-reset');\nconst scrollable$1 = () => (div$1([list()], 'k-time-container k-content k-scrollable'));\nconst timeListWrapper = () => {\n if (!isDocumentAvailable()) {\n return null;\n }\n return div$1([div$1([scrollable$1()], 'k-time-list')], 'k-time-list-wrapper', { left: '-10000px', position: 'absolute' });\n};\nconst TIMELIST_WRAPPER = timeListWrapper();\n/**\n * @hidden\n */\nclass TimePickerDOMService {\n ensureHeights() {\n if (this.timeListHeight !== undefined) {\n return;\n }\n this.calculateHeights();\n }\n calculateHeights(container) {\n if (!isDocumentAvailable()) {\n return;\n }\n const listContainer = container && container.querySelector('.k-time-list-container');\n const hostContainer = listContainer || document.body;\n const wrapper = hostContainer.appendChild(TIMELIST_WRAPPER);\n this.timeListHeight = wrapper.querySelector('.k-scrollable').getBoundingClientRect().height;\n this.itemHeight = wrapper.querySelector('li').getBoundingClientRect().height;\n hostContainer.removeChild(wrapper);\n }\n isActive(element) {\n if (!isDocumentAvailable() || !element) {\n return false;\n }\n return (element.nativeElement || element) === document.activeElement;\n }\n}\nTimePickerDOMService.ɵfac = function TimePickerDOMService_Factory(t) { return new (t || TimePickerDOMService)(); };\nTimePickerDOMService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: TimePickerDOMService, factory: TimePickerDOMService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerDOMService, [{\n type: Injectable\n }], null, null); })();\n\nconst HOURS_IN_DAY = 24;\nconst clampToRange = (rangeValue) => (value) => value % rangeValue;\nconst clamp = clampToRange(HOURS_IN_DAY);\nconst stepper = (start, step) => (idx) => clamp(start + (idx * step));\nconst distanceFromMin = (value, min) => clamp(HOURS_IN_DAY + value - min);\nconst limit = (borderValue) => (barrier, value) => {\n const useBarrier = !value || getDate(barrier).getTime() === getDate(value).getTime();\n return useBarrier ? barrier : setHours(barrier, borderValue);\n};\nconst limitDown = limit(0);\nconst limitUp = limit(HOURS_IN_DAY - 1);\n/**\n * @hidden\n */\nclass HoursService {\n constructor(intl) {\n this.intl = intl;\n this.boundRange = false;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setHours(value, candidate.getHours());\n }\n configure(settings) {\n const { boundRange = this.boundRange, insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.boundRange = boundRange;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (hour) => {\n const date = setHours(MIDNIGHT_DATE, hour);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getHour = stepper(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getHour(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return this.boundRange ? [limitDown(min, value), limitUp(max, value)] : [min, max];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastHour(value) === value.getHours();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastHour(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getHours());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setHours(this.max, this.lastHour(value)));\n }\n divideByStep(value) {\n return distanceFromMin(value.getHours(), this.min.getHours()) / this.step;\n }\n lastHour(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getHours(), max.getHours()];\n }\n}\nHoursService.ɵfac = function HoursService_Factory(t) { return new (t || HoursService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nHoursService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: HoursService, factory: HoursService.ɵfac });\n/** @nocollapse */\nHoursService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HoursService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst MINUTES_IN_HOUR = 60;\nconst clampToRange$1 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$1 = clampToRange$1(MINUTES_IN_HOUR);\nconst stepper$1 = (start, step) => (idx) => clamp$1(start + (idx * step));\nconst distanceFromMin$1 = (value, min) => clamp$1(MINUTES_IN_HOUR + value - min);\nconst limit$1 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours();\n return useBarrier ? barrier : setMinutes(barrier, borderValue);\n};\nconst limitDown$1 = limit$1(0);\nconst limitUp$1 = limit$1(MINUTES_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass MinutesService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setMinutes(value, candidate.getMinutes());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (minute) => {\n const date = setMinutes(MIDNIGHT_DATE, minute);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getMinute = stepper$1(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getMinute(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$1(min, value), limitUp$1(max, value)];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastMinute(value) === value.getMinutes();\n return matchMax || !this.isMissing(value);\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastMinute(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getMinutes());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$1(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setMinutes(this.max, this.lastMinute(value)));\n }\n divideByStep(value) {\n return distanceFromMin$1(value.getMinutes(), this.min.getMinutes()) / this.step;\n }\n lastMinute(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getMinutes(), max.getMinutes()];\n }\n}\nMinutesService.ɵfac = function MinutesService_Factory(t) { return new (t || MinutesService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nMinutesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: MinutesService, factory: MinutesService.ɵfac });\n/** @nocollapse */\nMinutesService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(MinutesService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst SECONDS_IN_HOUR = 60;\nconst clampToRange$2 = (rangeValue) => (value) => value % rangeValue;\nconst clamp$2 = clampToRange$2(SECONDS_IN_HOUR);\nconst stepper$2 = (start, step) => (idx) => clamp$2(start + (idx * step));\nconst distanceFromMin$2 = (value, min) => clamp$2(SECONDS_IN_HOUR + value - min);\nconst limit$2 = (borderValue) => (barrier, value) => {\n const useBarrier = !value || barrier.getHours() === value.getHours() && barrier.getMinutes() === value.getMinutes();\n return useBarrier ? barrier : setSeconds(barrier, borderValue);\n};\nconst limitDown$2 = limit$2(0);\nconst limitUp$2 = limit$2(SECONDS_IN_HOUR - 1);\n/**\n * @hidden\n */\nclass SecondsService {\n constructor(intl) {\n this.intl = intl;\n this.insertUndividedMax = false;\n }\n apply(value, candidate) {\n return setSeconds(value, candidate.getSeconds());\n }\n configure(settings) {\n const { insertUndividedMax = this.insertUndividedMax, min = this.min, max = this.max, part, step = this.step } = settings;\n this.insertUndividedMax = insertUndividedMax;\n this.toListItem = (minute) => {\n const date = setSeconds(MIDNIGHT_DATE, minute);\n return {\n text: this.intl.formatDate(date, part.pattern),\n value: date\n };\n };\n this.min = min;\n this.max = max;\n this.step = step;\n }\n data(selectedValue) {\n const [min] = this.range(selectedValue);\n const getSecond = stepper$2(min, this.step);\n const convertToItem = (idx) => (this.toListItem(getSecond(idx)));\n const data = range(0, this.countFromMin(selectedValue)).map(convertToItem);\n this.addLast(data);\n this.addMissing(data, selectedValue);\n return data;\n }\n isRangeChanged(min, max) {\n return !isEqual(this.min, min) || !isEqual(this.max, max);\n }\n limitRange(min, max, value) {\n return [limitDown$2(min, value), limitUp$2(max, value)];\n }\n total(value) {\n const last$$1 = this.insertUndividedMax && this.isLastMissing(value) ? 1 : 0;\n const missing = this.isMissing(value) ? 1 : 0;\n return this.countFromMin(value) + missing + last$$1;\n }\n selectedIndex(value) {\n return Math.ceil(this.divideByStep(value));\n }\n valueInList(value) {\n if (!value) {\n return true;\n }\n const matchMax = this.insertUndividedMax && this.lastSecond(value) === value.getSeconds();\n return matchMax || !this.isMissing(value);\n }\n divideByStep(value) {\n return distanceFromMin$2(value.getSeconds(), this.min.getSeconds()) / this.step;\n }\n addLast(data, value) {\n if (this.insertUndividedMax && this.isLastMissing(value)) {\n data.push(this.toListItem(this.lastSecond(value)));\n }\n return data;\n }\n addMissing(data, value) {\n if (this.valueInList(value)) {\n return data;\n }\n const missingItem = this.toListItem(value.getSeconds());\n data.splice(this.selectedIndex(value), 0, missingItem);\n return data;\n }\n countFromMin(value) {\n const [min, max] = this.range(value);\n return Math.floor(distanceFromMin$2(max, min) / this.step) + 1; /* include min */\n }\n isMissing(value) {\n if (!value) {\n return false;\n }\n return this.selectedIndex(value) !== this.divideByStep(value);\n }\n isLastMissing(value) {\n return this.isMissing(setSeconds(this.max, this.lastSecond(value)));\n }\n lastSecond(value) {\n return this.range(value)[1];\n }\n range(value) {\n const [min, max] = this.limitRange(this.min, this.max, value);\n return [min.getSeconds(), max.getSeconds()];\n }\n}\nSecondsService.ɵfac = function SecondsService_Factory(t) { return new (t || SecondsService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nSecondsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SecondsService, factory: SecondsService.ɵfac });\n/** @nocollapse */\nSecondsService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SecondsService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\nconst setHours$1 = (date, hours) => {\n const clone = cloneDate(date);\n clone.setHours(hours);\n return clone;\n};\nconst isAM = (value) => value !== null && value < 12;\nconst isPM = (value) => value !== null && (!value || value > 11);\nconst inRange = (value, min, max) => ((!min && !max) || (value >= min && value <= max));\nconst inReverseRange = (value, min, max) => ((!min && !max) || value >= min || value <= max);\n/**\n * @hidden\n */\nclass DayPeriodService {\n constructor(intl) {\n this.intl = intl;\n }\n /**\n * @hidden\n */\n apply(value, candidate) {\n const hour = value.getHours();\n const hourAM = isAM(hour);\n const candidateAM = isAM(candidate.getHours());\n if ((hourAM && candidateAM) || (!hourAM && !candidateAM)) {\n return value;\n }\n const [min, max = 24] = this.normalizedRange();\n const result = hour + (candidateAM ? -12 : 12);\n return setHours$1(value, Math.min(Math.max(min, result), (max || 24)));\n }\n /**\n * @hidden\n */\n configure(settings) {\n const { min = this.min, max = this.max, part = this.part } = settings;\n this.min = min;\n this.max = max;\n this.part = part;\n }\n /**\n * @hidden\n */\n data(_) {\n const names = this.part.names;\n if (!names) {\n return [];\n }\n const data = [];\n const [min, max] = this.normalizedRange();\n const dayPeriod = this.intl.dateFormatNames(names);\n if (isAM(min)) {\n data.push({ text: dayPeriod.am, value: setHours$1(this.min, min) });\n }\n if (isPM(max)) {\n data.push({ text: dayPeriod.pm, value: setHours$1(this.min, Math.max(12, max)) });\n }\n return this.min.getHours() !== min ? data.reverse() : data;\n }\n /**\n * @hidden\n */\n isRangeChanged(_, __) {\n return false;\n }\n /**\n * @hidden\n */\n limitRange(min, max, _) {\n return [min, max];\n }\n /**\n * @hidden\n */\n total() {\n const [min, max] = this.normalizedRange();\n if (!min && !max) {\n return 2;\n }\n if (min > 11 || max < 12) {\n return 1;\n }\n return 2;\n }\n /**\n * @hidden\n */\n selectedIndex(value) {\n if (!this.valueInList(value)) {\n return -1;\n }\n const index = Math.floor(value.getHours() / 12);\n return this.min.getHours() === this.normalizedRange()[0] ? index : (index === 0 ? 1 : 0);\n }\n /**\n * @hidden\n */\n valueInList(value) {\n const reverse = this.min.getHours() !== this.normalizedRange()[0];\n const isInRange = reverse ? inReverseRange : inRange;\n return isInRange(value.getHours(), this.min.getHours(), this.max.getHours());\n }\n normalizedRange() {\n const minHour = this.min.getHours();\n const maxHour = this.max.getHours();\n return [\n Math.min(minHour, maxHour),\n Math.max(minHour, maxHour)\n ];\n }\n}\nDayPeriodService.ɵfac = function DayPeriodService_Factory(t) { return new (t || DayPeriodService)(ɵngcc0.ɵɵinject(ɵngcc1.IntlService)); };\nDayPeriodService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DayPeriodService, factory: DayPeriodService.ɵfac });\n/** @nocollapse */\nDayPeriodService.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DayPeriodService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc1.IntlService }]; }, null); })();\n\n/* tslint:disable:component-selector-name component-selector-type */\nconst SNAP_THRESHOLD = 0.05; //% of the item height\nconst SCROLL_THRESHOLD = 2; //< 2px threshold\nconst nil = () => (null);\nconst getters = {\n 35: (data, _) => data[data.length - 1],\n 36: (data, _) => data[0],\n 38: (data, index) => data[index - 1],\n 40: (data, index) => data[index + 1]\n};\nconst services$1 = {\n [TIME_PART.dayperiod]: DayPeriodService,\n [TIME_PART.hour]: HoursService,\n [TIME_PART.minute]: MinutesService,\n [TIME_PART.second]: SecondsService\n};\n/**\n * @hidden\n */\nclass TimeListComponent {\n constructor(element, injector, dom, renderer, zone) {\n this.element = element;\n this.injector = injector;\n this.dom = dom;\n this.renderer = renderer;\n this.zone = zone;\n this.min = cloneDate(MIDNIGHT_DATE);\n this.max = cloneDate(MAX_TIME);\n this.step = 1;\n this.disabled = false;\n this.valueChange = new EventEmitter();\n this.componentClass = true;\n this.animateToIndex = true;\n this.isActive = false;\n this.skip = 0;\n this.total = 60;\n this.data = [];\n this.indexToScroll = -1;\n this.domEvents = [];\n }\n get tabIndex() {\n return this.disabled ? undefined : 0;\n }\n ngOnChanges(changes) {\n if (changes.part) {\n this.service = this.injector.get(services$1[this.part.type]);\n this.service.configure(this.serviceSettings());\n }\n const value = this.value;\n const valueChanges = changes.value || {};\n const [min, max] = this.service.limitRange(this.min, this.max, value);\n if (this.service.isRangeChanged(min, max) || changes.min || changes.max || changes.step) {\n this.data = [];\n this.service.configure(this.serviceSettings({ min, max }));\n }\n // Skip the rendering of the list whenever possible\n if (!this.data.length || this.hasMissingValue(valueChanges)) {\n this.animateToIndex = false;\n this.data = this.service.data(value);\n }\n this.animateToIndex = this.animateToIndex && this.textHasChanged(valueChanges);\n this.total = this.service.total(value);\n this.indexToScroll = this.selectedIndex(value);\n }\n ngOnInit() {\n this.animateToIndex = true;\n this.dom.ensureHeights();\n this.itemHeight = this.dom.itemHeight;\n this.listHeight = this.dom.timeListHeight;\n this.topOffset = (this.listHeight - this.itemHeight) / 2;\n this.bottomOffset = this.listHeight - this.itemHeight;\n this.topThreshold = this.itemHeight * SNAP_THRESHOLD;\n this.bottomThreshold = this.itemHeight * (1 - SNAP_THRESHOLD);\n const translate = `translateY(${this.topOffset}px)`;\n this.style = { transform: translate, '-ms-transform': translate };\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.bindEvents();\n });\n }\n }\n ngOnDestroy() {\n this.scrollSubscription.unsubscribe();\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n ngAfterViewInit() {\n this.scrollOnce((index) => this.virtualization.scrollToIndex(index));\n }\n ngAfterViewChecked() {\n this.scrollOnce((index) => {\n const action = this.animateToIndex ? 'animateToIndex' : 'scrollToIndex';\n this.virtualization[action](index);\n this.animateToIndex = true;\n });\n }\n handleChange(dataItem) {\n const candidate = this.service.apply(this.value, dataItem.value);\n if (this.value.getTime() === candidate.getTime()) {\n return;\n }\n this.indexToScroll = this.data.indexOf(dataItem);\n this.value = candidate;\n this.valueChange.emit(candidate);\n }\n handleItemClick(args) {\n const item = closestInScope(args.target, node => node.hasAttribute('data-timelist-item-index'), this.element.nativeElement);\n if (item) {\n const index = item.getAttribute('data-timelist-item-index');\n this.handleChange(this.data[index]);\n }\n }\n /**\n * Focuses the host element of the TimeList.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.focus();\n }\n /**\n * Blurs the TimeList component.\n */\n blur() {\n if (!this.element) {\n return;\n }\n this.element.nativeElement.blur();\n }\n itemOffset(scrollTop) {\n const valueIndex = this.selectedIndex(this.value);\n const activeIndex = this.virtualization.activeIndex();\n const offset = this.virtualization.itemOffset(activeIndex);\n const distance = Math.abs(Math.ceil(scrollTop) - offset);\n if (valueIndex === activeIndex && distance < SCROLL_THRESHOLD) {\n return offset;\n }\n const scrollUp = valueIndex > activeIndex;\n const moveToNext = scrollUp && distance >= this.bottomThreshold || !scrollUp && distance > this.topThreshold;\n return moveToNext ? this.virtualization.itemOffset(activeIndex + 1) : offset;\n }\n hasMissingValue({ previousValue, currentValue }) {\n const isPreviousMissing = previousValue && !this.service.valueInList(previousValue);\n const isCurrentMissing = currentValue && !this.service.valueInList(currentValue);\n return isPreviousMissing || isCurrentMissing;\n }\n scrollOnce(action) {\n if (this.indexToScroll !== -1) {\n action(this.indexToScroll);\n this.indexToScroll = -1;\n }\n }\n serviceSettings(settings) {\n const defaults = {\n boundRange: false,\n insertUndividedMax: false,\n max: this.max,\n min: this.min,\n part: this.part,\n step: this.step\n };\n const result = Object.assign({}, defaults, settings);\n result.boundRange = result.part.type !== 'hour';\n return result;\n }\n selectedIndex(value) {\n if (!value) {\n return -1;\n }\n return this.service.selectedIndex(value);\n }\n textHasChanged({ previousValue, currentValue }) {\n if (!previousValue || !currentValue) {\n return false;\n }\n const oldData = this.data[this.selectedIndex(previousValue)];\n const newData = this.data[this.selectedIndex(currentValue)];\n return oldData && newData && oldData.text !== newData.text;\n }\n handleKeyDown(e) {\n const getter = getters[e.keyCode] || nil;\n const dataItem = getter(this.data, this.service.selectedIndex(this.value));\n if (dataItem) {\n this.handleChange(dataItem);\n e.preventDefault();\n }\n }\n bindEvents() {\n this.scrollSubscription = this.virtualization\n .scroll$()\n .pipe(debounceTime(100), map((e) => e.target.scrollTop), map((top) => this.itemOffset(top)), map((itemOffset) => this.virtualization.itemIndex(itemOffset)))\n .subscribe(index => {\n this.virtualization.scrollToIndex(index);\n this.handleChange(this.data[index]);\n });\n const element = this.element.nativeElement;\n this.domEvents.push(this.renderer.listen(element, 'mouseover', () => !this.isActive && this.focus()), this.renderer.listen(element, 'click', () => this.focus()), this.renderer.listen(element, 'blur', () => this.isActive = false), this.renderer.listen(element, 'focus', () => this.isActive = true), this.renderer.listen(element, 'keydown', this.handleKeyDown.bind(this)));\n }\n}\nTimeListComponent.ɵfac = function TimeListComponent_Factory(t) { return new (t || TimeListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Injector), ɵngcc0.ɵɵdirectiveInject(TimePickerDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nTimeListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeListComponent, selectors: [[\"kendo-timelist\"]], viewQuery: function TimeListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(VirtualizationComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.virtualization = _t.first);\n } }, hostVars: 3, hostBindings: function TimeListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndex);\n ɵngcc0.ɵɵclassProp(\"k-time-list\", ctx.componentClass);\n } }, inputs: { min: \"min\", max: \"max\", step: \"step\", disabled: \"disabled\", value: \"value\", part: \"part\" }, outputs: { valueChange: \"valueChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 3, vars: 13, consts: [[\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-time-container\", 3, \"skip\", \"take\", \"total\", \"itemHeight\", \"maxScrollDifference\", \"topOffset\", \"bottomOffset\"], [1, \"k-reset\", 3, \"ngStyle\", \"kendoEventsOutsideAngular\", \"scope\"], [\"class\", \"k-item\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-item\"]], template: function TimeListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-virtualization\", 0);\n ɵngcc0.ɵɵelementStart(1, \"ul\", 1);\n ɵngcc0.ɵɵtemplate(2, TimeListComponent_li_2_Template, 3, 2, \"li\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"skip\", ctx.skip)(\"take\", ctx.total)(\"total\", ctx.total)(\"itemHeight\", ctx.itemHeight)(\"maxScrollDifference\", ctx.listHeight)(\"topOffset\", ctx.topOffset)(\"bottomOffset\", ctx.bottomOffset);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.style)(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction1(11, _c3, ctx.handleItemClick))(\"scope\", ctx);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data);\n } }, directives: [VirtualizationComponent, ɵngcc2.NgStyle, ɵngcc3.EventsOutsideAngularDirective, ɵngcc2.NgForOf], encapsulation: 2 });\n/** @nocollapse */\nTimeListComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Injector },\n { type: TimePickerDOMService },\n { type: Renderer2 },\n { type: NgZone }\n];\nTimeListComponent.propDecorators = {\n min: [{ type: Input }],\n max: [{ type: Input }],\n part: [{ type: Input }],\n step: [{ type: Input }],\n disabled: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n virtualization: [{ type: ViewChild, args: [VirtualizationComponent, { static: true },] }],\n tabIndex: [{ type: HostBinding, args: [\"attr.tabindex\",] }],\n componentClass: [{ type: HostBinding, args: [\"class.k-time-list\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-timelist',\n template: `\n \n
    \n
  • \n {{item.text}}\n
  • \n
\n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Injector }, { type: TimePickerDOMService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { min: [{\n type: Input\n }], max: [{\n type: Input\n }], step: [{\n type: Input\n }], disabled: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], componentClass: [{\n type: HostBinding,\n args: [\"class.k-time-list\"]\n }], tabIndex: [{\n type: HostBinding,\n args: [\"attr.tabindex\"]\n }], value: [{\n type: Input\n }], part: [{\n type: Input\n }], virtualization: [{\n type: ViewChild,\n args: [VirtualizationComponent, { static: true }]\n }] }); })();\n\nconst isEqualTillMinute = (value, min) => value.getHours() === min.getHours() && value.getMinutes() === min.getMinutes();\nconst isEqualTillSecond = (value, min) => isEqualTillMinute(value, min) && value.getSeconds() === min.getSeconds();\nconst isEqualTillMillisecond = (value, min) => isEqualTillSecond(value, min) && value.getMilliseconds() === min.getMilliseconds();\nconst ɵ3$6 = (value) => value.getHours(), ɵ4$2 = (_, min) => min.getHours(), ɵ5$1 = (value) => value.getMinutes(), ɵ6$1 = (value, min) => isEqualTillMinute(value, min) ? min.getMinutes() : 0, ɵ7$1 = (value) => value.getSeconds(), ɵ8$1 = (value, min) => isEqualTillSecond(value, min) ? min.getSeconds() : 0, ɵ9$1 = (value) => value.getMilliseconds(), ɵ10$1 = (value, min) => isEqualTillMillisecond(value, min) ? min.getMilliseconds() : 0;\nconst defaultGetters = [\n {\n type: TIME_PART.hour,\n getter: ɵ3$6,\n minGetter: ɵ4$2\n }, {\n type: TIME_PART.minute,\n getter: ɵ5$1,\n minGetter: ɵ6$1\n }, {\n type: TIME_PART.second,\n getter: ɵ7$1,\n minGetter: ɵ8$1\n }, {\n type: TIME_PART.millisecond,\n getter: ɵ9$1,\n minGetter: ɵ10$1\n }\n];\nconst left = getter => (origin, _) => getter(origin);\nconst right = getter => (_, candidate) => getter(candidate);\nconst convertToObject = (parts) => parts.reduce((obj, p) => { obj[p.type] = p.type; return obj; }, {});\nconst getterByPart = parts => g => parts[g.type] ? right(g.getter) : left(g.getter);\nconst gettersFactory = getters => parts => (getters.map(getterByPart(convertToObject(parts))));\nconst snapValue = (getter, minGetter, step) => (date, min) => {\n const value = getter(date);\n const minValue = minGetter(date, min);\n const rest = value - minValue;\n if (rest < 0) {\n return minValue;\n }\n const mod = rest % step;\n return value - mod + (mod > step / 2 ? step : 0);\n};\nconst snappersFactory = (getters) => steps => (getters.map(g => {\n const step = steps[g.type];\n return step ? snapValue(g.getter, g.minGetter, step) : g.getter;\n}));\n/**\n * @hidden\n */\nconst generateGetters = gettersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst generateSnappers = snappersFactory(defaultGetters);\n/**\n * @hidden\n */\nconst valueMerger = getters => (origin, candidate) => {\n origin.setHours(...getters.map(g => g(origin, candidate)));\n return origin;\n};\n/**\n * @hidden\n */\nconst snapTime = snappers => (candidate, min) => {\n const date = cloneDate(candidate);\n date.setHours(...snappers.map(s => s(date, min)));\n return date;\n};\n\nconst listReducer = (state, list, idx, all) => {\n if (state.length || !list.isActive) {\n return state;\n }\n return [{\n next: all[idx + 1] || list,\n prev: all[idx - 1] || list\n }];\n};\nvar Direction;\n(function (Direction) {\n Direction[Direction[\"Left\"] = 0] = \"Left\";\n Direction[Direction[\"Right\"] = 1] = \"Right\";\n})(Direction || (Direction = {}));\n/**\n * @hidden\n *\n * Represents the Kendo UI TimeSelector component for Angular.\n */\nclass TimeSelectorComponent {\n constructor(localization, cdr, element, intl, dom, zone, renderer, pickerService) {\n this.localization = localization;\n this.cdr = cdr;\n this.element = element;\n this.intl = intl;\n this.dom = dom;\n this.zone = zone;\n this.renderer = renderer;\n this.pickerService = pickerService;\n /**\n * @hidden\n */\n this.componentClass = true;\n /**\n * Specifies the time format used to display the time list columns.\n */\n this.format = 't';\n /**\n * Specifies the smallest valid time value.\n */\n this.min = cloneDate(MIN_TIME);\n /**\n * Specifies the biggest valid time value.\n */\n this.max = cloneDate(MAX_TIME);\n /**\n * Determines whether to display the **Cancel** button in the popup.\n */\n this.cancelButton = true;\n /**\n * Determines whether to display the **Set** button in the popup.\n */\n this.setButton = true;\n /**\n * Determines whether to display the **Now** button in the popup.\n *\n * > If the current time is out of range or the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n this.nowButton = true;\n /**\n * Sets or gets the `disabled` property of the TimeSelector and determines whether the component is active.\n */\n this.disabled = false;\n /**\n * Specifies the value of the TimeSelector component.\n */\n this.value = null;\n /**\n * Fires each time the user selects a new value.\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires each time the user cancels the selected value.\n */\n this.valueReject = new EventEmitter();\n this.isActive = false;\n this.showNowButton = true;\n this._activeListIndex = -1;\n this._steps = {};\n this.domEvents = [];\n if (this.pickerService) {\n this.pickerService.timeSelector = this;\n }\n }\n /**\n * @hidden\n */\n get disabledClass() {\n return this.disabled;\n }\n /**\n * Configures the incremental steps of the TimeSelector.\n *\n * The available options are:\n * - `hour: Number`—Controls the incremental step of the hour value.\n * - `minute: Number`—Controls the incremental step of the minute value.\n * - `second: Number`—Controls the incremental step of the second value.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * `\n * })\n * export class AppComponent {\n * public steps = { hour: 2, minute: 15, second: 15 };\n * }\n * ```\n *\n * > If the incremental step is greater than `1`, the **Now** button will be hidden.\n */\n set steps(steps) {\n this._steps = steps || {};\n }\n get steps() {\n return this._steps;\n }\n set current(value) {\n this._current = timeInRange(this.snapTime(cloneDate(value || MIDNIGHT_DATE), this.min), this.min, this.max);\n if (!NgZone.isInAngularZone()) {\n this.cdr.detectChanges();\n }\n }\n get current() {\n return this._current;\n }\n get activeListIndex() {\n return this._activeListIndex;\n }\n set activeListIndex(value) {\n this._activeListIndex = value;\n if (!this.timeListWrappers || !this.timeListWrappers.length) {\n return;\n }\n this.timeListWrappers.forEach(listWrapper => {\n this.renderer.removeClass(listWrapper.nativeElement, 'k-state-focused');\n });\n if (value >= 0) {\n const listIndex = this.listIndex(value);\n const focusedWrapper = this.timeListWrappers.toArray()[listIndex];\n if (focusedWrapper) {\n this.renderer.addClass(focusedWrapper.nativeElement, 'k-state-focused');\n }\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions = this.intl.changes.subscribe(this.intlChange.bind(this));\n if (this.localization) {\n this.subscriptions.add(this.localization\n .changes\n .subscribe(() => this.cdr.markForCheck()));\n }\n this.dom.calculateHeights(this.element.nativeElement);\n this.init();\n this.bindEvents();\n }\n /**\n * @hidden\n */\n ngOnChanges(_) {\n this.init();\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.pickerService) {\n this.pickerService.timeSelector = null;\n }\n this.domEvents.forEach(unbindCallback => unbindCallback());\n }\n /**\n * Focuses the TimeSelector component.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * export class AppComponent { }\n * ```\n */\n focus() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.focus();\n }\n /**\n * Blurs the TimeSelector component.\n */\n blur() {\n const list = this.timeLists.first;\n if (!list) {\n return;\n }\n list.blur();\n }\n /**\n * @hidden\n */\n handleAccept() {\n this.handleChange(this.mergeValue(cloneDate(this.value || getDate(getNow())), this.current));\n }\n /**\n * @hidden\n */\n handleNow() {\n this.current = getNow();\n this.handleChange(this.current);\n this.cdr.markForCheck();\n }\n /**\n * @hidden\n */\n handleReject() {\n this.current = this.value;\n this.valueReject.emit();\n }\n /**\n * @hidden\n */\n handleFocus(args) {\n if (this.isActive) {\n return;\n }\n this.isActive = true;\n this.emitFocus(args);\n }\n /**\n * @hidden\n */\n handleListFocus(args) {\n const index = parseInt(args.target.getAttribute('data-timelist-index'), 10);\n this.activeListIndex = index;\n this.handleFocus(args);\n }\n /**\n * @hidden\n */\n handleBlur(args) {\n const currentTarget = currentFocusTarget(args);\n if (currentTarget && this.containsElement(currentTarget)) {\n return;\n }\n this.activeListIndex = -1;\n this.isActive = false;\n this.emitBlur(args);\n }\n /**\n * @hidden\n */\n containsElement(element) {\n return Boolean(closest(element, node => node === this.element.nativeElement));\n }\n partStep(part) {\n return this.steps[part.type] || 1;\n }\n init(changes) {\n if (!changes || hasChange(changes, 'format')) {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n }\n if (!changes || hasChange(changes, 'steps')) {\n this.snapTime = snapTime(generateSnappers(this.steps));\n }\n if (!changes || hasChange(changes, 'value')) {\n this.current = this.value;\n }\n this.showNowButton = !this.hasSteps() && this.nowButton && isInTimeRange(getNow(), this.min, this.max);\n }\n focusList(dir) {\n if (!this.timeLists.length) {\n return;\n }\n this.timeLists.reduce(listReducer, [])\n .map(state => dir === Direction.Right ? state.next : state.prev)\n .map(list => list && list.focus());\n }\n handleChange(value) {\n this.value = value;\n this.valueChange.emit(cloneDate(value));\n }\n hasActiveButton() {\n if (!this.accept) {\n return false;\n }\n return [this.accept, this.cancel, this.now].reduce((isActive, el) => isActive || this.dom.isActive(el), false);\n }\n hasSteps() {\n const keys = Object.keys(this.steps);\n return keys.length !== keys.reduce((acc, k) => acc + this.steps[k], 0);\n }\n intlChange() {\n this.dateFormatParts = this.intl.splitDateFormat(this.format);\n this.mergeValue = valueMerger(generateGetters(this.dateFormatParts));\n this.cdr.markForCheck();\n }\n bindEvents() {\n if (this.element) {\n this.zone.runOutsideAngular(() => {\n this.domEvents.push(this.renderer.listen(this.element.nativeElement, 'keydown', this.handleKeydown.bind(this)));\n });\n }\n }\n handleKeydown(args) {\n const { keyCode, altKey } = args;\n // reserve the alt + arrow key commands for the picker\n const arrowKeyPressed = [Keys.ArrowLeft, Keys.ArrowRight].indexOf(keyCode) !== -1;\n if (isPresent(this.pickerService) && arrowKeyPressed && altKey) {\n return;\n }\n if (keyCode === Keys.Enter && !this.hasActiveButton()) {\n this.handleAccept();\n }\n else if (keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight) {\n this.focusList(keyCode === Keys.ArrowLeft ? Direction.Left : Direction.Right);\n }\n }\n emitBlur(args) {\n if (this.pickerService) {\n this.pickerService.onBlur.emit(args);\n }\n }\n emitFocus(args) {\n if (this.pickerService) {\n this.pickerService.onFocus.emit(args);\n }\n }\n listIndex(partIndex) {\n let listIdx = 0;\n let partIdx = 0;\n while (partIdx < partIndex) {\n if (this.dateFormatParts[partIdx].type !== 'literal') {\n listIdx++;\n }\n partIdx++;\n }\n return listIdx;\n }\n}\nTimeSelectorComponent.ɵfac = function TimeSelectorComponent_Factory(t) { return new (t || TimeSelectorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.IntlService), ɵngcc0.ɵɵdirectiveInject(TimePickerDOMService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(PickerService, 8)); };\nTimeSelectorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeSelectorComponent, selectors: [[\"kendo-timeselector\"]], viewQuery: function TimeSelectorComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c82, true);\n ɵngcc0.ɵɵviewQuery(_c83, true);\n ɵngcc0.ɵɵviewQuery(_c84, true);\n ɵngcc0.ɵɵviewQuery(TimeListComponent, true);\n ɵngcc0.ɵɵviewQuery(_c85, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.accept = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.cancel = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.now = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.timeLists = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.timeListWrappers = _t);\n } }, hostVars: 4, hostBindings: function TimeSelectorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-timeselector\", ctx.componentClass)(\"k-state-disabled\", ctx.disabledClass);\n } }, inputs: { format: \"format\", min: \"min\", max: \"max\", cancelButton: \"cancelButton\", setButton: \"setButton\", nowButton: \"nowButton\", disabled: \"disabled\", value: \"value\", steps: \"steps\" }, outputs: { valueChange: \"valueChange\", valueReject: \"valueReject\" }, exportAs: [\"kendo-timeselector\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 4, consts: [[\"kendoTimeSelectorLocalizedMessages\", \"\", 6, \"accept\", \"acceptLabel\", \"cancel\", \"cancelLabel\", \"now\", \"nowLabel\"], [1, \"k-time-header\"], [1, \"k-title\"], [\"class\", \"k-button k-bare k-time-now\", \"type\", \"button\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [1, \"k-time-list-container\"], [1, \"k-time-highlight\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"class\", \"k-time-footer k-action-buttons\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-button\", \"k-bare\", \"k-time-now\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"now\", \"\"], [\"class\", \"k-time-list-wrapper\", \"role\", \"presentation\", \"tabindex\", \"-1\", 4, \"ngIf\"], [\"class\", \"k-time-separator\", 4, \"ngIf\"], [\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-time-list-wrapper\"], [\"listWrapper\", \"\"], [3, \"min\", \"max\", \"part\", \"step\", \"disabled\", \"value\", \"kendoEventsOutsideAngular\", \"scope\", \"valueChange\"], [1, \"k-time-separator\"], [1, \"k-time-footer\", \"k-action-buttons\"], [\"class\", \"k-button k-time-cancel\", \"type\", \"button\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [\"type\", \"button\", \"class\", \"k-time-accept k-button k-primary\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\", 4, \"ngIf\"], [\"type\", \"button\", 1, \"k-button\", \"k-time-cancel\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"cancel\", \"\"], [\"type\", \"button\", 1, \"k-time-accept\", \"k-button\", \"k-primary\", 3, \"kendoEventsOutsideAngular\", \"scope\", \"disabled\"], [\"accept\", \"\"]], template: function TimeSelectorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c98);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 1);\n ɵngcc0.ɵɵelementStart(3, \"span\", 2);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, TimeSelectorComponent_button_5_Template, 3, 10, \"button\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(6, \"div\", 4);\n ɵngcc0.ɵɵelement(7, \"span\", 5);\n ɵngcc0.ɵɵtemplate(8, TimeSelectorComponent_ng_template_8_Template, 2, 2, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, TimeSelectorComponent_div_9_Template, 3, 2, \"div\", 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(4);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.intl.formatDate(ctx.current, ctx.format), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showNowButton);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.dateFormatParts);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.setButton || ctx.cancelButton);\n } }, directives: function () { return [TimeSelectorLocalizedMessagesDirective, ɵngcc2.NgIf, ɵngcc2.NgForOf, ɵngcc3.EventsOutsideAngularDirective, TimeListComponent]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nTimeSelectorComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: ElementRef },\n { type: IntlService },\n { type: TimePickerDOMService },\n { type: NgZone },\n { type: Renderer2 },\n { type: PickerService, decorators: [{ type: Optional }] }\n];\nTimeSelectorComponent.propDecorators = {\n accept: [{ type: ViewChild, args: ['accept',] }],\n cancel: [{ type: ViewChild, args: ['cancel',] }],\n now: [{ type: ViewChild, args: ['now',] }],\n timeLists: [{ type: ViewChildren, args: [TimeListComponent,] }],\n timeListWrappers: [{ type: ViewChildren, args: ['listWrapper',] }],\n componentClass: [{ type: HostBinding, args: ['class.k-timeselector',] }],\n disabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n format: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n cancelButton: [{ type: Input }],\n setButton: [{ type: Input }],\n nowButton: [{ type: Input }],\n disabled: [{ type: Input }],\n steps: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n valueReject: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'kendo-timeselector',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.timeselector'\n }\n ],\n selector: 'kendo-timeselector',\n template: `\n \n \n
\n \n {{ intl.formatDate(current, format) }}\n \n {{localization.get('now')}}\n
\n
\n \n \n \n {{intl.dateFieldName(part)}}\n \n
\n
\n {{part.pattern}}\n
\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }, { type: ɵngcc1.IntlService }, { type: TimePickerDOMService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: PickerService, decorators: [{\n type: Optional\n }] }]; }, { componentClass: [{\n type: HostBinding,\n args: ['class.k-timeselector']\n }], format: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], cancelButton: [{\n type: Input\n }], setButton: [{\n type: Input\n }], nowButton: [{\n type: Input\n }], disabled: [{\n type: Input\n }], value: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], valueReject: [{\n type: Output\n }], disabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], steps: [{\n type: Input\n }], accept: [{\n type: ViewChild,\n args: ['accept']\n }], cancel: [{\n type: ViewChild,\n args: ['cancel']\n }], now: [{\n type: ViewChild,\n args: ['now']\n }], timeLists: [{\n type: ViewChildren,\n args: [TimeListComponent]\n }], timeListWrappers: [{\n type: ViewChildren,\n args: ['listWrapper']\n }] }); })();\n\n/**\n * @hidden\n */\nclass TimePickerMessages extends ComponentMessages {\n}\nTimePickerMessages.ɵfac = function TimePickerMessages_Factory(t) { return ɵTimePickerMessages_BaseFactory(t || TimePickerMessages); };\nTimePickerMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimePickerMessages, inputs: { accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", now: \"now\", nowLabel: \"nowLabel\", toggle: \"toggle\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nTimePickerMessages.propDecorators = {\n accept: [{ type: Input }],\n acceptLabel: [{ type: Input }],\n cancel: [{ type: Input }],\n cancelLabel: [{ type: Input }],\n now: [{ type: Input }],\n nowLabel: [{ type: Input }],\n toggle: [{ type: Input }]\n};\nconst ɵTimePickerMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(TimePickerMessages);\n\n/**\n * @hidden\n */\nclass TimePickerLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimePickerLocalizedMessagesDirective.ɵfac = function TimePickerLocalizedMessagesDirective_Factory(t) { return new (t || TimePickerLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimePickerLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimePickerLocalizedMessagesDirective, selectors: [[\"\", \"kendoTimePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTimePickerLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTimePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass TimePickerCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimePickerCustomMessagesComponent.ɵfac = function TimePickerCustomMessagesComponent_Factory(t) { return new (t || TimePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimePickerCustomMessagesComponent, selectors: [[\"kendo-timepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TimePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nTimePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimePickerCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-timepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass TimeSelectorLocalizedMessagesDirective extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nTimeSelectorLocalizedMessagesDirective.ɵfac = function TimeSelectorLocalizedMessagesDirective_Factory(t) { return new (t || TimeSelectorLocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimeSelectorLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TimeSelectorLocalizedMessagesDirective, selectors: [[\"\", \"kendoTimeSelectorLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTimeSelectorLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorLocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorLocalizedMessagesDirective) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: '[kendoTimeSelectorLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n *\n * Custom component messages override default component messages.\n */\nclass TimeSelectorCustomMessagesComponent extends TimePickerMessages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nTimeSelectorCustomMessagesComponent.ɵfac = function TimeSelectorCustomMessagesComponent_Factory(t) { return new (t || TimeSelectorCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nTimeSelectorCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TimeSelectorCustomMessagesComponent, selectors: [[\"kendo-timeselector-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function TimeSelectorCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nTimeSelectorCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimeSelectorCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: TimePickerMessages,\n useExisting: forwardRef(() => TimeSelectorCustomMessagesComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-timeselector-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES$2 = [\n TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent\n];\nconst COMPONENT_MODULES$1 = [\n DateInputModule,\n IntlModule,\n PopupModule,\n VirtualizationModule,\n EventsModule\n];\nconst ɵ0$n = touchEnabled;\nconst providers = [\n TimePickerDOMService,\n HoursService,\n MinutesService,\n SecondsService,\n DayPeriodService,\n {\n provide: TOUCH_ENABLED,\n useValue: ɵ0$n\n }\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TimePicker component.\n */\nclass TimePickerModule {\n}\nTimePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TimePickerModule });\nTimePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TimePickerModule_Factory(t) { return new (t || TimePickerModule)(); }, providers: providers, imports: [[CommonModule, ...COMPONENT_MODULES$1]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TimePickerModule, { declarations: function () { return [TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent]; }, imports: function () { return [CommonModule,\n DateInputModule,\n IntlModule,\n PopupModule,\n VirtualizationModule,\n EventsModule]; }, exports: function () { return [TimePickerLocalizedMessagesDirective,\n TimeListComponent,\n TimePickerCustomMessagesComponent,\n TimePickerComponent,\n TimeSelectorLocalizedMessagesDirective,\n TimeSelectorCustomMessagesComponent,\n TimeSelectorComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TimePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENT_DIRECTIVES$2],\n exports: [COMPONENT_DIRECTIVES$2],\n imports: [CommonModule, ...COMPONENT_MODULES$1],\n providers: providers\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass Messages$1 extends ComponentMessages {\n}\nMessages$1.ɵfac = function Messages$1_Factory(t) { return ɵMessages$1_BaseFactory(t || Messages$1); };\nMessages$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages$1, inputs: { toggle: \"toggle\", dateTab: \"dateTab\", dateTabLabel: \"dateTabLabel\", timeTab: \"timeTab\", timeTabLabel: \"timeTabLabel\", accept: \"accept\", acceptLabel: \"acceptLabel\", cancel: \"cancel\", cancelLabel: \"cancelLabel\", today: \"today\", now: \"now\", nowLabel: \"nowLabel\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages$1.propDecorators = {\n toggle: [{ type: Input }],\n dateTab: [{ type: Input }],\n dateTabLabel: [{ type: Input }],\n timeTab: [{ type: Input }],\n timeTabLabel: [{ type: Input }],\n accept: [{ type: Input }],\n acceptLabel: [{ type: Input }],\n cancel: [{ type: Input }],\n cancelLabel: [{ type: Input }],\n today: [{ type: Input }],\n now: [{ type: Input }],\n nowLabel: [{ type: Input }]\n};\nconst ɵMessages$1_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages$1);\n\n/**\n * Custom component messages override default component messages ([see example]({% slug globalization_dateinputs %}#toc-custom-messages)).\n */\nclass DateTimePickerCustomMessagesComponent extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nDateTimePickerCustomMessagesComponent.ɵfac = function DateTimePickerCustomMessagesComponent_Factory(t) { return new (t || DateTimePickerCustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nDateTimePickerCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateTimePickerCustomMessagesComponent, selectors: [[\"kendo-datetimepicker-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages$1,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DateTimePickerCustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDateTimePickerCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerCustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => DateTimePickerCustomMessagesComponent)\n }\n ],\n selector: 'kendo-datetimepicker-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages$1 {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc4.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoDateTimePickerLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages$1,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages$1,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: '[kendoDateTimePickerLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc4.LocalizationService }]; }, null); })();\n\nconst COMPONENT_DIRECTIVES$3 = [\n DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective\n];\nconst ɵ0$o = touchEnabled;\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the DateTimePicker component.\n */\nclass DateTimePickerModule {\n}\nDateTimePickerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateTimePickerModule });\nDateTimePickerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateTimePickerModule_Factory(t) { return new (t || DateTimePickerModule)(); }, providers: [\n { provide: TOUCH_ENABLED, useValue: ɵ0$o }\n ], imports: [[\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ],\n TemplatesModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateTimePickerModule, { declarations: function () { return [DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective]; }, imports: function () { return [CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule]; }, exports: function () { return [DateTimePickerComponent,\n DateTimePickerCustomMessagesComponent,\n LocalizedMessagesDirective,\n TemplatesModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateTimePickerModule, [{\n type: NgModule,\n args: [{\n declarations: [\n ...COMPONENT_DIRECTIVES$3\n ],\n exports: [\n ...COMPONENT_DIRECTIVES$3,\n TemplatesModule\n ],\n imports: [\n CommonModule,\n IntlModule,\n DateInputModule,\n CalendarModule,\n TimePickerModule,\n PopupModule,\n EventsModule,\n TemplatesModule\n ],\n providers: [\n { provide: TOUCH_ENABLED, useValue: ɵ0$o }\n ]\n }]\n }], null, null); })();\n\nconst COMPONENT_MODULES$2 = [\n CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Date Inputs components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Date Inputs module\n * import { DateInputsModule } from '@progress/kendo-angular-dateinputs';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare the app component\n * imports: [BrowserModule, DateInputsModule], // import the Date Inputs module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass DateInputsModule {\n}\nDateInputsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DateInputsModule });\nDateInputsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DateInputsModule_Factory(t) { return new (t || DateInputsModule)(); }, imports: [COMPONENT_MODULES$2,\n CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DateInputsModule, { imports: [CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule], exports: [CalendarsModule,\n DateInputModule,\n DatePickerModule,\n TimePickerModule,\n DateRangeModule,\n DateTimePickerModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateInputsModule, [{\n type: NgModule,\n args: [{\n exports: COMPONENT_MODULES$2,\n imports: COMPONENT_MODULES$2\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { CalendarCommonModule, CALENDAR_RANGE_VALIDATORS, CALENDAR_VALUE_ACCESSOR, KENDO_INPUT_PROVIDER, KForOf, KForOfContext, HeaderComponent, HorizontalViewListComponent, CalendarMessages, MultiViewCalendarCustomMessagesComponent, Messages, RANGE_CALENDAR_RANGE_VALIDATORS, RANGE_CALENDAR_VALUE_ACCESSOR, NavigationComponent, BusViewService, CenturyViewService, DecadeViewService, DisabledDatesService, CalendarDOMService, MonthViewService, NavigationService, ScrollSyncService, WeekNamesService, YearViewService, TemplatesModule, CellTemplateDirective, CenturyCellTemplateDirective, DecadeCellTemplateDirective, HeaderTitleTemplateDirective, MonthCellTemplateDirective, NavigationItemTemplateDirective, WeekNumberCellTemplateDirective, YearCellTemplateDirective, ViewListComponent, ViewComponent, PickerService, DateInputMessages, DatePickerMessages, DateRangeInput, DateRangePopupTemplateDirective, DateTimePickerCustomMessagesComponent, LocalizedMessagesDirective, Messages$1, TimePickerMessages, TimePickerCustomMessagesComponent, TimeSelectorCustomMessagesComponent, DayPeriodService, TimePickerDOMService, HoursService, MinutesService, SecondsService, TimeListComponent, TimeSelectorComponent, TOUCH_ENABLED, ScrollerService, DEFAULT_SCROLLER_FACTORY, SCROLLER_FACTORY_TOKEN, VirtualizationComponent, VirtualizationModule, CalendarComponent, DateInputComponent, DatePickerComponent, TimePickerComponent, DateTimePickerComponent, MultiViewCalendarComponent, DateRangeComponent, DateRangePopupComponent, DateRangeEndInputDirective, DateRangeStartInputDirective, DateRangeSelectionDirective, CalendarModule, CalendarsModule, DateInputModule, DatePickerModule, DateInputsModule, TimePickerModule, DateTimePickerModule, MultiViewCalendarModule, DateRangeModule, DateRangeService, CalendarCustomMessagesComponent, DateInputCustomMessagesComponent, DatePickerCustomMessagesComponent, PreventableEvent, CalendarLocalizedMessagesDirective, MultiViewCalendarLocalizedMessagesDirective, DateInputLocalizedMessagesDirective, DatePickerLocalizedMessagesDirective, TimePickerLocalizedMessagesDirective, TimeSelectorLocalizedMessagesDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NkdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MEdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3lFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzBCQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzsyREFpQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29NQWlDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7bUVBMERFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7d0VBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21IQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O3FHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzsySUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzBKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NkpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z0tBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt5S0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z0tBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OE1BeURFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrS0E0RUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztxRkFrR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUZBK0dFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0dBc1BFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7OzttRUF3Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUZBc0VFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2lLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NkRBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7aUZBVUU7QUFDRjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2lTQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VTQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzhXQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1T0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUhBMEJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7eUhBa0RFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBZUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkF3QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3dKQUFDO0FBQ0Q7QUFDQTtBQUNBO3FGQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7aUtBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBcUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnTkFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7cUVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzswS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkEyQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzBMQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7dUZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQWVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs4S0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO3lGQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7bUtBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBeUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztvR0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzBHQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MEdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztnSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7NEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBJQStCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cU5Bb0hFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NFJBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7eUZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFXRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzttS0FZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3FLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFRRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z1lBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO3lFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7dUtBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tEQVdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQXdCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbmplY3Rpb25Ub2tlbiwgQ29tcG9uZW50LCBJbmplY3QsIEVsZW1lbnRSZWYsIFJlbmRlcmVyMiwgTmdab25lLCBJbnB1dCwgT3V0cHV0LCBIb3N0QmluZGluZywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBWaWV3Q2hpbGQsIERpcmVjdGl2ZSwgVGVtcGxhdGVSZWYsIGlzRGV2TW9kZSwgZm9yd2FyZFJlZiwgT3B0aW9uYWwsIENvbnRlbnRDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgSG9zdExpc3RlbmVyLCBWaWV3Q2hpbGRyZW4sIENvbnRlbnRDaGlsZHJlbiwgSXRlcmFibGVEaWZmZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IsIE5HX1ZBTElEQVRPUlMsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIEwxME5fUFJFRklYLCBSVEwsIENvbXBvbmVudE1lc3NhZ2VzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5pbXBvcnQgeyBnZXREYXRlLCBpc0VxdWFsLCBjbG9uZURhdGUsIGFkZERheXMsIGFkZERlY2FkZXMsIGFkZENlbnR1cmllcywgZmlyc3REZWNhZGVPZkNlbnR1cnksIGxhc3REZWNhZGVPZkNlbnR1cnksIGZpcnN0WWVhck9mRGVjYWRlLCBjcmVhdGVEYXRlLCBkdXJhdGlvbkluQ2VudHVyaWVzLCBhZGRZZWFycywgbGFzdFllYXJPZkRlY2FkZSwgZHVyYXRpb25JbkRlY2FkZXMsIGFkZFdlZWtzLCBhZGRNb250aHMsIGZpcnN0RGF5T2ZNb250aCwgbGFzdERheU9mTW9udGgsIGRheU9mV2VlaywgZHVyYXRpb25Jbk1vbnRocywgZmlyc3RNb250aE9mWWVhciwgbGFzdE1vbnRoT2ZZZWFyLCBkdXJhdGlvbkluWWVhcnMsIHdlZWtJblllYXIgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZGF0ZS1tYXRoJztcbmltcG9ydCB7IGlzRG9jdW1lbnRBdmFpbGFibGUsIEtlbmRvSW5wdXQsIGd1aWQsIGhhc09ic2VydmVycywgS2V5cywgRXZlbnRzTW9kdWxlLCBSZXNpemVTZW5zb3JNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgSW50bFNlcnZpY2UsIEludGxNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnRsJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG9mLCBpbnRlcnZhbCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGZyb21FdmVudCwgRU1QVFksIGZyb20sIFN1YnNjcmlwdGlvbiwgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzY2FuLCB0YWtlV2hpbGUsIHRhcCwgZmlsdGVyLCBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQb3B1cFNlcnZpY2UsIFBvcHVwTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItcG9wdXAnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHRvdWNoRW5hYmxlZCB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1jb21tb24nO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xudmFyIEFjdGlvbjtcbihmdW5jdGlvbiAoQWN0aW9uKSB7XG4gICAgQWN0aW9uW0FjdGlvbltcIkxlZnRcIl0gPSAwXSA9IFwiTGVmdFwiO1xuICAgIEFjdGlvbltBY3Rpb25bXCJSaWdodFwiXSA9IDFdID0gXCJSaWdodFwiO1xuICAgIEFjdGlvbltBY3Rpb25bXCJVcFwiXSA9IDJdID0gXCJVcFwiO1xuICAgIEFjdGlvbltBY3Rpb25bXCJEb3duXCJdID0gM10gPSBcIkRvd25cIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiUHJldlZpZXdcIl0gPSA0XSA9IFwiUHJldlZpZXdcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiTmV4dFZpZXdcIl0gPSA1XSA9IFwiTmV4dFZpZXdcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiRmlyc3RJblZpZXdcIl0gPSA2XSA9IFwiRmlyc3RJblZpZXdcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiTGFzdEluVmlld1wiXSA9IDddID0gXCJMYXN0SW5WaWV3XCI7XG4gICAgQWN0aW9uW0FjdGlvbltcIkxvd2VyVmlld1wiXSA9IDhdID0gXCJMb3dlclZpZXdcIjtcbiAgICBBY3Rpb25bQWN0aW9uW1wiVXBwZXJWaWV3XCJdID0gOV0gPSBcIlVwcGVyVmlld1wiO1xufSkoQWN0aW9uIHx8IChBY3Rpb24gPSB7fSkpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgRU1QVFlfU0VMRUNUSU9OUkFOR0UgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE1JRE5JR0hUX0RBVEUgPSBuZXcgRGF0ZSgxOTgwLCAwLCAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNSU5fREFURSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE1BWF9EQVRFID0gbmV3IERhdGUoMjA5OSwgMTEsIDMxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBNSU5fVElNRSA9IG5ldyBEYXRlKDE5ODAsIDAsIDEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE1BWF9USU1FID0gbmV3IERhdGUoMTk4MCwgMCwgMSwgMjMsIDU5LCA1OSk7XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2UgbWF4LWxpbmUtbGVuZ3RoICovXG5jb25zdCBpc1NldCA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHNldHRlciA9IChtZXRob2QpID0+IChkYXRlLCB2YWx1ZSkgPT4ge1xuICAgIGNvbnN0IGNsb25lID0gY2xvbmVEYXRlKGRhdGUpO1xuICAgIGNsb25lW21ldGhvZF0odmFsdWUpO1xuICAgIHJldHVybiBjbG9uZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc2V0VGltZSA9IChvcmlnaW4sIGNhbmRpZGF0ZSkgPT4ge1xuICAgIGNvbnN0IGRhdGUgPSBjbG9uZURhdGUob3JpZ2luKTtcbiAgICBkYXRlLnNldEhvdXJzKGNhbmRpZGF0ZS5nZXRIb3VycygpLCBjYW5kaWRhdGUuZ2V0TWludXRlcygpLCBjYW5kaWRhdGUuZ2V0U2Vjb25kcygpLCBjYW5kaWRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xuICAgIHJldHVybiBkYXRlO1xufTtcbmNvbnN0IG5vcm1hbGl6ZVRpbWVzID0gKGNhbmRpZGF0ZSwgbWluLCBtYXgpID0+ICh7XG4gICAgY2FuZGlkYXRlVmFsdWU6IHNldFRpbWUoTUlETklHSFRfREFURSwgY2FuZGlkYXRlKSxcbiAgICBtYXhWYWx1ZTogYWRkRGF5cyhzZXRUaW1lKE1JRE5JR0hUX0RBVEUsIG1heCksIG1pbi5nZXRIb3VycygpIDwgbWF4LmdldEhvdXJzKCkgfHxcbiAgICAgICAgKG1pbi5nZXRIb3VycygpID09PSBtYXguZ2V0SG91cnMoKSAmJiBtaW4uZ2V0TWludXRlcygpIDwgbWF4LmdldE1pbnV0ZXMoKSkgPyAwIDogMSksXG4gICAgbWluVmFsdWU6IHNldFRpbWUoTUlETklHSFRfREFURSwgbWluKVxufSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc2V0SG91cnMgPSBzZXR0ZXIoJ3NldEhvdXJzJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc2V0TWludXRlcyA9IHNldHRlcignc2V0TWludXRlcycpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNldFNlY29uZHMgPSBzZXR0ZXIoJ3NldFNlY29uZHMnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCByYW5nZSA9IChzdGFydCwgZW5kLCBzdGVwID0gMSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgaSA9IGkgKyBzdGVwKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0luUmFuZ2UgPSAoY2FuZGlkYXRlLCBtaW4sIG1heCkgPT4gKCFjYW5kaWRhdGUgfHwgISgobWluICYmIG1pbiA+IGNhbmRpZGF0ZSkgfHwgKG1heCAmJiBtYXggPCBjYW5kaWRhdGUpKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNJblRpbWVSYW5nZSA9IChjYW5kaWRhdGUsIG1pbiwgbWF4KSA9PiB7XG4gICAgaWYgKCFjYW5kaWRhdGUgfHwgIW1pbiB8fCAhbWF4KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB7IGNhbmRpZGF0ZVZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUgfSA9IG5vcm1hbGl6ZVRpbWVzKGNhbmRpZGF0ZSwgbWluLCBtYXgpO1xuICAgIHJldHVybiBtaW5WYWx1ZSA8PSBjYW5kaWRhdGVWYWx1ZSAmJiBjYW5kaWRhdGVWYWx1ZSA8PSBtYXhWYWx1ZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNWYWxpZFJhbmdlID0gKG1pbiwgbWF4KSA9PiAoIWlzU2V0KG1pbikgfHwgIWlzU2V0KG1heCkgfHwgbWluIDw9IG1heCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZGF0ZUluUmFuZ2UgPSAoY2FuZGlkYXRlLCBtaW4sIG1heCkgPT4ge1xuICAgIGlmICghY2FuZGlkYXRlKSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICAgIGlmIChtaW4gJiYgY2FuZGlkYXRlIDwgbWluKSB7XG4gICAgICAgIHJldHVybiBjbG9uZURhdGUobWluKTtcbiAgICB9XG4gICAgaWYgKG1heCAmJiBjYW5kaWRhdGUgPiBtYXgpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtYXgpO1xuICAgIH1cbiAgICByZXR1cm4gY2FuZGlkYXRlO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB0aW1lSW5SYW5nZSA9IChjYW5kaWRhdGUsIG1pbiwgbWF4KSA9PiB7XG4gICAgaWYgKCFjYW5kaWRhdGUgfHwgIW1pbiB8fCAhbWF4KSB7XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICAgIGNvbnN0IHsgY2FuZGlkYXRlVmFsdWUsIG1pblZhbHVlLCBtYXhWYWx1ZSB9ID0gbm9ybWFsaXplVGltZXMoY2FuZGlkYXRlLCBtaW4sIG1heCk7XG4gICAgaWYgKGNhbmRpZGF0ZVZhbHVlIDwgbWluVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHNldFRpbWUoY2FuZGlkYXRlLCBtaW4pO1xuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlVmFsdWUgPiBtYXhWYWx1ZSkge1xuICAgICAgICByZXR1cm4gc2V0VGltZShjYW5kaWRhdGUsIG1heCk7XG4gICAgfVxuICAgIHJldHVybiBjYW5kaWRhdGU7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdldE5vdyA9ICgpID0+IG5ldyBEYXRlKCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2V0VG9kYXkgPSAoKSA9PiBnZXREYXRlKG5ldyBEYXRlKCkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG5vb3AgPSAoXykgPT4geyB9OyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWVtcHR5XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNXaW5kb3dBdmFpbGFibGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzdHJpbmdpZnlDbGFzc09iamVjdCA9IChjbGFzc2VzKSA9PiB7XG4gICAgY29uc3QgcHVzaFRvQWNjID0gKGFjYywgY2xzKSA9PiBjbGFzc2VzW2Nsc10gPyBhY2MuY29uY2F0KGNscykgOiBhY2M7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGNsYXNzZXMpLnJlZHVjZShwdXNoVG9BY2MsIFtdKS5qb2luKCcgJyk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNoaWZ0V2Vla05hbWVzID0gKG5hbWVzLCBvZmZzZXQpID0+IChuYW1lcy5zbGljZShvZmZzZXQpLmNvbmNhdChuYW1lcy5zbGljZSgwLCBvZmZzZXQpKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgYXBwcm94aW1hdGVTdHJpbmdNYXRjaGluZyA9IChvbGRUZXh0T3JpZ2luLCBvbGRGb3JtYXQsIG5ld1RleHRPcmlnaW4sIGNhcmV0KSA9PiB7XG4gICAgLy8gUmVtb3ZlIHRoZSByaWdodCBwYXJ0IG9mIHRoZSBjdXJzb3IuXG4gICAgLy9vbGRGb3JtYXQgPSBvbGRGb3JtYXQuc3Vic3RyaW5nKDAsIGNhcmV0ICsgb2xkVGV4dC5sZW5ndGggLSBuZXdUZXh0Lmxlbmd0aCk7XG4gICAgY29uc3Qgb2xkSW5kZXggPSBjYXJldCArIG9sZFRleHRPcmlnaW4ubGVuZ3RoIC0gbmV3VGV4dE9yaWdpbi5sZW5ndGg7XG4gICAgY29uc3Qgb2xkVGV4dFNlcGFyYXRvciA9IG9sZFRleHRPcmlnaW5bb2xkSW5kZXhdO1xuICAgIGNvbnN0IG9sZFRleHQgPSBvbGRUZXh0T3JpZ2luLnN1YnN0cmluZygwLCBjYXJldCArIG9sZFRleHRPcmlnaW4ubGVuZ3RoIC0gbmV3VGV4dE9yaWdpbi5sZW5ndGgpO1xuICAgIGNvbnN0IG5ld1RleHQgPSBuZXdUZXh0T3JpZ2luLnN1YnN0cmluZygwLCBjYXJldCk7XG4gICAgY29uc3QgZGlmZiA9IFtdO1xuICAgIC8vIEhhbmRsZSB0eXBpbmcgYSBzaW5nbGUgY2hhcmFjdGVyIG92ZXIgdGhlIHNhbWUgc2VsZWN0aW9uLlxuICAgIGlmIChvbGRUZXh0ID09PSBuZXdUZXh0ICYmIGNhcmV0ID4gMCkge1xuICAgICAgICBkaWZmLnB1c2goW29sZEZvcm1hdFtjYXJldCAtIDFdLCBuZXdUZXh0W2NhcmV0IC0gMV1dKTtcbiAgICAgICAgcmV0dXJuIGRpZmY7XG4gICAgfVxuICAgIGlmIChvbGRUZXh0LmluZGV4T2YobmV3VGV4dCkgPT09IDAgJiYgKG5ld1RleHQubGVuZ3RoID09PSAwIHx8IG9sZEZvcm1hdFtuZXdUZXh0Lmxlbmd0aCAtIDFdICE9PSBvbGRGb3JtYXRbbmV3VGV4dC5sZW5ndGhdKSkge1xuICAgICAgICAvLyBIYW5kbGUgRGVsZXRlL0JhY2tzcGFjZS5cbiAgICAgICAgbGV0IGRlbGV0ZWRTeW1ib2wgPSBcIlwiO1xuICAgICAgICAvL1hYWDpcbiAgICAgICAgLy8gV2hvbGUgdGV4dCBpcyByZXBsYWNlZCB3aXRoIGEgc2FtZSBjaGFyXG4gICAgICAgIC8vIE5hc3R5IHBhdGNoIHJlcXVpcmVkIHRvIGtlZXAgdGhlIHNlbGVjdGlvbiBpbiB0aGUgZmlyc3Qgc2VnbWVudFxuICAgICAgICBpZiAobmV3VGV4dC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGRpZmYucHVzaChbb2xkRm9ybWF0WzBdLCBuZXdUZXh0WzBdXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IG5ld1RleHQubGVuZ3RoOyBpIDwgb2xkVGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKG9sZEZvcm1hdFtpXSAhPT0gZGVsZXRlZFN5bWJvbCAmJiBvbGRGb3JtYXRbaV0gIT09IFwiX1wiKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlZFN5bWJvbCA9IG9sZEZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICBkaWZmLnB1c2goW2RlbGV0ZWRTeW1ib2wsIFwiXCJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZjtcbiAgICB9XG4gICAgLy8gSGFuZGxlIGluc2VydGluZyB0ZXh0ICh0aGUgbmV3IHRleHQgaXMgbG9uZ2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSkuXG4gICAgLy8gSGFuZGxlIHR5cGluZyBvdmVyIGEgbGl0ZXJhbCBhcyB3ZWxsLlxuICAgIGlmIChuZXdUZXh0LmluZGV4T2Yob2xkVGV4dCkgPT09IDAgfHwgb2xkRm9ybWF0W2NhcmV0IC0gMV0gPT09IFwiX1wiKSB7XG4gICAgICAgIGxldCBzeW1ib2wgPSBvbGRGb3JtYXRbMF07XG4gICAgICAgIGZvciAobGV0IGkgPSBNYXRoLm1heCgwLCBvbGRUZXh0Lmxlbmd0aCAtIDEpOyBpIDwgb2xkRm9ybWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAob2xkRm9ybWF0W2ldICE9PSBcIl9cIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IG9sZEZvcm1hdFtpXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW1tzeW1ib2wsIG5ld1RleHRbY2FyZXQgLSAxXV1dO1xuICAgIH1cbiAgICAvLyBIYW5kbGUgZW50ZXJpbmcgYSBzcGFjZSBvciBhIHNlcGFyYXRvciwgZm9yIG5hdmlnYXRpb24gdG8gdGhlIG5leHQgaXRlbS5cbiAgICBpZiAobmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID09PSBcIiBcIiB8fCAobmV3VGV4dFtuZXdUZXh0Lmxlbmd0aCAtIDFdID09PSBvbGRUZXh0U2VwYXJhdG9yICYmIG9sZEZvcm1hdFtvbGRJbmRleF0gPT09ICdfJykpIHtcbiAgICAgICAgcmV0dXJuIFtbb2xkRm9ybWF0W2NhcmV0IC0gMV0sIFwiX1wiXV07XG4gICAgfVxuICAgIC8vIEhhbmRsZSB0eXBpbmcgb3ZlciBhIGNvcnJlY3RseSBzZWxlY3RlZCBwYXJ0LlxuICAgIHJldHVybiBbW29sZEZvcm1hdFtjYXJldCAtIDFdLCBuZXdUZXh0W2NhcmV0IC0gMV1dXTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZG9tQ29udGFpbmVyRmFjdG9yeSA9ICh0eXBlKSA9PiAoY2hpbGRyZW4sIGNsYXNzZXMgPSBcIlwiLCBzdHlsZXMgPSB7fSkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodHlwZSk7XG4gICAgY29udGFpbmVyLmNsYXNzTmFtZSA9IGNsYXNzZXM7XG4gICAgT2JqZWN0LmtleXMoc3R5bGVzKS5tYXAoa2V5ID0+IGNvbnRhaW5lci5zdHlsZVtrZXldID0gc3R5bGVzW2tleV0pO1xuICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBjaGlsZHJlbiB8fCAnJztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIChjaGlsZHJlbiB8fCBbXSkuZm9yRWFjaChjaGlsZCA9PiBjaGlsZCAmJiBjb250YWluZXIuYXBwZW5kQ2hpbGQoY2hpbGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRhaW5lcjtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzQ2hhbmdlID0gKGNoYW5nZXMsIGZpZWxkKSA9PiBjaGFuZ2VzW2ZpZWxkXSAhPT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0V4aXN0aW5nVmFsdWUgPSAoY2hhbmdlcywgZmllbGQpID0+IGNoYW5nZXNbZmllbGRdICYmIGNoYW5nZXNbZmllbGRdLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZXNbZmllbGRdLmN1cnJlbnRWYWx1ZSAhPT0gbnVsbDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0luU2VsZWN0aW9uUmFuZ2UgPSAodmFsdWUsIHNlbGVjdGlvblJhbmdlKSA9PiB7XG4gICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBzZWxlY3Rpb25SYW5nZSB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICBpZiAoIXN0YXJ0IHx8ICFlbmQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gc3RhcnQgPCB2YWx1ZSAmJiB2YWx1ZSA8IGVuZDtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZWl0aGVyID0gKHZhbHVlMSwgdmFsdWUyKSA9PiB2YWx1ZTEgfHwgdmFsdWUyO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNsYW1wUmFuZ2UgPSAodmFsdWUpID0+ICh7IHN0YXJ0OiB2YWx1ZSwgZW5kOiB2YWx1ZSB9KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0VxdWFsUmFuZ2UgPSAoaW5pdGlhbCwgdXBkYXRlZCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhcnQ6IGluaXRpYWxTdGFydCwgZW5kOiBpbml0aWFsRW5kIH0gPSBpbml0aWFsIHx8IEVNUFRZX1NFTEVDVElPTlJBTkdFO1xuICAgIGNvbnN0IHsgc3RhcnQ6IHVwZGF0ZWRTdGFydCwgZW5kOiB1cGRhdGVkRW5kIH0gPSB1cGRhdGVkIHx8IEVNUFRZX1NFTEVDVElPTlJBTkdFO1xuICAgIHJldHVybiBpc0VxdWFsKGluaXRpYWxTdGFydCwgdXBkYXRlZFN0YXJ0KSAmJiBpc0VxdWFsKGluaXRpYWxFbmQsIHVwZGF0ZWRFbmQpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIENyZWF0ZXMgYSBuZXcgZGF0ZSBiYXNlZCBvbiB0aGUgZGF0ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzcGVjaWZpZWQgZGF0ZSBwb3J0aW9uXG4gKiBhbmQgdGhlIHRpbWUgaW5mb3JtYXRpb24gZnJvbSB0aGUgdGltZSBwb3J0aW9uLlxuICogSWYgYSBwYXJhbWV0ZXIgaXMgbm90IHByb3ZpZGVkLCByZXR1cm5zIGBudWxsYC5cbiAqL1xuY29uc3QgbWVyZ2VEYXRlQW5kVGltZSA9IChkYXRlLCB0aW1lKSA9PiB7XG4gICAgaWYgKCEoZGF0ZSAmJiB0aW1lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgdGltZS5nZXRIb3VycygpLCB0aW1lLmdldE1pbnV0ZXMoKSwgdGltZS5nZXRTZWNvbmRzKCksIHRpbWUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBsYXN0TWlsbGlzZWNvbmRPZkRhdGUgPSAoZGF0ZSkgPT4ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgMjMsIDU5LCA1OSwgOTk5KTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggZGF0ZXMgcmFuZ2luZyBiZXR3ZWVuIGFuZCBpbmNsdWRpbmcgdGhlIHNwZWNpZmllZCBzdGFydCBhbmRcbiAqIGVuZCBkYXRlcyB0aGF0IGFyZSBldmFsdWF0ZWQgYXMgZGlzYWJsZWQuXG4gKi9cbmNvbnN0IGRpc2FibGVkRGF0ZXNJblJhbmdlID0gKHN0YXJ0LCBlbmQsIGlzRGF0ZURpc2FibGVkKSA9PiB7XG4gICAgaWYgKCEoc3RhcnQgJiYgZW5kICYmIGlzRGF0ZURpc2FibGVkKSB8fCAoc3RhcnQgPiBlbmQpKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgY29uc3QgZGF0ZXMgPSBbXTtcbiAgICBsZXQgY3VycmVudCA9IHN0YXJ0O1xuICAgIHdoaWxlIChjdXJyZW50IDw9IGVuZCkge1xuICAgICAgICBpZiAoaXNEYXRlRGlzYWJsZWQoY3VycmVudCkpIHtcbiAgICAgICAgICAgIGRhdGVzLnB1c2goY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGFkZERheXMoY3VycmVudCwgMSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRlcztcbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgRU1QVFlfREFUQSA9IFtbXV07XG5jb25zdCBDRUxMU19MRU5HVEggPSA1O1xuY29uc3QgUk9XU19MRU5HVEggPSAyO1xuY29uc3QgQUNUSU9OUyA9IHtcbiAgICBbQWN0aW9uLkxlZnRdOiAoZGF0ZSkgPT4gYWRkRGVjYWRlcyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5VcF06IChkYXRlKSA9PiBhZGREZWNhZGVzKGRhdGUsIC01KSxcbiAgICBbQWN0aW9uLlJpZ2h0XTogKGRhdGUpID0+IGFkZERlY2FkZXMoZGF0ZSwgMSksXG4gICAgW0FjdGlvbi5Eb3duXTogKGRhdGUpID0+IGFkZERlY2FkZXMoZGF0ZSwgNSksXG4gICAgW0FjdGlvbi5QcmV2Vmlld106IChkYXRlKSA9PiBhZGRDZW50dXJpZXMoZGF0ZSwgLTEpLFxuICAgIFtBY3Rpb24uTmV4dFZpZXddOiAoZGF0ZSkgPT4gYWRkQ2VudHVyaWVzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uRmlyc3RJblZpZXddOiAoZGF0ZSkgPT4gZmlyc3REZWNhZGVPZkNlbnR1cnkoZGF0ZSksXG4gICAgW0FjdGlvbi5MYXN0SW5WaWV3XTogKGRhdGUpID0+IGxhc3REZWNhZGVPZkNlbnR1cnkoZGF0ZSlcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ2VudHVyeVZpZXdTZXJ2aWNlIHtcbiAgICBhZGRUb0RhdGUobWluLCBza2lwKSB7XG4gICAgICAgIHJldHVybiBhZGRDZW50dXJpZXMobWluLCBza2lwKTtcbiAgICB9XG4gICAgZGF0ZXNMaXN0KHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgY291bnQpLm1hcChpID0+IGFkZENlbnR1cmllcyhzdGFydCwgaSkpO1xuICAgIH1cbiAgICBkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjZWxsVUlELCBmb2N1c2VkRGF0ZSwgaXNBY3RpdmVWaWV3LCBtYXgsIG1pbiwgc2VsZWN0ZWREYXRlLCBzZWxlY3Rpb25SYW5nZSA9IEVNUFRZX1NFTEVDVElPTlJBTkdFLCB2aWV3RGF0ZSB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKCF2aWV3RGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0RBVEE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbHMgPSByYW5nZSgwLCBDRUxMU19MRU5HVEgpO1xuICAgICAgICBjb25zdCBmaXJzdERhdGUgPSBmaXJzdERlY2FkZU9mQ2VudHVyeSh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGxhc3REYXRlID0gbGFzdERlY2FkZU9mQ2VudHVyeSh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWREYXRlSW5SYW5nZSA9IGlzSW5SYW5nZShzZWxlY3RlZERhdGUsIG1pbiwgbWF4KTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBnZXRUb2RheSgpO1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgUk9XU19MRU5HVEgpLm1hcChyb3dPZmZzZXQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYmFzZURhdGUgPSBhZGREZWNhZGVzKGZpcnN0RGF0ZSwgcm93T2Zmc2V0ICogQ0VMTFNfTEVOR1RIKTtcbiAgICAgICAgICAgIHJldHVybiBjZWxscy5tYXAoY2VsbE9mZnNldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGUgPSB0aGlzLm5vcm1hbGl6ZShhZGREZWNhZGVzKGJhc2VEYXRlLCBjZWxsT2Zmc2V0KSwgbWluLCBtYXgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoY2VsbERhdGUsIG1pbiwgbWF4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVN0YXJ0ID0gdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZUVuZCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2UuZW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luTWlkZGxlID0gIWlzUmFuZ2VTdGFydCAmJiAhaXNSYW5nZUVuZDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlTWlkID0gaXNJbk1pZGRsZSAmJiBpc0luU2VsZWN0aW9uUmFuZ2UoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogdGhpcy52YWx1ZShjZWxsRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgJHtjZWxsVUlEfSR7Y2VsbERhdGUuZ2V0VGltZSgpfWAsXG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmb2N1c2VkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzQWN0aXZlVmlldyAmJiBpc1NlbGVjdGVkRGF0ZUluUmFuZ2UgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3RlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1dlZWtlbmQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3RhcnQ6IGlzUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZU1pZDogaXNSYW5nZU1pZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZUVuZDogaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0RW5kOiBpc1JhbmdlTWlkICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbGFzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3BsaXRTdGFydDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGZpcnN0RGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXk6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgdG9kYXkpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5jZWxsVGl0bGUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2VsbERhdGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0VxdWFsKGNhbmRpZGF0ZSwgZXhwZWN0ZWQpIHtcbiAgICAgICAgaWYgKCFjYW5kaWRhdGUgfHwgIWV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpcnN0WWVhck9mRGVjYWRlKGNhbmRpZGF0ZSkuZ2V0RnVsbFllYXIoKSA9PT0gZmlyc3RZZWFyT2ZEZWNhZGUoZXhwZWN0ZWQpLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICAgIGlzSW5BcnJheShkYXRlLCBkYXRlcykge1xuICAgICAgICBpZiAoIWRhdGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHJldHVybiBkYXRlc1swXS5nZXRGdWxsWWVhcigpIDw9IHllYXIgJiYgeWVhciA8PSAoZGF0ZXNbZGF0ZXMubGVuZ3RoIC0gMV0uZ2V0RnVsbFllYXIoKSArIDk5KTtcbiAgICB9XG4gICAgaXNJblJhbmdlKGNhbmRpZGF0ZSwgbWluLCBtYXgpIHtcbiAgICAgICAgY29uc3QgeWVhciA9IGZpcnN0WWVhck9mRGVjYWRlKGNhbmRpZGF0ZSkuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgY29uc3QgYWJvdmVNaW4gPSAhbWluIHx8IGZpcnN0WWVhck9mRGVjYWRlKG1pbikuZ2V0RnVsbFllYXIoKSA8PSB5ZWFyO1xuICAgICAgICBjb25zdCBiZWxvd01heCA9ICFtYXggfHwgeWVhciA8PSBmaXJzdFllYXJPZkRlY2FkZShtYXgpLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHJldHVybiBhYm92ZU1pbiAmJiBiZWxvd01heDtcbiAgICB9XG4gICAgYmVnaW5uaW5nT2ZQZXJpb2QoZGF0ZSkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0WWVhciA9IGZpcnN0WWVhck9mRGVjYWRlKGZpcnN0RGVjYWRlT2ZDZW50dXJ5KGRhdGUpKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZURhdGUoZmlyc3RZZWFyLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgIH1cbiAgICBpc1JhbmdlU3RhcnQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgJSAxMDAwID09PSAwO1xuICAgIH1cbiAgICBtb3ZlKHZhbHVlLCBhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBBQ1RJT05TW2FjdGlvbl07XG4gICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kaWZpZXIodmFsdWUpO1xuICAgIH1cbiAgICBjZWxsVGl0bGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0WWVhck9mRGVjYWRlKHZhbHVlKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIG5hdmlnYXRpb25UaXRsZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPyBmaXJzdERlY2FkZU9mQ2VudHVyeSh2YWx1ZSkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHRpdGxlKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7Zmlyc3REZWNhZGVPZkNlbnR1cnkodmFsdWUpLmdldEZ1bGxZZWFyKCl9IC0gJHtsYXN0RGVjYWRlT2ZDZW50dXJ5KHZhbHVlKS5nZXRGdWxsWWVhcigpfWA7XG4gICAgfVxuICAgIHJvd0xlbmd0aChfKSB7XG4gICAgICAgIHJldHVybiBDRUxMU19MRU5HVEg7XG4gICAgfVxuICAgIHNraXAodmFsdWUsIG1pbikge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25JbkNlbnR1cmllcyhtaW4sIHZhbHVlKTtcbiAgICB9XG4gICAgdG90YWwobWluLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uSW5DZW50dXJpZXMobWluLCBtYXgpICsgMTtcbiAgICB9XG4gICAgdmFsdWUoY3VycmVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IGZpcnN0WWVhck9mRGVjYWRlKGN1cnJlbnQpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSA6ICcnO1xuICAgIH1cbiAgICB2aWV3RGF0ZShkYXRlLCBtYXgsIHZpZXdzQ291bnQgPSAxKSB7XG4gICAgICAgIGNvbnN0IHZpZXdzSW5SYW5nZSA9IHRoaXMudG90YWwoZGF0ZSwgbWF4KTtcbiAgICAgICAgaWYgKHZpZXdzSW5SYW5nZSA8IHZpZXdzQ291bnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbnR1cmllc1RvU3VidHJhY3QgPSB2aWV3c0NvdW50IC0gdmlld3NJblJhbmdlO1xuICAgICAgICAgICAgcmV0dXJuIGFkZENlbnR1cmllcyhkYXRlLCAtMSAqIGNlbnR1cmllc1RvU3VidHJhY3QpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cbiAgICBub3JtYWxpemUoY2VsbERhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmIChjZWxsRGF0ZSA8IG1pbiAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIG1pbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGUobWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbERhdGUgPiBtYXggJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxEYXRlO1xuICAgIH1cbn1cbkNlbnR1cnlWaWV3U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyogdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzICovXG5jb25zdCBFTVBUWV9EQVRBJDEgPSBbW11dO1xuY29uc3QgQ0VMTFNfTEVOR1RIJDEgPSA1O1xuY29uc3QgUk9XU19MRU5HVEgkMSA9IDI7XG5jb25zdCBBQ1RJT05TJDEgPSB7XG4gICAgW0FjdGlvbi5MZWZ0XTogKGRhdGUpID0+IGFkZFllYXJzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLlVwXTogKGRhdGUpID0+IGFkZFllYXJzKGRhdGUsIC01KSxcbiAgICBbQWN0aW9uLlJpZ2h0XTogKGRhdGUpID0+IGFkZFllYXJzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uRG93bl06IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCA1KSxcbiAgICBbQWN0aW9uLlByZXZWaWV3XTogKGRhdGUpID0+IGFkZERlY2FkZXMoZGF0ZSwgLTEpLFxuICAgIFtBY3Rpb24uTmV4dFZpZXddOiAoZGF0ZSkgPT4gYWRkRGVjYWRlcyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkZpcnN0SW5WaWV3XTogKGRhdGUpID0+IGZpcnN0WWVhck9mRGVjYWRlKGRhdGUpLFxuICAgIFtBY3Rpb24uTGFzdEluVmlld106IChkYXRlKSA9PiBsYXN0WWVhck9mRGVjYWRlKGRhdGUpXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERlY2FkZVZpZXdTZXJ2aWNlIHtcbiAgICBhZGRUb0RhdGUobWluLCBza2lwKSB7XG4gICAgICAgIHJldHVybiBhZGREZWNhZGVzKG1pbiwgc2tpcCk7XG4gICAgfVxuICAgIGRhdGVzTGlzdChzdGFydCwgY291bnQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKDAsIGNvdW50KS5tYXAoaSA9PiBhZGREZWNhZGVzKHN0YXJ0LCBpKSk7XG4gICAgfVxuICAgIGRhdGEob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNlbGxVSUQsIGZvY3VzZWREYXRlLCBpc0FjdGl2ZVZpZXcsIG1heCwgbWluLCBzZWxlY3RlZERhdGUsIHNlbGVjdGlvblJhbmdlID0gRU1QVFlfU0VMRUNUSU9OUkFOR0UsIHZpZXdEYXRlIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoIXZpZXdEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfREFUQSQxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxzID0gcmFuZ2UoMCwgQ0VMTFNfTEVOR1RIJDEpO1xuICAgICAgICBjb25zdCBmaXJzdERhdGUgPSBmaXJzdFllYXJPZkRlY2FkZSh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGxhc3REYXRlID0gbGFzdFllYXJPZkRlY2FkZSh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWREYXRlSW5SYW5nZSA9IGlzSW5SYW5nZShzZWxlY3RlZERhdGUsIG1pbiwgbWF4KTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBnZXRUb2RheSgpO1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgUk9XU19MRU5HVEgkMSkubWFwKHJvd09mZnNldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlRGF0ZSA9IGFkZFllYXJzKGZpcnN0RGF0ZSwgcm93T2Zmc2V0ICogQ0VMTFNfTEVOR1RIJDEpO1xuICAgICAgICAgICAgcmV0dXJuIGNlbGxzLm1hcChjZWxsT2Zmc2V0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsRGF0ZSA9IHRoaXMubm9ybWFsaXplKGFkZFllYXJzKGJhc2VEYXRlLCBjZWxsT2Zmc2V0KSwgbWluLCBtYXgpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luUmFuZ2UoY2VsbERhdGUsIG1pbiwgbWF4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZVN0YXJ0ID0gdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZS5zdGFydCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZUVuZCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2UuZW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0luTWlkZGxlID0gIWlzUmFuZ2VTdGFydCAmJiAhaXNSYW5nZUVuZDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlTWlkID0gaXNJbk1pZGRsZSAmJiBpc0luU2VsZWN0aW9uUmFuZ2UoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogdGhpcy52YWx1ZShjZWxsRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgJHtjZWxsVUlEfSR7Y2VsbERhdGUuZ2V0VGltZSgpfWAsXG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmb2N1c2VkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzQWN0aXZlVmlldyAmJiBpc1NlbGVjdGVkRGF0ZUluUmFuZ2UgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3RlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1dlZWtlbmQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3RhcnQ6IGlzUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZU1pZDogaXNSYW5nZU1pZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZUVuZDogaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0RW5kOiBpc1JhbmdlTWlkICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbGFzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3BsaXRTdGFydDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGZpcnN0RGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXk6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgdG9kYXkpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5jZWxsVGl0bGUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2VsbERhdGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0VxdWFsKGNhbmRpZGF0ZSwgZXhwZWN0ZWQpIHtcbiAgICAgICAgaWYgKCFjYW5kaWRhdGUgfHwgIWV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5nZXRGdWxsWWVhcigpID09PSBleHBlY3RlZC5nZXRGdWxsWWVhcigpO1xuICAgIH1cbiAgICBpc0luQXJyYXkoZGF0ZSwgZGF0ZXMpIHtcbiAgICAgICAgaWYgKCFkYXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICByZXR1cm4gZGF0ZXNbMF0uZ2V0RnVsbFllYXIoKSA8PSB5ZWFyICYmIHllYXIgPD0gKGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdLmdldEZ1bGxZZWFyKCkgKyA5KTtcbiAgICB9XG4gICAgaXNJblJhbmdlKGNhbmRpZGF0ZSwgbWluLCBtYXgpIHtcbiAgICAgICAgY29uc3QgeWVhciA9IGNhbmRpZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBhYm92ZU1pbiA9ICFtaW4gfHwgbWluLmdldEZ1bGxZZWFyKCkgPD0geWVhcjtcbiAgICAgICAgY29uc3QgYmVsb3dNYXggPSAhbWF4IHx8IHllYXIgPD0gbWF4LmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHJldHVybiBhYm92ZU1pbiAmJiBiZWxvd01heDtcbiAgICB9XG4gICAgYmVnaW5uaW5nT2ZQZXJpb2QoZGF0ZSkge1xuICAgICAgICBpZiAoIWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpcnN0WWVhciA9IGZpcnN0WWVhck9mRGVjYWRlKGRhdGUpO1xuICAgICAgICByZXR1cm4gY3JlYXRlRGF0ZShmaXJzdFllYXIuZ2V0RnVsbFllYXIoKSwgMCwgMSk7XG4gICAgfVxuICAgIGlzUmFuZ2VTdGFydCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUuZ2V0RnVsbFllYXIoKSAlIDEwMCA9PT0gMDtcbiAgICB9XG4gICAgbW92ZSh2YWx1ZSwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gQUNUSU9OUyQxW2FjdGlvbl07XG4gICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kaWZpZXIodmFsdWUpO1xuICAgIH1cbiAgICBjZWxsVGl0bGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgbmF2aWdhdGlvblRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA/IGZpcnN0WWVhck9mRGVjYWRlKHZhbHVlKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgOiAnJztcbiAgICB9XG4gICAgdGl0bGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtmaXJzdFllYXJPZkRlY2FkZSh2YWx1ZSkuZ2V0RnVsbFllYXIoKX0gLSAke2xhc3RZZWFyT2ZEZWNhZGUodmFsdWUpLmdldEZ1bGxZZWFyKCl9YDtcbiAgICB9XG4gICAgcm93TGVuZ3RoKF8pIHtcbiAgICAgICAgcmV0dXJuIENFTExTX0xFTkdUSCQxO1xuICAgIH1cbiAgICBza2lwKHZhbHVlLCBtaW4pIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uSW5EZWNhZGVzKG1pbiwgdmFsdWUpO1xuICAgIH1cbiAgICB0b3RhbChtaW4sIG1heCkge1xuICAgICAgICByZXR1cm4gZHVyYXRpb25JbkRlY2FkZXMobWluLCBtYXgpICsgMTtcbiAgICB9XG4gICAgdmFsdWUoY3VycmVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHZpZXdEYXRlKGRhdGUsIG1heCwgdmlld3NDb3VudCA9IDEpIHtcbiAgICAgICAgY29uc3Qgdmlld3NJblJhbmdlID0gdGhpcy50b3RhbChkYXRlLCBtYXgpO1xuICAgICAgICBpZiAodmlld3NJblJhbmdlIDwgdmlld3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgZGVjYWRlc1RvU3VidHJhY3QgPSB2aWV3c0NvdW50IC0gdmlld3NJblJhbmdlO1xuICAgICAgICAgICAgcmV0dXJuIGFkZERlY2FkZXMoZGF0ZSwgLTEgKiBkZWNhZGVzVG9TdWJ0cmFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIG5vcm1hbGl6ZShjZWxsRGF0ZSwgbWluLCBtYXgpIHtcbiAgICAgICAgaWYgKGNlbGxEYXRlIDwgbWluICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbWluKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtaW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsRGF0ZSA+IG1heCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGUobWF4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2VsbERhdGU7XG4gICAgfVxufVxuRGVjYWRlVmlld1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm9iamVjdC1saXRlcmFsLXNvcnQta2V5cyAqL1xuY29uc3QgRU1QVFlfREFUQSQyID0gW1tdXTtcbmNvbnN0IENFTExTX0xFTkdUSCQyID0gNztcbmNvbnN0IFJPV1NfTEVOR1RIJDIgPSA2O1xuY29uc3QgQUNUSU9OUyQyID0ge1xuICAgIFtBY3Rpb24uTGVmdF06IChkYXRlKSA9PiBhZGREYXlzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLlVwXTogKGRhdGUpID0+IGFkZFdlZWtzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLlJpZ2h0XTogKGRhdGUpID0+IGFkZERheXMoZGF0ZSwgMSksXG4gICAgW0FjdGlvbi5Eb3duXTogKGRhdGUpID0+IGFkZFdlZWtzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uUHJldlZpZXddOiAoZGF0ZSkgPT4gYWRkTW9udGhzKGRhdGUsIC0xKSxcbiAgICBbQWN0aW9uLk5leHRWaWV3XTogKGRhdGUpID0+IGFkZE1vbnRocyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkZpcnN0SW5WaWV3XTogKGRhdGUpID0+IGZpcnN0RGF5T2ZNb250aChkYXRlKSxcbiAgICBbQWN0aW9uLkxhc3RJblZpZXddOiAoZGF0ZSkgPT4gbGFzdERheU9mTW9udGgoZGF0ZSlcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTW9udGhWaWV3U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoX2ludGxTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuX2ludGxTZXJ2aWNlID0gX2ludGxTZXJ2aWNlO1xuICAgIH1cbiAgICBhZGRUb0RhdGUobWluLCBza2lwKSB7XG4gICAgICAgIHJldHVybiBhZGRNb250aHMobWluLCBza2lwKTtcbiAgICB9XG4gICAgZGF0ZXNMaXN0KHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgY291bnQpLm1hcChpID0+IGFkZE1vbnRocyhzdGFydCwgaSkpO1xuICAgIH1cbiAgICBkYXRhKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgeyBjZWxsVUlELCBmb2N1c2VkRGF0ZSwgaXNBY3RpdmVWaWV3LCBtYXgsIG1pbiwgc2VsZWN0ZWREYXRlLCBzZWxlY3Rpb25SYW5nZSA9IEVNUFRZX1NFTEVDVElPTlJBTkdFLCB2aWV3RGF0ZSwgaXNEYXRlRGlzYWJsZWQgPSAoKSA9PiBmYWxzZSB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKCF2aWV3RGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIEVNUFRZX0RBVEEkMjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE1vbnRoRGF0ZSA9IGZpcnN0RGF5T2ZNb250aCh2aWV3RGF0ZSk7XG4gICAgICAgIGNvbnN0IGZpcnN0TW9udGhEYXkgPSBnZXREYXRlKGZpcnN0TW9udGhEYXRlKTtcbiAgICAgICAgY29uc3QgbGFzdE1vbnRoRGF0ZSA9IGxhc3REYXlPZk1vbnRoKHZpZXdEYXRlKTtcbiAgICAgICAgY29uc3QgbGFzdE1vbnRoRGF5ID0gZ2V0RGF0ZShsYXN0TW9udGhEYXRlKTtcbiAgICAgICAgY29uc3QgYmFja3dhcmQgPSAtMTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZERhdGVJblJhbmdlID0gaXNJblJhbmdlKHNlbGVjdGVkRGF0ZSwgbWluLCBtYXgpO1xuICAgICAgICBjb25zdCBkYXRlID0gZGF5T2ZXZWVrKGZpcnN0TW9udGhEYXRlLCB0aGlzLl9pbnRsU2VydmljZS5maXJzdERheSgpLCBiYWNrd2FyZCk7XG4gICAgICAgIGNvbnN0IGNlbGxzID0gcmFuZ2UoMCwgQ0VMTFNfTEVOR1RIJDIpO1xuICAgICAgICBjb25zdCB0b2RheSA9IGdldFRvZGF5KCk7XG4gICAgICAgIHJldHVybiByYW5nZSgwLCBST1dTX0xFTkdUSCQyKS5tYXAocm93T2Zmc2V0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VEYXRlID0gYWRkRGF5cyhkYXRlLCByb3dPZmZzZXQgKiBDRUxMU19MRU5HVEgkMik7XG4gICAgICAgICAgICByZXR1cm4gY2VsbHMubWFwKGNlbGxPZmZzZXQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxEYXRlID0gdGhpcy5ub3JtYWxpemUoYWRkRGF5cyhiYXNlRGF0ZSwgY2VsbE9mZnNldCksIG1pbiwgbWF4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsRGF5ID0gZ2V0RGF0ZShjZWxsRGF0ZSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3RoZXJNb250aCA9IGNlbGxEYXkgPCBmaXJzdE1vbnRoRGF5IHx8IGNlbGxEYXkgPiBsYXN0TW9udGhEYXk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0T2ZSYW5nZSA9IGNlbGxEYXRlIDwgbWluIHx8IGNlbGxEYXRlID4gbWF4O1xuICAgICAgICAgICAgICAgIGlmIChvdGhlck1vbnRoIHx8IG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VTdGFydCA9IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2Uuc3RhcnQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VFbmQgPSB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlLmVuZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNJbk1pZGRsZSA9ICFpc1JhbmdlU3RhcnQgJiYgIWlzUmFuZ2VFbmQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSYW5nZU1pZCA9IGlzSW5NaWRkbGUgJiYgaXNJblNlbGVjdGlvblJhbmdlKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IHRoaXMudmFsdWUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpZDogYCR7Y2VsbFVJRH0ke2NlbGxEYXRlLmdldFRpbWUoKX1gLFxuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzZWQ6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgZm9jdXNlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpc0FjdGl2ZVZpZXcgJiYgaXNTZWxlY3RlZERhdGVJblJhbmdlICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgc2VsZWN0ZWREYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNXZWVrZW5kOiB0aGlzLmlzV2Vla2VuZChjZWxsRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzUmFuZ2VTdGFydDogaXNSYW5nZVN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlTWlkOiBpc1JhbmdlTWlkLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlRW5kOiBpc1JhbmdlRW5kLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3BsaXRTdGFydDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGZpcnN0TW9udGhEYXRlKSxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0RW5kOiBpc1JhbmdlTWlkICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbGFzdE1vbnRoRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXk6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgdG9kYXkpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5jZWxsVGl0bGUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2VsbERhdGUsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzYWJsZWQ6IGlzRGF0ZURpc2FibGVkKGNlbGxEYXRlKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlzRXF1YWwoY2FuZGlkYXRlLCBleHBlY3RlZCkge1xuICAgICAgICBpZiAoIWNhbmRpZGF0ZSB8fCAhZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RGF0ZShjYW5kaWRhdGUpLmdldFRpbWUoKSA9PT0gZ2V0RGF0ZShleHBlY3RlZCkuZ2V0VGltZSgpO1xuICAgIH1cbiAgICBpc0luQXJyYXkoZGF0ZSwgZGF0ZXMpIHtcbiAgICAgICAgaWYgKGRhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0aGlzLmJlZ2lubmluZ09mUGVyaW9kKGRhdGVzWzBdKTtcbiAgICAgICAgY29uc3QgdXBwZXJCb3VuZCA9IHRoaXMuYmVnaW5uaW5nT2ZQZXJpb2QoYWRkTW9udGhzKGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdLCAxKSk7XG4gICAgICAgIHJldHVybiBsb3dlckJvdW5kIDw9IGRhdGUgJiYgZGF0ZSA8IHVwcGVyQm91bmQ7XG4gICAgfVxuICAgIGlzSW5SYW5nZShjYW5kaWRhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZ2V0RGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICBjb25zdCBhYm92ZU1pbiA9ICFtaW4gfHwgZ2V0RGF0ZShtaW4pIDw9IHZhbHVlO1xuICAgICAgICBjb25zdCBiZWxvd01heCA9ICFtYXggfHwgdmFsdWUgPD0gZ2V0RGF0ZShtYXgpO1xuICAgICAgICByZXR1cm4gYWJvdmVNaW4gJiYgYmVsb3dNYXg7XG4gICAgfVxuICAgIGJlZ2lubmluZ09mUGVyaW9kKGRhdGUpIHtcbiAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgMSk7XG4gICAgfVxuICAgIGlzUmFuZ2VTdGFydCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gIXZhbHVlLmdldE1vbnRoKCk7XG4gICAgfVxuICAgIG1vdmUodmFsdWUsIGFjdGlvbikge1xuICAgICAgICBjb25zdCBtb2RpZmllciA9IEFDVElPTlMkMlthY3Rpb25dO1xuICAgICAgICBpZiAoIW1vZGlmaWVyKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1vZGlmaWVyKHZhbHVlKTtcbiAgICB9XG4gICAgY2VsbFRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsU2VydmljZS5mb3JtYXREYXRlKHZhbHVlLCAnRCcpO1xuICAgIH1cbiAgICBuYXZpZ2F0aW9uVGl0bGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmFuZ2VTdGFydCh2YWx1ZSkgPyB2YWx1ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkgOiB0aGlzLmFiYnJNb250aE5hbWVzKClbdmFsdWUuZ2V0TW9udGgoKV07XG4gICAgfVxuICAgIHRpdGxlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMud2lkZU1vbnRoTmFtZXMoKVtjdXJyZW50LmdldE1vbnRoKCldfSAke2N1cnJlbnQuZ2V0RnVsbFllYXIoKX1gO1xuICAgIH1cbiAgICByb3dMZW5ndGgocHJlcGVuZENlbGwpIHtcbiAgICAgICAgcmV0dXJuIENFTExTX0xFTkdUSCQyICsgKHByZXBlbmRDZWxsID8gMSA6IDApO1xuICAgIH1cbiAgICBza2lwKHZhbHVlLCBtaW4pIHtcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uSW5Nb250aHMobWluLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRvdGFsKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluTW9udGhzKG1pbiwgbWF4KSArIDE7XG4gICAgfVxuICAgIHZhbHVlKGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQgPyBjdXJyZW50LmdldERhdGUoKS50b1N0cmluZygpIDogXCJcIjtcbiAgICB9XG4gICAgdmlld0RhdGUoZGF0ZSwgbWF4LCB2aWV3c0NvdW50ID0gMSkge1xuICAgICAgICBjb25zdCB2aWV3c0luUmFuZ2UgPSB0aGlzLnRvdGFsKGRhdGUsIG1heCk7XG4gICAgICAgIGlmICh2aWV3c0luUmFuZ2UgPCB2aWV3c0NvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBtb250aHNUb1N1YnRyYWN0ID0gdmlld3NDb3VudCAtIHZpZXdzSW5SYW5nZTtcbiAgICAgICAgICAgIHJldHVybiBhZGRNb250aHMoZGF0ZSwgLTEgKiBtb250aHNUb1N1YnRyYWN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gICAgaXNXZWVrZW5kKGRhdGUpIHtcbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLl9pbnRsU2VydmljZS53ZWVrZW5kUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgZGF5ID0gZGF0ZS5nZXREYXkoKTtcbiAgICAgICAgaWYgKGVuZCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5IDw9IGVuZCB8fCBzdGFydCA8PSBkYXk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0YXJ0IDw9IGRheSAmJiBkYXkgPD0gZW5kO1xuICAgIH1cbiAgICBhYmJyTW9udGhOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludGxTZXJ2aWNlLmRhdGVGb3JtYXROYW1lcyh7IG5hbWVUeXBlOiAnYWJicmV2aWF0ZWQnLCB0eXBlOiAnbW9udGhzJyB9KTtcbiAgICB9XG4gICAgbm9ybWFsaXplKGNlbGxEYXRlLCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoY2VsbERhdGUgPCBtaW4gJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtaW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1pbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGxEYXRlID4gbWF4ICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIGNsb25lRGF0ZShtYXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjZWxsRGF0ZTtcbiAgICB9XG4gICAgd2lkZU1vbnRoTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnRsU2VydmljZS5kYXRlRm9ybWF0TmFtZXMoeyBuYW1lVHlwZTogJ3dpZGUnLCB0eXBlOiAnbW9udGhzJyB9KTtcbiAgICB9XG59XG5Nb250aFZpZXdTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Nb250aFZpZXdTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuLyogdHNsaW50OmRpc2FibGU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzICovXG5jb25zdCBFTVBUWV9EQVRBJDMgPSBbW11dO1xuY29uc3QgQ0VMTFNfTEVOR1RIJDMgPSA1O1xuY29uc3QgUk9XU19MRU5HVEgkMyA9IDM7XG5jb25zdCB1cFN0ZXAgPSAobW9udGgpID0+IHtcbiAgICBpZiAobW9udGggPiA0KSB7XG4gICAgICAgIHJldHVybiAtNTtcbiAgICB9XG4gICAgaWYgKG1vbnRoIDwgMikge1xuICAgICAgICByZXR1cm4gLTI7XG4gICAgfVxuICAgIHJldHVybiAtNztcbn07XG5jb25zdCBkb3duU3RlcCA9IChtb250aCkgPT4ge1xuICAgIGlmIChtb250aCA8IDcpIHtcbiAgICAgICAgcmV0dXJuIDU7XG4gICAgfVxuICAgIGlmIChtb250aCA8IDEwKSB7XG4gICAgICAgIHJldHVybiA3O1xuICAgIH1cbiAgICByZXR1cm4gMjtcbn07XG5jb25zdCBBQ1RJT05TJDMgPSB7XG4gICAgW0FjdGlvbi5MZWZ0XTogKGRhdGUpID0+IGFkZE1vbnRocyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5VcF06IChkYXRlKSA9PiBhZGRNb250aHMoZGF0ZSwgdXBTdGVwKGRhdGUuZ2V0TW9udGgoKSkpLFxuICAgIFtBY3Rpb24uUmlnaHRdOiAoZGF0ZSkgPT4gYWRkTW9udGhzKGRhdGUsIDEpLFxuICAgIFtBY3Rpb24uRG93bl06IChkYXRlKSA9PiBhZGRNb250aHMoZGF0ZSwgZG93blN0ZXAoZGF0ZS5nZXRNb250aCgpKSksXG4gICAgW0FjdGlvbi5QcmV2Vmlld106IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCAtMSksXG4gICAgW0FjdGlvbi5OZXh0Vmlld106IChkYXRlKSA9PiBhZGRZZWFycyhkYXRlLCAxKSxcbiAgICBbQWN0aW9uLkZpcnN0SW5WaWV3XTogKGRhdGUpID0+IGZpcnN0TW9udGhPZlllYXIoZGF0ZSksXG4gICAgW0FjdGlvbi5MYXN0SW5WaWV3XTogKGRhdGUpID0+IGxhc3RNb250aE9mWWVhcihkYXRlKVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBZZWFyVmlld1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKF9pbnRsU2VydmljZSkge1xuICAgICAgICB0aGlzLl9pbnRsU2VydmljZSA9IF9pbnRsU2VydmljZTtcbiAgICB9XG4gICAgYWRkVG9EYXRlKG1pbiwgc2tpcCkge1xuICAgICAgICByZXR1cm4gYWRkWWVhcnMobWluLCBza2lwKTtcbiAgICB9XG4gICAgZGF0ZXNMaXN0KHN0YXJ0LCBjb3VudCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgY291bnQpLm1hcChpID0+IGFkZFllYXJzKHN0YXJ0LCBpKSk7XG4gICAgfVxuICAgIGRhdGEob3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IGNlbGxVSUQsIGZvY3VzZWREYXRlLCBpc0FjdGl2ZVZpZXcsIG1heCwgbWluLCBzZWxlY3RlZERhdGUsIHNlbGVjdGlvblJhbmdlID0gRU1QVFlfU0VMRUNUSU9OUkFOR0UsIHZpZXdEYXRlIH0gPSBvcHRpb25zO1xuICAgICAgICBpZiAoIXZpZXdEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFlfREFUQSQzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vbnRocyA9IHRoaXMuYWJick1vbnRoTmFtZXMoKTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RlZERhdGVJblJhbmdlID0gaXNJblJhbmdlKHNlbGVjdGVkRGF0ZSwgbWluLCBtYXgpO1xuICAgICAgICBjb25zdCBmaXJzdERhdGUgPSBmaXJzdE1vbnRoT2ZZZWFyKHZpZXdEYXRlKTtcbiAgICAgICAgY29uc3QgbGFzdERhdGUgPSBsYXN0TW9udGhPZlllYXIodmlld0RhdGUpO1xuICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGZpcnN0RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBjb25zdCBjZWxscyA9IHJhbmdlKDAsIENFTExTX0xFTkdUSCQzKTtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBnZXRUb2RheSgpO1xuICAgICAgICByZXR1cm4gcmFuZ2UoMCwgUk9XU19MRU5HVEgkMykubWFwKHJvd09mZnNldCA9PiB7XG4gICAgICAgICAgICBjb25zdCBiYXNlRGF0ZSA9IGFkZE1vbnRocyhmaXJzdERhdGUsIHJvd09mZnNldCAqIENFTExTX0xFTkdUSCQzKTtcbiAgICAgICAgICAgIHJldHVybiBjZWxscy5tYXAoY2VsbE9mZnNldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbERhdGUgPSB0aGlzLm5vcm1hbGl6ZShhZGRNb250aHMoYmFzZURhdGUsIGNlbGxPZmZzZXQpLCBtaW4sIG1heCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZFllYXIgPSBjdXJyZW50WWVhciA8IGNlbGxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW5SYW5nZShjZWxsRGF0ZSwgbWluLCBtYXgpIHx8IGNoYW5nZWRZZWFyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlU3RhcnQgPSB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIHNlbGVjdGlvblJhbmdlLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1JhbmdlRW5kID0gdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3Rpb25SYW5nZS5lbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzSW5NaWRkbGUgPSAhaXNSYW5nZVN0YXJ0ICYmICFpc1JhbmdlRW5kO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzUmFuZ2VNaWQgPSBpc0luTWlkZGxlICYmIGlzSW5TZWxlY3Rpb25SYW5nZShjZWxsRGF0ZSwgc2VsZWN0aW9uUmFuZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiBtb250aHNbY2VsbERhdGUuZ2V0TW9udGgoKV0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgJHtjZWxsVUlEfSR7Y2VsbERhdGUuZ2V0VGltZSgpfWAsXG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNlZDogdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBmb2N1c2VkRGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ6IGlzQWN0aXZlVmlldyAmJiBpc1NlbGVjdGVkRGF0ZUluUmFuZ2UgJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBzZWxlY3RlZERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1dlZWtlbmQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3RhcnQ6IGlzUmFuZ2VTdGFydCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZU1pZDogaXNSYW5nZU1pZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZUVuZDogaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVNwbGl0RW5kOiBpc1JhbmdlTWlkICYmIHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgbGFzdERhdGUpLFxuICAgICAgICAgICAgICAgICAgICBpc1JhbmdlU3BsaXRTdGFydDogaXNSYW5nZU1pZCAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIGZpcnN0RGF0ZSksXG4gICAgICAgICAgICAgICAgICAgIGlzVG9kYXk6IHRoaXMuaXNFcXVhbChjZWxsRGF0ZSwgdG9kYXkpLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGhpcy5jZWxsVGl0bGUoY2VsbERhdGUpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2VsbERhdGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpc0VxdWFsKGNhbmRpZGF0ZSwgZXhwZWN0ZWQpIHtcbiAgICAgICAgaWYgKCFjYW5kaWRhdGUgfHwgIWV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZS5nZXRGdWxsWWVhcigpID09PSBleHBlY3RlZC5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICBjYW5kaWRhdGUuZ2V0TW9udGgoKSA9PT0gZXhwZWN0ZWQuZ2V0TW9udGgoKTtcbiAgICB9XG4gICAgaXNJbkFycmF5KGRhdGUsIGRhdGVzKSB7XG4gICAgICAgIGlmICghZGF0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgcmV0dXJuIGRhdGVzWzBdLmdldEZ1bGxZZWFyKCkgPD0geWVhciAmJiB5ZWFyIDw9IGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdLmdldEZ1bGxZZWFyKCk7XG4gICAgfVxuICAgIGlzSW5SYW5nZShjYW5kaWRhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZVZhbHVlID0gY3JlYXRlRGF0ZShjYW5kaWRhdGUuZ2V0RnVsbFllYXIoKSwgY2FuZGlkYXRlLmdldE1vbnRoKCksIDEpO1xuICAgICAgICBjb25zdCBhYm92ZU1pbiA9ICFtaW4gfHwgY3JlYXRlRGF0ZShtaW4uZ2V0RnVsbFllYXIoKSwgbWluLmdldE1vbnRoKCksIDEpIDw9IGNhbmRpZGF0ZVZhbHVlO1xuICAgICAgICBjb25zdCBiZWxvd01heCA9ICFtYXggfHwgY2FuZGlkYXRlVmFsdWUgPD0gY3JlYXRlRGF0ZShtYXguZ2V0RnVsbFllYXIoKSwgbWF4LmdldE1vbnRoKCksIDEpO1xuICAgICAgICByZXR1cm4gYWJvdmVNaW4gJiYgYmVsb3dNYXg7XG4gICAgfVxuICAgIGJlZ2lubmluZ09mUGVyaW9kKGRhdGUpIHtcbiAgICAgICAgaWYgKCFkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgIH1cbiAgICBpc1JhbmdlU3RhcnQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldEZ1bGxZZWFyKCkgJSAxMCA9PT0gMDtcbiAgICB9XG4gICAgbW92ZSh2YWx1ZSwgYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gQUNUSU9OUyQzW2FjdGlvbl07XG4gICAgICAgIGlmICghbW9kaWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbW9kaWZpZXIodmFsdWUpO1xuICAgIH1cbiAgICBjZWxsVGl0bGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldEZ1bGxZZWFyKCl9ICR7dGhpcy52YWx1ZSh2YWx1ZSl9YDtcbiAgICB9XG4gICAgbmF2aWdhdGlvblRpdGxlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlKHZhbHVlKTtcbiAgICB9XG4gICAgdGl0bGUoY3VycmVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IGN1cnJlbnQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpIDogJyc7XG4gICAgfVxuICAgIHJvd0xlbmd0aChfKSB7XG4gICAgICAgIHJldHVybiBDRUxMU19MRU5HVEgkMztcbiAgICB9XG4gICAgc2tpcCh2YWx1ZSwgbWluKSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluWWVhcnMobWluLCB2YWx1ZSk7XG4gICAgfVxuICAgIHRvdGFsKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBkdXJhdGlvbkluWWVhcnMobWluLCBtYXgpICsgMTtcbiAgICB9XG4gICAgdmFsdWUoY3VycmVudCkge1xuICAgICAgICByZXR1cm4gY3VycmVudCA/IHRoaXMuYWJick1vbnRoTmFtZXMoKVtjdXJyZW50LmdldE1vbnRoKCldIDogJyc7XG4gICAgfVxuICAgIHZpZXdEYXRlKGRhdGUsIG1heCwgdmlld3NDb3VudCA9IDEpIHtcbiAgICAgICAgY29uc3Qgdmlld3NJblJhbmdlID0gdGhpcy50b3RhbChkYXRlLCBtYXgpO1xuICAgICAgICBpZiAodmlld3NJblJhbmdlIDwgdmlld3NDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgeWVhcnNUb1N1YnRyYWN0ID0gdmlld3NDb3VudCAtIHZpZXdzSW5SYW5nZTtcbiAgICAgICAgICAgIHJldHVybiBhZGRZZWFycyhkYXRlLCAtMSAqIHllYXJzVG9TdWJ0cmFjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuICAgIGFiYnJNb250aE5hbWVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW50bFNlcnZpY2UuZGF0ZUZvcm1hdE5hbWVzKHsgbmFtZVR5cGU6ICdhYmJyZXZpYXRlZCcsIHR5cGU6ICdtb250aHMnIH0pO1xuICAgIH1cbiAgICBub3JtYWxpemUoY2VsbERhdGUsIG1pbiwgbWF4KSB7XG4gICAgICAgIGlmIChjZWxsRGF0ZSA8IG1pbiAmJiB0aGlzLmlzRXF1YWwoY2VsbERhdGUsIG1pbikpIHtcbiAgICAgICAgICAgIHJldHVybiBjbG9uZURhdGUobWluKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbERhdGUgPiBtYXggJiYgdGhpcy5pc0VxdWFsKGNlbGxEYXRlLCBtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gY2xvbmVEYXRlKG1heCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNlbGxEYXRlO1xuICAgIH1cbn1cblllYXJWaWV3U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuWWVhclZpZXdTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogVGhlIEVudW0gd2hpY2ggZGVmaW5lcyBhbGwgcG9zc2libGUgQ2FsZW5kYXIgdmlldyB0eXBlcy5cbiAqL1xudmFyIENhbGVuZGFyVmlld0VudW07XG4oZnVuY3Rpb24gKENhbGVuZGFyVmlld0VudW0pIHtcbiAgICBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW1bXCJtb250aFwiXSA9IDBdID0gXCJtb250aFwiO1xuICAgIENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bVtcInllYXJcIl0gPSAxXSA9IFwieWVhclwiO1xuICAgIENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bVtcImRlY2FkZVwiXSA9IDJdID0gXCJkZWNhZGVcIjtcbiAgICBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW1bXCJjZW50dXJ5XCJdID0gM10gPSBcImNlbnR1cnlcIjtcbn0pKENhbGVuZGFyVmlld0VudW0gfHwgKENhbGVuZGFyVmlld0VudW0gPSB7fSkpO1xuXG5jb25zdCBzZXJ2aWNlcyA9IHtcbiAgICBbQ2FsZW5kYXJWaWV3RW51bS5tb250aF06IE1vbnRoVmlld1NlcnZpY2UsXG4gICAgW0NhbGVuZGFyVmlld0VudW0ueWVhcl06IFllYXJWaWV3U2VydmljZSxcbiAgICBbQ2FsZW5kYXJWaWV3RW51bS5kZWNhZGVdOiBEZWNhZGVWaWV3U2VydmljZSxcbiAgICBbQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5XTogQ2VudHVyeVZpZXdTZXJ2aWNlXG59O1xuY29uc3Qgdmlld09mZnNldCA9ICh2aWV3LCBvZmZzZXQpID0+IHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW1bdmlldyArIG9mZnNldF1dO1xuICAgIHJldHVybiBjYW5kaWRhdGUgIT09IHVuZGVmaW5lZCA/IGNhbmRpZGF0ZSA6IHZpZXc7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEJ1c1ZpZXdTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihpbmplY3Rvcikge1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMudmlld0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuYm90dG9tID0gQ2FsZW5kYXJWaWV3RW51bS5tb250aDtcbiAgICAgICAgdGhpcy50b3AgPSBDYWxlbmRhclZpZXdFbnVtLmNlbnR1cnk7XG4gICAgfVxuICAgIGNvbmZpZ3VyZShib3R0b20sIHRvcCkge1xuICAgICAgICB0aGlzLmJvdHRvbSA9IGJvdHRvbTtcbiAgICAgICAgdGhpcy50b3AgPSB0b3A7XG4gICAgfVxuICAgIHNlcnZpY2Uodmlldykge1xuICAgICAgICBjb25zdCBzZXJ2aWNlVHlwZSA9IHNlcnZpY2VzW3ZpZXddO1xuICAgICAgICByZXR1cm4gc2VydmljZVR5cGUgPyB0aGlzLmluamVjdG9yLmdldChzZXJ2aWNlVHlwZSkgOiBudWxsO1xuICAgIH1cbiAgICBtb3ZlRG93bih2aWV3KSB7XG4gICAgICAgIHRoaXMubW92ZSh2aWV3LCAtMSk7XG4gICAgfVxuICAgIG1vdmVVcCh2aWV3KSB7XG4gICAgICAgIHRoaXMubW92ZSh2aWV3LCAxKTtcbiAgICB9XG4gICAgbW92ZVRvQm90dG9tKGFjdGl2ZVZpZXcpIHtcbiAgICAgICAgaWYgKGFjdGl2ZVZpZXcgPT09IHRoaXMuYm90dG9tKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZC5lbWl0KHsgdmlldzogdGhpcy5ib3R0b20gfSk7XG4gICAgfVxuICAgIGNhbk1vdmVEb3duKHZpZXcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm90dG9tIDwgdmlldztcbiAgICB9XG4gICAgY2FuTW92ZVVwKHZpZXcpIHtcbiAgICAgICAgcmV0dXJuIHZpZXcgPCB0aGlzLnRvcDtcbiAgICB9XG4gICAgY2xhbXAodmlldykge1xuICAgICAgICBpZiAodmlldyA8IHRoaXMuYm90dG9tKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ib3R0b207XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpZXcgPiB0aGlzLnRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2aWV3O1xuICAgIH1cbiAgICBtb3ZlKHZpZXcsIG9mZnNldCkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLmNsYW1wKHZpZXdPZmZzZXQodmlldywgb2Zmc2V0KSk7XG4gICAgICAgIGlmIChjYW5kaWRhdGUgPT09IHZpZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VkLmVtaXQoeyB2aWV3OiBjYW5kaWRhdGUgfSk7XG4gICAgfVxufVxuQnVzVmlld1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJ1c1ZpZXdTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW5qZWN0b3IgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJlcXVpcmVzWm9uZU9uQmx1ciA9IChuZ0NvbnRyb2wpID0+IG5nQ29udHJvbCAmJlxuICAgICghbmdDb250cm9sLnRvdWNoZWQgfHwgKG5nQ29udHJvbC5jb250cm9sICYmIG5nQ29udHJvbC5jb250cm9sLnVwZGF0ZU9uID09PSAnYmx1cicpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBwcmV2ZW50RGVmYXVsdCA9IChhcmdzKSA9PiBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY3VycmVudEZvY3VzVGFyZ2V0ID0gKGJsdXJBcmdzKSA9PiBibHVyQXJncy5yZWxhdGVkVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNQcmVzZW50ID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsO1xuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogSWYgdGhlIHByb3ZpZGVkIHBhcmFtZXRlciBpcyBhbiBhcnJheSB3aXRoIGF0IGxlYXN0IG9uZSBpdGVtXG4gKiBhbmQgYWxsIGl0ZW1zIGluIHRoZSBhcnJheSBhcmUgbnVtYmVycywgcmV0dXJucyBgdHJ1ZS5cbiAqL1xuY29uc3QgaXNOdW1iZXJBcnJheSA9ICh2YWx1ZSkgPT4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMCAmJiB2YWx1ZS5ldmVyeShpdGVtID0+IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBJZiB0aGUgcHJvdmlkZWQgcGFyYW1ldGVyIGlzIGFuIGFycmF5IHdpdGggYXQgbGVhc3Qgb25lIGl0ZW1cbiAqIGFuZCBhbGwgaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBkYXRlcywgcmV0dXJucyBgdHJ1ZWAuXG4gKi9cbmNvbnN0IGlzRGF0ZUFycmF5ID0gKHZhbHVlKSA9PiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwICYmIHZhbHVlLmV2ZXJ5KGl0ZW0gPT4gaXRlbSBpbnN0YW5jZW9mIERhdGUpO1xuXG5jb25zdCBkaXYgPSBkb21Db250YWluZXJGYWN0b3J5KCdkaXYnKTtcbmNvbnN0IHVsID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndWwnKTtcbmNvbnN0IGxpID0gZG9tQ29udGFpbmVyRmFjdG9yeSgnbGknKTtcbmNvbnN0IHRkID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndGQnKTtcbmNvbnN0IHRoID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndGgnKTtcbmNvbnN0IHRyID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndHInKTtcbmNvbnN0IHRib2R5ID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndGJvZHknKTtcbmNvbnN0IHRoZWFkID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndGhlYWQnKTtcbmNvbnN0IHRhYmxlID0gZG9tQ29udGFpbmVyRmFjdG9yeSgndGFibGUnKTtcbmNvbnN0IG1vbnRoSGVhZGVyID0gKCkgPT4gKGRpdihgXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstYnV0dG9uIGstYmFyZSBrLXRpdGxlXCI+TWFyY2ggMjAxNzwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay10b2RheVwiPlRPREFZPC9zcGFuPlxuICAgICAgICBgLCAnay1jYWxlbmRhci1oZWFkZXInKSk7XG5jb25zdCBtb250aFdlZWtIZWFkZXIgPSAoKSA9PiAodGFibGUoW1xuICAgIHRoZWFkKFtcbiAgICAgICAgdHIoW3RoKCdNTycpXSlcbiAgICBdKVxuXSwgJ2stY2FsZW5kYXItd2Vla2RheXMnKSk7XG5jb25zdCByZXBlYXQgPSAoY291bnQsIG1hcHBlcikgPT4gbmV3IEFycmF5KGNvdW50KS5maWxsKCcxJykubWFwKG1hcHBlcik7XG5jb25zdCBjb250ZW50ID0gKHJvd3MsIGNlbGxzID0gMSkgPT4gKHRhYmxlKFtcbiAgICB0Ym9keShbdHIoW3RoKCcxJyldKV0uY29uY2F0KHJlcGVhdChyb3dzLCAoKSA9PiB0cihyZXBlYXQoY2VsbHMsIGMgPT4gdGQoYDxzcGFuIGNsYXNzPVwiay1saW5rXCI+JHtjfTwvc3Bhbj5gKSkpKSkpXG5dKSk7XG5jb25zdCBzY3JvbGxhYmxlID0gKGNoaWxkcmVuKSA9PiBkaXYoY2hpbGRyZW4sICdrLWNvbnRlbnQgay1zY3JvbGxhYmxlJyk7XG5jb25zdCB2aWV3ID0gKGNvbnRlbnRFbGVtZW50LCBjbGFzc05hbWUsIHJlbmRlcldlZWtIZWFkZXIpID0+IChkaXYoW1xuICAgIG1vbnRoSGVhZGVyKCksXG4gICAgcmVuZGVyV2Vla0hlYWRlciA/IG1vbnRoV2Vla0hlYWRlcigpIDogbnVsbCxcbiAgICBzY3JvbGxhYmxlKFtjb250ZW50RWxlbWVudCwgY29udGVudEVsZW1lbnRdKVxuXSwgY2xhc3NOYW1lLCB7IGxlZnQ6ICctMTAwMDBweCcsIHBvc2l0aW9uOiAnYWJzb2x1dGUnIH0pKTtcbmNvbnN0IMm1NiA9ICgpID0+IHtcbiAgICBsZXQgbmF2RWxlbWVudDtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbmF2RWxlbWVudCkge1xuICAgICAgICAgICAgbmF2RWxlbWVudCA9IGRpdihbc2Nyb2xsYWJsZShbdWwoW2xpKCc8c3Bhbj5GRUI8L3NwYW4+JyldKV0pXSwgJ2stY2FsZW5kYXItbmF2aWdhdGlvbicsIHsgbGVmdDogJzBweCcsIHBvc2l0aW9uOiAnYWJzb2x1dGUnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYXZFbGVtZW50O1xuICAgIH07XG59O1xuY29uc3QgbmF2aWdhdGlvbkxpc3QgPSAoybU2KSgpO1xuY29uc3Qgdmlld0ZhY3RvcnkgPSAoeyBjZWxscywgcm93cyB9LCBjbGFzc05hbWUsIHJlbmRlcldlZWtIZWFkZXIpID0+IHtcbiAgICBsZXQgdmlld0VsZW1lbnQ7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZpZXdFbGVtZW50KSB7XG4gICAgICAgICAgICB2aWV3RWxlbWVudCA9IHZpZXcoY29udGVudChyb3dzLCBjZWxscyksIGNsYXNzTmFtZSwgcmVuZGVyV2Vla0hlYWRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZXdFbGVtZW50O1xuICAgIH07XG59O1xuY29uc3QgZ2V0U2Nyb2xsYWJsZSA9IChlbGVtZW50KSA9PiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5rLXNjcm9sbGFibGUnKTtcbmNvbnN0IGhvcml6b250YWwgPSBlbGVtZW50ID0+IHtcbiAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IGdldFNjcm9sbGFibGUoZWxlbWVudCk7XG4gICAgc2Nyb2xsYWJsZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnay1zY3JvbGxhYmxlLWhvcml6b250YWwnKTtcbiAgICByZXR1cm4gZWxlbWVudDtcbn07XG5jb25zdCBtb250aFZpZXcgPSB2aWV3RmFjdG9yeSh7IGNlbGxzOiA3LCByb3dzOiA2IH0sICdrLWNhbGVuZGFyLXZpZXcgay1jYWxlbmRhci1tb250aHZpZXcnLCB0cnVlKTtcbmNvbnN0IHllYXJWaWV3ID0gdmlld0ZhY3RvcnkoeyBjZWxsczogNSwgcm93czogMyB9LCAnay1jYWxlbmRhci12aWV3IGstY2FsZW5kYXIteWVhcnZpZXcnLCBmYWxzZSk7XG5jb25zdCBkZWNhZGVWaWV3ID0gdmlld0ZhY3RvcnkoeyBjZWxsczogNSwgcm93czogMiB9LCAnay1jYWxlbmRhci12aWV3IGstY2FsZW5kYXItZGVjYWRldmlldycsIGZhbHNlKTtcbmNvbnN0IGhvcnpNb250aFZpZXcgPSAoKSA9PiBob3Jpem9udGFsKG1vbnRoVmlldygpKTtcbmNvbnN0IGhvcnpZZWFyVmlldyA9ICgpID0+IGhvcml6b250YWwoeWVhclZpZXcoKSk7XG5jb25zdCBob3J6RGVjYWRlVmlldyA9ICgpID0+IGhvcml6b250YWwoZGVjYWRlVmlldygpKTtcbmNvbnN0IGhlaWdodCA9IChlbGVtZW50KSA9PiAocGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHQpIHx8IGVsZW1lbnQub2Zmc2V0SGVpZ2h0KTtcbmNvbnN0IHdpZHRoID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbiAgICBjb25zdCBjb21wdXRlZCA9IHBhcnNlRmxvYXQoc3R5bGVzLndpZHRoKVxuICAgICAgICArIHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdMZWZ0KVxuICAgICAgICArIHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCk7XG4gICAgcmV0dXJuIGNvbXB1dGVkIHx8IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG59O1xuY29uc3QgZ2V0Qm9keSA9IChlbGVtZW50KSA9PiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ2FsZW5kYXJET01TZXJ2aWNlIHtcbiAgICBlbnN1cmVIZWlnaHRzKCkge1xuICAgICAgICBpZiAodGhpcy5jYWxlbmRhckhlaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxjdWxhdGVIZWlnaHRzKCk7XG4gICAgfVxuICAgIGNhbGN1bGF0ZUhlaWdodHMoY29udGFpbmVyKSB7XG4gICAgICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ob3N0Q29udGFpbmVyID0gY29udGFpbmVyO1xuICAgICAgICB0aGlzLmJhdGNoKG1vbnRoVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdFbGVtZW50ID0gZ2V0Qm9keShjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFySGVpZ2h0ID0gaGVpZ2h0KGNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubW9udGhWaWV3SGVpZ2h0ID0gaGVpZ2h0KHZpZXdFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuaGVhZGVySGVpZ2h0ID0gaGVpZ2h0KHZpZXdFbGVtZW50LmNoaWxkcmVuWzBdKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsYWJsZUNvbnRlbnRIZWlnaHQgPSBoZWlnaHQoZ2V0U2Nyb2xsYWJsZShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaChob3J6TW9udGhWaWV3KCksIChjb250ZW50RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgdmlld0VsZW1lbnQgPSBnZXRCb2R5KGNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJXaWR0aCA9IHdpZHRoKGNvbnRlbnRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMubW9udGhWaWV3V2lkdGggPSB3aWR0aCh2aWV3RWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGFibGVDb250ZW50V2lkdGggPSB3aWR0aChnZXRTY3JvbGxhYmxlKGNvbnRlbnRFbGVtZW50KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhdGNoKHllYXJWaWV3KCksIChjb250ZW50RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy55ZWFyVmlld0hlaWdodCA9IGhlaWdodChnZXRCb2R5KGNvbnRlbnRFbGVtZW50KSk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGFibGVZZWFyQ29udGVudEhlaWdodCA9IGhlaWdodChnZXRTY3JvbGxhYmxlKGNvbnRlbnRFbGVtZW50KSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhdGNoKGhvcnpZZWFyVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMueWVhclZpZXdXaWR0aCA9IHdpZHRoKGdldEJvZHkoY29udGVudEVsZW1lbnQpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmF0Y2goZGVjYWRlVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjYWRlVmlld0hlaWdodCA9IGhlaWdodChnZXRCb2R5KGNvbnRlbnRFbGVtZW50KSk7XG4gICAgICAgICAgICB0aGlzLmNlbnR1cnlWaWV3SGVpZ2h0ID0gdGhpcy5kZWNhZGVWaWV3SGVpZ2h0O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5iYXRjaChob3J6RGVjYWRlVmlldygpLCAoY29udGVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVjYWRlVmlld1dpZHRoID0gd2lkdGgoZ2V0Qm9keShjb250ZW50RWxlbWVudCkpO1xuICAgICAgICAgICAgdGhpcy5jZW50dXJ5Vmlld1dpZHRoID0gdGhpcy5kZWNhZGVWaWV3V2lkdGg7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJhdGNoKG5hdmlnYXRpb25MaXN0KCksIChjb250ZW50RWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSXRlbUhlaWdodCA9IGhlaWdodChjb250ZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCdsaScpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZpZXdIZWlnaHQodmlld1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0RpbWVuc2lvbih2aWV3VHlwZSwgJ2hlaWdodCcpO1xuICAgIH1cbiAgICB2aWV3V2lkdGgodmlld1R5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld0RpbWVuc2lvbih2aWV3VHlwZSwgJ3dpZHRoJyk7XG4gICAgfVxuICAgIHZpZXdEaW1lbnNpb24odmlld1R5cGUsIGRpbWVuc2lvbikge1xuICAgICAgICBjb25zdCB2aWV3UHJvcCA9IGRpbWVuc2lvbiA9PT0gJ2hlaWdodCcgPyAnVmlld0hlaWdodCcgOiAnVmlld1dpZHRoJztcbiAgICAgICAgc3dpdGNoICh2aWV3VHlwZSkge1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2Btb250aCR7dmlld1Byb3B9YF07XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlld0VudW0ueWVhcjpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tgeWVhciR7dmlld1Byb3B9YF07XG4gICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlld0VudW0uZGVjYWRlOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2BkZWNhZGUke3ZpZXdQcm9wfWBdO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLmNlbnR1cnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbYGNlbnR1cnkke3ZpZXdQcm9wfWBdO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBiYXRjaChjb250ZW50RWxlbWVudCwgYWN0aW9uKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMuaG9zdENvbnRhaW5lcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob3N0Q2xvbmUgPSB0aGlzLmhvc3RDb250YWluZXIuY2xvbmVOb2RlKCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdENsb25lKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGFwcGVuZGVkQ29udGVudCA9IGhvc3RDbG9uZS5hcHBlbmRDaGlsZChjb250ZW50RWxlbWVudCk7XG4gICAgICAgICAgICBhY3Rpb24oYXBwZW5kZWRDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChob3N0Q2xvbmUpO1xuICAgICAgICB9XG4gICAgfVxufVxuQ2FsZW5kYXJET01TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdXBkYXRlID0gKGFyciwgaWR4LCB2YWx1ZSkgPT4gKFtcbiAgICAuLi5hcnIuc2xpY2UoMCwgaWR4ICsgMSksXG4gICAgLi4uKGFyci5zbGljZShpZHggKyAxKS5tYXAoeCA9PiB4ICsgdmFsdWUpKVxuXSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUm93SGVpZ2h0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IodG90YWwgPSAwLCByb3dIZWlnaHQsIGRldGFpbFJvd0hlaWdodCkge1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0ID0gcm93SGVpZ2h0O1xuICAgICAgICB0aGlzLmRldGFpbFJvd0hlaWdodCA9IGRldGFpbFJvd0hlaWdodDtcbiAgICAgICAgdGhpcy5vZmZzZXRzID0gW107XG4gICAgICAgIHRoaXMuaGVpZ2h0cyA9IFtdO1xuICAgICAgICBsZXQgYWdnID0gMDtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgdG90YWw7IGlkeCsrKSB7XG4gICAgICAgICAgICB0aGlzLm9mZnNldHMucHVzaChhZ2cpO1xuICAgICAgICAgICAgYWdnICs9IHJvd0hlaWdodDtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0cy5wdXNoKHJvd0hlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGVpZ2h0KHJvd0luZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodHNbcm93SW5kZXhdO1xuICAgIH1cbiAgICBleHBhbmREZXRhaWwocm93SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0KHJvd0luZGV4KSA9PT0gdGhpcy5yb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm93SGVpZ2h0KHJvd0luZGV4LCB0aGlzLmRldGFpbFJvd0hlaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sbGFwc2VEZXRhaWwocm93SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGVpZ2h0KHJvd0luZGV4KSA+IHRoaXMucm93SGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvd0hlaWdodChyb3dJbmRleCwgdGhpcy5kZXRhaWxSb3dIZWlnaHQgKiAtMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5kZXgocG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm9mZnNldHMucmVkdWNlKChwcmV2LCBjdXJyZW50LCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgPT09IHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgPiBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZHggLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyB0aGlzLnRvdGFsIC0gMSA6IHJlc3VsdDtcbiAgICB9XG4gICAgb2Zmc2V0KHJvd0luZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbcm93SW5kZXhdO1xuICAgIH1cbiAgICB0b3RhbEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcbiAgICB9XG4gICAgdXBkYXRlUm93SGVpZ2h0KHJvd0luZGV4LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmhlaWdodHNbcm93SW5kZXhdICs9IHZhbHVlO1xuICAgICAgICB0aGlzLm9mZnNldHMgPSB1cGRhdGUodGhpcy5vZmZzZXRzLCByb3dJbmRleCwgdmFsdWUpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplID0geCA9PiBNYXRoLm1heCh4LCAwKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKG9mZnNldCkge1xuICAgICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZUFjdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2tpcCkge1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgIH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHNjcm9sbE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZhYmxlID0gc2Nyb2xsT2JzZXJ2YWJsZTtcbiAgICAgICAgdGhpcy5maXJzdExvYWRlZCA9IDA7XG4gICAgICAgIHRoaXMuYm90dG9tT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy50b3BPZmZzZXQgPSAwO1xuICAgIH1cbiAgICBjcmVhdGUocm93SGVpZ2h0U2VydmljZSwgc2tpcCwgdGFrZSwgdG90YWwsIHRvcE9mZnNldCA9IDAsIGJvdHRvbU9mZnNldCA9IDAsIGRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHRTZXJ2aWNlID0gcm93SGVpZ2h0U2VydmljZTtcbiAgICAgICAgdGhpcy5maXJzdExvYWRlZCA9IHNraXA7XG4gICAgICAgIHRoaXMubGFzdExvYWRlZCA9IHNraXAgKyB0YWtlO1xuICAgICAgICB0aGlzLnRha2UgPSB0YWtlO1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIHRoaXMubGFzdFNjcm9sbCA9IDA7XG4gICAgICAgIHRoaXMudG9wT2Zmc2V0ID0gdG9wT2Zmc2V0O1xuICAgICAgICB0aGlzLmJvdHRvbU9mZnNldCA9IGJvdHRvbU9mZnNldDtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICAgIGNvbnN0IHN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdCgyKTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0QnVmZmVyUm93cyA9IHRoaXMucm93c0ZvckhlaWdodCh0b3BPZmZzZXQpO1xuICAgICAgICBjb25zdCBza2lwV2l0aE9mZnNldCA9IG5vcm1hbGl6ZShza2lwIC0gb2Zmc2V0QnVmZmVyUm93cyk7XG4gICAgICAgIHN1YmplY3QubmV4dChuZXcgU2Nyb2xsQWN0aW9uKHRoaXMucm93T2Zmc2V0KHNraXBXaXRoT2Zmc2V0KSkpO1xuICAgICAgICBpZiAob2Zmc2V0QnVmZmVyUm93cykge1xuICAgICAgICAgICAgc3ViamVjdC5uZXh0KG5ldyBQYWdlQWN0aW9uKHNraXBXaXRoT2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBPYnNlcnZhYmxlLmNyZWF0ZShvYnNlcnZlciA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsT2JzZXJ2YWJsZS5zdWJzY3JpYmUoeCA9PiB0aGlzLm9uU2Nyb2xsKHgsIG9ic2VydmVyKSk7XG4gICAgICAgIH0pLnN1YnNjcmliZSh4ID0+IHN1YmplY3QubmV4dCh4KSk7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblNjcm9sbCh7IHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgb2Zmc2V0SGVpZ2h0LCBvZmZzZXRXaWR0aCB9LCBvYnNlcnZlcikge1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHRoaXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gc2Nyb2xsVG9wIDogc2Nyb2xsTGVmdDtcbiAgICAgICAgY29uc3Qgb2Zmc2V0U2l6ZSA9IHRoaXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gb2Zmc2V0SGVpZ2h0IDogb2Zmc2V0V2lkdGg7XG4gICAgICAgIGlmICh0aGlzLmxhc3RTY3JvbGwgPT09IHNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXAgPSB0aGlzLmxhc3RTY3JvbGwgPj0gc2Nyb2xsUG9zaXRpb247XG4gICAgICAgIHRoaXMubGFzdFNjcm9sbCA9IHNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBjb25zdCBmaXJzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChub3JtYWxpemUoc2Nyb2xsUG9zaXRpb24gLSB0aGlzLnRvcE9mZnNldCkpO1xuICAgICAgICBjb25zdCBsYXN0SXRlbUluZGV4ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KG5vcm1hbGl6ZShzY3JvbGxQb3NpdGlvbiArIG9mZnNldFNpemUgLSB0aGlzLmJvdHRvbU9mZnNldCkpO1xuICAgICAgICBpZiAoIXVwICYmIGxhc3RJdGVtSW5kZXggPj0gdGhpcy5sYXN0TG9hZGVkICYmIHRoaXMubGFzdExvYWRlZCA8IHRoaXMudG90YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RMb2FkZWQgPSBmaXJzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFNjcm9sbEFjdGlvbih0aGlzLnJvd09mZnNldChmaXJzdEl0ZW1JbmRleCkpKTtcbiAgICAgICAgICAgIHRoaXMubGFzdExvYWRlZCA9IE1hdGgubWluKHRoaXMuZmlyc3RMb2FkZWQgKyB0aGlzLnRha2UsIHRoaXMudG90YWwpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgUGFnZUFjdGlvbih0aGlzLmZpcnN0TG9hZGVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwICYmIGZpcnN0SXRlbUluZGV4IDw9IHRoaXMuZmlyc3RMb2FkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblZpc2libGVCdWZmZXIgPSBNYXRoLmZsb29yKHRoaXMudGFrZSAqIDAuMyk7XG4gICAgICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gbm9ybWFsaXplKGZpcnN0SXRlbUluZGV4IC0gbm9uVmlzaWJsZUJ1ZmZlcik7XG4gICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY3JvbGxBY3Rpb24odGhpcy5yb3dPZmZzZXQodGhpcy5maXJzdExvYWRlZCkpKTtcbiAgICAgICAgICAgIHRoaXMubGFzdExvYWRlZCA9IE1hdGgubWluKHRoaXMuZmlyc3RMb2FkZWQgKyB0aGlzLnRha2UsIHRoaXMudG90YWwpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChuZXcgUGFnZUFjdGlvbih0aGlzLmZpcnN0TG9hZGVkKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcm93T2Zmc2V0KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGluZGV4KSArIHRoaXMudG9wT2Zmc2V0O1xuICAgIH1cbiAgICByb3dzRm9ySGVpZ2h0KGhlaWdodCkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGhlaWdodCAvIHRoaXMucm93SGVpZ2h0U2VydmljZS5oZWlnaHQoMCkpO1xuICAgIH1cbiAgICB1bnN1YnNjcmliZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpjb21wb25lbnQtc2VsZWN0b3ItbmFtZSAgY29tcG9uZW50LXNlbGVjdG9yLXR5cGUgKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBTQ1JPTExFUl9GQUNUT1JZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuKCdkYXRlaW5wdXRzLXNjcm9sbC1zZXJ2aWNlLWZhY3RvcnknKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBERUZBVUxUX1NDUk9MTEVSX0ZBQ1RPUlkob2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBuZXcgU2Nyb2xsZXJTZXJ2aWNlKG9ic2VydmFibGUpO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBTY3JvbGxEaXJlY3Rpb247XG4oZnVuY3Rpb24gKFNjcm9sbERpcmVjdGlvbikge1xuICAgIFNjcm9sbERpcmVjdGlvbltTY3JvbGxEaXJlY3Rpb25bXCJCYWNrd2FyZFwiXSA9IDBdID0gXCJCYWNrd2FyZFwiO1xuICAgIFNjcm9sbERpcmVjdGlvbltTY3JvbGxEaXJlY3Rpb25bXCJGb3J3YXJkXCJdID0gMV0gPSBcIkZvcndhcmRcIjtcbn0pKFNjcm9sbERpcmVjdGlvbiB8fCAoU2Nyb2xsRGlyZWN0aW9uID0ge30pKTtcbmNvbnN0IEZSQU1FX0RVUkFUSU9OID0gMTc7XG5jb25zdCBzY3JvbGxNb2RpZmllcnMgPSB7XG4gICAgW1Njcm9sbERpcmVjdGlvbi5Gb3J3YXJkXTogKHN0ZXApID0+IHZhbHVlID0+IHZhbHVlICsgc3RlcCxcbiAgICBbU2Nyb2xsRGlyZWN0aW9uLkJhY2t3YXJkXTogKHN0ZXApID0+IHZhbHVlID0+IHZhbHVlIC0gc3RlcFxufTtcbmNvbnN0IHNjcm9sbE5vcm1hbGl6ZXJzID0ge1xuICAgIFtTY3JvbGxEaXJlY3Rpb24uRm9yd2FyZF06IChlbmQpID0+IHZhbHVlID0+IE1hdGgubWluKHZhbHVlLCBlbmQpLFxuICAgIFtTY3JvbGxEaXJlY3Rpb24uQmFja3dhcmRdOiAoZW5kKSA9PiB2YWx1ZSA9PiBNYXRoLm1heCh2YWx1ZSwgZW5kKVxufTtcbmNvbnN0IHNjcm9sbFZhbGlkYXRvcnMgPSB7XG4gICAgW1Njcm9sbERpcmVjdGlvbi5Gb3J3YXJkXTogZW5kID0+IHN0YXJ0ID0+IHN0YXJ0IDwgZW5kLFxuICAgIFtTY3JvbGxEaXJlY3Rpb24uQmFja3dhcmRdOiBlbmQgPT4gc3RhcnQgPT4gc3RhcnQgPiBlbmRcbn07XG5jb25zdCBkaWZmZXJlbmNlVG9TY3JvbGwgPSAoc2Nyb2xsVG9wLCBzdGF0aWNPZmZzZXQsIG1heFNjcm9sbERpZmZlcmVuY2UpID0+IHtcbiAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5hYnMoc3RhdGljT2Zmc2V0IC0gc2Nyb2xsVG9wKSwgbWF4U2Nyb2xsRGlmZmVyZW5jZSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFZpcnR1YWxpemF0aW9uQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihzY3JvbGxlckZhY3RvcnksIGNvbnRhaW5lciwgcmVuZGVyZXIsIHpvbmUpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBjb250YWluZXI7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSAndmVydGljYWwnO1xuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSAxO1xuICAgICAgICB0aGlzLml0ZW1XaWR0aCA9IDE7XG4gICAgICAgIHRoaXMudG9wT2Zmc2V0ID0gMDtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSAwO1xuICAgICAgICB0aGlzLm1heFNjcm9sbERpZmZlcmVuY2UgPSAxMDA7XG4gICAgICAgIHRoaXMuc2Nyb2xsT2Zmc2V0U2l6ZSA9IDA7XG4gICAgICAgIHRoaXMuc2Nyb2xsRHVyYXRpb24gPSAxNTA7XG4gICAgICAgIHRoaXMuYWN0aXZlSW5kZXhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnNjcm9sbGVyID0gc2Nyb2xsZXJGYWN0b3J5KHRoaXMuZGlzcGF0Y2hlcik7XG4gICAgfVxuICAgIGdldCB0b3RhbFZlcnRleExlbmd0aCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBgJHt0aGlzLnRvdGFsU2l6ZX1weGA7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/IHsgaGVpZ2h0OiB2YWx1ZSB9IDogeyB3aWR0aDogdmFsdWUgfTtcbiAgICB9XG4gICAgZ2V0IGNvbnRhaW5lck9mZnNldFNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRhaW5lclByb3BlcnR5KHRoaXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gJ29mZnNldEhlaWdodCcgOiAnb2Zmc2V0V2lkdGgnKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRhaW5lclNjcm9sbFNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRhaW5lclByb3BlcnR5KHRoaXMuZGlyZWN0aW9uID09PSAndmVydGljYWwnID8gJ3Njcm9sbEhlaWdodCcgOiAnc2Nyb2xsV2lkdGgnKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRhaW5lclNjcm9sbFBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDb250YWluZXJQcm9wZXJ0eSh0aGlzLmRpcmVjdGlvbiA9PT0gJ3ZlcnRpY2FsJyA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnKTtcbiAgICB9XG4gICAgZ2V0IHdyYXBwZXJDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGhvcml6b250YWxDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGlyZWN0aW9uIHx8IGNoYW5nZXMudGFrZSB8fCBjaGFuZ2VzLnRvdGFsKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRTZXJ2aWNlcygpO1xuICAgICAgICAgICAgdGhpcy50b3RhbFNpemUgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UudG90YWxIZWlnaHQoKSArIHRoaXMuYm90dG9tT2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAoIXRoaXMucm93SGVpZ2h0U2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHRTZXJ2aWNlID0gdGhpcy5jcmVhdGVSb3dIZWlnaHRTZXJ2aWNlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJTY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbCQoKVxuICAgICAgICAgICAgICAgIC5waXBlKG1hcCgoZXZlbnQpID0+IGV2ZW50LnRhcmdldCkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh0ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoZXIubmV4dCh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRBY3RpdmVJbmRleCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyU2Nyb2xsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lclNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29udGFpbmVyUHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50W3Byb3BlcnR5TmFtZV07XG4gICAgfVxuICAgIGFjdGl2ZUluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtSW5kZXgoTWF0aC5jZWlsKHRoaXMuY29udGFpbmVyU2Nyb2xsUG9zaXRpb24pKTsgLy9oYW5kbGUgc3VicGl4ZWxpbmdcbiAgICB9XG4gICAgaXRlbUluZGV4KG9mZnNldCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmluZGV4KG9mZnNldCk7XG4gICAgfVxuICAgIGl0ZW1PZmZzZXQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaW5kZXgpO1xuICAgIH1cbiAgICBpc0luZGV4VmlzaWJsZShpbmRleCkge1xuICAgICAgICBpZiAoIXRoaXMucm93SGVpZ2h0U2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IHRoaXMuY29udGFpbmVyU2Nyb2xsUG9zaXRpb247XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckJvdHRvbSA9IGNvbnRhaW5lclRvcCArIHRoaXMuY29udGFpbmVyT2Zmc2V0U2l6ZTtcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChpbmRleCk7XG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRvcCArIHRoaXMucm93SGVpZ2h0U2VydmljZS5oZWlnaHQoaW5kZXgpO1xuICAgICAgICByZXR1cm4gdG9wID49IGNvbnRhaW5lclRvcCAmJiBib3R0b20gPD0gY29udGFpbmVyQm90dG9tO1xuICAgIH1cbiAgICBpc0xpc3RTY3JvbGxlZChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXJTY3JvbGxQb3NpdGlvbiAhPT0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChpbmRleCk7XG4gICAgfVxuICAgIHNjcm9sbFRvKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbFByb3BlcnR5ID0gdGhpcy5kaXJlY3Rpb24gPT09IFwidmVydGljYWxcIiA/ICdzY3JvbGxUb3AnIDogJ3Njcm9sbExlZnQnO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHNjcm9sbFByb3BlcnR5LCB2YWx1ZSk7XG4gICAgfVxuICAgIHNjcm9sbFRvSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgLy9YWFg6IHNjcm9sbGluZyB3aXRoIHRpY2sgaXMgcmVxdWlyZWQgdG8gcHJldmVudCBsaXN0IGp1bXAgaW4gQ2hyb21lLlxuICAgICAgICAvL09yaWdpbmFsIGlzc3VlOiBmb2N1cyBmaXJzdCBkYXkgaW4gdGhlIG1vbnRoIGFuZCBwcmVzcyBMRUZUIGFycm93LlxuICAgICAgICAvL05vdGljZSBob3cgdGhlIHZpZXcganVtcHMgb24gZXZlcnkgZGF5IGNoYW5nZS5cbiAgICAgICAgLy9cbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChpbmRleCkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxUbyh0aGlzLnRvdGFsU2l6ZSk7XG4gICAgfVxuICAgIGFuaW1hdGVUb0luZGV4KGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvblN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleE9mZnNldCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoaW5kZXgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmdldENvbnRhaW5lclNjcm9sbERpcmVjdGlvbihpbmRleE9mZnNldCk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5zY3JvbGxSYW5nZShpbmRleE9mZnNldCwgZGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKHN0YXJ0ID09PSBlbmQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zY3JvbGxTdGVwKHN0YXJ0LCBlbmQpO1xuICAgICAgICBjb25zdCBtb2RpZnlTY3JvbGwgPSBzY3JvbGxNb2RpZmllcnNbZGlyZWN0aW9uXShzdGVwKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplU2Nyb2xsID0gc2Nyb2xsTm9ybWFsaXplcnNbZGlyZWN0aW9uXShlbmQpO1xuICAgICAgICBjb25zdCBpc1Njcm9sbFZhbGlkID0gc2Nyb2xsVmFsaWRhdG9yc1tkaXJlY3Rpb25dKG1vZGlmeVNjcm9sbChlbmQpKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgICAgICBjb21iaW5lTGF0ZXN0KG9mKHN0YXJ0KSwgaW50ZXJ2YWwoMCwgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIpKS5waXBlKG1hcChzdHJlYW0gPT4gc3RyZWFtWzBdKSwgc2Nhbihtb2RpZnlTY3JvbGwpLCB0YWtlV2hpbGUoaXNTY3JvbGxWYWxpZCksIG1hcChub3JtYWxpemVTY3JvbGwpKS5zdWJzY3JpYmUoKHgpID0+IHRoaXMuc2Nyb2xsVG8oeCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2Nyb2xsUmFuZ2UoaW5kZXhPZmZzZXQsIGRpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBjb250YWluZXJTY3JvbGwgPSB0aGlzLmNvbnRhaW5lclNjcm9sbFBvc2l0aW9uO1xuICAgICAgICBpZiAocGFyc2VJbnQoaW5kZXhPZmZzZXQsIDEwKSA9PT0gcGFyc2VJbnQoY29udGFpbmVyU2Nyb2xsLCAxMCkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0OiBpbmRleE9mZnNldCwgZW5kOiBpbmRleE9mZnNldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heFNjcm9sbCA9IHRoaXMuY29udGFpbmVyTWF4U2Nyb2xsKCk7XG4gICAgICAgIGNvbnN0IHNpZ24gPSBkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5CYWNrd2FyZCA/IDEgOiAtMTtcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGRpZmZlcmVuY2VUb1Njcm9sbChjb250YWluZXJTY3JvbGwsIGluZGV4T2Zmc2V0LCB0aGlzLm1heFNjcm9sbERpZmZlcmVuY2UpO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihpbmRleE9mZnNldCwgbWF4U2Nyb2xsKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihNYXRoLm1heChlbmQgKyAoc2lnbiAqIGRpZmZlcmVuY2UpLCAwKSwgbWF4U2Nyb2xsKTtcbiAgICAgICAgcmV0dXJuIHsgc3RhcnQsIGVuZCB9O1xuICAgIH1cbiAgICBzY3JvbGxTdGVwKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWJzKGVuZCAtIHN0YXJ0KSAvICh0aGlzLnNjcm9sbER1cmF0aW9uIC8gRlJBTUVfRFVSQVRJT04pO1xuICAgIH1cbiAgICBzY3JvbGwkKCkge1xuICAgICAgICByZXR1cm4gaXNEb2N1bWVudEF2YWlsYWJsZSgpID8gZnJvbUV2ZW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKSA6IEVNUFRZO1xuICAgIH1cbiAgICBpbml0U2VydmljZXMoKSB7XG4gICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZSA9IHRoaXMuY3JlYXRlUm93SGVpZ2h0U2VydmljZSgpO1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbGVyXG4gICAgICAgICAgICAuY3JlYXRlKHRoaXMucm93SGVpZ2h0U2VydmljZSwgdGhpcy5za2lwLCB0aGlzLnRha2UsIHRoaXMudG90YWwsIHRoaXMudG9wT2Zmc2V0LCB0aGlzLnNjcm9sbE9mZnNldFNpemUsIHRoaXMuZGlyZWN0aW9uKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHggaW5zdGFuY2VvZiBQYWdlQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbENoYW5nZS5lbWl0KHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlUm93SGVpZ2h0U2VydmljZSgpIHtcbiAgICAgICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5kaXJlY3Rpb24gPT09ICd2ZXJ0aWNhbCcgPyB0aGlzLml0ZW1IZWlnaHQgOiB0aGlzLml0ZW1XaWR0aDtcbiAgICAgICAgcmV0dXJuIG5ldyBSb3dIZWlnaHRTZXJ2aWNlKHRoaXMudG90YWwsIGRpbWVuc2lvbiwgMCk7XG4gICAgfVxuICAgIGVtaXRBY3RpdmVJbmRleCgpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaW5kZXgodGhpcy5jb250YWluZXJTY3JvbGxQb3NpdGlvbiAtIHRoaXMudG9wT2Zmc2V0KTtcbiAgICAgICAgaWYgKHRoaXMubGFzdEFjdGl2ZUluZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXhDaGFuZ2UuZW1pdChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29udGFpbmVyTWF4U2Nyb2xsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXJTY3JvbGxTaXplIC0gdGhpcy5jb250YWluZXJPZmZzZXRTaXplO1xuICAgIH1cbiAgICBnZXRDb250YWluZXJTY3JvbGxEaXJlY3Rpb24oaW5kZXhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4T2Zmc2V0IDwgdGhpcy5jb250YWluZXJTY3JvbGxQb3NpdGlvbiA/IFNjcm9sbERpcmVjdGlvbi5CYWNrd2FyZCA6IFNjcm9sbERpcmVjdGlvbi5Gb3J3YXJkO1xuICAgIH1cbn1cblZpcnR1YWxpemF0aW9uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogU0NST0xMRVJfRkFDVE9SWV9UT0tFTixcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBERUZBVUxUX1NDUk9MTEVSX0ZBQ1RPUllcbiAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby12aXJ0dWFsaXphdGlvbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImstc2Nyb2xsYWJsZS1wbGFjZWhvbGRlclwiXG4gICAgICAgIFtjbGFzcy5rLXNjcm9sbGFibGUtaG9yaXpvbnRhbC1wbGFjZWhvbGRlcl09XCJkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJ1wiXG4gICAgICAgIFtuZ1N0eWxlXT1cInRvdGFsVmVydGV4TGVuZ3RoXCJcbiAgICA+PC9kaXY+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVmlydHVhbGl6YXRpb25Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEluamVjdCwgYXJnczogW1NDUk9MTEVSX0ZBQ1RPUllfVE9LRU4sXSB9XSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblZpcnR1YWxpemF0aW9uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbUhlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbVdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3BPZmZzZXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJvdHRvbU9mZnNldDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4U2Nyb2xsRGlmZmVyZW5jZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2Nyb2xsT2Zmc2V0U2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2Nyb2xsRHVyYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNraXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRha2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvdGFsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVJbmRleENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHBhZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBzY3JvbGxDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB3cmFwcGVyQ2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jb250ZW50JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zY3JvbGxhYmxlJyxdIH1dLFxuICAgIGhvcml6b250YWxDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zY3JvbGxhYmxlLWhvcml6b250YWwnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9zZXN0SW5TY29wZSA9IChub2RlLCBwcmVkaWNhdGUsIHNjb3BlKSA9PiB7XG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZSAhPT0gc2NvcGUgJiYgIXByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgICBpZiAobm9kZSAhPT0gc2NvcGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9zZXN0ID0gKG5vZGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmICFwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpjb21wb25lbnQtc2VsZWN0b3ItbmFtZSAgY29tcG9uZW50LXNlbGVjdG9yLXR5cGUgKi9cbmNvbnN0IElURU1TX0NPVU5UID0gMzA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoYnVzLCBkb20sIGludGwsIGNkciwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuZG9tID0gZG9tO1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm1pbiA9IG5ldyBEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgdGhpcy5tYXggPSBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy50YWtlID0gSVRFTVNfQ09VTlQ7XG4gICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgIH1cbiAgICBnZXQgZ2V0Q29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kb20uZW5zdXJlSGVpZ2h0cygpO1xuICAgICAgICBjb25zdCBjYWxlbmRhckhlaWdodCA9IHRoaXMuZG9tLmNhbGVuZGFySGVpZ2h0O1xuICAgICAgICB0aGlzLml0ZW1IZWlnaHQgPSB0aGlzLmRvbS5uYXZpZ2F0aW9uSXRlbUhlaWdodDtcbiAgICAgICAgdGhpcy5tYXhWaWV3SGVpZ2h0ID0gdGhpcy5kb20ubW9udGhWaWV3SGVpZ2h0O1xuICAgICAgICB0aGlzLnRvcE9mZnNldCA9IChjYWxlbmRhckhlaWdodCAtIHRoaXMuaXRlbUhlaWdodCkgLyAyO1xuICAgICAgICB0aGlzLmJvdHRvbU9mZnNldCA9IGNhbGVuZGFySGVpZ2h0IC0gdGhpcy5pdGVtSGVpZ2h0O1xuICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24gPSB0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHRoaXMuYnVzLnNlcnZpY2UodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdWYWx1ZSA9IENhbGVuZGFyVmlld0VudW1bdGhpcy5hY3RpdmVWaWV3XTtcbiAgICAgICAgY29uc3Qgdmlld0RhdGUgPSBkYXRlSW5SYW5nZSh0aGlzLmZvY3VzZWREYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuc2VydmljZS50b3RhbCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBjb25zdCB0b3RhbENoYW5nZWQgPSB0aGlzLnRvdGFsICYmIHRoaXMudG90YWwgIT09IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSB0aGlzLnNlcnZpY2Uuc2tpcCh2aWV3RGF0ZSwgdGhpcy5taW4pO1xuICAgICAgICB0aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIGlmICh0b3RhbENoYW5nZWQgfHwgIXRoaXMuc2VydmljZS5pc0luQXJyYXkodmlld0RhdGUsIHRoaXMuZGF0ZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVzID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh2aWV3RGF0ZSwgdGhpcy5nZXRUYWtlKHRoaXMuc2tpcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIWNoYW5nZXMuZm9jdXNlZERhdGUgfHwgdG90YWxDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSB0aGlzLnNlcnZpY2Uuc2tpcCh0aGlzLmZvY3VzZWREYXRlLCB0aGlzLm1pbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmludGxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhUb1Njcm9sbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uLnNjcm9sbFRvSW5kZXgodGhpcy5pbmRleFRvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhUb1Njcm9sbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uLnNjcm9sbFRvSW5kZXgodGhpcy5pbmRleFRvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgfVxuICAgIG9uUGFnZUNoYW5nZSh7IHNraXAgfSkge1xuICAgICAgICB0aGlzLmRhdGVzID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh0aGlzLnNlcnZpY2UuYWRkVG9EYXRlKHRoaXMubWluLCBza2lwKSwgdGhpcy5nZXRUYWtlKHNraXApKTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gICAgc2Nyb2xsQ2hhbmdlKHsgb2Zmc2V0IH0pIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmxpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gYHRyYW5zbGF0ZVkoJHtvZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbCwgJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwsICctbXMtdHJhbnNmb3JtJywgdHJhbnNsYXRlKTtcbiAgICB9XG4gICAgaGFuZGxlRGF0ZUNoYW5nZShhcmdzKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBjbG9zZXN0SW5TY29wZShhcmdzLnRhcmdldCwgbm9kZSA9PiBub2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1kYXRlLWluZGV4JyksIHRoaXMubGlzdC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoaXRlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZGF0ZS1pbmRleCcpLCAxMCk7XG4gICAgICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLmRhdGVzW2luZGV4XTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjbG9uZURhdGUoY2FuZGlkYXRlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0VGFrZShza2lwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnRvdGFsIC0gc2tpcCwgdGhpcy50YWtlKTtcbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5tb250aCkge1xuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5OYXZpZ2F0aW9uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhci1uYXZpZ2F0aW9uJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxzcGFuIGNsYXNzPVwiay1jYWxlbmRhci1uYXZpZ2F0aW9uLWhpZ2hsaWdodFwiPjwvc3Bhbj5cbiAgICA8a2VuZG8tdmlydHVhbGl6YXRpb25cbiAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgIFt0YWtlXT1cInRha2VcIlxuICAgICAgICBbdG90YWxdPVwidG90YWxcIlxuICAgICAgICBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCJcbiAgICAgICAgW3RvcE9mZnNldF09XCJ0b3BPZmZzZXRcIlxuICAgICAgICBbYm90dG9tT2Zmc2V0XT1cImJvdHRvbU9mZnNldFwiXG4gICAgICAgIFttYXhTY3JvbGxEaWZmZXJlbmNlXT1cIm1heFZpZXdIZWlnaHRcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzY3JvbGxDaGFuZ2UpPVwic2Nyb2xsQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPHVsICNsaXN0IGNsYXNzPVwiay1yZXNldFwiIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cInsgY2xpY2s6IGhhbmRsZURhdGVDaGFuZ2UgfVwiIFtzY29wZV09XCJ0aGlzXCI+XG4gICAgICAgICAgICA8bGkgKmtGb3I9XCJsZXQgZGF0ZSBvZiBkYXRlczsgbGV0IGluZGV4PWluZGV4XCIgW2F0dHIuZGF0YS1kYXRlLWluZGV4XT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzLmstY2FsZW5kYXItbmF2aWdhdGlvbi1tYXJrZXJdPVwic2VydmljZS5pc1JhbmdlU3RhcnQoZGF0ZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF0ZW1wbGF0ZVJlZlwiPnt7c2VydmljZS5uYXZpZ2F0aW9uVGl0bGUoZGF0ZSl9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgW25nSWZdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBzZXJ2aWNlLm5hdmlnYXRpb25UaXRsZShkYXRlKSwgYWN0aXZlVmlldzogYWN0aXZlVmlld1ZhbHVlLCBkYXRlOiBkYXRlIH1cIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwva2VuZG8tdmlydHVhbGl6YXRpb24+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTmF2aWdhdGlvbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJ1c1ZpZXdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDYWxlbmRhckRPTVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH1cbl07XG5OYXZpZ2F0aW9uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGFnZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZpcnR1YWxpemF0aW9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtWaXJ0dWFsaXphdGlvbkNvbXBvbmVudCxdIH1dLFxuICAgIGxpc3Q6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydsaXN0JywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGdldENvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1uYXZpZ2F0aW9uXCIsXSB9XVxufTtcblxuY29uc3QgVklFV1NfQ09VTlQgPSA1O1xuY29uc3QgaXNFcXVhbE1vbnRoWWVhciA9IChkYXRlMSwgZGF0ZTIpID0+IChkYXRlMSAmJiBkYXRlMiAmJlxuICAgIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiZcbiAgICBkYXRlMS5nZXRNb250aCgpID09PSBkYXRlMi5nZXRNb250aCgpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBWaWV3TGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoYnVzLCBjZHIsIGludGwsIGRvbSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5taW4gPSBuZXcgRGF0ZShNSU5fREFURSk7XG4gICAgICAgIHRoaXMubWF4ID0gbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHMgPSBbXTtcbiAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSBbXTtcbiAgICAgICAgdGhpcy50YWtlID0gVklFV1NfQ09VTlQ7XG4gICAgICAgIHRoaXMuYW5pbWF0ZVRvSW5kZXggPSB0cnVlO1xuICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSAtMTtcbiAgICAgICAgdGhpcy5taW5WaWV3c1RvUmVuZGVyID0gMTtcbiAgICB9XG4gICAgZ2V0IHdlZWtOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dXZWVrTnVtYmVycyAmJiB0aGlzLmlzTW9udGhWaWV3KCk7XG4gICAgfVxuICAgIHNldCB3ZWVrTnVtYmVyKHNob3dXZWVrTnVtYmVycykge1xuICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IHNob3dXZWVrTnVtYmVycztcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudE1vbnRoQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRZZWFyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ueWVhcjtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudERlY2FkZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLmRlY2FkZTtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudENlbnR1cnlDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5O1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSB0aGlzLmdldFdlZWtOYW1lcygpO1xuICAgICAgICB0aGlzLmJvdHRvbU9mZnNldCA9IHRoaXMuZ2V0Qm90dG9tT2Zmc2V0KCk7XG4gICAgICAgIHRoaXMudmlld09mZnNldCA9IC0xICogdGhpcy5kb20uaGVhZGVySGVpZ2h0O1xuICAgICAgICB0aGlzLnZpZXdIZWlnaHQgPSB0aGlzLmRvbS52aWV3SGVpZ2h0KHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbiA9IHRoaXMuaW50bC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmludGxDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5idXMuc2VydmljZSh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29scyA9IG5ldyBBcnJheSh0aGlzLnNlcnZpY2Uucm93TGVuZ3RoKHRoaXMud2Vla051bWJlcikpLmZpbGwoJycpO1xuICAgICAgICB0aGlzLmNvbFdpZHRoID0gTWF0aC5yb3VuZCgxMDAgLyB0aGlzLmNvbHMubGVuZ3RoKTtcbiAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSBoYXNDaGFuZ2UoY2hhbmdlcywgJ3dlZWtOdW1iZXInKSAmJiB0aGlzLndlZWtOdW1iZXIgPyB0aGlzLmdldFdlZWtOYW1lcygpIDogdGhpcy53ZWVrTmFtZXM7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVZpZXdDaGFuZ2VkID0gaGFzQ2hhbmdlKGNoYW5nZXMsICdhY3RpdmVWaWV3Jyk7XG4gICAgICAgIGNvbnN0IGZvY3VzZWREYXRlID0gdGhpcy5mb2N1c2VkRGF0ZTtcbiAgICAgICAgY29uc3Qgdmlld0RhdGUgPSBkYXRlSW5SYW5nZSh0aGlzLnNlcnZpY2Uudmlld0RhdGUoZm9jdXNlZERhdGUsIHRoaXMubWF4LCB0aGlzLm1pblZpZXdzVG9SZW5kZXIpLCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBjb25zdCB0b3RhbCA9IHRoaXMuc2VydmljZS50b3RhbCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBjb25zdCB0b3RhbENoYW5nZWQgPSB0aGlzLnRvdGFsICYmIHRoaXMudG90YWwgIT09IHRvdGFsO1xuICAgICAgICBjb25zdCBnZW5lcmF0ZURhdGVzID0gdG90YWxDaGFuZ2VkIHx8ICF0aGlzLnNlcnZpY2UuaXNJbkFycmF5KGZvY3VzZWREYXRlLCB0aGlzLmRhdGVzKTtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5zZXJ2aWNlLnNraXAodmlld0RhdGUsIHRoaXMubWluKTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gIWFjdGl2ZVZpZXdDaGFuZ2VkO1xuICAgICAgICB0aGlzLmJvdHRvbU9mZnNldCA9IHRoaXMuZ2V0Qm90dG9tT2Zmc2V0KCk7XG4gICAgICAgIHRoaXMudmlld0hlaWdodCA9IHRoaXMuZG9tLnZpZXdIZWlnaHQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgaWYgKGdlbmVyYXRlRGF0ZXMpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZXMgPSB0aGlzLnNlcnZpY2UuZGF0ZXNMaXN0KHZpZXdEYXRlLCB0aGlzLmdldFRha2UodGhpcy5za2lwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VxdWFsTW9udGhZZWFyKHRoaXMuYWN0aXZlRGF0ZSwgZm9jdXNlZERhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBjbG9uZURhdGUoZm9jdXNlZERhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHVwZGF0ZUluZGV4ID0gaGFzQ2hhbmdlKGNoYW5nZXMsICdmb2N1c2VkRGF0ZScpIHx8IGFjdGl2ZVZpZXdDaGFuZ2VkO1xuICAgICAgICBpZiAoZ2VuZXJhdGVEYXRlcyB8fCB1cGRhdGVJbmRleCB8fCB0aGlzLnZpcnR1YWxpemF0aW9uLmlzSW5kZXhWaXNpYmxlKHRoaXMuc2tpcCkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IHRoaXMuc2VydmljZS5za2lwKGZvY3VzZWREYXRlLCB0aGlzLm1pbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmludGxTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhUb1Njcm9sbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uLnNjcm9sbFRvSW5kZXgodGhpcy5pbmRleFRvU2Nyb2xsKTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXhUb1Njcm9sbCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uW3RoaXMuYW5pbWF0ZVRvSW5kZXggPyAnYW5pbWF0ZVRvSW5kZXgnIDogJ3Njcm9sbFRvSW5kZXgnXSh0aGlzLmluZGV4VG9TY3JvbGwpO1xuICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gLTE7XG4gICAgfVxuICAgIG9uUGFnZUNoYW5nZSh7IHNraXAgfSkge1xuICAgICAgICB0aGlzLmRhdGVzID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh0aGlzLnNlcnZpY2UuYWRkVG9EYXRlKHRoaXMubWluLCBza2lwKSwgdGhpcy5nZXRUYWtlKHNraXApKTtcbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gICAgc2Nyb2xsQ2hhbmdlKHsgb2Zmc2V0IH0pIHtcbiAgICAgICAgY29uc3QgZWwgPSB0aGlzLmxpc3QubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlID0gYHRyYW5zbGF0ZVkoJHtvZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbCwgJ3RyYW5zZm9ybScsIHRyYW5zbGF0ZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwsICctbXMtdHJhbnNmb3JtJywgdHJhbnNsYXRlKTtcbiAgICB9XG4gICAgc2V0QWN0aXZlRGF0ZShpbmRleCkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLnNlcnZpY2UuYWRkVG9EYXRlKHRoaXMubWluLCBpbmRleCk7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMuYWN0aXZlRGF0ZSwgY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGNhbmRpZGF0ZTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgICBoYW5kbGVEYXRlQ2hhbmdlKGNhbmRpZGF0ZSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2FuZGlkYXRlKTtcbiAgICB9XG4gICAgaXNNb250aFZpZXcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgfVxuICAgIGlzU2Nyb2xsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZpcnR1YWxpemF0aW9uLmlzTGlzdFNjcm9sbGVkKHRoaXMuc2VydmljZS5za2lwKHRoaXMuZm9jdXNlZERhdGUsIHRoaXMubWluKSk7XG4gICAgfVxuICAgIGdldEJvdHRvbU9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U2Nyb2xsYWJsZUhlaWdodCgpIC0gdGhpcy5kb20udmlld0hlaWdodCh0aGlzLmFjdGl2ZVZpZXcpO1xuICAgIH1cbiAgICBnZXRTY3JvbGxhYmxlSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoID9cbiAgICAgICAgICAgIHRoaXMuZG9tLnNjcm9sbGFibGVDb250ZW50SGVpZ2h0IDpcbiAgICAgICAgICAgIHRoaXMuZG9tLnNjcm9sbGFibGVZZWFyQ29udGVudEhlaWdodDtcbiAgICB9XG4gICAgZ2V0VGFrZShza2lwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnRvdGFsIC0gc2tpcCwgdGhpcy50YWtlKTtcbiAgICB9XG4gICAgZ2V0V2Vla05hbWVzKCkge1xuICAgICAgICBjb25zdCB3ZWVrTmFtZXMgPSBzaGlmdFdlZWtOYW1lcyh0aGlzLmludGwuZGF0ZUZvcm1hdE5hbWVzKHsgbmFtZVR5cGU6ICdzaG9ydCcsIHR5cGU6ICdkYXlzJyB9KSwgdGhpcy5pbnRsLmZpcnN0RGF5KCkpO1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrTnVtYmVyID8gWycnXS5jb25jYXQod2Vla05hbWVzKSA6IHdlZWtOYW1lcztcbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy53ZWVrTmFtZXMgPSB0aGlzLmdldFdlZWtOYW1lcygpO1xuICAgICAgICBpZiAodGhpcy5pc01vbnRoVmlldygpKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblZpZXdMaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhci12aWV3bGlzdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8a2VuZG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgIFtjdXJyZW50RGF0ZV09XCJhY3RpdmVEYXRlXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwiaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZlwiXG4gICAgICAgICh0b2RheSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICA8L2tlbmRvLWNhbGVuZGFyLWhlYWRlcj5cbiAgICA8dGFibGUgY2xhc3M9XCJrLWNhbGVuZGFyLXdlZWtkYXlzXCIgc3R5bGU9XCJ0YWJsZS1sYXlvdXQ6IGF1dG87XCIgKm5nSWY9XCJpc01vbnRoVmlldygpXCI+XG4gICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IG5hbWUgb2Ygd2Vla05hbWVzXCIgW3N0eWxlLndpZHRoLiVdPVwiY29sV2lkdGhcIj57e25hbWV9fTwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RoZWFkPlxuICAgIDwvdGFibGU+XG4gICAgPGtlbmRvLXZpcnR1YWxpemF0aW9uXG4gICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgIFtza2lwXT1cInNraXBcIlxuICAgICAgICBbdGFrZV09XCJ0YWtlXCJcbiAgICAgICAgW3RvdGFsXT1cInRvdGFsXCJcbiAgICAgICAgW2l0ZW1IZWlnaHRdPVwidmlld0hlaWdodFwiXG4gICAgICAgIFt0b3BPZmZzZXRdPVwidmlld09mZnNldFwiXG4gICAgICAgIFtib3R0b21PZmZzZXRdPVwiYm90dG9tT2Zmc2V0XCJcbiAgICAgICAgW3Njcm9sbE9mZnNldFNpemVdPVwidmlld09mZnNldFwiXG4gICAgICAgIFttYXhTY3JvbGxEaWZmZXJlbmNlXT1cInZpZXdIZWlnaHRcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzY3JvbGxDaGFuZ2UpPVwic2Nyb2xsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoYWN0aXZlSW5kZXhDaGFuZ2UpPVwic2V0QWN0aXZlRGF0ZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8dGFibGUgI2xpc3Q+XG4gICAgICAgICAgICA8Y29sZ3JvdXA+PGNvbCAqbmdGb3I9XCJsZXQgXyBvZiBjb2xzXCIgLz48L2NvbGdyb3VwPlxuXG4gICAgICAgICAgICA8dGJvZHkgKmtGb3I9XCJsZXQgZGF0ZSBvZiBkYXRlc1wiXG4gICAgICAgICAgICAgICAgICAga2VuZG9DYWxlbmRhclZpZXdcbiAgICAgICAgICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIiBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgICAgW2NlbGxVSURdPVwiY2VsbFVJRFwiXG4gICAgICAgICAgICAgICAgICAgW2ZvY3VzZWREYXRlXT1cImZvY3VzZWREYXRlXCJcbiAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVSZWZdPVwiY2VsbFRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICBbd2Vla051bWJlclRlbXBsYXRlUmVmXT1cIndlZWtOdW1iZXJUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgW3ZpZXdEYXRlXT1cImRhdGVcIlxuICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgIDwva2VuZG8tdmlydHVhbGl6YXRpb24+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVmlld0xpc3RDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCdXNWaWV3U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDYWxlbmRhckRPTVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9XG5dO1xuVmlld0xpc3RDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhlYWRlclRpdGxlVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNlbGxVSUQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpc0FjdGl2ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVEYXRlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBwYWdlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmlydHVhbGl6YXRpb246IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW1ZpcnR1YWxpemF0aW9uQ29tcG9uZW50LF0gfV0sXG4gICAgbGlzdDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2xpc3QnLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgZ2V0Q29tcG9uZW50Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLXZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudE1vbnRoQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLW1vbnRodmlld1wiLF0gfV0sXG4gICAgZ2V0Q29tcG9uZW50WWVhckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci15ZWFydmlld1wiLF0gfV0sXG4gICAgZ2V0Q29tcG9uZW50RGVjYWRlQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLWRlY2FkZXZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudENlbnR1cnlDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXItY2VudHVyeXZpZXdcIixdIH1dXG59O1xuXG5jb25zdCBLRVlfVE9fQUNUSU9OID0ge1xuICAgICczMyc6IEFjdGlvbi5QcmV2VmlldyxcbiAgICAnMzQnOiBBY3Rpb24uTmV4dFZpZXcsXG4gICAgJzM1JzogQWN0aW9uLkxhc3RJblZpZXcsXG4gICAgJzM2JzogQWN0aW9uLkZpcnN0SW5WaWV3LFxuICAgICczNyc6IEFjdGlvbi5MZWZ0LFxuICAgICczOCc6IEFjdGlvbi5VcCxcbiAgICAnMzknOiBBY3Rpb24uUmlnaHQsXG4gICAgJzQwJzogQWN0aW9uLkRvd24sXG4gICAgJ21ldGErMzgnOiBBY3Rpb24uVXBwZXJWaWV3LFxuICAgICdtZXRhKzQwJzogQWN0aW9uLkxvd2VyVmlld1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBOYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoYnVzKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgIH1cbiAgICBhY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gYCR7ZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5ID8gJ21ldGErJyA6ICcnfSR7ZXZlbnQua2V5Q29kZX1gO1xuICAgICAgICByZXR1cm4gS0VZX1RPX0FDVElPTlthY3Rpb25dO1xuICAgIH1cbiAgICBtb3ZlKHZhbHVlLCBhY3Rpb24sIGFjdGl2ZVZpZXcpIHtcbiAgICAgICAgY29uc3Qgc2VydmljZSA9IHRoaXMuYnVzLnNlcnZpY2UoYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhY3Rpb24gPT09IEFjdGlvbi5VcHBlclZpZXcgJiYgdGhpcy5idXMuY2FuTW92ZVVwKGFjdGl2ZVZpZXcpKSB7XG4gICAgICAgICAgICB0aGlzLmJ1cy5tb3ZlVXAoYWN0aXZlVmlldyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFjdGlvbiA9PT0gQWN0aW9uLkxvd2VyVmlldyAmJiB0aGlzLmJ1cy5jYW5Nb3ZlRG93bihhY3RpdmVWaWV3KSkge1xuICAgICAgICAgICAgdGhpcy5idXMubW92ZURvd24oYWN0aXZlVmlldyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcnZpY2UubW92ZSh2YWx1ZSwgYWN0aW9uKTtcbiAgICB9XG59XG5OYXZpZ2F0aW9uU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTmF2aWdhdGlvblNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCdXNWaWV3U2VydmljZSB9XG5dO1xuXG5jb25zdCBkaXZpZGVCeU1hZ25pdHVkZSA9IChtYWduaXR1ZGUpID0+IHggPT4gTWF0aC5mbG9vcih4IC8gbWFnbml0dWRlKTtcbmNvbnN0IHBvd2VyQnlNYWduaXR1ZGUgPSAobWFnbml0dWRlKSA9PiB4ID0+IHggKiBtYWduaXR1ZGU7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2Nyb2xsU3luY1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGRvbSwgem9uZSkge1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICB9XG4gICAgY29uZmlndXJlKGFjdGl2ZVZpZXcpIHtcbiAgICAgICAgY29uc3QgbWFnbml0dWRlID0gTWF0aC5tYXgodGhpcy5kb20udmlld0hlaWdodChhY3RpdmVWaWV3KSAvIHRoaXMuZG9tLm5hdmlnYXRpb25JdGVtSGVpZ2h0LCAxKTtcbiAgICAgICAgdGhpcy5kaXZpZGVCeU1hZ25pdHVkZSA9IGRpdmlkZUJ5TWFnbml0dWRlKG1hZ25pdHVkZSk7XG4gICAgICAgIHRoaXMucG93ZXJCeU1hZ25pdHVkZSA9IHBvd2VyQnlNYWduaXR1ZGUobWFnbml0dWRlKTtcbiAgICB9XG4gICAgc3luYyhuYXZpZ2F0b3IsIHZpZXcpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAoIW5hdmlnYXRvciB8fCAhdmlldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgbGV0IG5hdlNjcm9sbGVkLCBtb250aFNjcm9sbGVkO1xuICAgICAgICAgICAgdGhpcy5uYXZTdWJzY3JpcHRpb24gPSBuYXZpZ2F0b3Iuc2Nyb2xsJCgpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtb250aFNjcm9sbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoU2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuYXZTY3JvbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxTaWJsaW5nT2YoZS50YXJnZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdTdWJzY3JpcHRpb24gPSB2aWV3LnNjcm9sbCQoKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobmF2U2Nyb2xsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgbmF2U2Nyb2xsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb250aFNjcm9sbGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFNpYmxpbmdPZihlLnRhcmdldCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjcm9sbFNpYmxpbmdPZihzY3JvbGxlZEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5zaWJsaW5nQ29tcG9uZW50KHNjcm9sbGVkRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuY2FsY3VsYXRlU2Nyb2xsKGNvbXBvbmVudCwgc2Nyb2xsZWRFbGVtZW50LnNjcm9sbFRvcCk7XG4gICAgICAgIGNvbXBvbmVudC5zY3JvbGxUbyhzY3JvbGxUb3ApO1xuICAgIH1cbiAgICBzaWJsaW5nQ29tcG9uZW50KHNjcm9sbGFibGVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRvci5jb250YWluZXIubmF0aXZlRWxlbWVudCA9PT0gc2Nyb2xsYWJsZUVsZW1lbnQgPyB0aGlzLnZpZXcgOiB0aGlzLm5hdmlnYXRvcjtcbiAgICB9XG4gICAgY2FsY3VsYXRlU2Nyb2xsKGNvbXBvbmVudCwgc2Nyb2xsVG9wKSB7XG4gICAgICAgIGNvbnN0IG1vZGlmaWVyID0gY29tcG9uZW50ID09PSB0aGlzLm5hdmlnYXRvciA/IHRoaXMuZGl2aWRlQnlNYWduaXR1ZGUgOiB0aGlzLnBvd2VyQnlNYWduaXR1ZGU7XG4gICAgICAgIHJldHVybiBtb2RpZmllcihzY3JvbGxUb3ApO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAodGhpcy5uYXZTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubmF2U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudmlld1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aWV3U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5TY3JvbGxTeW5jU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU2Nyb2xsU3luY1NlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDYWxlbmRhckRPTVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgY2VsbCBjb250ZW50IG9mIHRoZSBDYWxlbmRhci4gVG8gZGVmaW5lIHRoZSBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWdcbiAqIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyQ2VsbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHVzZSB0aGUgYGxldC1kYXRlYCBkaXJlY3RpdmUuIFRvIHByb3ZpZGUgbW9yZSBkZXRhaWxzXG4gKiBhYm91dCB0aGUgY3VycmVudCBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGNlbGxDb250ZXh0YCBieSB1c2luZyB0aGUgYGxldC1jZWxsQ29udGV4dGAgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogPiBga2VuZG9DYWxlbmRhckNlbGxUZW1wbGF0ZWAgaXMgZXF1aXZhbGVudCB0b1xuICogPiBbYGtlbmRvQ2FsZW5kYXJNb250aENlbGxUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2RhdGVpbnB1dHNfbW9udGhjZWxsdGVtcGxhdGVkaXJlY3RpdmUgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhcj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NhbGVuZGFyQ2VsbFRlbXBsYXRlIGxldC1kYXRlPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7ZGF0ZS5nZXREYXRlKCl9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIENlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJDZWxsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgbW9udGggY2VsbCBjb250ZW50IG9mIHRoZSBDYWxlbmRhci4gVG8gZGVmaW5lIHRoZSBtb250aCBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWdcbiAqIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyTW9udGhDZWxsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudFxuICogY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSwgdXNlIHRoZSBgbGV0LWRhdGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGN1cnJlbnRcbiAqIG1vbnRoIGNlbGwsIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBgY2VsbENvbnRleHRgIGJ5IHVzaW5nIHRoZSBgbGV0LWNlbGxDb250ZXh0YCBkaXJlY3RpdmUuXG4gKlxuICogRm9yIG1vcmUgZXhhbXBsZXMsIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFt0ZW1wbGF0ZXNdKHslIHNsdWcgdGVtcGxhdGVzX2NhbGVuZGFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHN0eWxlczogWycuY3VzdG9tIHsgY29sb3I6IHJlZDsgfSddLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhck1vbnRoQ2VsbFRlbXBsYXRlIGxldC1jb250ZXh0PVwiY2VsbENvbnRleHRcIj5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b21cIj57e2NvbnRleHQuZm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIE1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyTW9udGhDZWxsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Nb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogVXNlZCBmb3IgcmVuZGVyaW5nIHRoZSB5ZWFyIGNlbGwgY29udGVudCBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgeWVhciBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuXG4gKiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyWWVhckNlbGxUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy5cbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRlLCB1c2VcbiAqIHRoZSBgbGV0LWRhdGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGN1cnJlbnQgeWVhciBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlXG4gKiBjdXJyZW50IGBjZWxsQ29udGV4dGAgYnkgdXNpbmcgdGhlIGBsZXQtY2VsbENvbnRleHRgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhciBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhclllYXJDZWxsVGVtcGxhdGUgbGV0LWNvbnRleHQ9XCJjZWxsQ29udGV4dFwiPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7Y29udGV4dC5mb3JtYXR0ZWRWYWx1ZX19PC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWNhbGVuZGFyPlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICogIHB1YmxpYyBhY3RpdmVWaWV3OiBDYWxlbmRhclZpZXcgPSAneWVhcic7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cblllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFyWWVhckNlbGxUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgZGVjYWRlIGNlbGwgY29udGVudCBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgZGVjYWRlIGNlbGwgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gXG4gKiB0YWcgd2l0aCB0aGUgYGtlbmRvQ2FsZW5kYXJEZWNhZGVDZWxsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZGF0ZSwgdXNlIHRoZSBgbGV0LWRhdGVgIGRpcmVjdGl2ZS4gVG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgYWJvdXRcbiAqIHRoZSBjdXJyZW50IGRlY2FkZSBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGNlbGxDb250ZXh0YCBieSB1c2luZyB0aGUgYGxldC1jZWxsQ29udGV4dGAgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiBzdHlsZXM6IFsnLmN1c3RvbSB7IGNvbG9yOiByZWQ7IH0nXSxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NhbGVuZGFyRGVjYWRlQ2VsbFRlbXBsYXRlIGxldC1jb250ZXh0PVwiY2VsbENvbnRleHRcIj5cbiAqICAgICAgPHNwYW4gY2xhc3M9XCJjdXN0b21cIj57e2NvbnRleHQuZm9ybWF0dGVkVmFsdWV9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICBwdWJsaWMgYWN0aXZlVmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RlY2FkZSc7XG4gKiB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhckRlY2FkZUNlbGxUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogVXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBjZW50dXJ5IGNlbGwgY29udGVudCBvZiB0aGUgQ2FsZW5kYXIuIFRvIGRlZmluZSB0aGUgY2VudHVyeSBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YFxuICogdGFnIHdpdGggdGhlIGBrZW5kb0NhbGVuZGFyQ2VudHVyeUNlbGxUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy4gVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZVxuICogY3VycmVudCBjb21wb25lbnQuIFRvIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBkYXRlLCB1c2UgdGhlIGBsZXQtZGF0ZWAgZGlyZWN0aXZlLiBUbyBwcm92aWRlIG1vcmUgZGV0YWlscyBhYm91dFxuICogdGhlIGN1cnJlbnQgY2VudHVyeSBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGNlbGxDb250ZXh0YCBieSB1c2luZyB0aGUgYGxldC1jZWxsQ29udGV4dGAgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiBzdHlsZXM6IFsnLmN1c3RvbSB7IGNvbG9yOiByZWQ7IH0nXSxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NhbGVuZGFyQ2VudHVyeUNlbGxUZW1wbGF0ZSBsZXQtY29udGV4dD1cImNlbGxDb250ZXh0XCI+XG4gKiAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tXCI+e3tjb250ZXh0LmZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgcHVibGljIGFjdGl2ZVZpZXc6IENhbGVuZGFyVmlldyA9ICdjZW50dXJ5JztcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJDZW50dXJ5Q2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogVXNlZCBmb3IgcmVuZGVyaW5nIHRoZSB3ZWVrIG51bWJlciBjZWxsIGNvbnRlbnQgaW4gdGhlIG1vbnRoIHZpZXcgb2YgdGhlIENhbGVuZGFyLiBUbyBkZWZpbmUgdGhlIG1vbnRoIHdlZWsgbnVtYmVyIGNlbGwgdGVtcGxhdGUsXG4gKiBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvQ2FsZW5kYXJXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGVcbiAqIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGRhdGUsIHVzZSB0aGUgYGxldC1kYXRlYCBkaXJlY3RpdmUuIFRvIHByb3ZpZGUgbW9yZVxuICogZGV0YWlscyBhYm91dCB0aGUgY3VycmVudCB3ZWVrIG51bWJlciBjZWxsLCBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgYGNlbGxDb250ZXh0YCBieSB1c2luZyB0aGUgYGxldC1jZWxsQ29udGV4dGAgZGlyZWN0aXZlLlxuICpcbiAqIEZvciBtb3JlIGV4YW1wbGVzLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbdGVtcGxhdGVzXSh7JSBzbHVnIHRlbXBsYXRlc19jYWxlbmRhciAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiBzdHlsZXM6IFsnLmN1c3RvbSB7IGNvbG9yOiByZWQ7IH0nXSxcbiAqIHRlbXBsYXRlOiBgXG4gKiAgPGtlbmRvLWNhbGVuZGFyIFt3ZWVrTnVtYmVyXT1cInRydWVcIj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NhbGVuZGFyV2Vla051bWJlckNlbGxUZW1wbGF0ZSBsZXQtY29udGV4dD1cImNlbGxDb250ZXh0XCI+XG4gKiAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tXCI+e3tjb250ZXh0LmZvcm1hdHRlZFZhbHVlfX08L3NwYW4+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogIDwva2VuZG8tY2FsZW5kYXI+XG4gKiBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAqIGBgYFxuICovXG5jbGFzcyBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogVXNlZCBmb3IgcmVuZGVyaW5nIHRoZSBoZWFkZXIgdGl0bGUgb2YgdGhlIENhbGVuZGFyLiBUbyBkZWZpbmUgdGhlIGhlYWRlciB0aXRsZSB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9DYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGVcbiAqIGN1cnJlbnQgY29tcG9uZW50LiBUbyBnZXQgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgdGl0bGUsIHVzZSB0aGUgYGxldC10aXRsZWAgZGlyZWN0aXZlLiBUbyBwcm92aWRlIG1vcmUgZGV0YWlscyBhYm91dFxuICogdGhlIGN1cnJlbnQgdGl0bGUsIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBgZGF0ZWAgYnkgdXNpbmcgdGhlIGBsZXQtZGF0ZWAgZGlyZWN0aXZlIG9yIGdldCBhIHJlZmVyZW5jZSB0byB0aGVcbiAqIGN1cnJlbnQgYWN0aXZlIHZpZXcgIGJ5IHVzaW5nIHRoZSBgbGV0LWFjdGl2ZVZpZXdgIGRpcmVjdGl2ZS5cbiAqXG4gKiBGb3IgbW9yZSBleGFtcGxlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb24gW3RlbXBsYXRlc10oeyUgc2x1ZyB0ZW1wbGF0ZXNfY2FsZW5kYXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogc3R5bGVzOiBbJy5jdXN0b20geyBjb2xvcjogcmVkOyB9J10sXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1jYWxlbmRhcj5cbiAqICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZSBsZXQtdGl0bGU+XG4gKiAgICAgIDxzcGFuIGNsYXNzPVwiY3VzdG9tXCI+e3t0aXRsZX19PC9zcGFuPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWNhbGVuZGFyPlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gKiBgYGBcbiAqL1xuY2xhc3MgSGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0NhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFVzZWQgZm9yIHJlbmRlcmluZyB0aGUgbmF2aWdhdGlvbiBpdGVtIG9mIHRoZSBDYWxlbmRhci4gVG8gZGVmaW5lIHRoZSBuYXZpZ2F0aW9uIGl0ZW0gdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gXG4gKiB0YWcgd2l0aCB0aGUgYGtlbmRvQ2FsZW5kYXJOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlXG4gKiBjdXJyZW50IGNvbXBvbmVudC4gVG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGl0ZW0gdmFsdWUsIHVzZSB0aGUgYGxldC10aXRsZWAgZGlyZWN0aXZlLiBUbyBwcm92aWRlIG1vcmUgZGV0YWlsc1xuICogYWJvdXQgdGhlIGN1cnJlbnQgdGl0bGUsIGdldCBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBgZGF0ZWAgYnkgdXNpbmcgdGhlIGBsZXQtZGF0ZT0nZGF0ZSdgIGRpcmVjdGl2ZSBvciBnZXQgYSByZWZlcmVuY2VcbiAqIHRvIHRoZSBjdXJyZW50IGFjdGl2ZSB2aWV3IGJ5IHVzaW5nIHRoZSBgbGV0LWFjdGl2ZVZpZXc9J2FjdGl2ZVZpZXcnYCBkaXJlY3RpdmUuXG4gKlxuICogRm9yIG1vcmUgZXhhbXBsZXMsIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFt0ZW1wbGF0ZXNdKHslIHNsdWcgdGVtcGxhdGVzX2NhbGVuZGFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqIHN0eWxlczogWycuY3VzdG9tIHsgY29sb3I6IHJlZDsgfSddLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXI+XG4gKiAgICA8bmctdGVtcGxhdGUga2VuZG9DYWxlbmRhck5hdmlnYXRpb25JdGVtVGVtcGxhdGUgbGV0LXRpdGxlPlxuICogICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbVwiPnt7dGl0bGV9fTwvc3Bhbj5cbiAqICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgPC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5OYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhck5hdmlnYXRpb25JdGVtVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5OYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFBpY2tlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnNhbWVEYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZUNvbXBsZXRlbmVzc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtaW5WYWxpZGF0b3IgPSAobWluVmFsdWUpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29uc3QgZXJyID0ge1xuICAgICAgICAgICAgbWluRXJyb3I6IHtcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZTogbWluVmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFtaW5WYWx1ZSB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPCBtaW5WYWx1ZSA/IGVyciA6IG51bGw7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtYXhWYWxpZGF0b3IgPSAobWF4VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHtcbiAgICAgICAgY29uc3QgZXJyID0ge1xuICAgICAgICAgICAgbWF4RXJyb3I6IHtcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogbWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbnRyb2wudmFsdWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFtYXhWYWx1ZSB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPiBtYXhWYWx1ZSA/IGVyciA6IG51bGw7XG4gICAgfTtcbn07XG5cbmNvbnN0IG5vb3AkMSA9ICgpID0+IGZhbHNlO1xuY29uc3QgRElTQUJMRURfREFURVNfRE9DX0xJTksgPSAnaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvY2FsZW5kYXIvZGlzYWJsZWQtZGF0ZXMvJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEaXNhYmxlZERhdGVzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbWl0cyBldmVyeSB0aW1lIHRoZSBgaXNEYXRlRGlzYWJsZWRgIG1ldGhvZCBjaGFuZ2VzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEJhc2VkIG9uIHRoZSB1c2VyLWRlZmluZWQgYGRpc2FibGVkRGF0ZXNgIGlucHV0IGV2YWx1YXRlcyBpZiB0aGUgZGF0ZSBpcyBkaXNhYmxlZC5cbiAgICAgICAgICogSWYgbm90IHNldCwgcmV0dXJucyBgZmFsc2VgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0RhdGVEaXNhYmxlZCA9IG5vb3AkMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgYGlzRGF0ZURpc2FibGVkYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqICogSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgdXNlcyBpdCBhcy1pcyBhbmQgcGFzc2VzIGVhY2ggZGF0ZSB0byBpdCBmb3IgZXZhbHVhdGlvbi5cbiAgICAgKiBUaGUgdGltZSBwYXJ0IGlzIHNldCB0byBgbWlkbmlnaHRgLlxuICAgICAqICogSWYgYSBgRGF0ZVtdYCBpcyBwcm92aWRlZCwgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIHRoZSB0YXJnZXRlZCBkYXRlIGFnYWluc3RcbiAgICAgKiB0aGUgbGlzdGVkIGRhdGVzIGFuZCwgaWYgdGhlIHRhcmdldGVkIGRhdGUgaXMgbGlzdGVkLCBtYXJrcyBpdCBhcyBkaXNhYmxlZC5cbiAgICAgKiAqIElmIGEgYERheVtdYCBpcyBwcm92aWRlZCwgY3JlYXRlcyBhIGZ1bmN0aW9uIHRoYXQgZXZhbHVhdGVzIHRoZSBwcm92aWRlZCBkYXlzIG9mIHRoZVxuICAgICAqIHdlZWsgYXMgZGlzYWJsZWQuXG4gICAgICovXG4gICAgaW5pdGlhbGl6ZShkaXNhYmxlZERhdGVzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGlzYWJsZWREYXRlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc0RhdGVEaXNhYmxlZCA9IChkYXRlKSA9PiBkaXNhYmxlZERhdGVzKGdldERhdGUoZGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTnVtYmVyQXJyYXkoZGlzYWJsZWREYXRlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2FibGVkV2Vla0RheXMgPSBuZXcgU2V0KGRpc2FibGVkRGF0ZXMpO1xuICAgICAgICAgICAgdGhpcy5pc0RhdGVEaXNhYmxlZCA9IChkYXRlKSA9PiBkaXNhYmxlZFdlZWtEYXlzLmhhcyhkYXRlLmdldERheSgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0RhdGVBcnJheShkaXNhYmxlZERhdGVzKSkge1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERpc2FibGVkRGF0ZXMgPSBuZXcgU2V0KGRpc2FibGVkRGF0ZXMubWFwKGRhdGUgPT4gZ2V0RGF0ZShkYXRlKS5nZXRUaW1lKCkpKTtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlRGlzYWJsZWQgPSAoZGF0ZSkgPT4gbm9ybWFsaXplZERpc2FibGVkRGF0ZXMuaGFzKGdldERhdGUoZGF0ZSkuZ2V0VGltZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEYXRlRGlzYWJsZWQgPSBub29wJDE7XG4gICAgICAgICAgICB0aGlzLm5vdGlmeUludmFsaWRJbnB1dChkaXNhYmxlZERhdGVzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2VDaGFuZ2UoKTtcbiAgICB9XG4gICAgbm90aWZ5SW52YWxpZElucHV0KGRpc2FibGVkRGF0ZXMpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudChkaXNhYmxlZERhdGVzKSAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ2Rpc2FibGVkRGF0ZXMnIHZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLCBhIERheSBhcnJheSBvciBhIERhdGUgYXJyYXkuIENoZWNrICR7RElTQUJMRURfREFURVNfRE9DX0xJTkt9IGZvciBtb3JlIGluZm9ybWF0aW9uLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5vdGlmeVNlcnZpY2VDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KCk7XG4gICAgfVxufVxuRGlzYWJsZWREYXRlc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWZvcndhcmQtcmVmICovXG5jb25zdCBCT1RUT01fVklFV19ET0NfTElOSyA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLWJvdHRvbXZpZXcnO1xuY29uc3QgVE9QX1ZJRVdfRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy10b3B2aWV3JztcbmNvbnN0IE1JTl9ET0NfTElOSyA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLW1pbic7XG5jb25zdCBNQVhfRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvQ2FsZW5kYXJDb21wb25lbnQvI3RvYy1tYXgnO1xuY29uc3QgVkFMVUVfRE9DX0xJTksgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9jYWxlbmRhci8jdG9jLXVzaW5nLXdpdGgtanNvbic7XG5jb25zdCB2aXJ0dWFsaXphdGlvblByb3AgPSB4ID0+IHggPyB4LnZpcnR1YWxpemF0aW9uIDogbnVsbDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBDQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUiA9IHtcbiAgICBtdWx0aTogdHJ1ZSxcbiAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckNvbXBvbmVudCkgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBDQUxFTkRBUl9SQU5HRV9WQUxJREFUT1JTID0ge1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDb21wb25lbnQpIC8vdHNsaW50OmRpc2FibGUtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgS0VORE9fSU5QVVRfUFJPVklERVIgPSB7XG4gICAgcHJvdmlkZTogS2VuZG9JbnB1dCxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckNvbXBvbmVudCkgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxufTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIENhbGVuZGFyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19jYWxlbmRhciAlfSN0b2MtYmFzaWMtdXNhZ2UpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tY2FsZW5kYXI+PC9rZW5kby1jYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIENhbGVuZGFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihidXMsIGRvbSwgZWxlbWVudCwgbmF2aWdhdG9yLCByZW5kZXJlciwgY2RyLCBuZ1pvbmUsIGluamVjdG9yLCBzY3JvbGxTeW5jU2VydmljZSwgZGlzYWJsZWREYXRlc1NlcnZpY2UsIHBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuZG9tID0gZG9tO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLm5hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZSA9IHNjcm9sbFN5bmNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlID0gZGlzYWJsZWREYXRlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMucGlja2VyU2VydmljZSA9IHBpY2tlclNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gZ3VpZCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiBtaW4gb3IgbWF4IHZhbGlkYXRvcnMgYXJlIGVuZm9yY2VkIHdoZW4gdmFsaWRhdGluZyBhIGZvcm0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgZGlzYWJsZWRgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgICAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfY2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHRhYmluZGV4YCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIuIEJhc2VkIG9uIHRoZVxuICAgICAgICAgKiBbSFRNTCBgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBiZWhhdmlvcixcbiAgICAgICAgICogaXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgZm9jdXNhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50YWJpbmRleCA9IDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBuYXZpZ2F0aW9uYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXJcbiAgICAgICAgICogYW5kIGRldGVybWluZXMgd2hldGhlciB0aGUgbmF2aWdhdGlvbiBzaWRlLWJhciB3aWxsIGJlIGRpc3BsYXllZFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNpZGViYXJfY2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBhY3RpdmUgdmlldyB0aGF0IHRoZSBDYWxlbmRhciBpbml0aWFsbHkgcmVuZGVyc1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFjdGl2ZXZpZXdfY2FsZW5kYXIgJX0pKS5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIGFjdGl2ZSB2aWV3IGlzIGBtb250aGAuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gWW91IGhhdmUgdG8gc2V0IGBhY3RpdmVWaWV3YCB3aXRoaW4gdGhlIGB0b3BWaWV3YC1gYm90dG9tVmlld2AgcmFuZ2UuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0ubW9udGhdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgYm90dG9tbW9zdCB2aWV3IHRvIHdoaWNoIHRoZSB1c2VyIGNhbiBuYXZpZ2F0ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX2NhbGVuZGFyICV9I3RvYy1wYXJ0aWFsLWRhdGVzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvdHRvbVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0ubW9udGhdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgdG9wbW9zdCB2aWV3IHRvIHdoaWNoIHRoZSB1c2VyIGNhbiBuYXZpZ2F0ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNpZGViYXJfY2FsZW5kYXIgJX0jdG9jLXBhcnRpYWwtZGF0ZXMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG9wVmlldyA9IENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5XTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IGEgd2VlayBudW1iZXIgY29sdW1uIGluIHRoZSBgbW9udGhgIHZpZXdcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB3ZWVrbnVtY29sdW1uX2NhbGVuZGFyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLndlZWtOdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSB2aWV3IGlzIGNoYW5nZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVmlld0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSB2aWV3IGRhdGUgaXMgY2hhbmdlZFxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfY2FsZW5kYXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3RGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZWxsVUlEID0gZ3VpZCgpO1xuICAgICAgICB0aGlzLl9taW4gPSBuZXcgRGF0ZShNSU5fREFURSk7XG4gICAgICAgIHRoaXMuX21heCA9IG5ldyBEYXRlKE1BWF9EQVRFKTtcbiAgICAgICAgdGhpcy5fZm9jdXNlZERhdGUgPSBnZXRUb2RheSgpO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IG5vb3A7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm1pblZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLnN5bmNOYXZpZ2F0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0Q2xhc3NlcyhlbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UuY2FsZW5kYXIgPSB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGZvY3VzZWREYXRlYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgZm9jdXNlZCBkYXRlIG9mIHRoZSBjb21wb25lbnRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX2NhbGVuZGFyICV9I3RvYy1mb2N1c2VkLWRhdGVzKSkuXG4gICAgICpcbiAgICAgKiA+IElmIHRoZSBDYWxlbmRhciBpcyBvdXQgb2YgdGhlIG1pbiBvciBtYXggcmFuZ2UsIGl0IG5vcm1hbGl6ZXMgdGhlIGRlZmluZWQgYGZvY3VzZWREYXRlYC5cbiAgICAgKi9cbiAgICBzZXQgZm9jdXNlZERhdGUoZm9jdXNlZERhdGUpIHtcbiAgICAgICAgdGhpcy5fZm9jdXNlZERhdGUgPSBmb2N1c2VkRGF0ZSB8fCBnZXRUb2RheSgpO1xuICAgICAgICB0aGlzLnNldEFyaWFBY3RpdmVkZXNjZW5kYW50KCk7XG4gICAgfVxuICAgIGdldCBmb2N1c2VkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWREYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBtaW5gIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgKiBkZWZpbmVzIHRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZSB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19jYWxlbmRhciAlfSkpLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgbWluYCB2YWx1ZSBpcyBgMTkwMC0xLTFgLlxuICAgICAqL1xuICAgIHNldCBtaW4obWluKSB7XG4gICAgICAgIHRoaXMuX21pbiA9IG1pbiB8fCBuZXcgRGF0ZShNSU5fREFURSk7XG4gICAgfVxuICAgIGdldCBtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYG1heGAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZFxuICAgICAqIGRlZmluZXMgdGhlIG1heGltdW0gYWxsb3dlZCBkYXRlIHZhbHVlXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlcmFuZ2VzX2NhbGVuZGFyICV9KSkuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBtYXhgIHZhbHVlIGlzIGAyMDk5LTEyLTMxYC5cbiAgICAgKi9cbiAgICBzZXQgbWF4KG1heCkge1xuICAgICAgICB0aGlzLl9tYXggPSBtYXggfHwgbmV3IERhdGUoTUFYX0RBVEUpO1xuICAgIH1cbiAgICBnZXQgbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB2YWx1ZWAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZCBkZWZpbmVzIHRoZSBzZWxlY3RlZCB2YWx1ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogPiBUaGUgYHZhbHVlYCBoYXMgdG8gYmUgYSB2YWxpZFxuICAgICAqIFtKYXZhU2NyaXB0IGBEYXRlYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZSkgaW5zdGFuY2UuXG4gICAgICovXG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZShjYW5kaWRhdGUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZShjYW5kaWRhdGUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZGF0ZXMgb2YgdGhlIENhbGVuZGFyIHRoYXQgd2lsbCBiZSBkaXNhYmxlZFxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfY2FsZW5kYXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmluaXRpYWxpemUodmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IG1vbnRoQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubW9udGhDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB5ZWFyQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMueWVhckNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGRlY2FkZUNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmRlY2FkZUNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbnR1cnlDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5jZW50dXJ5Q2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgd2Vla051bWJlclRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMud2Vla051bWJlclRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgYWN0aXZlVmlld0VudW0oKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW3RoaXMuYWN0aXZlVmlld107XG4gICAgICAgIHJldHVybiBhY3RpdmVWaWV3IDwgdGhpcy5ib3R0b21WaWV3RW51bSA/IHRoaXMuYm90dG9tVmlld0VudW0gOiBhY3RpdmVWaWV3O1xuICAgIH1cbiAgICBnZXQgYm90dG9tVmlld0VudW0oKSB7XG4gICAgICAgIHJldHVybiBDYWxlbmRhclZpZXdFbnVtW3RoaXMuYm90dG9tVmlld107XG4gICAgfVxuICAgIGdldCB0b3BWaWV3RW51bSgpIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyVmlld0VudW1bdGhpcy50b3BWaWV3XTtcbiAgICB9XG4gICAgZ2V0IHdpZGdldElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZDtcbiAgICB9XG4gICAgZ2V0IHdpZGdldFJvbGUoKSB7XG4gICAgICAgIHJldHVybiAnZ3JpZCc7XG4gICAgfVxuICAgIGdldCBjYWxlbmRhclRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IHVuZGVmaW5lZCA6IHRoaXMudGFiSW5kZXg7XG4gICAgfVxuICAgIGdldCBhcmlhRGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kb20uY2FsY3VsYXRlSGVpZ2h0cyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UuY29uZmlndXJlKHRoaXMuYWN0aXZlVmlld0VudW0pO1xuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmJ1cy52aWV3Q2hhbmdlZC5zdWJzY3JpYmUoKHsgdmlldyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW3ZpZXddO1xuICAgICAgICAgICAgdGhpcy5lbWl0RXZlbnQodGhpcy5hY3RpdmVWaWV3Q2hhbmdlLCB0aGlzLmFjdGl2ZVZpZXcpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZS5jb25maWd1cmUodmlldyk7XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTsgLy8gcmVxdWlyZXMgem9uZSBpZiB0ZW1wbGF0ZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuYnVzLmNvbmZpZ3VyZSh0aGlzLmJvdHRvbVZpZXdFbnVtLCB0aGlzLnRvcFZpZXdFbnVtKTtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZS5jb25maWd1cmUodGhpcy5hY3RpdmVWaWV3RW51bSk7XG4gICAgICAgIGNvbnN0IHVzZVZhbHVlID0gaGFzRXhpc3RpbmdWYWx1ZShjaGFuZ2VzLCAndmFsdWUnKSAmJiAhaGFzRXhpc3RpbmdWYWx1ZShjaGFuZ2VzLCAnZm9jdXNlZERhdGUnKTtcbiAgICAgICAgY29uc3QgZm9jdXNlZERhdGUgPSBkYXRlSW5SYW5nZShjbG9uZURhdGUodXNlVmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy5mb2N1c2VkRGF0ZSksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSAhaXNFcXVhbCh0aGlzLmZvY3VzZWREYXRlLCBmb2N1c2VkRGF0ZSkgPyBmb2N1c2VkRGF0ZSA6IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIGlmIChjaGFuZ2VzLm5hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3luY05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtaW5WYWxpZGF0b3IodGhpcy5taW4pIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWF4VmFsaWRhdG9yKHRoaXMubWF4KSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnNldEFyaWFBY3RpdmVkZXNjZW5kYW50KCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN5bmNOYXZpZ2F0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zeW5jTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLnN5bmModmlydHVhbGl6YXRpb25Qcm9wKHRoaXMubmF2aWdhdGlvblZpZXcpLCB2aXJ0dWFsaXphdGlvblByb3AodGhpcy5tb250aFZpZXcpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnZpZXdDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMuZm9yRWFjaCh1bmJpbmRDYWxsYmFjayA9PiB1bmJpbmRDYWxsYmFjaygpKTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLmNhbGVuZGFyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblJlc2l6ZSgpIHtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZm9jdXNlZERhdGUpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIGhvc3QgZWxlbWVudCBvZiB0aGUgQ2FsZW5kYXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJjYWxlbmRhci5mb2N1cygpXCI+Rm9jdXMgY2FsZW5kYXI8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLWNhbGVuZGFyICNjYWxlbmRhcj48L2tlbmRvLWNhbGVuZGFyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIENhbGVuZGFyIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnRhaW5zRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGNsb3Nlc3QoZWxlbWVudCwgbm9kZSA9PiBub2RlID09PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTmF2aWdhdGlvbihjYW5kaWRhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmb2N1c1RhcmdldCA9IGNhbmRpZGF0ZSA/IG5ldyBEYXRlKGNsb25lRGF0ZShjYW5kaWRhdGUpLnNldERhdGUoMSkpIDogdGhpcy5mb2N1c2VkRGF0ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGRhdGVJblJhbmdlKGZvY3VzVGFyZ2V0LCB0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uUGFnZUNoYW5nZSgpIHtcbiAgICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFnZUNoYW5nZVN1YnNjcmlwdGlvbiA9IGZyb20odGhpcy5yZXNvbHZlZFByb21pc2UpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7IC8vIHJlcXVpcmVzIHpvbmUgaWYgdGVtcGxhdGVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRGF0ZUNoYW5nZShjYW5kaWRhdGUpIHtcbiAgICAgICAgY29uc3QgY2FuTmF2aWdhdGVEb3duID0gdGhpcy5idXMuY2FuTW92ZURvd24odGhpcy5hY3RpdmVWaWV3RW51bSk7XG4gICAgICAgIGNvbnN0IGlzU2FtZURhdGUgPSAhY2FuTmF2aWdhdGVEb3duICYmIGlzRXF1YWwoY2FuZGlkYXRlLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpIHx8IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU2FtZURhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFNhbWVEYXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbk5hdmlnYXRlRG93bikge1xuICAgICAgICAgICAgdGhpcy5idXMubW92ZURvd24odGhpcy5hY3RpdmVWaWV3RW51bSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmlzRGF0ZURpc2FibGVkKGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZShjYW5kaWRhdGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKGNhbmRpZGF0ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUoY2FuZGlkYXRlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGRhdGVJblJhbmdlKGNsb25lRGF0ZShjYW5kaWRhdGUpIHx8IHRoaXMuZm9jdXNlZERhdGUsIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUoY2FuZGlkYXRlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZShjb250cm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pblZhbGlkYXRlRm4oY29udHJvbCkgfHwgdGhpcy5tYXhWYWxpZGF0ZUZuKGNvbnRyb2wpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhY3RpdmVDZWxsVGVtcGxhdGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3RW51bSkge1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoQ2VsbFRlbXBsYXRlIHx8IHRoaXMuY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLnllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhckNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5kZWNhZGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjYWRlQ2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLmNlbnR1cnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudHVyeUNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGVtaXRFdmVudChlbWl0dGVyLCBhcmdzKSB7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnMoZW1pdHRlcikpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q2xhc3NlcyhlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2std2lkZ2V0Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stY2FsZW5kYXInKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnay1jYWxlbmRhci1pbmZpbml0ZScpO1xuICAgIH1cbiAgICB2ZXJpZnlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubWluID4gdGhpcy5tYXgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1heCB2YWx1ZSBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gdGhlIG1pbi4gU2VlICR7TUlOX0RPQ19MSU5LfSBhbmQgJHtNQVhfRE9DX0xJTkt9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJvdHRvbVZpZXdFbnVtID4gdGhpcy50b3BWaWV3RW51bSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdG9wVmlldyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGJvdHRvbVZpZXcuIFNlZSAke0JPVFRPTV9WSUVXX0RPQ19MSU5LfSBhbmQgJHtUT1BfVklFV19ET0NfTElOS30uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUoY2FuZGlkYXRlKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuZGlkYXRlICYmICEoY2FuZGlkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICd2YWx1ZScgc2hvdWxkIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBEYXRlIGluc3RhbmNlLiBDaGVjayAke1ZBTFVFX0RPQ19MSU5LfSBmb3IgcG9zc2libGUgcmVzb2x1dGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBiaW5kRXZlbnRzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2JsdXInLCB0aGlzLmhhbmRsZUJsdXIuYmluZCh0aGlzKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdmb2N1cycsIHRoaXMuaGFuZGxlRm9jdXMuYmluZCh0aGlzKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdtb3VzZWRvd24nLCBwcmV2ZW50RGVmYXVsdCksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsIHRoaXMuaGFuZGxlQ2xpY2suYmluZCh0aGlzKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgZW1pdEJsdXIoYXJncykge1xuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2Uub25CbHVyLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2Uub25Gb2N1cy5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQmx1cihhcmdzKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhlIGluamVjdG9yIGNhbiBnZXQgdGhlIE5nQ29udHJvbCBpbnN0YW5jZSBvZiB0aGUgcGFyZW50IGNvbXBvbmVudCAoZm9yIGV4YW1wbGUsIHRoZSBEYXRlVGltZVBpY2tlcilcbiAgICAgICAgLy8gYW5kIGVudGVycyB0aGUgem9uZSBmb3Igbm8gcmVhc29uIGJlY2F1c2UgdGhlIHBhcmVudCBjb21wb25lbnQgaXMgc3RpbGwgdW50b3VjaGVkXG4gICAgICAgIGlmICghdGhpcy5waWNrZXJTZXJ2aWNlICYmIHJlcXVpcmVzWm9uZU9uQmx1cih0aGlzLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEJsdXIoYXJncyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdEJsdXIoYXJncyk7XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmICghTmdab25lLmlzSW5Bbmd1bGFyWm9uZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXRGb2N1cygpO1xuICAgIH1cbiAgICBoYW5kbGVDbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tb250aFZpZXcuaXNTY3JvbGxlZCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGNsb25lRGF0ZSh0aGlzLmZvY3VzZWREYXRlKTsgLy9YWFg6IGZvcmNlcyBjaGFuZ2UgZGV0ZWN0XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIC8vIHJlc2VydmUgdGhlIGFsdCArIGFycm93IGtleSBjb21tYW5kcyBmb3IgdGhlIHBpY2tlclxuICAgICAgICBjb25zdCBhcnJvd0tleVByZXNzZWQgPSBbS2V5cy5BcnJvd1VwLCBLZXlzLkFycm93UmlnaHQsIEtleXMuQXJyb3dEb3duLCBLZXlzLkFycm93TGVmdF0uaW5kZXhPZihhcmdzLmtleUNvZGUpICE9PSAtMTtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnBpY2tlclNlcnZpY2UpICYmIGFycm93S2V5UHJlc3NlZCAmJiBhcmdzLmFsdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGRhdGVJblJhbmdlKHRoaXMubmF2aWdhdG9yLm1vdmUodGhpcy5mb2N1c2VkRGF0ZSwgdGhpcy5uYXZpZ2F0b3IuYWN0aW9uKGFyZ3MpLCB0aGlzLmFjdGl2ZVZpZXdFbnVtKSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuZm9jdXNlZERhdGUsIGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSBjYW5kaWRhdGU7XG4gICAgICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVDaGFuZ2UodGhpcy5mb2N1c2VkRGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGV0ZWN0Q2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRTYW1lRGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLnNhbWVEYXRlU2VsZWN0ZWQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEFyaWFBY3RpdmVkZXNjZW5kYW50KCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLmVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZm9jdXNlZENlbGxJZCA9IHRoaXMuY2VsbFVJRCArIHRoaXMuZm9jdXNlZERhdGUuZ2V0VGltZSgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCcsIGZvY3VzZWRDZWxsSWQpO1xuICAgIH1cbn1cbkNhbGVuZGFyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kby1jYWxlbmRhcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIEJ1c1ZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBDQUxFTkRBUl9WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgICAgICAgICAgQ0FMRU5EQVJfUkFOR0VfVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAgS0VORE9fSU5QVVRfUFJPVklERVIsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERpc2FibGVkRGF0ZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uY2FsZW5kYXInXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTY3JvbGxTeW5jU2VydmljZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYWxlbmRhcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyIGtlbmRvQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc1xuICAgICAgICBpMThuLXRvZGF5PVwia2VuZG8uY2FsZW5kYXIudG9kYXl8VGhlIGxhYmVsIGZvciB0aGUgdG9kYXkgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXJcIlxuICAgICAgICB0b2RheT1cIlRPREFZXCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGtlbmRvLWNhbGVuZGFyLW5hdmlnYXRpb25cbiAgICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld0VudW1cIlxuICAgICAgICBbZm9jdXNlZERhdGVdPVwiZm9jdXNlZERhdGVcIlxuICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cIm5hdmlnYXRpb25JdGVtVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZU5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgpXCJcbiAgICA+XG4gICAgPC9rZW5kby1jYWxlbmRhci1uYXZpZ2F0aW9uPlxuICAgIDxrZW5kby1jYWxlbmRhci12aWV3bGlzdFxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3RW51bVwiXG4gICAgICAgIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZVwiXG4gICAgICAgIFtjZWxsVGVtcGxhdGVSZWZdPVwiYWN0aXZlQ2VsbFRlbXBsYXRlKCk/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgW2hlYWRlclRpdGxlVGVtcGxhdGVSZWZdPVwiaGVhZGVyVGl0bGVUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbd2Vla051bWJlclRlbXBsYXRlUmVmXT1cIndlZWtOdW1iZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbY2VsbFVJRF09XCJjZWxsVUlEXCJcbiAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgIFtmb2N1c2VkRGF0ZV09XCJmb2N1c2VkRGF0ZVwiXG4gICAgICAgIFt3ZWVrTnVtYmVyXT1cIndlZWtOdW1iZXJcIlxuICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGFjdGl2ZURhdGVDaGFuZ2UpPVwiZW1pdEV2ZW50KGFjdGl2ZVZpZXdEYXRlQ2hhbmdlLCAkZXZlbnQpXCJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKClcIlxuICAgID5cbiAgICA8L2tlbmRvLWNhbGVuZGFyLXZpZXdsaXN0PlxuICAgIDxrZW5kby1yZXNpemUtc2Vuc29yIChyZXNpemUpPVwib25SZXNpemUoKVwiPjwva2VuZG8tcmVzaXplLXNlbnNvcj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DYWxlbmRhckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEJ1c1ZpZXdTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDYWxlbmRhckRPTVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBTY3JvbGxTeW5jU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGlzYWJsZWREYXRlc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFBpY2tlclNlcnZpY2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5DYWxlbmRhckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBpZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZERhdGVzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBuYXZpZ2F0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3R0b21WaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3BWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2Vlay1udW1iZXInLF0gfV0sXG4gICAgYWN0aXZlVmlld0NoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGFjdGl2ZVZpZXdEYXRlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydtb250aENlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB5ZWFyQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsneWVhckNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGRlY2FkZUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnZGVjYWRlQ2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIGNlbnR1cnlDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydjZW50dXJ5Q2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnd2Vla051bWJlclRlbXBsYXRlJyxdIH1dLFxuICAgIGhlYWRlclRpdGxlVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0hlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydoZWFkZXJUaXRsZVRlbXBsYXRlJyxdIH1dLFxuICAgIG5hdmlnYXRpb25JdGVtVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW05hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWyduYXZpZ2F0aW9uSXRlbVRlbXBsYXRlJyxdIH1dLFxuICAgIG5hdmlnYXRpb25WaWV3OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtOYXZpZ2F0aW9uQ29tcG9uZW50LF0gfV0sXG4gICAgbW9udGhWaWV3OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtWaWV3TGlzdENvbXBvbmVudCxdIH1dLFxuICAgIHdpZGdldElkOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmlkJyxdIH1dLFxuICAgIHdpZGdldFJvbGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIucm9sZScsXSB9XSxcbiAgICBjYWxlbmRhclRhYkluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnRhYmluZGV4JyxdIH1dLFxuICAgIGFyaWFEaXNhYmxlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLWRpc2FibGVkJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGluY29tcGxldGVEYXRlVmFsaWRhdG9yID0gKCkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbCwgaW5jb21wbGV0ZSkgPT4ge1xuICAgICAgICBpZiAoIWlzUHJlc2VudChjb250cm9sLnZhbHVlKSAmJiBpbmNvbXBsZXRlKSB7XG4gICAgICAgICAgICByZXR1cm4geyBpbmNvbXBsZXRlRGF0ZTogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbnZhciBBcnJvdztcbihmdW5jdGlvbiAoQXJyb3cpIHtcbiAgICBBcnJvd1tBcnJvd1tcIlVwXCJdID0gMF0gPSBcIlVwXCI7XG4gICAgQXJyb3dbQXJyb3dbXCJEb3duXCJdID0gMV0gPSBcIkRvd25cIjtcbiAgICBBcnJvd1tBcnJvd1tcIk5vbmVcIl0gPSAyXSA9IFwiTm9uZVwiO1xufSkoQXJyb3cgfHwgKEFycm93ID0ge30pKTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5jb25zdCBNSU5fRE9DX0xJTkskMSA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9EYXRlSW5wdXRDb21wb25lbnQvI3RvYy1taW4nO1xuY29uc3QgTUFYX0RPQ19MSU5LJDEgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9hcGkvRGF0ZUlucHV0Q29tcG9uZW50LyN0b2MtbWF4JztcbmNvbnN0IFZBTFVFX0RPQ19MSU5LJDEgPSAnaHR0cDovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9kYXRlaW5wdXQvI3RvYy11c2luZy13aXRoLWpzb24nO1xuY29uc3QgREFURV9QQVJUX1JFR0VYUCA9IC95ZWFyfG1vbnRofDxkYXk+LztcbmNvbnN0IFRJTUVfUEFSVF9SRUdFWFAgPSAvaG91cnxtaW51dGV8c2Vjb25kfG1pbGxpc2Vjb25kLztcbmNvbnN0IFNIT1JUX1BBVFRFUk5fTEVOR1RIX1JFR0VYUCA9IC9kfE18SHxofG18cy87XG5jb25zdCBwYWRaZXJvID0gKGxlbmd0aCkgPT4gbmV3IEFycmF5KE1hdGgubWF4KGxlbmd0aCwgMCkpLmZpbGwoJzAnKS5qb2luKCcnKTtcbmNvbnN0IHVucGFkWmVybyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXjAqLywgJycpO1xuY2xhc3MgTWFzayB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc3ltYm9scyA9IFwiXCI7XG4gICAgfVxufVxuY2xhc3MgS2VuZG9EYXRlIHtcbiAgICBjb25zdHJ1Y3RvcihpbnRsLCBmb3JtYXRQbGFjZWhvbGRlciwgZm9ybWF0LCB2YWx1ZSkge1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmZvcm1hdFBsYWNlaG9sZGVyID0gZm9ybWF0UGxhY2Vob2xkZXI7XG4gICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICB0aGlzLnllYXIgPSB0cnVlO1xuICAgICAgICB0aGlzLm1vbnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kYXRlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5ob3VycyA9IHRydWU7XG4gICAgICAgIHRoaXMubWludXRlcyA9IHRydWU7XG4gICAgICAgIHRoaXMuc2Vjb25kcyA9IHRydWU7XG4gICAgICAgIHRoaXMubWlsbGlzZWNvbmRzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sZWFkaW5nWmVybyA9IG51bGw7XG4gICAgICAgIHRoaXMubW9udGhOYW1lcyA9IG51bGw7XG4gICAgICAgIHRoaXMudHlwZWRNb250aFBhcnQgPSBcIlwiO1xuICAgICAgICB0aGlzLnZhbHVlID0gZ2V0RGF0ZShuZXcgRGF0ZSgpKTtcbiAgICAgICAgdGhpcy5rbm93blBhcnRzID0gXCJhZEhobU1zRXlcIjtcbiAgICAgICAgdGhpcy5zeW1ib2xzID0ge1xuICAgICAgICAgICAgXCJFXCI6IFwiRVwiLFxuICAgICAgICAgICAgXCJIXCI6IFwiSFwiLFxuICAgICAgICAgICAgXCJNXCI6IFwiTVwiLFxuICAgICAgICAgICAgXCJhXCI6IFwiYVwiLFxuICAgICAgICAgICAgXCJkXCI6IFwiZFwiLFxuICAgICAgICAgICAgXCJoXCI6IFwiaFwiLFxuICAgICAgICAgICAgXCJtXCI6IFwibVwiLFxuICAgICAgICAgICAgXCJzXCI6IFwic1wiLFxuICAgICAgICAgICAgXCJ5XCI6IFwieVwiXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubW9udGhOYW1lcyA9IHRoaXMuYWxsRm9ybWF0ZWRNb250aHMoKTtcbiAgICAgICAgdGhpcy5kYXlQZXJpb2RzID0gdGhpcy5hbGxEYXlQZXJpb2RzKCk7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBnZXREYXRlKG5ldyBEYXRlKCkpO1xuICAgICAgICAgICAgY29uc3Qgc2FtcGxlRm9ybWF0ID0gdGhpcy5kYXRlRm9ybWF0U3RyaW5nKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KS5zeW1ib2xzO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVGb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEV4aXN0aW5nKHNhbXBsZUZvcm1hdFtpXSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFzVmFsdWUoKSB7XG4gICAgICAgIGNvbnN0IHByZWQgPSAoYSwgcCkgPT4gYSB8fCBwLnR5cGUgIT09ICdsaXRlcmFsJyAmJiBwLnR5cGUgIT09ICdkYXlwZXJpb2QnICYmIHRoaXMuZ2V0RXhpc3RpbmcocC5wYXR0ZXJuWzBdKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50bC5zcGxpdERhdGVGb3JtYXQodGhpcy5mb3JtYXQpLnJlZHVjZShwcmVkLCBmYWxzZSk7XG4gICAgfVxuICAgIGdldERhdGVPYmplY3QoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5rbm93blBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ2V0RXhpc3RpbmcodGhpcy5rbm93blBhcnRzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbG9uZURhdGUodGhpcy52YWx1ZSk7XG4gICAgfVxuICAgIGdldFRleHRBbmRGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lcmdlKHRoaXMuaW50bC5mb3JtYXREYXRlKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KSwgdGhpcy5kYXRlRm9ybWF0U3RyaW5nKHRoaXMudmFsdWUsIHRoaXMuZm9ybWF0KSk7XG4gICAgfVxuICAgIGdldEV4aXN0aW5nKHN5bWJvbCkge1xuICAgICAgICBzd2l0Y2ggKHN5bWJvbCkge1xuICAgICAgICAgICAgY2FzZSBcInlcIjogcmV0dXJuIHRoaXMueWVhcjtcbiAgICAgICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgICBjYXNlIFwiTFwiOiByZXR1cm4gdGhpcy5tb250aDtcbiAgICAgICAgICAgIGNhc2UgXCJkXCI6IHJldHVybiB0aGlzLmRhdGU7XG4gICAgICAgICAgICBjYXNlIFwiRVwiOiByZXR1cm4gdGhpcy5kYXRlICYmIHRoaXMubW9udGggJiYgdGhpcy55ZWFyO1xuICAgICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJIXCI6IHJldHVybiB0aGlzLmhvdXJzO1xuICAgICAgICAgICAgY2FzZSBcIm1cIjogcmV0dXJuIHRoaXMubWludXRlcztcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6IHJldHVybiB0aGlzLnNlY29uZHM7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRFeGlzdGluZyhzeW1ib2wsIHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgIHRoaXMueWVhciA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRGdWxsWWVhcigyMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vYWxsb3cgMi8yOSBkYXRlc1xuICAgICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgICAgICB0aGlzLm1vbnRoID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnNldE1vbnRoKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhazsgLy9tYWtlIHN1cmUgeW91IGNhbiB0eXBlIDMxIGF0IGRheSBwYXJ0XG4gICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRzID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgbW9kaWZ5UGFydChzeW1ib2wsIG9mZnNldCkge1xuICAgICAgICBsZXQgbmV3VmFsdWUgPSBjbG9uZURhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgIHN3aXRjaCAoc3ltYm9sKSB7XG4gICAgICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNldEZ1bGxZZWFyKG5ld1ZhbHVlLmdldEZ1bGxZZWFyKCkgKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZSA9IGFkZE1vbnRocyh0aGlzLnZhbHVlLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRcIjpcbiAgICAgICAgICAgIGNhc2UgXCJFXCI6XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuc2V0RGF0ZShuZXdWYWx1ZS5nZXREYXRlKCkgKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICAgIGNhc2UgXCJIXCI6XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuc2V0SG91cnMobmV3VmFsdWUuZ2V0SG91cnMoKSArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibVwiOlxuICAgICAgICAgICAgICAgIG5ld1ZhbHVlLnNldE1pbnV0ZXMobmV3VmFsdWUuZ2V0TWludXRlcygpICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUuc2V0U2Vjb25kcyhuZXdWYWx1ZS5nZXRTZWNvbmRzKCkgKyBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICAgICAgICBuZXdWYWx1ZS5zZXRIb3VycyhuZXdWYWx1ZS5nZXRIb3VycygpICsgKDEyICogb2Zmc2V0KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV3VmFsdWUuZ2V0RnVsbFllYXIoKSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhpc3Rpbmcoc3ltYm9sLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXJzZVBhcnQoc3ltYm9sLCBjdXJyZW50Q2hhciwgcmVzZXRTZWdtZW50VmFsdWUpIHtcbiAgICAgICAgaWYgKCFjdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgdGhpcy5yZXNldExlYWRpbmdaZXJvKCk7XG4gICAgICAgICAgICB0aGlzLnNldEV4aXN0aW5nKHN5bWJvbCwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bGwsIHN3aXRjaFRvTmV4dDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYmFzZURhdGUgPSB0aGlzLmludGwuZm9ybWF0RGF0ZSh0aGlzLnZhbHVlLCB0aGlzLmZvcm1hdCk7XG4gICAgICAgIGxldCBkYXRlUGFydHMgPSB0aGlzLmRhdGVGb3JtYXRTdHJpbmcodGhpcy52YWx1ZSwgdGhpcy5mb3JtYXQpO1xuICAgICAgICBsZXQgYmFzZUZvcm1hdCA9IGRhdGVQYXJ0cy5zeW1ib2xzO1xuICAgICAgICBsZXQgcmVwbGFjZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHByZWZpeCA9IFwiXCI7XG4gICAgICAgIGxldCBjdXJyZW50ID0gXCJcIjtcbiAgICAgICAgbGV0IHN1ZmZpeCA9IFwiXCI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmFzZURhdGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChiYXNlRm9ybWF0W2ldID09PSBzeW1ib2wpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50ICs9IHRoaXMuZ2V0RXhpc3Rpbmcoc3ltYm9sKSA/IGJhc2VEYXRlW2ldIDogXCIwXCI7XG4gICAgICAgICAgICAgICAgcmVwbGFjZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXJlcGxhY2VkKSB7XG4gICAgICAgICAgICAgICAgcHJlZml4ICs9IGJhc2VEYXRlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3VmZml4ICs9IGJhc2VEYXRlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBjdXJyZW50TWF4TGVuZ3RoID0gY3VycmVudC5sZW5ndGggLSAzO1xuICAgICAgICBsZXQgcGFyc2VkRGF0ZSA9IG51bGw7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5tYXRjaE1vbnRoKGN1cnJlbnRDaGFyKTtcbiAgICAgICAgY29uc3QgZGF5UGVyaW9kID0gdGhpcy5tYXRjaERheVBlcmlvZChjdXJyZW50Q2hhciwgc3ltYm9sKTtcbiAgICAgICAgY29uc3QgaXNaZXJvQ3VycmVudENoYXIgPSBjdXJyZW50Q2hhciA9PT0gJzAnO1xuICAgICAgICBjb25zdCBsZWFkaW5nWmVybyA9ICh0aGlzLmxlYWRpbmdaZXJvIHx8IHt9KVtzeW1ib2xdIHx8IDA7XG4gICAgICAgIGlmIChpc1plcm9DdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgbGV0IHZhbHVlTnVtYmVyID0gcGFyc2VJbnQocmVzZXRTZWdtZW50VmFsdWUgPyBjdXJyZW50Q2hhciA6IGN1cnJlbnQgKyBjdXJyZW50Q2hhciwgMTApO1xuICAgICAgICAgICAgaWYgKHZhbHVlTnVtYmVyID09PSAwICYmICF0aGlzLmlzQWJick1vbnRoKGRhdGVQYXJ0cy5wYXJ0TWFwLCBzeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmNyZW1lbnRMZWFkaW5nWmVybyhzeW1ib2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZXNldExlYWRpbmdaZXJvKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IE1hdGgubWF4KDAsIGN1cnJlbnRNYXhMZW5ndGgpOyBpIDw9IGN1cnJlbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBtaWRkbGUgPSByZXNldFNlZ21lbnRWYWx1ZSA/IGN1cnJlbnRDaGFyIDogKGN1cnJlbnQuc3Vic3RyaW5nKGkpICsgY3VycmVudENoYXIpO1xuICAgICAgICAgICAgbGV0IG1pZGRsZU51bWJlciA9IHBhcnNlSW50KG1pZGRsZSwgMTApO1xuICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IHRoaXMuaW50bC5wYXJzZURhdGUocHJlZml4ICsgbWlkZGxlICsgc3VmZml4LCB0aGlzLmZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoIXBhcnNlZERhdGUgJiYgIWlzTmFOKG1pZGRsZU51bWJlcikgJiYgIWlzTmFOKHBhcnNlSW50KGN1cnJlbnRDaGFyLCAxMCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN5bWJvbCA9PT0gJ00nICYmICFtb250aCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb250aE51bWJlciA9IG1pZGRsZU51bWJlciAtIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb250aE51bWJlciA+IC0xICYmIG1vbnRoTnVtYmVyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBjbG9uZURhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlLnNldE1vbnRoKG1vbnRoTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWREYXRlLmdldE1vbnRoKCkgIT09IG1vbnRoTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IGxhc3REYXlPZk1vbnRoKGFkZE1vbnRocyhwYXJzZWREYXRlLCAtMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgPT09ICd5Jykge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gY3JlYXRlRGF0ZShwYXJzZUludChtaWRkbGUsIDEwKSwgdGhpcy5tb250aCA/IHRoaXMudmFsdWUuZ2V0TW9udGgoKSA6IDAsIHRoaXMuZGF0ZSA/IHRoaXMudmFsdWUuZ2V0RGF0ZSgpIDogMSwgdGhpcy5ob3VycyA/IHRoaXMudmFsdWUuZ2V0SG91cnMoKSA6IDAsIHRoaXMubWludXRlcyA/IHRoaXMudmFsdWUuZ2V0TWludXRlcygpIDogMCwgdGhpcy5zZWNvbmRzID8gdGhpcy52YWx1ZS5nZXRTZWNvbmRzKCkgOiAwLCB0aGlzLm1pbGxpc2Vjb25kcyA/IHRoaXMudmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkgOiAwKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZSAmJiBwYXJzZWREYXRlLmdldERhdGUoKSAhPT0gdGhpcy52YWx1ZS5nZXREYXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBsYXN0RGF5T2ZNb250aChhZGRNb250aHMocGFyc2VkRGF0ZSwgLTEpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgLy9tb3ZlIHRvIG5leHQgc2VnbWVudCBpZiB0aGUgcGFydCB3aWxsIG92ZXJmbG93IHdpdGggbmV4dCBjaGFyXG4gICAgICAgICAgICAgICAgLy93aGVuIHN0YXJ0IGZyb20gZW1wdHkgZGF0ZSAoMDEsIHRoZW4gMDEwKSwgcGFkZGVkIHplcm9zIHNob3VsZCBiZSB0cmltbWVkXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0dGVyblZhbHVlID0gdGhpcy5wYXJ0UGF0dGVybihkYXRlUGFydHMucGFydE1hcCwgc3ltYm9sKS5wYXR0ZXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBlZWtEYXRlID0gdGhpcy5pbnRsLnBhcnNlRGF0ZShgJHtwcmVmaXh9JHt0aGlzLnBlZWsobWlkZGxlLCBwYXR0ZXJuVmFsdWUpfSR7c3VmZml4fWAsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuTGVuZ3RoID0gdGhpcy5wYXR0ZXJuTGVuZ3RoKHBhdHRlcm5WYWx1ZSkgfHwgcGF0dGVyblZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXR0ZXJuU2F0aXNmaWVkID0gKGxlYWRpbmdaZXJvICsgKHVucGFkWmVybyhtaWRkbGUpIHx8IGN1cnJlbnRDaGFyKS5sZW5ndGgpID49IHBhdHRlcm5MZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoVG9OZXh0ID0gcGVla0RhdGUgPT09IG51bGwgfHwgcGF0dGVyblNhdGlzZmllZDtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VkRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEV4aXN0aW5nKHN5bWJvbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMudmFsdWUsIHN3aXRjaFRvTmV4dDogc3dpdGNoVG9OZXh0IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbnRoKSB7XG4gICAgICAgICAgICBwYXJzZWREYXRlID0gdGhpcy5pbnRsLnBhcnNlRGF0ZShwcmVmaXggKyBtb250aCArIHN1ZmZpeCwgdGhpcy5mb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gcGFyc2VkRGF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEV4aXN0aW5nKHN5bWJvbCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMudmFsdWUsIHN3aXRjaFRvTmV4dDogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5UGVyaW9kKSB7XG4gICAgICAgICAgICBwYXJzZWREYXRlID0gdGhpcy5pbnRsLnBhcnNlRGF0ZShwcmVmaXggKyBkYXlQZXJpb2QgKyBzdWZmaXgsIHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIGlmIChwYXJzZWREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHRoaXMudmFsdWUsIHN3aXRjaFRvTmV4dDogdHJ1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1plcm9DdXJyZW50Q2hhcikge1xuICAgICAgICAgICAgdGhpcy5zZXRFeGlzdGluZyhzeW1ib2wsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWx1ZTogbnVsbCwgc3dpdGNoVG9OZXh0OiBmYWxzZSB9O1xuICAgIH1cbiAgICByZXNldExlYWRpbmdaZXJvKCkge1xuICAgICAgICBjb25zdCBoYXNMZWFkaW5nWmVybyA9IHRoaXMubGVhZGluZ1plcm8gIT09IG51bGw7XG4gICAgICAgIHRoaXMuc2V0TGVhZGluZ1plcm8obnVsbCk7XG4gICAgICAgIHJldHVybiBoYXNMZWFkaW5nWmVybztcbiAgICB9XG4gICAgc2V0TGVhZGluZ1plcm8obGVhZGluZ1plcm8pIHtcbiAgICAgICAgdGhpcy5sZWFkaW5nWmVybyA9IGxlYWRpbmdaZXJvO1xuICAgIH1cbiAgICBpbmNyZW1lbnRMZWFkaW5nWmVybyhzeW1ib2wpIHtcbiAgICAgICAgY29uc3QgbGVhZGluZ1plcm8gPSB0aGlzLmxlYWRpbmdaZXJvIHx8IHt9O1xuICAgICAgICBsZWFkaW5nWmVyb1tzeW1ib2xdID0gKGxlYWRpbmdaZXJvW3N5bWJvbF0gfHwgMCkgKyAxO1xuICAgICAgICB0aGlzLmxlYWRpbmdaZXJvID0gbGVhZGluZ1plcm87XG4gICAgfVxuICAgIGlzQWJick1vbnRoKHBhcnRzLCBzeW1ib2wpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IHRoaXMucGFydFBhdHRlcm4ocGFydHMsIHN5bWJvbCk7XG4gICAgICAgIHJldHVybiBwYXR0ZXJuLnR5cGUgPT09ICdtb250aCcgJiYgcGF0dGVybi5uYW1lcztcbiAgICB9XG4gICAgcGFydFBhdHRlcm4ocGFydHMsIHN5bWJvbCkge1xuICAgICAgICByZXR1cm4gcGFydHMuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LnBhdHRlcm4uaW5kZXhPZihzeW1ib2wpICE9PSAtMSlbMF07XG4gICAgfVxuICAgIHBlZWsodmFsdWUsIHBhdHRlcm4pIHtcbiAgICAgICAgY29uc3QgcGVla1ZhbHVlID0gdW5wYWRaZXJvKHZhbHVlKSArICcwJztcbiAgICAgICAgcmV0dXJuIHBhZFplcm8ocGF0dGVybi5sZW5ndGggLSBwZWVrVmFsdWUubGVuZ3RoKSArIHBlZWtWYWx1ZTtcbiAgICB9XG4gICAgbWF0Y2hNb250aCh0eXBlZENoYXIpIHtcbiAgICAgICAgdGhpcy50eXBlZE1vbnRoUGFydCArPSB0eXBlZENoYXIudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLm1vbnRoTmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0aGlzLnR5cGVkTW9udGhQYXJ0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tb250aE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW9udGhOYW1lc1tpXS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy50eXBlZE1vbnRoUGFydCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9udGhOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb250aEFzTnVtID0gcGFyc2VJbnQodGhpcy50eXBlZE1vbnRoUGFydCwgMTApO1xuICAgICAgICAgICAgaWYgKG1vbnRoQXNOdW0gPj0gMSAmJiBtb250aEFzTnVtIDw9IDEyICYmIG1vbnRoQXNOdW0udG9TdHJpbmcoKSA9PT0gdGhpcy50eXBlZE1vbnRoUGFydCAvKmVuc3VyZSB0aGV5IGV4YWN0IG1hdGNoKi8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tb250aE5hbWVzW21vbnRoQXNOdW0gLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHlwZWRNb250aFBhcnQgPSB0aGlzLnR5cGVkTW9udGhQYXJ0LnN1YnN0cmluZygxLCB0aGlzLnR5cGVkTW9udGhQYXJ0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIG1hdGNoRGF5UGVyaW9kKHR5cGVkQ2hhciwgc3ltYm9sKSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQ2hhcnQgPSBTdHJpbmcodHlwZWRDaGFyKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoc3ltYm9sID09PSAnYScgJiYgdGhpcy5kYXlQZXJpb2RzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXlQZXJpb2RzLmFtLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlckNoYXJ0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRheVBlcmlvZHMuYW07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRheVBlcmlvZHMucG0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGxvd2VyQ2hhcnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5UGVyaW9kcy5wbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIGFsbEZvcm1hdGVkTW9udGhzKCkge1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0UGFydHMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlRm9ybWF0UGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0UGFydHNbaV0udHlwZSA9PT0gXCJtb250aFwiICYmIGRhdGVGb3JtYXRQYXJ0c1tpXS5uYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGwuZGF0ZUZvcm1hdE5hbWVzKGRhdGVGb3JtYXRQYXJ0c1tpXS5uYW1lcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGFsbERheVBlcmlvZHMoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXRQYXJ0cyA9IHRoaXMuaW50bC5zcGxpdERhdGVGb3JtYXQodGhpcy5mb3JtYXQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGVGb3JtYXRQYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXRQYXJ0c1tpXS50eXBlID09PSBcImRheXBlcmlvZFwiICYmIGRhdGVGb3JtYXRQYXJ0c1tpXS5uYW1lcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmludGwuZGF0ZUZvcm1hdE5hbWVzKGRhdGVGb3JtYXRQYXJ0c1tpXS5uYW1lcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHBhdHRlcm5MZW5ndGgocGF0dGVybikge1xuICAgICAgICBpZiAocGF0dGVyblswXSA9PT0gJ3knKSB7XG4gICAgICAgICAgICByZXR1cm4gNDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoU0hPUlRfUEFUVEVSTl9MRU5HVEhfUkVHRVhQLnRlc3QocGF0dGVybikpIHtcbiAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvL1RPRE86IFJFTU9WRSFcbiAgICBkYXRlRm9ybWF0U3RyaW5nKGRhdGUsIGZvcm1hdCkge1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0UGFydHMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KGZvcm1hdCk7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gW107XG4gICAgICAgIGNvbnN0IHBhcnRNYXAgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRlRm9ybWF0UGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBwYXJ0TGVuZ3RoID0gdGhpcy5pbnRsLmZvcm1hdERhdGUoZGF0ZSwgeyBwYXR0ZXJuOiBkYXRlRm9ybWF0UGFydHNbaV0ucGF0dGVybiB9KS5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAocGFydExlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBwYXJ0cy5wdXNoKHRoaXMuc3ltYm9sc1tkYXRlRm9ybWF0UGFydHNbaV0ucGF0dGVyblswXV0gfHwgXCJfXCIpO1xuICAgICAgICAgICAgICAgIHBhcnRNYXAucHVzaChkYXRlRm9ybWF0UGFydHNbaV0pO1xuICAgICAgICAgICAgICAgIHBhcnRMZW5ndGgtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IG5ldyBNYXNrKCk7XG4gICAgICAgIHJldHVyblZhbHVlLnN5bWJvbHMgPSBwYXJ0cy5qb2luKFwiXCIpO1xuICAgICAgICByZXR1cm5WYWx1ZS5wYXJ0TWFwID0gcGFydE1hcDtcbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH1cbiAgICBtZXJnZSh0ZXh0LCBtYXNrKSB7XG4gICAgICAgIC8vIEltcG9ydGFudDogcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgbGV0IHJlc3VsdFRleHQgPSBcIlwiO1xuICAgICAgICBsZXQgcmVzdWx0Rm9ybWF0ID0gXCJcIjtcbiAgICAgICAgbGV0IGZvcm1hdCA9IG1hc2suc3ltYm9scztcbiAgICAgICAgZm9yIChsZXQgciA9IGZvcm1hdC5sZW5ndGggLSAxOyByID49IDA7IHItLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMua25vd25QYXJ0cy5pbmRleE9mKGZvcm1hdFtyXSkgPT09IC0xIHx8IHRoaXMuZ2V0RXhpc3RpbmcoZm9ybWF0W3JdKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFRleHQgPSB0ZXh0W3JdICsgcmVzdWx0VGV4dDtcbiAgICAgICAgICAgICAgICByZXN1bHRGb3JtYXQgPSBmb3JtYXRbcl0gKyByZXN1bHRGb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ltYm9sID0gZm9ybWF0W3JdO1xuICAgICAgICAgICAgICAgIHdoaWxlIChyID49IDAgJiYgY3VycmVudFN5bWJvbCA9PT0gZm9ybWF0W3JdKSB7XG4gICAgICAgICAgICAgICAgICAgIHItLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcisrO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxlYWRpbmdaZXJvICYmIHRoaXMubGVhZGluZ1plcm9bY3VycmVudFN5bWJvbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0VGV4dCA9ICcwJyArIHJlc3VsdFRleHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRUZXh0ID0gdGhpcy5kYXRlRmllbGROYW1lKG1hc2sucGFydE1hcFtyXSkgKyByZXN1bHRUZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAocmVzdWx0Rm9ybWF0Lmxlbmd0aCA8IHJlc3VsdFRleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdEZvcm1hdCA9IGZvcm1hdFtyXSArIHJlc3VsdEZvcm1hdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyZXN1bHRUZXh0LCByZXN1bHRGb3JtYXRdO1xuICAgIH1cbiAgICBkYXRlRmllbGROYW1lKHBhcnQpIHtcbiAgICAgICAgY29uc3QgZm9ybWF0UGxhY2Vob2xkZXIgPSB0aGlzLmZvcm1hdFBsYWNlaG9sZGVyIHx8ICd3aWRlJztcbiAgICAgICAgaWYgKGZvcm1hdFBsYWNlaG9sZGVyW3BhcnQudHlwZV0pIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRQbGFjZWhvbGRlcltwYXJ0LnR5cGVdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtYXRQbGFjZWhvbGRlciA9PT0gJ2Zvcm1hdFBhdHRlcm4nKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFydC5wYXR0ZXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmludGwuZGF0ZUZpZWxkTmFtZShPYmplY3QuYXNzaWduKHBhcnQsIHsgbmFtZVR5cGU6IGZvcm1hdFBsYWNlaG9sZGVyIH0pKTtcbiAgICB9XG59XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBEYXRlSW5wdXQgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVpbnB1dCAlfSN0b2MtYmFzaWMtdXNhZ2UpLlxuICovXG5jbGFzcyBEYXRlSW5wdXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGNkciwgaW50bCwgcmVuZGVyZXIsIGVsZW1lbnQsIG5nWm9uZSwgaW5qZWN0b3IsIGxvY2FsaXphdGlvbiwgcGlja2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlID0gcGlja2VyU2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZm9jdXNhYmxlSWQgPSBgay0ke2d1aWQoKX1gO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgZGlzYWJsZWRgIHByb3BlcnR5IG9mIHRoZSBEYXRlSW5wdXQgYW5kXG4gICAgICAgICAqIGRldGVybWluZXMgd2hldGhlciB0aGUgY29tcG9uZW50IGlzIGFjdGl2ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVpbnB1dCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSByZWFkLW9ubHkgc3RhdGUgb2YgdGhlIERhdGVJbnB1dFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X2RhdGVpbnB1dCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFkb25seSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIERhdGVJbnB1dC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgdGFiSW5kZXhgIHByb3BlcnR5IG9mIHRoZSBEYXRlSW5wdXQuXG4gICAgICAgICAqIC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiaW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yb2xlID0gJ3NwaW5idXR0b24nO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hcmlhUmVhZE9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZGF0ZSBmb3JtYXQgdGhhdCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZm9ybWF0c19kYXRlaW5wdXQgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZm9ybWF0ID0gXCJkXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGhpbnQgdGhlIERhdGVJbnB1dCBkaXNwbGF5cyB3aGVuIGl0cyB2YWx1ZSBpcyBgbnVsbGAuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICAgICAgICAgKiBbcGxhY2Vob2xkZXJzXSh7JSBzbHVnIHBsYWNlaG9sZGVyc19kYXRlaW5wdXQgJX0pLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1kYXRlaW5wdXQgcGxhY2Vob2xkZXI9XCJFbnRlciBiaXJ0aCBkYXRlLi4uXCI+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAqIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gbWluIG9yIG1heCB2YWxpZGF0b3JzIGFyZSB0byBiZSBlbmZvcmNlZCB3aGVuIGEgZm9ybSBpcyBiZWluZyB2YWxpZGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqIEJhc2VkIG9uIHRoZSBtaW4gYW5kIG1heCB2YWx1ZXMsIHNwZWNpZmllcyB3aGV0aGVyIHRoZSB2YWx1ZSB3aWxsIGJlIGF1dG8tY29ycmVjdGVkIHdoaWxlIHR5cGluZy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXV0b0NvcnJlY3QgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmFsaWRhdGlvbiBmb3IgaW5jb21wbGV0ZSBkYXRlcyBpcyB0byBiZSBlbmZvcmNlZCB3aGVuIGEgZm9ybSBpcyBiZWluZyB2YWxpZGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlICoqVXAqKiBhbmQgKipEb3duKiogc3BpbiBidXR0b25zIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICAgICAgICAgKiBbc3Bpbm5lciBidXR0b25zXSh7JSBzbHVnIHNwaW5idXR0b25zX2RhdGVpbnB1dCAlfSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNwaW5uZXJzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzUG9wdXBPcGVuID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhc1BvcHVwID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZWlucHV0ICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBzZWxlY3RzIGEgbmV3IHZhbHVlLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19kYXRlaW5wdXQgJX0jdG9jLWV2ZW50cykuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlVXBkYXRlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGZvY3VzZXMgdGhlIGlucHV0IGVsZW1lbnQuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgc2VjdGlvbiBvblxuICAgICAgICAgKiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVpbnB1dCAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkZvY3VzYCBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tZGF0ZWlucHV0IChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCI+PC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAqIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgcHVibGljIGhhbmRsZUZvY3VzKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGZvY3VzZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBpbnB1dCBlbGVtZW50IGdldHMgYmx1cnJlZC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZWlucHV0ICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uQmx1cmAgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLWRhdGVpbnB1dCAoYmx1cik9XCJoYW5kbGVCbHVyKClcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgaGFuZGxlQmx1cigpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudCBpcyBibHVycmVkXCIpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tb3V0cHV0LXJlbmFtZVxuICAgICAgICB0aGlzLmFycm93ID0gQXJyb3c7XG4gICAgICAgIHRoaXMuYXJyb3dEaXJlY3Rpb24gPSBBcnJvdy5Ob25lO1xuICAgICAgICB0aGlzLmZvcm1hdFNlY3Rpb25zID0geyBkYXRlOiBmYWxzZSwgdGltZTogZmFsc2UgfTtcbiAgICAgICAgdGhpcy5oYXNNb3VzZWRvd24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkUHJpb3JUb01vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0RhdGVJbmNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gXCJcIjtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9ybWF0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5iYWNrc3BhY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZXNldFNlZ21lbnRWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWluVmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5tYXhWYWxpZGF0b3IgPSBub29wO1xuICAgICAgICB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IgPSBub29wO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmtlbmRvRGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMucGFzdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5zeW1ib2xzTWFwID0gdGhpcy5kYXRlU3ltYm9sTWFwKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybWF0U2VjdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLmlucHV0ID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgRGF0ZUlucHV0IGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqID4gVGhlIGB2YWx1ZWAgaGFzIHRvIGJlIGEgdmFsaWQgW0phdmFTY3JpcHQgYERhdGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlKSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Db3JyZWN0ICYmICFpc0luUmFuZ2UodmFsdWUsIHRoaXMubWluLCB0aGlzLm1heCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMudmFsdWVVcGRhdGUuZW1pdChjbG9uZURhdGUodmFsdWUpKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIGdldCB3cmFwcGVyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgZGlzYWJsZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBpbnB1dEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVJbnB1dCA/IHRoaXMuZGF0ZUlucHV0Lm5hdGl2ZUVsZW1lbnQgOiBudWxsO1xuICAgIH1cbiAgICBnZXQgaW5wdXRWYWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmlucHV0RWxlbWVudCB8fCB7fSkudmFsdWUgfHwgJyc7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gICAgc2V0IGlzQWN0aXZlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMud3JhcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMucGlja2VyU2VydmljZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXAubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgYnkgdGhlIFRleHRCb3hDb250YWluZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21wb25lbnQgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY3VycmVudFZhbHVlIHx8ICFTdHJpbmcodGhpcy5jdXJyZW50VmFsdWUpLnRyaW0oKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnRhaW5zRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBCb29sZWFuKGNsb3Nlc3QoZWxlbWVudCwgbm9kZSA9PiBub2RlID09PSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnZlcmlmeVJhbmdlKCk7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0b3IgPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1pblZhbGlkYXRvcih0aGlzLm1pbikgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWxpZGF0b3IgPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1heFZhbGlkYXRvcih0aGlzLm1heCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPyBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRvcigpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlcy5mb3JtYXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3ltYm9sc01hcCA9IHRoaXMuZGF0ZVN5bWJvbE1hcCgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGb3JtYXRTZWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzRXF1YWxUb0tlbmRvRGF0ZSA9IHRoaXMua2VuZG9EYXRlICYmIGlzRXF1YWwodGhpcy52YWx1ZSwgdGhpcy5rZW5kb0RhdGUuZ2V0RGF0ZU9iamVjdCgpKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybWF0IHx8ICFpc0VxdWFsVG9LZW5kb0RhdGUgfHwgY2hhbmdlcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgdGhpcy5rZW5kb0RhdGUgPSB0aGlzLmdldEtlbmRvRGF0ZSh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKHRoaXMuaXNBY3RpdmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5pbnRsU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmludGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UuaW5wdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5iaW5kQ2FsbGJhY2sgPT4gdW5iaW5kQ2FsbGJhY2soKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZShjb250cm9sKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pblZhbGlkYXRvcihjb250cm9sKSB8fCB0aGlzLm1heFZhbGlkYXRvcihjb250cm9sKSB8fCB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IoY29udHJvbCwgdGhpcy5pc0RhdGVJbmNvbXBsZXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMua2VuZG9EYXRlID0gdGhpcy5nZXRLZW5kb0RhdGUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKCk7XG4gICAgICAgIHRoaXMuaW50bFN1YnNjcmlwdGlvbiA9IHRoaXMuaW50bC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmludGxDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd0YWJpbmRleCcpO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIC8vbmdNb2RlbCBiaW5kaW5nXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHdyaXRlVmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMua2VuZG9EYXRlID0gdGhpcy5nZXRLZW5kb0RhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLnZhbHVlID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50VmFsdWUodGhpcy5pc0FjdGl2ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMua2VuZG9EYXRlLmdldERhdGVPYmplY3QoKTtcbiAgICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbm90aWZ5KCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UoY2xvbmVEYXRlKHRoaXMudmFsdWUpKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjbG9uZURhdGUodGhpcy52YWx1ZSkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBEYXRlSW5wdXQgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGJ1dHRvbiAoY2xpY2spPVwiZGF0ZWlucHV0LmZvY3VzKClcIj5Gb2N1cyBkYXRlIGlucHV0PC9idXR0b24+XG4gICAgICogIDxrZW5kby1kYXRlaW5wdXQgI2RhdGVpbnB1dD48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgKiBgXG4gICAgICogfSlcbiAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgIGlucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGVTZWdtZW50KHRoaXMuY3VycmVudEZvcm1hdFswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIERhdGVJbnB1dCBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUJ1dHRvbkNsaWNrKG9mZnNldCkge1xuICAgICAgICB0aGlzLmFycm93RGlyZWN0aW9uID0gQXJyb3cuTm9uZTtcbiAgICAgICAgdGhpcy5tb2RpZnlEYXRlU2VnbWVudFZhbHVlKG9mZnNldCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtb2RpZnlEYXRlU2VnbWVudFZhbHVlKG9mZnNldCkge1xuICAgICAgICBjb25zdCBjYXJldCA9IHRoaXMuY2FyZXQoKTtcbiAgICAgICAgY29uc3Qgc3ltYm9sID0gdGhpcy5jdXJyZW50Rm9ybWF0W2NhcmV0WzBdXTtcbiAgICAgICAgY29uc3Qgc3RlcCA9ICh0aGlzLnN0ZXBzIHx8IHt9KVt0aGlzLnN5bWJvbHNNYXBbc3ltYm9sXV0gfHwgMTtcbiAgICAgICAgdGhpcy5rZW5kb0RhdGUubW9kaWZ5UGFydChzeW1ib2wsIG9mZnNldCAqIHN0ZXApO1xuICAgICAgICB0aGlzLnB1dERhdGVJblJhbmdlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKHRoaXMuaXNBY3RpdmUpO1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlU2VnbWVudChzeW1ib2wpO1xuICAgICAgICB0aGlzLnVwZGF0ZUluY29tcGxldGVWYWxpZGF0aW9uU3RhdHVzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzd2l0Y2hEYXRlU2VnbWVudChvZmZzZXQpIHtcbiAgICAgICAgY29uc3QgY2FyZXQgPSB0aGlzLmNhcmV0KCk7XG4gICAgICAgIGlmICh0aGlzLmtlbmRvRGF0ZS5yZXNldExlYWRpbmdaZXJvKCkpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudFZhbHVlKHRoaXMuaXNBY3RpdmUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYXJldFswXSA8IGNhcmV0WzFdICYmIHRoaXMuY3VycmVudEZvcm1hdFtjYXJldFswXV0gIT09IHRoaXMuY3VycmVudEZvcm1hdFtjYXJldFsxXSAtIDFdKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE5lYXJlc3RTZWdtZW50KG9mZnNldCA+IDAgPyBjYXJldFswXSA6IGNhcmV0WzFdIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0U2VnbWVudFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZpb3VzRm9ybWF0U3ltYm9sID0gdGhpcy5jdXJyZW50Rm9ybWF0W2NhcmV0WzBdXTtcbiAgICAgICAgbGV0IGEgPSBjYXJldFswXSArIG9mZnNldDtcbiAgICAgICAgd2hpbGUgKGEgPiAwICYmIGEgPCB0aGlzLmN1cnJlbnRGb3JtYXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Rm9ybWF0W2FdICE9PSBwcmV2aW91c0Zvcm1hdFN5bWJvbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1hdFthXSAhPT0gXCJfXCIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGEgKz0gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb3JtYXRbYV0gPT09IFwiX1wiKSB7XG4gICAgICAgICAgICAvL3RoZXJlIGlzIG5vdCBrbm93biBzeW1ib2wgZm91bmRcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYiA9IGE7XG4gICAgICAgIHdoaWxlIChiID49IDAgJiYgYiA8IHRoaXMuY3VycmVudEZvcm1hdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb3JtYXRbYl0gIT09IHRoaXMuY3VycmVudEZvcm1hdFthXSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYiArPSBvZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGEgPiBiICYmIChiICsgMSAhPT0gY2FyZXRbMF0gfHwgYSArIDEgIT09IGNhcmV0WzFdKSkge1xuICAgICAgICAgICAgdGhpcy5jYXJldChiICsgMSwgYSArIDEpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlZ21lbnRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhIDwgYiAmJiAoYSAhPT0gY2FyZXRbMF0gfHwgYiAhPT0gY2FyZXRbMV0pKSB7XG4gICAgICAgICAgICB0aGlzLmNhcmV0KGEsIGIpO1xuICAgICAgICAgICAgdGhpcy5yZXNldFNlZ21lbnRWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZWxlY3REYXRlU2VnbWVudChzeW1ib2wpIHtcbiAgICAgICAgbGV0IGJlZ2luID0gLTE7XG4gICAgICAgIGxldCBlbmQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY3VycmVudEZvcm1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1hdFtpXSA9PT0gc3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICAgICAgICAgICAgaWYgKGJlZ2luID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBiZWdpbiA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChiZWdpbiA8IDApIHtcbiAgICAgICAgICAgIGJlZ2luID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhcmV0KDAsIDApO1xuICAgICAgICB0aGlzLmNhcmV0KGJlZ2luLCBlbmQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuaGFzTW91c2Vkb3duID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25QcmVzZW50ID0gdGhpcy5pbnB1dEVsZW1lbnQuc2VsZWN0aW9uU3RhcnQgIT09IHRoaXMuaW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZDtcbiAgICAgICAgICAgIGNvbnN0IHBsYWNlaG9sZGVyVG9nZ2xlZCA9IGlzUHJlc2VudCh0aGlzLnBsYWNlaG9sZGVyKSAmJiAhdGhpcy5rZW5kb0RhdGUuaGFzVmFsdWUoKSAmJiAhdGhpcy5mb2N1c2VkUHJpb3JUb01vdXNlZG93bjtcbiAgICAgICAgICAgIC8vIGZvY3VzIGZpcnN0IHNlZ21lbnQgaWYgdGhlIHVzZXIgaGFzbid0IHNlbGVjdGVkIHNvbWV0aGluZyBkdXJpbmcgbW91c2Vkb3duIGFuZCBpZiB0aGUgcGxhY2Vob2xkZXIgd2FzIGp1c3QgdG9nZ2xlZFxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0Rmlyc3RTZWdtZW50ID0gIXNlbGVjdGlvblByZXNlbnQgJiYgcGxhY2Vob2xkZXJUb2dnbGVkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBzZWxlY3RGaXJzdFNlZ21lbnQgPyAwIDogdGhpcy5jYXJldCgpWzBdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3ROZWFyZXN0U2VnbWVudChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZURyYWdBbmREcm9wKGFyZ3MpIHtcbiAgICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTW91c2Vkb3duKCkge1xuICAgICAgICB0aGlzLmhhc01vdXNlZG93biA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9jdXNlZFByaW9yVG9Nb3VzZWRvd24gPSB0aGlzLmlzQWN0aXZlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRm9jdXMoYXJncykge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50VmFsdWUoKTtcbiAgICAgICAgaWYgKCF0aGlzLmhhc01vdXNlZG93bikge1xuICAgICAgICAgICAgdGhpcy5jYXJldCgwLCB0aGlzLmlucHV0VmFsdWUubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc01vdXNlZG93biA9IGZhbHNlO1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25Gb2N1cykpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Rm9jdXMoYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdEZvY3VzKGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVCbHVyKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlc2V0U2VnbWVudFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5rZW5kb0RhdGUucmVzZXRMZWFkaW5nWmVybygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSgpO1xuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCByZXF1aXJlc1pvbmVPbkJsdXIodGhpcy5uZ0NvbnRyb2wpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEJsdXIoYXJncyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdEJsdXIoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0S2VuZG9EYXRlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgbGVhZGluZ1plcm8gfSA9ICh0aGlzLmtlbmRvRGF0ZSB8fCB7fSkgfHwgbnVsbDtcbiAgICAgICAgY29uc3Qga2VuZG9EYXRlID0gbmV3IEtlbmRvRGF0ZSh0aGlzLmludGwsIHRoaXMuZm9ybWF0UGxhY2Vob2xkZXIsIHRoaXMuZm9ybWF0LCB2YWx1ZSk7XG4gICAgICAgIGtlbmRvRGF0ZS5zZXRMZWFkaW5nWmVybyh0aGlzLmlzQWN0aXZlID8gbGVhZGluZ1plcm8gOiBudWxsKTtcbiAgICAgICAgcmV0dXJuIGtlbmRvRGF0ZTtcbiAgICB9XG4gICAgZGF0ZVN5bWJvbE1hcCgpIHtcbiAgICAgICAgY29uc3QgcmVkdWNlciA9IChtYXAkJDEsIHBhcnQpID0+IHtcbiAgICAgICAgICAgIG1hcCQkMVtwYXJ0LnBhdHRlcm5bMF1dID0gcGFydC50eXBlO1xuICAgICAgICAgICAgcmV0dXJuIG1hcCQkMTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50bC5zcGxpdERhdGVGb3JtYXQodGhpcy5mb3JtYXQpLnJlZHVjZShyZWR1Y2VyLCB7fSk7XG4gICAgfVxuICAgIHVwZGF0ZUVsZW1lbnRWYWx1ZShpc0FjdGl2ZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuY2FyZXQoKVswXTsgLy9YWFg6IGdldCBjYXJldCBwb3NpdGlvbiBiZWZvcmUgaW5wdXQgaXMgdXBkYXRlZFxuICAgICAgICBjb25zdCB0ZXh0cyA9IHRoaXMua2VuZG9EYXRlLmdldFRleHRBbmRGb3JtYXQoKTtcbiAgICAgICAgY29uc3Qgc2hvd1BsYWNlaG9sZGVyID0gIXRoaXMuaXNBY3RpdmUgJiYgaXNQcmVzZW50KHRoaXMucGxhY2Vob2xkZXIpICYmICF0aGlzLmtlbmRvRGF0ZS5oYXNWYWx1ZSgpO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbGVtZW50O1xuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtYXQgPSB0ZXh0c1sxXTtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSAhc2hvd1BsYWNlaG9sZGVyID8gdGV4dHNbMF0gOiAnJztcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgXCJ2YWx1ZVwiLCB0aGlzLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIGlmIChpbnB1dC5wbGFjZWhvbGRlciAhPT0gdGhpcy5wbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eShpbnB1dCwgXCJwbGFjZWhvbGRlclwiLCB0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TmVhcmVzdFNlZ21lbnQoc3RhcnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhcmV0KHN0YXJ0LCBlbmQgPSBzdGFydCkge1xuICAgICAgICBjb25zdCBpc1Bvc2l0aW9uID0gc3RhcnQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IHJldHVyblZhbHVlID0gW3N0YXJ0LCBzdGFydF07XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmlucHV0RWxlbWVudDtcbiAgICAgICAgaWYgKGlzUG9zaXRpb24gJiYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNlbGVjdGlvblN0YXJ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNEb2N1bWVudEF2YWlsYWJsZSgpICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IFtlbGVtZW50LnNlbGVjdGlvblN0YXJ0LCBlbGVtZW50LnNlbGVjdGlvbkVuZF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVyblZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH1cbiAgICBzZWxlY3ROZWFyZXN0U2VnbWVudChpbmRleCkge1xuICAgICAgICAvLyBGaW5kcyB0aGUgbmVhcmVzdCAoaW4gYm90aCBkaXJlY3Rpb25zKSBrbm93biBwYXJ0LlxuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXgsIGogPSBpbmRleCAtIDE7IGkgPCB0aGlzLmN1cnJlbnRGb3JtYXQubGVuZ3RoIHx8IGogPj0gMDsgaSsrLCBqLS0pIHtcbiAgICAgICAgICAgIGlmIChpIDwgdGhpcy5jdXJyZW50Rm9ybWF0Lmxlbmd0aCAmJiB0aGlzLmN1cnJlbnRGb3JtYXRbaV0gIT09IFwiX1wiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3REYXRlU2VnbWVudCh0aGlzLmN1cnJlbnRGb3JtYXRbaV0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChqID49IDAgJiYgdGhpcy5jdXJyZW50Rm9ybWF0W2pdICE9PSBcIl9cIikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZVNlZ21lbnQodGhpcy5jdXJyZW50Rm9ybWF0W2pdKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5UmFuZ2UoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVmFsaWRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBtYXggdmFsdWUgc2hvdWxkIGJlIGJpZ2dlciB0aGFuIHRoZSBtaW4uIFNlZSAke01JTl9ET0NfTElOSyQxfSBhbmQgJHtNQVhfRE9DX0xJTkskMX0uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICd2YWx1ZScgc2hvdWxkIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBEYXRlIGluc3RhbmNlLiBDaGVjayAke1ZBTFVFX0RPQ19MSU5LJDF9IGZvciBwb3NzaWJsZSByZXNvbHV0aW9uLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1dERhdGVJblJhbmdlKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IHRoaXMua2VuZG9EYXRlLmdldERhdGVPYmplY3QoKTtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gZGF0ZUluUmFuZ2UoY3VycmVudERhdGUsIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIGlmICh0aGlzLmF1dG9Db3JyZWN0ICYmICFpc0VxdWFsKGN1cnJlbnREYXRlLCBjYW5kaWRhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLmtlbmRvRGF0ZSA9IHRoaXMuZ2V0S2VuZG9EYXRlKGNhbmRpZGF0ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlRm9ybWF0U2VjdGlvbnMoKSB7XG4gICAgICAgIHRoaXMuZm9ybWF0U2VjdGlvbnMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KVxuICAgICAgICAgICAgLnJlZHVjZSgoeyBkYXRlLCB0aW1lIH0sIHApID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0ZTogZGF0ZSB8fCBEQVRFX1BBUlRfUkVHRVhQLnRlc3QocC50eXBlKSxcbiAgICAgICAgICAgICAgICB0aW1lOiB0aW1lIHx8IFRJTUVfUEFSVF9SRUdFWFAudGVzdChwLnR5cGUpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9LCB7IGRhdGU6IGZhbHNlLCB0aW1lOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVGb3JtYXRTZWN0aW9ucygpO1xuICAgICAgICB0aGlzLmtlbmRvRGF0ZSA9IHRoaXMuZ2V0S2VuZG9EYXRlKHRoaXMudmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSh0aGlzLmlzQWN0aXZlKTtcbiAgICB9XG4gICAgdXBkYXRlT25QYXN0ZSgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmludGwucGFyc2VEYXRlKHRoaXMuaW5wdXRWYWx1ZSwgdGhpcy5mb3JtYXQpIHx8IHRoaXMudmFsdWU7XG4gICAgICAgIGNvbnN0IG5vdGlmeSA9ICt2YWx1ZSAhPT0gK3RoaXMudmFsdWU7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBtb3VzZXdoZWVsSGFuZGxlciA9IHRoaXMuaGFuZGxlTW91c2VXaGVlbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdET01Nb3VzZVNjcm9sbCcsIG1vdXNld2hlZWxIYW5kbGVyKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ21vdXNld2hlZWwnLCBtb3VzZXdoZWVsSGFuZGxlciksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAncGFzdGUnLCB0aGlzLmhhbmRsZVBhc3RlLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnaW5wdXQnLCB0aGlzLmhhbmRsZUlucHV0LmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgaGFuZGxlTW91c2VXaGVlbChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8ICF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQgPSB3aW5kb3cuZXZlbnQgfHwgZXZlbnQ7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hEYXRlU2VnbWVudCgoZXZlbnQud2hlZWxEZWx0YSB8fCAtZXZlbnQuZGV0YWlsKSA+IDAgPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RpZnlEYXRlU2VnbWVudFZhbHVlKChldmVudC53aGVlbERlbHRhIHx8IC1ldmVudC5kZXRhaWwpID4gMCA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVBhc3RlKCkge1xuICAgICAgICB0aGlzLnBhc3RlID0gdHJ1ZTtcbiAgICB9XG4gICAgaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5IHx8IGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5UYWIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vdmVkID0gdGhpcy5zd2l0Y2hEYXRlU2VnbWVudChldmVudC5zaGlmdEtleSA/IC0xIDogMSk7XG4gICAgICAgICAgICBpZiAobW92ZWQpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLkJhY2tzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5iYWNrc3BhY2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5Q29kZSkge1xuICAgICAgICAgICAgY2FzZSBLZXlzLkFycm93RG93bjpcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGlmeURhdGVTZWdtZW50VmFsdWUoLTEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkFycm93VXA6XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RpZnlEYXRlU2VnbWVudFZhbHVlKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkFycm93UmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2hEYXRlU2VnbWVudCgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd0xlZnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zd2l0Y2hEYXRlU2VnbWVudCgtMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuSG9tZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5lYXJlc3RTZWdtZW50KDApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLkVuZDpcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdE5lYXJlc3RTZWdtZW50KHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vc2tpcCB0aGUgcHJldmVudERlZmF1bHQgaWYgd2UgZGlkbid0IGhhbmRsZWQgdGhlIGtleUNvZGVcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBoYW5kbGVJbnB1dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBhc3RlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU9uUGFzdGUoKTtcbiAgICAgICAgICAgIHRoaXMucGFzdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaWZmID0gYXBwcm94aW1hdGVTdHJpbmdNYXRjaGluZyh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5jdXJyZW50Rm9ybWF0LCB0aGlzLmlucHV0VmFsdWUsIHRoaXMuY2FyZXQoKVswXSk7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25Pbmx5ID0gKGRpZmYubGVuZ3RoID09PSAxICYmIGRpZmZbMF1bMV0gPT09IFwiX1wiKTtcbiAgICAgICAgbGV0IHN3aXRjaFBhcnQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFuYXZpZ2F0aW9uT25seSkge1xuICAgICAgICAgICAgbGV0IHBhcnNlZFBhcnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRpZmYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRQYXJ0ID0gdGhpcy5rZW5kb0RhdGUucGFyc2VQYXJ0KGRpZmZbaV1bMF0sIGRpZmZbaV1bMV0sIHRoaXMucmVzZXRTZWdtZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIHN3aXRjaFBhcnQgPSBwYXJzZWRQYXJ0LnN3aXRjaFRvTmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMua2VuZG9EYXRlLmdldERhdGVPYmplY3QoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIGNhbmRpZGF0ZSAmJiAhdGhpcy5mb3JtYXRTZWN0aW9ucy5kYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZW5kb0RhdGUgPSB0aGlzLmdldEtlbmRvRGF0ZShzZXRUaW1lKHRoaXMudmFsdWUsIGNhbmRpZGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRTZWdtZW50VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wdXREYXRlSW5SYW5nZSgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRWYWx1ZSh0aGlzLmlzQWN0aXZlKTtcbiAgICAgICAgdGhpcy50cmlnZ2VyQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5jb21wbGV0ZVZhbGlkYXRpb25TdGF0dXMoKTtcbiAgICAgICAgaWYgKGRpZmYubGVuZ3RoICYmIGRpZmZbMF1bMF0gIT09IFwiX1wiKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERhdGVTZWdtZW50KGRpZmZbMF1bMF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzd2l0Y2hQYXJ0IHx8IG5hdmlnYXRpb25Pbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaERhdGVTZWdtZW50KDEpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJhY2tzcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5zd2l0Y2hEYXRlU2VnbWVudCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iYWNrc3BhY2UgPSBmYWxzZTtcbiAgICB9XG4gICAgZW1pdEZvY3VzKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uRm9jdXMuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0Qmx1cihhcmdzKSB7XG4gICAgICAgIHRoaXMub25CbHVyLmVtaXQoKTtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uQmx1ci5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUluY29tcGxldGVWYWxpZGF0aW9uU3RhdHVzKCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gdGhpcy5pc0RhdGVJbmNvbXBsZXRlO1xuICAgICAgICB0aGlzLmlzRGF0ZUluY29tcGxldGUgPSB0aGlzLmtlbmRvRGF0ZS5oYXNWYWx1ZSgpICYmIHRoaXMudmFsdWUgPT09IG51bGw7XG4gICAgICAgIGlmIChwcmV2aW91c1ZhbHVlID09PSB0aGlzLmlzRGF0ZUluY29tcGxldGUgfHwgIXRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLm5nQ29udHJvbCkgJiYgIWlzUHJlc2VudCh0aGlzLnBpY2tlclNlcnZpY2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzUHJlc2VudCh0aGlzLnBpY2tlclNlcnZpY2UpKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UuZGF0ZUNvbXBsZXRlbmVzc0NoYW5nZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5EYXRlSW5wdXRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLWRhdGVpbnB1dCcsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVJbnB1dENvbXBvbmVudCksIG11bHRpOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZUlucHV0Q29tcG9uZW50KSwgbXVsdGk6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBwcm92aWRlOiBMMTBOX1BSRUZJWCwgdXNlVmFsdWU6ICdrZW5kby5kYXRlaW5wdXQnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogS2VuZG9JbnB1dCwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZUlucHV0Q29tcG9uZW50KSB9LFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWRhdGVpbnB1dCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyIGtlbmRvRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgaTE4bi1pbmNyZW1lbnQ9XCJrZW5kby5kYXRlaW5wdXQuaW5jcmVtZW50fFRoZSBsYWJlbCBmb3IgdGhlICoqSW5jcmVtZW50KiogYnV0dG9uIGluIHRoZSBEYXRlSW5wdXRcIlxuICAgICAgICBpbmNyZW1lbnQ9XCJJbmNyZWFzZSB2YWx1ZVwiXG5cbiAgICAgICAgaTE4bi1kZWNyZW1lbnQ9XCJrZW5kby5kYXRlaW5wdXQuZGVjcmVtZW50fFRoZSBsYWJlbCBmb3IgdGhlICoqRGVjcmVtZW50KiogYnV0dG9uIGluIHRoZSBEYXRlSW5wdXRcIlxuICAgICAgICBkZWNyZW1lbnQ9XCJEZWNyZWFzZSB2YWx1ZVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxzcGFuIGNsYXNzPVwiay1kYXRlaW5wdXQtd3JhcFwiICN3cmFwPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNkYXRlSW5wdXRcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWlucHV0XCJcbiAgICAgICAgICAgIFthdHRyLnJvbGVdPVwicm9sZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cImFyaWFSZWFkT25seVwiXG4gICAgICAgICAgICBbaWRdPVwiZm9jdXNhYmxlSWRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzUG9wdXBPcGVuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaGFzUG9wdXBcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVDbGljayxcbiAgICAgICAgICAgICAgICBmb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgbW91c2Vkb3duOiBoYW5kbGVNb3VzZWRvd24sXG4gICAgICAgICAgICAgICAgdG91Y2hzdGFydDogaGFuZGxlTW91c2Vkb3duLFxuICAgICAgICAgICAgICAgIGRyYWdzdGFydDogaGFuZGxlRHJhZ0FuZERyb3AsXG4gICAgICAgICAgICAgICAgZHJvcDogaGFuZGxlRHJhZ0FuZERyb3AsXG4gICAgICAgICAgICAgICAgYmx1cjogaGFuZGxlQmx1clxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8c3BhbiAqbmdJZj1cInNwaW5uZXJzXCIgY2xhc3M9XCJrLXNlbGVjdFwiIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWxpbmsgay1saW5rLWluY3JlYXNlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYXJyb3dEaXJlY3Rpb24gPT09IGFycm93LlVwXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cImFycm93RGlyZWN0aW9uID0gYXJyb3cuVXBcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImFycm93RGlyZWN0aW9uID0gYXJyb3cuTm9uZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJ1dHRvbkNsaWNrKDEpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgnaW5jcmVtZW50JylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnaW5jcmVtZW50JylcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktYXJyb3ctblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWxpbmsgay1saW5rLWRlY3JlYXNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQnV0dG9uQ2xpY2soLTEpXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYXJyb3dEaXJlY3Rpb24gPT09IGFycm93LkRvd25cIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiYXJyb3dEaXJlY3Rpb24gPSBhcnJvdy5Eb3duXCJcbiAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJhcnJvd0RpcmVjdGlvbiA9IGFycm93Lk5vbmVcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdkZWNyZW1lbnQnKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdkZWNyZW1lbnQnKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1hcnJvdy1zXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVJbnB1dENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQaWNrZXJTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuRGF0ZUlucHV0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGZvY3VzYWJsZUlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm9sZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXJpYVJlYWRPbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXRQbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRvQ29ycmVjdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3Bpbm5lcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGlzUG9wdXBPcGVuOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoYXNQb3B1cDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB2YWx1ZVVwZGF0ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIGRhdGVJbnB1dDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2RhdGVJbnB1dCcsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICB3cmFwOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnd3JhcCcsXSB9XSxcbiAgICB3cmFwcGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kYXRlaW5wdXQnLF0gfV0sXG4gICAgZGlzYWJsZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kaXNhYmxlZCcsXSB9XVxufTtcblxuLyoqXG4gKiBBIHByZXZlbnRhYmxlIGV2ZW50IGluc3RhbmNlIHdoaWNoIGlzIHRyaWdnZXJlZCBieSB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cy5cbiAqL1xuY2xhc3MgUHJldmVudGFibGVFdmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByZXZlbnRzIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgYSBzcGVjaWZpZWQgZXZlbnQuXG4gICAgICogSW4gdGhpcyB3YXksIHRoZSBzb3VyY2UgY29tcG9uZW50IHN1cHByZXNzZXMgdGhlIGJ1aWx0LWluIGJlaGF2aW9yIHRoYXQgZm9sbG93cyB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIGV2ZW50IGlzIHByZXZlbnRlZCBieSBhbnkgb2YgaXRzIHN1YnNjcmliZXJzLCByZXR1cm5zIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGVmYXVsdCBhY3Rpb24gd2FzIHByZXZlbnRlZC4gT3RoZXJ3aXNlLCByZXR1cm5zIGBmYWxzZWAuXG4gICAgICovXG4gICAgaXNEZWZhdWx0UHJldmVudGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmV2ZW50ZWQ7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgVE9VQ0hfRU5BQkxFRCA9IG5ldyBJbmplY3Rpb25Ub2tlbignZGF0ZWlucHV0cy10b3VjaC1lbmFibGVkJyk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkaXNhYmxlZERhdGVzVmFsaWRhdG9yID0gKGlzRGF0ZURpc2FibGVkKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICAgIGlmICghaXNEYXRlRGlzYWJsZWQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVycm9yID0ge1xuICAgICAgICAgICAgZGlzYWJsZWREYXRlOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0RhdGVEaXNhYmxlZChjb250cm9sLnZhbHVlKSA/IGVycm9yIDogbnVsbDtcbiAgICB9O1xufTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG5jb25zdCBNSU5fRE9DX0xJTkskMiA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9EYXRlUGlja2VyQ29tcG9uZW50LyN0b2MtbWluJztcbmNvbnN0IE1BWF9ET0NfTElOSyQyID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0RhdGVQaWNrZXJDb21wb25lbnQvI3RvYy1tYXgnO1xuY29uc3QgVkFMVUVfRE9DX0xJTkskMiA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2RhdGVwaWNrZXIvI3RvYy11c2luZy13aXRoLWpzb24nO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgRGF0ZVBpY2tlciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtYmFzaWMtdXNhZ2UpLlxuICovXG5jbGFzcyBEYXRlUGlja2VyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih6b25lLCBsb2NhbGl6YXRpb24sIGNkciwgcG9wdXBTZXJ2aWNlLCBlbGVtZW50LCByZW5kZXJlciwgaW5qZWN0b3IsIHBpY2tlclNlcnZpY2UsIGRpc2FibGVkRGF0ZXNTZXJ2aWNlLCB0b3VjaEVuYWJsZWQkJDEpIHtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMucGlja2VyU2VydmljZSA9IHBpY2tlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UgPSBkaXNhYmxlZERhdGVzU2VydmljZTtcbiAgICAgICAgdGhpcy50b3VjaEVuYWJsZWQgPSB0b3VjaEVuYWJsZWQkJDE7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGFjdGl2ZSB2aWV3IHRoYXQgdGhlIENhbGVuZGFyIGluaXRpYWxseSByZW5kZXJzXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYWN0aXZldmlld19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBhY3RpdmUgdmlldyBpcyBgbW9udGhgLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFlvdSBoYXZlIHRvIHNldCBgYWN0aXZlVmlld2Agd2l0aGluIHRoZSBgdG9wVmlld2AtYGJvdHRvbVZpZXdgIHJhbmdlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVtDYWxlbmRhclZpZXdFbnVtLm1vbnRoXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGJvdHRvbW1vc3QgQ2FsZW5kYXIgdmlldyB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19kYXRlcGlja2VyICV9I3RvYy1wYXJ0aWFsLWRhdGVzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvdHRvbVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0ubW9udGhdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgdG9wbW9zdCBDYWxlbmRhciB2aWV3IHRvIHdoaWNoIHRoZSB1c2VyIGNhbiBuYXZpZ2F0ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX2RhdGVwaWNrZXIgJX0jdG9jLXBhcnRpYWwtZGF0ZXMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG9wVmlldyA9IENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5XTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGRpc2FibGVkYCBwcm9wZXJ0eSBvZiB0aGUgRGF0ZVBpY2tlciBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBEYXRlUGlja2VyXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfZGF0ZXBpY2tlciAlfSN0b2MtcmVhZC1vbmx5LWRhdGVwaWNrZXIpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRGF0ZVBpY2tlciBpbnB1dCBmaWVsZFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X2RhdGVwaWNrZXIgJX0jdG9jLXJlYWQtb25seS1pbnB1dCkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IE5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoZSBbYHJlYWRvbmx5YF0oeyUgc2x1ZyBhcGlfZGF0ZWlucHV0c19kYXRlcGlja2VyY29tcG9uZW50ICV9I3RvYy1yZWFkb25seSkgcHJvcGVydHkgdmFsdWUgdG8gYHRydWVgLFxuICAgICAgICAgKiB0aGUgaW5wdXQgd2lsbCBiZSByZW5kZXJlZCBpbiBhIHJlYWQtb25seSBzdGF0ZSByZWdhcmRsZXNzIG9mIHRoZSBgcmVhZE9ubHlJbnB1dGAgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRPbmx5SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYG5hdmlnYXRpb25gIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhclxuICAgICAgICAgKiBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBuYXZpZ2F0aW9uIHNpZGUtYmFyIGlzIGRpc3BsYXllZC5cbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzaWRlYmFyX2RhdGVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHNtYWxsZXN0IHZhbGlkIGRhdGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlcmFuZ2VzX2RhdGVwaWNrZXIgJX0pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWluID0gY2xvbmVEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgYmlnZ2VzdCB2YWxpZCBkYXRlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXJhbmdlc19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1heCA9IGNsb25lRGF0ZShNQVhfREFURSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIHZhbGlkYXRpb24gZm9yIGluY29tcGxldGUgZGF0ZXMgaXMgdG8gYmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZm9jdXNlZCBkYXRlIG9mIHRoZSBDYWxlbmRhciBjb21wb25lbnRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlc19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgZGF0ZSBmb3JtYXQgdGhhdCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZm9ybWF0c19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcm1hdCA9IFwiZFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBoaW50IHRoZSBEYXRlUGlja2VyIGRpc3BsYXlzIHdoZW4gaXRzIHZhbHVlIGlzIGBudWxsYC5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFwbGVzXSh7JSBzbHVnIHBsYWNlaG9sZGVyc19kYXRlcGlja2VyICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLWRhdGVwaWNrZXIgcGxhY2Vob2xkZXI9XCJFbnRlciBiaXJ0aCBkYXRlLi4uXCI+PC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB0YWJpbmRleGAgcHJvcGVydHkgb2YgdGhlIERhdGVQaWNrZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBEYXRlUGlja2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIG1pbiBvciBtYXggdmFsaWRhdG9ycyBhcmUgZW5mb3JjZWQgd2hlbiB2YWxpZGF0aW5nIGEgZm9ybS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmFuZ2VWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yIGZvciBkaXNhYmxlZFxuICAgICAgICAgKiBkYXRlIHJhbmdlcyBpcyBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfZGF0ZXBpY2tlciAlfSN0b2MtdmFsaWRhdGlvbikpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIHdlZWsgbnVtYmVyIGNvbHVtbiBpbiB0aGUgYG1vbnRoYCB2aWV3IG9mIHRoZSBDYWxlbmRhclxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHdlZWtudW1jb2x1bW5fZGF0ZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZVxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIGZvY3VzZXMgdGhlIGlucHV0IGVsZW1lbnRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVwaWNrZXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uRm9jdXNgIHByb3BlcnR5LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogdGVtcGxhdGU6IGBcbiAgICAgICAgICogIDxrZW5kby1kYXRlcGlja2VyIChmb2N1cyk9XCJoYW5kbGVGb2N1cygpXCI+PC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgICogICAgICBjb25zb2xlLmxvZyhcIkNvbXBvbmVudCBpcyBmb2N1c2VkXCIpO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgaW5wdXQgZWxlbWVudCBnZXRzIGJsdXJyZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGVwaWNrZXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uQmx1cmAgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLWRhdGVwaWNrZXIgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCI+PC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGJsdXJyZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRlcGlja2VyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgYWJvdXQgdG8gY2xvc2UuXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gb3BlblxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXBpY2tlciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53cmFwcGVyQ2xhc3NlcyA9IHRydWU7XG4gICAgICAgIHRoaXMucG9wdXBVSUQgPSBndWlkKCk7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSB7IGFuaW1hdGU6IHRydWUgfTtcbiAgICAgICAgdGhpcy5fc2hvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IG5vb3A7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm1pblZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMucGlja2VyU3Vic2NyaXB0aW9ucyA9IHRoaXMucGlja2VyU2VydmljZS5vbkZvY3VzLnN1YnNjcmliZSh0aGlzLmhhbmRsZUZvY3VzLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5vbkJsdXIuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMucGlja2VyU3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLnNhbWVEYXRlU2VsZWN0ZWQuc3Vic2NyaWJlKHRoaXMuaGFuZGxlU2FtZVNlbGVjdGlvbi5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMucGlja2VyU3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLmRhdGVDb21wbGV0ZW5lc3NDaGFuZ2Uuc3Vic2NyaWJlKHRoaXMuaGFuZGxlRGF0ZUNvbXBsZXRlbmVzc0NoYW5nZS5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgY2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuY2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgbW9udGhDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5tb250aENlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHllYXJDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy55ZWFyQ2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgZGVjYWRlQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuZGVjYWRlQ2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgY2VudHVyeUNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmNlbnR1cnlDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB3ZWVrTnVtYmVyVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyVGl0bGVUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IG5hdmlnYXRpb25JdGVtVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uSXRlbVRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbmZpZ3VyZXMgdGhlIHBvcHVwIG9wdGlvbnMgb2YgdGhlIERhdGVQaWNrZXIuXG4gICAgICpcbiAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICAgICAqIC0gYGFuaW1hdGU6IEJvb2xlYW5gJm1kYXNoO0NvbnRyb2xzIHRoZSBwb3B1cCBhbmltYXRpb24uIEJ5IGRlZmF1bHQsIHRoZSBvcGVuIGFuZCBjbG9zZSBhbmltYXRpb25zIGFyZSBlbmFibGVkLlxuICAgICAqIC0gYGFwcGVuZFRvOiAncm9vdCcgfCAnY29tcG9uZW50JyB8IFZpZXdDb250YWluZXJSZWZgJm1kYXNoO0NvbnRyb2xzIHRoZSBwb3B1cCBjb250YWluZXIuIEJ5IGRlZmF1bHQsIHRoZSBwb3B1cCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSByb290IGNvbXBvbmVudC5cbiAgICAgKiAtIGBwb3B1cENsYXNzOiBTdHJpbmdgJm1kYXNoO1NwZWNpZmllcyBhIGxpc3Qgb2YgQ1NTIGNsYXNzZXMgdGhhdCBhcmUgdXNlZCB0byBzdHlsZSB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgc2V0IHBvcHVwU2V0dGluZ3Moc2V0dGluZ3MpIHtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHsgYW5pbWF0ZTogdHJ1ZSB9LCBzZXR0aW5ncyk7XG4gICAgfVxuICAgIGdldCBwb3B1cFNldHRpbmdzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9wdXBTZXR0aW5ncztcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgRGF0ZVBpY2tlciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiA+IFRoZSBgdmFsdWVgIGhhcyB0byBiZSBhIHZhbGlkXG4gICAgICogW0phdmFTY3JpcHQgYERhdGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlKSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgdGFiSW5kZXgodGFiSW5kZXgpIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IHRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlcyBvZiB0aGUgRGF0ZVBpY2tlciB0aGF0IHdpbGwgYmUgZGlzYWJsZWRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRpc2FibGVkX2RhdGVzX2RhdGVwaWNrZXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgZGlzYWJsZWREYXRlcyh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZERhdGVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZERhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWREYXRlcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpbnB1dFJvbGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlYWRPbmx5SW5wdXQgPyAnbGlzdGJveCcgOiAnc3BpbmJ1dHRvbic7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9XG4gICAgc2V0IGlzQWN0aXZlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoIXRoaXMud3JhcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzaG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdztcbiAgICB9XG4gICAgc2V0IHNob3coc2hvdykge1xuICAgICAgICBpZiAoc2hvdyAmJiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNraXBab25lID0gIXNob3cgJiYgKCF0aGlzLl9zaG93IHx8ICFoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpO1xuICAgICAgICBpZiAoIXNraXBab25lKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKHNob3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKHNob3cpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBVc2VkIGJ5IHRoZSBUZXh0Qm94Q29udGFpbmVyIHRvIGRldGVybWluZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtcHR5LlxuICAgICAqL1xuICAgIGlzRW1wdHkoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy52YWx1ZSAmJiB0aGlzLmlucHV0LmlzRW1wdHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuY2hhbmdlc1xuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSk7XG4gICAgICAgIHRoaXMuY29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCwgbnVsbCk7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndGFiaW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnZlcmlmeVNldHRpbmdzKCk7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmRpc2FibGVkRGF0ZXNWYWxpZGF0aW9uIHx8IGNoYW5nZXMuZGlzYWJsZWREYXRlcyB8fCBjaGFuZ2VzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtaW5WYWxpZGF0b3IodGhpcy5taW4pIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWF4VmFsaWRhdG9yKHRoaXMubWF4KSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuID0gdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGlvbiA/IGRpc2FibGVkRGF0ZXNWYWxpZGF0b3IodGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPyBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRvcigpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvd0JsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb3JFYWNoKHVuYmluZENhbGxiYWNrID0+IHVuYmluZENhbGxiYWNrKCkpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBvcGVuIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAoIXZhbHVlICYmIHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgdGhpcy5pbnB1dC53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMubWF4VmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvcihjb250cm9sLCB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuaXNEYXRlSW5jb21wbGV0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgRGF0ZVBpY2tlciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJkYXRlcGlja2VyLmZvY3VzKClcIj5Gb2N1cyBkYXRlIHBpY2tlcjwvYnV0dG9uPlxuICAgICAqICA8a2VuZG8tZGF0ZXBpY2tlciAjZGF0ZXBpY2tlcj48L2tlbmRvLWRhdGVwaWNrZXI+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgRGF0ZVBpY2tlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgKHRoaXMuY2FsZW5kYXIgfHwgdGhpcy5pbnB1dClbJ2JsdXInXSgpOyAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcG9wdXAuIElmIHlvdSB1c2UgdGhlIGB0b2dnbGVgIG1ldGhvZCB0byBzaG93IG9yIGhpZGUgdGhlIHBvcHVwLFxuICAgICAqIHRoZSBgb3BlbmAgYW5kIGBjbG9zZWAgZXZlbnRzIGRvIG5vdCBmaXJlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNob3cgLSBUaGUgc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHRvZ2dsZShzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZSgoc2hvdyA9PT0gdW5kZWZpbmVkKSA/ICF0aGlzLnNob3cgOiBzaG93KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJY29uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xuICAgICAgICAvL1hYWDogZXhwbGljaXRseSBjYWxsIHRoZSBoYW5kbGVGb2N1cyBoYW5kbGVyIGhlcmVcbiAgICAgICAgLy9kdWUgdG8gYXN5bmMgSUUgZm9jdXMgZXZlbnRcbiAgICAgICAgdGhpcy5oYW5kbGVGb2N1cygpO1xuICAgICAgICB0aGlzLnNob3cgPSAhdGhpcy5zaG93O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU1vdXNlZG93bihhcmdzKSB7XG4gICAgICAgIGFyZ3MucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVJbnB1dENoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0aGlzLmlucHV0LmZvcm1hdFNlY3Rpb25zLnRpbWUgPyB2YWx1ZSA6IHRoaXMubWVyZ2VUaW1lKHZhbHVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgcG9wdXBDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ2stY2FsZW5kYXItY29udGFpbmVyJyxcbiAgICAgICAgICAgICdrLWdyb3VwJyxcbiAgICAgICAgICAgICdrLXJlc2V0J1xuICAgICAgICBdLmNvbmNhdCh0aGlzLnBvcHVwU2V0dGluZ3MucG9wdXBDbGFzcyB8fCBbXSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYXBwZW5kVG8oKSB7XG4gICAgICAgIGNvbnN0IHsgYXBwZW5kVG8gfSA9IHRoaXMucG9wdXBTZXR0aW5ncztcbiAgICAgICAgaWYgKCFhcHBlbmRUbyB8fCBhcHBlbmRUbyA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBlbmRUbyA9PT0gJ2NvbXBvbmVudCcgPyB0aGlzLmNvbnRhaW5lciA6IGFwcGVuZFRvO1xuICAgIH1cbiAgICBnZXQgaW5wdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBpY2tlclNlcnZpY2UuaW5wdXQ7XG4gICAgfVxuICAgIGdldCBjYWxlbmRhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS5jYWxlbmRhcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG1lcmdlVGltZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAmJiB2YWx1ZSA/IHNldFRpbWUodmFsdWUsIHRoaXMudmFsdWUpIDogdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVLZXlkb3duKGUpIHtcbiAgICAgICAgY29uc3QgeyBhbHRLZXksIGtleUNvZGUgfSA9IGU7XG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVzY2FwZSkge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsdEtleSkge1xuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuQXJyb3dEb3duICYmICF0aGlzLnNob3cpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuQXJyb3dVcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLlRhYiAmJiB0aGlzLnNob3cgJiYgdGhpcy5jYWxlbmRhci5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9nZ2xlUG9wdXAoc2hvdykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIGlmICghdGhpcy5fc2hvdyAmJiBzaG93KSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2hvdyAmJiAhc2hvdykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b2dnbGUoc2hvdyk7XG4gICAgICAgIHRoaXMudG9nZ2xlRm9jdXMoKTtcbiAgICB9XG4gICAgX3RvZ2dsZShzaG93KSB7XG4gICAgICAgIGlmIChzaG93ID09PSB0aGlzLl9zaG93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2hvdyA9IHNob3c7XG4gICAgICAgIGlmIChzaG93KSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgICAgIGFuY2hvcjogdGhpcy53cmFwcGVyLFxuICAgICAgICAgICAgICAgIGFuY2hvckFsaWduOiB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgYW5pbWF0ZTogdGhpcy5wb3B1cFNldHRpbmdzLmFuaW1hdGUsXG4gICAgICAgICAgICAgICAgYXBwZW5kVG86IHRoaXMuYXBwZW5kVG8sXG4gICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5wb3B1cFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHBvcHVwQWxpZ246IHsgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBwb3B1cENsYXNzOiB0aGlzLnBvcHVwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk1vZGU6ICdhYnNvbHV0ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuc2V0QXR0cmlidXRlKCdpZCcsIHRoaXMucG9wdXBVSUQpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnBvcHVwUmVmLnBvcHVwQW5jaG9yVmlld3BvcnRMZWF2ZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93ID0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvY3VzSW5wdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnRvdWNoRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNob3cpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYWxlbmRhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWxlbmRhci5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLnRvdWNoRW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCF0aGlzLmlucHV0LmlzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2ZXJpZnlTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNWYWxpZFJhbmdlKHRoaXMubWluLCB0aGlzLm1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1heCB2YWx1ZSBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gdGhlIG1pbi4gU2VlICR7TUlOX0RPQ19MSU5LJDJ9IGFuZCAke01BWF9ET0NfTElOSyQyfS5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2ZXJpZnlWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbHVlICYmICEodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJ3ZhbHVlJyBzaG91bGQgYmUgYSB2YWxpZCBKYXZhU2NyaXB0IERhdGUgaW5zdGFuY2UuIENoZWNrICR7VkFMVUVfRE9DX0xJTkskMn0gZm9yIHBvc3NpYmxlIHJlc29sdXRpb24uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpKTtcbiAgICAgICAgaWYgKGlzV2luZG93QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMud2luZG93Qmx1clN1YnNjcmlwdGlvbiA9IGZyb21FdmVudCh3aW5kb3csICdibHVyJykuc3Vic2NyaWJlKHRoaXMuaGFuZGxlV2luZG93Qmx1ci5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uRm9jdXMpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlV2luZG93Qmx1cigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgIH1cbiAgICBoYW5kbGVCbHVyKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGFyZ3MgJiYgY3VycmVudEZvY3VzVGFyZ2V0KGFyZ3MpO1xuICAgICAgICBpZiAoY3VycmVudFRhcmdldCAmJiAodGhpcy5pbnB1dC5jb250YWluc0VsZW1lbnQoY3VycmVudFRhcmdldCkgfHxcbiAgICAgICAgICAgICh0aGlzLmNhbGVuZGFyICYmIHRoaXMuY2FsZW5kYXIuY29udGFpbnNFbGVtZW50KGN1cnJlbnRUYXJnZXQpKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzT2JzZXJ2ZXJzKHRoaXMub25CbHVyKSB8fCAodGhpcy5zaG93ICYmIGhhc09ic2VydmVycyh0aGlzLmNsb3NlKSkgfHwgcmVxdWlyZXNab25lT25CbHVyKHRoaXMuY29udHJvbCkpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmx1ckNvbXBvbmVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJDb21wb25lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBibHVyQ29tcG9uZW50KCkge1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7IC8vIG9yZGVyIGlzIGltcG9ydGFudCDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgIH1cbiAgICBoYW5kbGVTYW1lU2VsZWN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zaG93KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKSk7XG4gICAgfVxufVxuRGF0ZVBpY2tlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG8tZGF0ZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtlbmRvSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDb21wb25lbnQpIH0sXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFBpY2tlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERpc2FibGVkRGF0ZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uZGF0ZXBpY2tlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRlcGlja2VyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLXRvZGF5PVwia2VuZG8uZGF0ZXBpY2tlci50b2RheXxUaGUgbGFiZWwgZm9yIHRoZSB0b2RheSBidXR0b24gaW4gdGhlIGNhbGVuZGFyIGhlYWRlclwiXG4gICAgICAgICAgICB0b2RheT1cIlRPREFZXCJcblxuICAgICAgICAgICAgaTE4bi10b2dnbGU9XCJrZW5kby5kYXRlcGlja2VyLnRvZ2dsZXxUaGUgbGFiZWwgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIGluIHRoZSBkYXRlcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICB0b2dnbGU9XCJUb2dnbGUgY2FsZW5kYXJcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8c3BhbiAjd3JhcHBlclxuICAgICAgICAgICAgY2xhc3M9XCJrLXBpY2tlci13cmFwXCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGtlbmRvLWRhdGVpbnB1dFxuICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIFtyb2xlXT1cImlucHV0Um9sZVwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZUlkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgICAgICBbaGFzUG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lzUG9wdXBPcGVuXT1cInNob3dcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IHJlYWRPbmx5SW5wdXRcIlxuICAgICAgICAgICAgICAgIFthcmlhUmVhZE9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgW2luY29tcGxldGVEYXRlVmFsaWRhdGlvbl09XCJpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb25cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgPjwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgndG9nZ2xlJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgndG9nZ2xlJylcIlxuICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IGhhbmRsZUljb25DbGljayxcbiAgICAgICAgICAgICAgICAgICAgbW91c2Vkb3duOiBoYW5kbGVNb3VzZWRvd25cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWNhbGVuZGFyXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNwb3B1cFRlbXBsYXRlPlxuICAgICAgICAgICAgPGtlbmRvLWNhbGVuZGFyXG4gICAgICAgICAgICAgICAgI2NhbGVuZGFyXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbbmF2aWdhdGlvbl09XCJuYXZpZ2F0aW9uXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICBbYm90dG9tVmlld109XCJib3R0b21WaWV3XCJcbiAgICAgICAgICAgICAgICBbdG9wVmlld109XCJ0b3BWaWV3XCJcbiAgICAgICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW21vbnRoQ2VsbFRlbXBsYXRlXT1cIm1vbnRoQ2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbeWVhckNlbGxUZW1wbGF0ZV09XCJ5ZWFyQ2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbZGVjYWRlQ2VsbFRlbXBsYXRlXT1cImRlY2FkZUNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2NlbnR1cnlDZWxsVGVtcGxhdGVdPVwiY2VudHVyeUNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJUZW1wbGF0ZV09XCJ3ZWVrTnVtYmVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtoZWFkZXJUaXRsZVRlbXBsYXRlXT1cImhlYWRlclRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlXT1cIm5hdmlnYXRpb25JdGVtVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtmb2N1c2VkRGF0ZV09XCJmb2N1c2VkRGF0ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKG1lcmdlVGltZSgkZXZlbnQpKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlkb3duXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxrZW5kby1jYWxlbmRhci1tZXNzYWdlcyBbdG9kYXldPVwibG9jYWxpemF0aW9uLmdldCgndG9kYXknKVwiPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tY2FsZW5kYXItbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2tlbmRvLWNhbGVuZGFyPlxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUGlja2VyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBQaWNrZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEaXNhYmxlZERhdGVzU2VydmljZSB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtUT1VDSF9FTkFCTEVELF0gfV0gfVxuXTtcbkRhdGVQaWNrZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29udGFpbmVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0sXSB9XSxcbiAgICBwb3B1cFRlbXBsYXRlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsncG9wdXBUZW1wbGF0ZScsXSB9XSxcbiAgICB3cmFwcGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnd3JhcHBlcicsXSB9XSxcbiAgICBjZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydtb250aENlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB5ZWFyQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsneWVhckNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGRlY2FkZUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnZGVjYWRlQ2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIGNlbnR1cnlDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydjZW50dXJ5Q2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnd2Vla051bWJlclRlbXBsYXRlJyxdIH1dLFxuICAgIGhlYWRlclRpdGxlVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0hlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydoZWFkZXJUaXRsZVRlbXBsYXRlJyxdIH1dLFxuICAgIG5hdmlnYXRpb25JdGVtVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW05hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBuYXZpZ2F0aW9uSXRlbVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWyduYXZpZ2F0aW9uSXRlbVRlbXBsYXRlJyxdIH1dLFxuICAgIGZvY3VzYWJsZUlkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3R0b21WaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3BWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZG9ubHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRPbmx5SW5wdXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBvcHVwU2V0dGluZ3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5hdmlnYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXRQbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJhbmdlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlc1ZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdlZWtOdW1iZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgb25Gb2N1czogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIG9uQmx1cjogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2JsdXInLF0gfV0sXG4gICAgb3BlbjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsb3NlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgd3JhcHBlckNsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kYXRlcGlja2VyJyxdIH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBUSU1FX1BBUlQgPSB7XG4gICAgZGF5cGVyaW9kOiAnZGF5cGVyaW9kJyxcbiAgICBob3VyOiAnaG91cicsXG4gICAgbWlsbGlzZWNvbmQ6ICdtaWxsaXNlY29uZCcsXG4gICAgbWludXRlOiAnbWludXRlJyxcbiAgICBzZWNvbmQ6ICdzZWNvbmQnXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdGltZVJhbmdlVmFsaWRhdG9yID0gKG1pbiwgbWF4KSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICAgIGlmICghbWluIHx8ICFtYXggfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVyciA9IHtcbiAgICAgICAgICAgIHRpbWVSYW5nZUVycm9yOiB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IG1heCxcbiAgICAgICAgICAgICAgICBtaW5WYWx1ZTogbWluLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb250cm9sLnZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0luVGltZVJhbmdlKGNvbnRyb2wudmFsdWUsIG1pbiwgbWF4KSA/IG51bGwgOiBlcnI7XG4gICAgfTtcbn07XG5cbmNvbnN0IFZBTFVFX0RPQ19MSU5LJDMgPSAnaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvdGltZXBpY2tlci8jdG9jLWludGVncmF0aW9uLXdpdGgtanNvbic7XG5jb25zdCBJTlRMX0RBVEVfRk9STUFUID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS90ZWxlcmlrL2tlbmRvLWludGwvYmxvYi9tYXN0ZXIvZG9jcy9kYXRlLWZvcm1hdHRpbmcvaW5kZXgubWQnO1xuY29uc3QgZm9ybWF0UmVnRXhwID0gbmV3IFJlZ0V4cChgJHtUSU1FX1BBUlQuaG91cn18JHtUSU1FX1BBUlQubWludXRlfXwke1RJTUVfUEFSVC5zZWNvbmR9fCR7VElNRV9QQVJULmRheXBlcmlvZH18bGl0ZXJhbGApO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgVGltZVBpY2tlciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtYmFzaWMtdXNhZ2UpLlxuICovXG5jbGFzcyBUaW1lUGlja2VyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih6b25lLCBsb2NhbGl6YXRpb24sIGNkciwgcG9wdXBTZXJ2aWNlLCBlbGVtZW50LCByZW5kZXJlciwgaW5qZWN0b3IsIHBpY2tlclNlcnZpY2UsIGludGwsIHRvdWNoRW5hYmxlZCQkMSkge1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlID0gcGlja2VyU2VydmljZTtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICAgICAgdGhpcy50b3VjaEVuYWJsZWQgPSB0b3VjaEVuYWJsZWQkJDE7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvY3VzYWJsZUlkID0gYGstJHtndWlkKCl9YDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGRpc2FibGVkYCBwcm9wZXJ0eSBvZiB0aGUgVGltZVBpY2tlciBhbmRcbiAgICAgICAgICogZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfdGltZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBUaW1lUGlja2VyXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmVhZG9ubHlfdGltZXBpY2tlciAlfSN0b2MtcmVhZC1vbmx5LXRpbWVwaWNrZXIpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgVGltZVBpY2tlciBpbnB1dCBmaWVsZFxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X3RpbWVwaWNrZXIgJX0jdG9jLXJlYWQtb25seS1pbnB1dCkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IE5vdGUgdGhhdCBpZiB5b3Ugc2V0IHRoZSBbYHJlYWRvbmx5YF0oeyUgc2x1ZyBhcGlfZGF0ZWlucHV0c190aW1lcGlja2VyY29tcG9uZW50ICV9I3RvYy1yZWFkb25seSkgcHJvcGVydHkgdmFsdWUgdG8gYHRydWVgLFxuICAgICAgICAgKiB0aGUgaW5wdXQgd2lsbCBiZSByZW5kZXJlZCBpbiBhIHJlYWQtb25seSBzdGF0ZSByZWdhcmRsZXNzIG9mIHRoZSBgcmVhZE9ubHlJbnB1dGAgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRPbmx5SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdGltZSBmb3JtYXQgdGhhdCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIGlucHV0IHZhbHVlXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZm9ybWF0c190aW1lcGlja2VyICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcm1hdCA9ICd0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgaGludCB0aGUgVGltZVBpY2tlciBkaXNwbGF5cyB3aGVuIGl0cyB2YWx1ZSBpcyBgbnVsbGAuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICAgICAgICAgKiBbcGxhY2Vob2xkZXJzXSh7JSBzbHVnIHBsYWNlaG9sZGVyc190aW1lcGlja2VyICV9KS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tdGltZXBpY2tlciBwbGFjZWhvbGRlcj1cIkVudGVyIHN0YXJ0Li4uXCI+PC9rZW5kby10aW1lcGlja2VyPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGJ1aWx0LWluIHZhbGlkYXRpb24gZm9yIGluY29tcGxldGUgZGF0ZXMgaXMgdG8gYmUgZW5mb3JjZWQgd2hlbiBhIGZvcm0gaXMgYmVpbmcgdmFsaWRhdGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSAqKkNhbmNlbCoqIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbmNlbEJ1dHRvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgKipOb3cqKiBidXR0b24gaW4gdGhlIHBvcHVwLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IElmIHRoZSBjdXJyZW50IHRpbWUgaXMgb3V0IG9mIHJhbmdlIG9yIHRoZSBpbmNyZW1lbnRhbCBzdGVwIGlzIGdyZWF0ZXIgdGhhbiBgMWAsIHRoZSAqKk5vdyoqIGJ1dHRvbiB3aWxsIGJlIGhpZGRlbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubm93QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHRhYmluZGV4YCBwcm9wZXJ0eSBvZiB0aGUgVGltZVBpY2tlci5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiaW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgdGl0bGUgb2YgdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIFRpbWVQaWNrZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gbWluIG9yIG1heCB2YWxpZGF0b3JzIGFyZSBlbmZvcmNlZCB3aGVuIGEgZm9ybSBpcyBiZWluZyB2YWxpZGF0ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgZm9jdXNlcyB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBzZWN0aW9uIG9uXG4gICAgICAgICAqIFtldmVudHNdKHslIHNsdWcgb3ZlcnZpZXdfdGltZXBpY2tlciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUbyB3aXJlIHRoZSBldmVudCBwcm9ncmFtbWF0aWNhbGx5LCB1c2UgdGhlIGBvbkZvY3VzYCBwcm9wZXJ0eS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8a2VuZG8tdGltZXBpY2tlciAoZm9jdXMpPVwiaGFuZGxlRm9jdXMoKVwiPjwva2VuZG8tdGltZXBpY2tlcj5cbiAgICAgICAgICogYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICBwdWJsaWMgaGFuZGxlRm9jdXMoKTogdm9pZCB7XG4gICAgICAgICAqICAgICAgY29uc29sZS5sb2coXCJDb21wb25lbnQgaXMgZm9jdXNlZFwiKTtcbiAgICAgICAgICogICB9XG4gICAgICAgICAqIH1cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIGlucHV0IGVsZW1lbnQgZ2V0cyBibHVycmVkLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld190aW1lcGlja2VyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IFRvIHdpcmUgdGhlIGV2ZW50IHByb2dyYW1tYXRpY2FsbHksIHVzZSB0aGUgYG9uQmx1cmAgcHJvcGVydHkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGtlbmRvLXRpbWVwaWNrZXIgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCI+PC9rZW5kby10aW1lcGlja2VyPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBoYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgICAgICAgKiAgICAgIGNvbnNvbGUubG9nKFwiQ29tcG9uZW50IGlzIGJsdXJyZWRcIik7XG4gICAgICAgICAqICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld190aW1lcGlja2VyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBvcGVuLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld190aW1lcGlja2VyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud3JhcHBlckNsYXNzZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLnBvcHVwVUlEID0gZ3VpZCgpO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IG5vb3A7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgdGhpcy50aW1lUmFuZ2VWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5fbWluID0gY2xvbmVEYXRlKE1JTl9USU1FKTtcbiAgICAgICAgdGhpcy5fbWF4ID0gY2xvbmVEYXRlKE1BWF9USU1FKTtcbiAgICAgICAgdGhpcy5fcG9wdXBTZXR0aW5ncyA9IHsgYW5pbWF0ZTogdHJ1ZSB9O1xuICAgICAgICB0aGlzLl9zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0ge307XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMucGlja2VyU3Vic2NyaXB0aW9ucyA9IHRoaXMucGlja2VyU2VydmljZS5vbkZvY3VzLnN1YnNjcmliZSh0aGlzLmhhbmRsZUZvY3VzLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5vbkJsdXIuc3Vic2NyaWJlKHRoaXMuaGFuZGxlQmx1ci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMucGlja2VyU3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLmRhdGVDb21wbGV0ZW5lc3NDaGFuZ2Uuc3Vic2NyaWJlKHRoaXMuaGFuZGxlRGF0ZUNvbXBsZXRlbmVzc0NoYW5nZS5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgc21hbGxlc3QgdmFsaWQgdGltZSB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgdGltZXJhbmdlc190aW1lcGlja2VyICV9KSkuXG4gICAgICovXG4gICAgc2V0IG1pbihtaW4pIHtcbiAgICAgICAgdGhpcy5fbWluID0gY2xvbmVEYXRlKG1pbiB8fCBNSU5fVElNRSk7XG4gICAgfVxuICAgIGdldCBtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgYmlnZ2VzdCB2YWxpZCB0aW1lIHZhbHVlXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB0aW1lcmFuZ2VzX3RpbWVwaWNrZXIgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgbWF4KG1heCkge1xuICAgICAgICB0aGlzLl9tYXggPSBjbG9uZURhdGUobWF4IHx8IE1BWF9USU1FKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJlcyB0aGUgaW5jcmVtZW50YWwgc3RlcHMgb2YgdGhlIFRpbWVQaWNrZXIuXG4gICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uXG4gICAgICogW2luY3JlbWVudGFsIHN0ZXBzXSh7JSBzbHVnIGluY3JlbWVudGFsc3RlcHNfdGltZXBpY2tlciAlfSkuXG4gICAgICpcbiAgICAgKiA+IElmIHRoZSBpbmNyZW1lbnRhbCBzdGVwIGlzIGdyZWF0ZXIgdGhhbiBgMWAsIHRoZSAqKk5vdyoqIGJ1dHRvbiB3aWxsIGJlIGhpZGRlbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICogIDxrZW5kby10aW1lcGlja2VyIGZvcm1hdD1cIkhIOm1tOnNzXCIgW3N0ZXBzXT1cInN0ZXBzXCI+PC9rZW5kby10aW1lcGlja2VyPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgcHVibGljIHN0ZXBzID0geyBob3VyOiAyLCBtaW51dGU6IDE1LCBzZWNvbmQ6IDE1IH07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICovXG4gICAgc2V0IHN0ZXBzKHN0ZXBzKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0gc3RlcHMgfHwge307XG4gICAgfVxuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBwb3B1cCBvZiB0aGUgVGltZVBpY2tlci5cbiAgICAgKlxuICAgICAqIFRoZSBhdmFpbGFibGUgb3B0aW9ucyBhcmU6XG4gICAgICogLSBgYW5pbWF0ZTogQm9vbGVhbmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGFuaW1hdGlvbi4gQnkgZGVmYXVsdCwgdGhlIG9wZW4gYW5kIGNsb3NlIGFuaW1hdGlvbnMgYXJlIGVuYWJsZWQuXG4gICAgICogLSBgYXBwZW5kVG86ICdyb290JyB8ICdjb21wb25lbnQnIHwgVmlld0NvbnRhaW5lclJlZmAmbWRhc2g7Q29udHJvbHMgdGhlIHBvcHVwIGNvbnRhaW5lci4gQnkgZGVmYXVsdCwgdGhlIHBvcHVwIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIHJvb3QgY29tcG9uZW50LlxuICAgICAqIC0gYHBvcHVwQ2xhc3M6IFN0cmluZ2AmbWRhc2g7U3BlY2lmaWVzIGEgbGlzdCBvZiBDU1MgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIHRvIHN0eWxlIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBzZXQgcG9wdXBTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgeyBhbmltYXRlOiB0cnVlIH0sIHNldHRpbmdzKTtcbiAgICB9XG4gICAgZ2V0IHBvcHVwU2V0dGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3B1cFNldHRpbmdzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IHRhYkluZGV4KHRhYkluZGV4KSB7XG4gICAgICAgIHRoaXMudGFiaW5kZXggPSB0YWJJbmRleDtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJpbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiB0aGUgVGltZVBpY2tlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5VmFsdWUodmFsdWUpO1xuICAgICAgICB0aGlzLl92YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlucHV0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZE9ubHlJbnB1dCA/ICdsaXN0Ym94JyA6ICdzcGluYnV0dG9uJztcbiAgICB9XG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlO1xuICAgIH1cbiAgICBzZXQgaXNBY3RpdmUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy53cmFwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNob3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93O1xuICAgIH1cbiAgICBzZXQgc2hvdyhzaG93KSB7XG4gICAgICAgIGlmIChzaG93ICYmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2tpcFpvbmUgPSAhc2hvdyAmJiAoIXRoaXMuX3Nob3cgfHwgIWhhc09ic2VydmVycyh0aGlzLmNsb3NlKSk7XG4gICAgICAgIGlmICghc2tpcFpvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoc2hvdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoc2hvdyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGlucHV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJTZXJ2aWNlLmlucHV0O1xuICAgIH1cbiAgICBnZXQgdGltZVNlbGVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJTZXJ2aWNlLnRpbWVTZWxlY3RvcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFVzZWQgYnkgdGhlIFRleHRCb3hDb250YWluZXIgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb21wb25lbnQgaXMgZW1wdHlcbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMudmFsdWUgJiYgdGhpcy5pbnB1dC5pc0VtcHR5KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvblxuICAgICAgICAgICAgLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpKTtcbiAgICAgICAgdGhpcy5jb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd0YWJpbmRleCcpO1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy50aW1lUmFuZ2VWYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyB0aW1lUmFuZ2VWYWxpZGF0b3IodGhpcy5taW4sIHRoaXMubWF4KSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmluY29tcGxldGVWYWxpZGF0b3IgPSB0aGlzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbiA/IGluY29tcGxldGVEYXRlVmFsaWRhdG9yKCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1hdCkge1xuICAgICAgICAgICAgdGhpcy52ZXJpZnlGb3JtYXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvd0JsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb3JFYWNoKHVuYmluZENhbGxiYWNrID0+IHVuYmluZENhbGxiYWNrKCkpO1xuICAgICAgICB0aGlzLnBpY2tlclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBhbHRLZXksIGtleUNvZGUgfSA9IGV2ZW50O1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHRLZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93VXApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkFycm93RG93biAmJiAhdGhpcy5zaG93KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICBpZiAoIXZhbHVlICYmIHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgdGhpcy5pbnB1dC53cml0ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aW1lUmFuZ2VWYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvcihjb250cm9sLCB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuaXNEYXRlSW5jb21wbGV0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgVGltZVBpY2tlciBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJ0aW1lcGlja2VyLmZvY3VzKClcIj5Gb2N1cyB0aW1lIHBpY2tlcjwvYnV0dG9uPlxuICAgICAqICA8a2VuZG8tdGltZXBpY2tlciAjdGltZXBpY2tlcj48L2tlbmRvLXRpbWVwaWNrZXI+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgVGltZVBpY2tlciBjb21wb25lbnQuXG4gICAgICovXG4gICAgYmx1cigpIHtcbiAgICAgICAgKHRoaXMudGltZVNlbGVjdG9yIHx8IHRoaXMuaW5wdXQpWydibHVyJ10oKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBvcHVwLiBJZiB5b3UgdXNlIHRoZSBgdG9nZ2xlYCBtZXRob2QgdG8gc2hvdyBvciBoaWRlIHRoZSBwb3B1cCxcbiAgICAgKiB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyBkbyBub3QgZmlyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzaG93IC0gVGhlIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICB0b2dnbGUoc2hvdykge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl90b2dnbGUoKHNob3cgPT09IHVuZGVmaW5lZCkgPyAhdGhpcy5zaG93IDogc2hvdyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IG9wZW4gc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIGdldCBpc09wZW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3c7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYXBwZW5kVG8oKSB7XG4gICAgICAgIGNvbnN0IHsgYXBwZW5kVG8gfSA9IHRoaXMucG9wdXBTZXR0aW5ncztcbiAgICAgICAgaWYgKCFhcHBlbmRUbyB8fCBhcHBlbmRUbyA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBlbmRUbyA9PT0gJ2NvbXBvbmVudCcgPyB0aGlzLmNvbnRhaW5lciA6IGFwcGVuZFRvO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMudmFsdWUsIHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0lucHV0KCk7XG4gICAgICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbHVlID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgICAgICAgIHRoaXMuc2hvdyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlUmVqZWN0KCkge1xuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0Q2hhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuaW5wdXQuZm9ybWF0U2VjdGlvbnMuZGF0ZSA/IHZhbHVlIDogdGhpcy5tZXJnZVRpbWUodmFsdWUpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTW91c2Vkb3duKGFyZ3MpIHtcbiAgICAgICAgYXJncy5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlSWNvbkNsaWNrKGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcbiAgICAgICAgLy9YWFg6IGV4cGxpY2l0IGNhbGwgaGFuZGxlRm9jdXMgaGFuZGxlciBoZXJlXG4gICAgICAgIC8vZHVlIHRvIGFzeW5jIElFIGZvY3VzIGV2ZW50XG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgdGhpcy5zaG93ID0gIXRoaXMuc2hvdztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBwb3B1cENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnay1ncm91cCcsXG4gICAgICAgICAgICAnay1yZXNldCdcbiAgICAgICAgXS5jb25jYXQodGhpcy5wb3B1cFNldHRpbmdzLnBvcHVwQ2xhc3MgfHwgW10pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbm9ybWFsaXplVGltZShkYXRlKSB7XG4gICAgICAgIHJldHVybiBzZXRUaW1lKE1JRE5JR0hUX0RBVEUsIGRhdGUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbWVyZ2VUaW1lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICYmIHZhbHVlID8gc2V0VGltZSh0aGlzLnZhbHVlLCB2YWx1ZSkgOiB2YWx1ZTtcbiAgICB9XG4gICAgdG9nZ2xlUG9wdXAoc2hvdykge1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIGlmICghdGhpcy5fc2hvdyAmJiBzaG93KSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5fc2hvdyAmJiAhc2hvdykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90b2dnbGUoc2hvdyk7XG4gICAgICAgIHRoaXMudG9nZ2xlRm9jdXMoKTtcbiAgICB9XG4gICAgX3RvZ2dsZShzaG93KSB7XG4gICAgICAgIGlmIChzaG93ID09PSB0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3cgPSBzaG93O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgaWYgKHNob3cpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3Blbih7XG4gICAgICAgICAgICAgICAgYW5jaG9yOiB0aGlzLndyYXBwZXIsXG4gICAgICAgICAgICAgICAgYW5jaG9yQWxpZ246IHsgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBhbmltYXRlOiB0aGlzLnBvcHVwU2V0dGluZ3MuYW5pbWF0ZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRUbzogdGhpcy5hcHBlbmRUbyxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0aGlzLnBvcHVwVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcG9wdXBBbGlnbjogeyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9LFxuICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M6IHRoaXMucG9wdXBDbGFzc2VzLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uTW9kZTogJ2Fic29sdXRlJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5wb3B1cFVJRCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLnBvcHVwQW5jaG9yVmlld3BvcnRMZWF2ZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zaG93ID0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNJbnB1dCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG91Y2hFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICB0b2dnbGVGb2N1cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvdykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnRpbWVTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aW1lU2VsZWN0b3IuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy50b3VjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5pbnB1dC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmVyaWZ5VmFsdWUodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICd2YWx1ZScgc2hvdWxkIGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBEYXRlIGluc3RhbmNlLiBDaGVjayAke1ZBTFVFX0RPQ19MSU5LJDN9IGZvciBwb3NzaWJsZSByZXNvbHV0aW9uLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeUZvcm1hdCgpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvcm1hdENvbnRhaW5zRGF0ZVBhcnRzID0gdGhpcy5pbnRsLnNwbGl0RGF0ZUZvcm1hdCh0aGlzLmZvcm1hdCkuc29tZShwYXJ0ID0+ICFmb3JtYXRSZWdFeHAudGVzdChwYXJ0LnR5cGUpKTtcbiAgICAgICAgaWYgKGZvcm1hdENvbnRhaW5zRGF0ZVBhcnRzKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVkIGZvcm1hdCBpcyBub3Qgc3VwcG9ydGVkLiBTdXBwb3J0ZWQgc3BlY2lmaWVycyBhcmUgVHx0fEh8aHxtfHN8YS4gU2VlICR7SU5UTF9EQVRFX0ZPUk1BVH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBiaW5kRXZlbnRzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24uYmluZCh0aGlzKSkpO1xuICAgICAgICBpZiAoaXNXaW5kb3dBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ2JsdXInKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVXaW5kb3dCbHVyLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZVdpbmRvd0JsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkZvY3VzKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUJsdXIoYXJncykge1xuICAgICAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gYXJncyAmJiBjdXJyZW50Rm9jdXNUYXJnZXQoYXJncyk7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ICYmICh0aGlzLmlucHV0LmNvbnRhaW5zRWxlbWVudChjdXJyZW50VGFyZ2V0KSB8fFxuICAgICAgICAgICAgKHRoaXMudGltZVNlbGVjdG9yICYmIHRoaXMudGltZVNlbGVjdG9yLmNvbnRhaW5zRWxlbWVudChjdXJyZW50VGFyZ2V0KSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLm9uQmx1cikgfHwgKHRoaXMuc2hvdyAmJiBoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpIHx8IHJlcXVpcmVzWm9uZU9uQmx1cih0aGlzLmNvbnRyb2wpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJsdXJDb21wb25lbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibHVyQ29tcG9uZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYmx1ckNvbXBvbmVudCgpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlOyAvLyBvcmRlciBpcyBpbXBvcnRhbnQgwq9cXF8o44OEKV8vwq9cbiAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCgpO1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XG4gICAgfVxuICAgIGhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKSk7XG4gICAgfVxufVxuVGltZVBpY2tlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG8tdGltZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtlbmRvSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDb21wb25lbnQpIH0sXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby50aW1lcGlja2VyJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBQaWNrZXJTZXJ2aWNlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRpbWVwaWNrZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9UaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tYWNjZXB0PVwia2VuZG8udGltZXBpY2tlci5hY2NlcHR8VGhlIEFjY2VwdCBidXR0b24gdGV4dCBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgYWNjZXB0PVwiU2V0XCJcblxuICAgICAgICAgICAgaTE4bi1hY2NlcHRMYWJlbD1cImtlbmRvLnRpbWVwaWNrZXIuYWNjZXB0TGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgQWNjZXB0IGJ1dHRvbiBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgYWNjZXB0TGFiZWw9XCJTZXQgdGltZVwiXG5cbiAgICAgICAgICAgIGkxOG4tY2FuY2VsPVwia2VuZG8udGltZXBpY2tlci5jYW5jZWx8VGhlIENhbmNlbCBidXR0b24gdGV4dCBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgY2FuY2VsPVwiQ2FuY2VsXCJcblxuICAgICAgICAgICAgaTE4bi1jYW5jZWxMYWJlbD1cImtlbmRvLnRpbWVwaWNrZXIuY2FuY2VsTGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgQ2FuY2VsIGJ1dHRvbiBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgY2FuY2VsTGFiZWw9XCJDYW5jZWwgY2hhbmdlc1wiXG5cbiAgICAgICAgICAgIGkxOG4tbm93PVwia2VuZG8udGltZXBpY2tlci5ub3d8VGhlIE5vdyBidXR0b24gdGV4dCBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgbm93PVwiTm93XCJcblxuICAgICAgICAgICAgaTE4bi1ub3dMYWJlbD1cImtlbmRvLnRpbWVwaWNrZXIubm93TGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgTm93IGJ1dHRvbiBpbiB0aGUgdGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgbm93TGFiZWw9XCJTZWxlY3Qgbm93XCJcblxuICAgICAgICAgICAgaTE4bi10b2dnbGU9XCJrZW5kby50aW1lcGlja2VyLnRvZ2dsZXxUaGUgbGFiZWwgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIGluIHRoZSB0aW1lcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICB0b2dnbGU9XCJUb2dnbGUgdGltZSBsaXN0XCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPHNwYW4gI3dyYXBwZXJcbiAgICAgICAgICAgIGNsYXNzPVwiay1waWNrZXItd3JhcFwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1kYXRlaW5wdXRcbiAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgICBbZm9jdXNhYmxlSWRdPVwiZm9jdXNhYmxlSWRcIlxuICAgICAgICAgICAgICAgIFtoYXNQb3B1cF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbaXNQb3B1cE9wZW5dPVwic2hvd1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHkgfHwgcmVhZE9ubHlJbnB1dFwiXG4gICAgICAgICAgICAgICAgW3JvbGVdPVwiaW5wdXRSb2xlXCJcbiAgICAgICAgICAgICAgICBbYXJpYVJlYWRPbmx5XT1cInJlYWRvbmx5XCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibm9ybWFsaXplVGltZShtaW4pXCJcbiAgICAgICAgICAgICAgICBbbWF4XT1cIm5vcm1hbGl6ZVRpbWUobWF4KVwiXG4gICAgICAgICAgICAgICAgW2luY29tcGxldGVEYXRlVmFsaWRhdGlvbl09XCJpbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb25cIlxuICAgICAgICAgICAgICAgIFtzdGVwc109XCJzdGVwc1wiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIiFzaG93ID8gdGFiaW5kZXggOiAtMVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1zZWxlY3RcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ3RvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVJY29uQ2xpY2ssXG4gICAgICAgICAgICAgICAgICAgIG1vdXNlZG93bjogaGFuZGxlTW91c2Vkb3duXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1jbG9ja1wiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcG9wdXBUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8a2VuZG8tdGltZXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICN0aW1lU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgW2NhbmNlbEJ1dHRvbl09XCJjYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBbbm93QnV0dG9uXT1cIm5vd0J1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdGVwc109XCJzdGVwc1wiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleWRvd246IGhhbmRsZUtleWRvd24sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IGhhbmRsZU1vdXNlZG93blxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVSZWplY3QpPVwiaGFuZGxlUmVqZWN0KClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRpbWVzZWxlY3Rvci1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdExhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdExhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjY2VwdF09XCJsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FuY2VsTGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnY2FuY2VsTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FuY2VsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub3dMYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCdub3dMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtub3ddPVwibG9jYWxpemF0aW9uLmdldCgnbm93JylcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwva2VuZG8tdGltZXNlbGVjdG9yLW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tdGltZXNlbGVjdG9yPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lUGlja2VyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEluamVjdG9yIH0sXG4gICAgeyB0eXBlOiBQaWNrZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtUT1VDSF9FTkFCTEVELF0gfV0gfVxuXTtcblRpbWVQaWNrZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29udGFpbmVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0sXSB9XSxcbiAgICBwb3B1cFRlbXBsYXRlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsncG9wdXBUZW1wbGF0ZScsXSB9XSxcbiAgICB3cmFwcGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnd3JhcHBlcicsXSB9XSxcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlYWRvbmx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZWFkT25seUlucHV0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdFBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluY29tcGxldGVEYXRlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2FuY2VsQnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub3dCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3B1cFNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJpbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uRm9jdXM6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydmb2N1cycsXSB9XSxcbiAgICBvbkJsdXI6IFt7IHR5cGU6IE91dHB1dCwgYXJnczogWydibHVyJyxdIH1dLFxuICAgIG9wZW46IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHdyYXBwZXJDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstdGltZXBpY2tlcicsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dXG59O1xuXG5jb25zdCB0aW1lRm9ybWF0UmVnRXhwID0gbmV3IFJlZ0V4cChgJHtUSU1FX1BBUlQuaG91cn18JHtUSU1FX1BBUlQubWludXRlfXwke1RJTUVfUEFSVC5zZWNvbmR9fCR7VElNRV9QQVJULmRheXBlcmlvZH18bGl0ZXJhbGApO1xuY29uc3QgVkFMVUVfRE9DX0xJTkskNCA9ICdodHRwczovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvZGF0ZWlucHV0cy9kYXRldGltZXBpY2tlci9pbnRlZ3JhdGlvbi13aXRoLWpzb24vJztcbmNvbnN0IE1JTl9NQVhfRE9DX0xJTksgPSAnaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvZGF0ZXRpbWVwaWNrZXIvZGF0ZS10aW1lLWxpbWl0cy8nO1xuY29uc3QgREVGQVVMVF9BQ1RJVkVfVEFCID0gJ2RhdGUnO1xuY29uc3QgREVGQVVMVF9EQVRFSU5QVVRfRk9STUFUID0gJ2cnO1xuY29uc3QgREVGQVVMVF9USU1FU0VMRUNUT1JfRk9STUFUID0gJ3QnO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgRGF0ZVRpbWVQaWNrZXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9KS5cbiAqL1xuY2xhc3MgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgaW50bCwgY2RyLCBwaWNrZXJTZXJ2aWNlLCBuZ1pvbmUsIGhvc3QsIHRvdWNoRW5hYmxlZCQkMSwgbG9jYWxpemF0aW9uLCBkaXNhYmxlZERhdGVzU2VydmljZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UgPSBwaWNrZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICAgICAgdGhpcy50b3VjaEVuYWJsZWQgPSB0b3VjaEVuYWJsZWQkJDE7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlID0gZGlzYWJsZWREYXRlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaG9zdENsYXNzZXMgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5mb2N1c2FibGVJZCA9IGBrLSR7Z3VpZCgpfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSB0aXRsZSBvZiB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpdGxlID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIERhdGVUaW1lUGlja2VyIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRldGltZXBpY2tlciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgcmVhZC1vbmx5IHN0YXRlIG9mIHRoZSBEYXRlVGltZVBpY2tlclxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlYWRvbmx5X2RhdGV0aW1lcGlja2VyICV9I3RvYy1yZWFkLW9ubHktZGF0ZXRpbWVwaWNrZXIpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHJlYWQtb25seSBzdGF0ZSBvZiB0aGUgRGF0ZVRpbWVQaWNrZXIgaW5wdXQgZmllbGRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZWFkb25seV9kYXRldGltZXBpY2tlciAlfSN0b2MtcmVhZC1vbmx5LWlucHV0KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqID4gTm90ZSB0aGF0IGlmIHlvdSBzZXQgdGhlIFtgcmVhZG9ubHlgXSh7JSBzbHVnIGFwaV9kYXRlaW5wdXRzX2RhdGV0aW1lcGlja2VyY29tcG9uZW50ICV9I3RvYy1yZWFkb25seSkgcHJvcGVydHkgdmFsdWUgdG8gYHRydWVgLFxuICAgICAgICAgKiB0aGUgaW5wdXQgd2lsbCBiZSByZW5kZXJlZCBpbiBhIHJlYWQtb25seSBzdGF0ZSByZWdhcmRsZXNzIG9mIHRoZSBgcmVhZE9ubHlJbnB1dGAgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlYWRPbmx5SW5wdXQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSAqKkNhbmNlbCoqIGJ1dHRvbiBpbiB0aGUgcG9wdXBcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRldGltZXBpY2tlcl9wb3B1cF9vcHRpb25zICV9I3RvYy10b2dnbGluZy10aGUtY2FuY2VsLWJ1dHRvbikpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYW5jZWxCdXR0b24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgYSB3ZWVrIG51bWJlciBjb2x1bW4gaW4gdGhlIGBtb250aGAgdmlldyBvZiB0aGUgcG9wdXAgQ2FsZW5kYXJcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRldGltZXBpY2tlcl9jYWxlbmRhcl9vcHRpb25zICV9I3RvYy13ZWVrLW51bWJlci1jb2x1bW4pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMud2Vla051bWJlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiBtaW4gb3IgbWF4IHZhbGlkYXRvcnMgYXJlIGVuZm9yY2VkIHdoZW4gdmFsaWRhdGluZyBhIGZvcm1cbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlcmFuZ2VzX2RhdGV0aW1lcGlja2VyICV9I3RvYy1wcmV2ZW50LWludmFsaWQtaW5wdXQpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmFuZ2VWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgYnVpbHQtaW4gdmFsaWRhdG9yIGZvciBkaXNhYmxlZFxuICAgICAgICAgKiBkYXRlIHJhbmdlcyBpcyBlbmZvcmNlZCB3aGVuIHZhbGlkYXRpbmcgYSBmb3JtXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGlzYWJsZWRfZGF0ZXNfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLXZhbGlkYXRpb24pKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1ZhbGlkYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiB2YWxpZGF0aW9uIGZvciBpbmNvbXBsZXRlIGRhdGVzIGlzIHRvIGJlIGVuZm9yY2VkIHdoZW4gYSBmb3JtIGlzIGJlaW5nIHZhbGlkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9I3RvYy1tZXRob2RzLWFuZC1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50IGJ5IHNldHRpbmcgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgLCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLW1ldGhvZHMtYW5kLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQgYnkgc2V0dGluZyBgZXZlbnQucHJldmVudERlZmF1bHQoKWAsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBvcGVuLlxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLW1ldGhvZHMtYW5kLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBmb2N1c2VzIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19kYXRldGltZXBpY2tlciAlfSN0b2MtbWV0aG9kcy1hbmQtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9uRm9jdXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgYmx1cnMgdGhlIGNvbXBvbmVudC5cbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X2RhdGV0aW1lcGlja2VyICV9I3RvYy1tZXRob2RzLWFuZC1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25CbHVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKlxuICAgICAgICAgKiBDb250cm9scyB3aGV0aGVyIHRoZSBDYWxlbmRhciBvciB0aGUgVGltZVNlbGVjdG9yIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBERUZBVUxUX0FDVElWRV9UQUI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc3RyaXBwZWQgdGltZS1yZWxhdGVkIGZvcm1hdCB0aGF0IGlzIHVzZWQgaW4gdGhlIFRpbWVTZWxlY3Rvci5cbiAgICAgICAgICogVXBkYXRlcyBlYWNoIHRpbWUgdGhlIGBmb3JtYXRgIHByb3BlcnR5IHZhbHVlIGNoYW5nZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRpbWVTZWxlY3RvckZvcm1hdCA9IERFRkFVTFRfVElNRVNFTEVDVE9SX0ZPUk1BVDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGltZVNlbGVjdG9yTWluID0gY2xvbmVEYXRlKE1JTl9USU1FKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGltZVNlbGVjdG9yTWF4ID0gY2xvbmVEYXRlKE1BWF9USU1FKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FsZW5kYXJWYWx1ZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWluID0gY2xvbmVEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FsZW5kYXJNYXggPSBsYXN0TWlsbGlzZWNvbmRPZkRhdGUoTUFYX0RBVEUpO1xuICAgICAgICB0aGlzLl9wb3B1cFNldHRpbmdzID0geyBhbmltYXRlOiB0cnVlIH07XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gREVGQVVMVF9EQVRFSU5QVVRfRk9STUFUO1xuICAgICAgICB0aGlzLl90YWJpbmRleCA9IDA7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRUYWIgPSBERUZBVUxUX0FDVElWRV9UQUI7XG4gICAgICAgIHRoaXMuX21pbiA9IG1lcmdlRGF0ZUFuZFRpbWUoTUlOX0RBVEUsIE1JTl9USU1FKTtcbiAgICAgICAgdGhpcy5fbWF4ID0gbWVyZ2VEYXRlQW5kVGltZShNQVhfREFURSwgTUFYX1RJTUUpO1xuICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbENoYW5nZSA9IG5vb3A7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm1pblZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLm1heFZhbGlkYXRlRm4gPSBub29wO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gbm9vcDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlucHV0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJTZXJ2aWNlLmlucHV0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNhbGVuZGFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5waWNrZXJTZXJ2aWNlLmNhbGVuZGFyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHRpbWVTZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGlja2VyU2VydmljZS50aW1lU2VsZWN0b3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgb2YgdGhlIERhdGVUaW1lUGlja2VyIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqID4gVGhlIGB2YWx1ZWAgaGFzIHRvIGJlIGEgdmFsaWQgW0phdmFTY3JpcHQgYERhdGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlKSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gY2xvbmVEYXRlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRDYWxlbmRhclZhbHVlKHZhbHVlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIGRhdGUgZm9ybWF0IGZvciBkaXNwbGF5aW5nIHRoZSBpbnB1dCB2YWx1ZVxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZm9ybWF0c19kYXRldGltZXBpY2tlciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBmb3JtYXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMudGltZVNlbGVjdG9yRm9ybWF0ID0gdGhpcy5nZXRUaW1lU2VsZWN0b3JGb3JtYXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgZm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWF0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIFtgdGFiaW5kZXhgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0dsb2JhbF9hdHRyaWJ1dGVzL3RhYmluZGV4KSBvZiB0aGUgRGF0ZVRpbWVQaWNrZXIuXG4gICAgICovXG4gICAgc2V0IHRhYmluZGV4KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHRhYmluZGV4ID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5fdGFiaW5kZXggPSAhaXNOYU4odGFiaW5kZXgpID8gdGFiaW5kZXggOiBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGdldCB0YWJpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6IHRoaXMuX3RhYmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlcyBvZiB0aGUgRGF0ZVRpbWVQaWNrZXIgdGhhdCB3aWxsIGJlIGRpc2FibGVkXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRlc19kYXRldGltZXBpY2tlciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkRGF0ZXMgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pbml0aWFsaXplKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkRGF0ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZERhdGVzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBwb3B1cCBzZXR0aW5ncyBvZiB0aGUgRGF0ZVRpbWVQaWNrZXJcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGV0aW1lcGlja2VyX3BvcHVwX29wdGlvbnMgJX0jdG9jLWN1c3RvbWl6aW5nLXRoZS1wb3B1cCkpLlxuICAgICAqXG4gICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgKiAtIGBhbmltYXRlOiBCb29sZWFuYCZtZGFzaDtDb250cm9scyB0aGUgcG9wdXAgYW5pbWF0aW9uLiBCeSBkZWZhdWx0LCB0aGUgb3BlbiBhbmQgY2xvc2UgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZC5cbiAgICAgKiAtIGBhcHBlbmRUbzogJ3Jvb3QnIHwgJ2NvbXBvbmVudCcgfCBWaWV3Q29udGFpbmVyUmVmYCZtZGFzaDtDb250cm9scyB0aGUgcG9wdXAgY29udGFpbmVyLiBCeSBkZWZhdWx0LCB0aGUgcG9wdXAgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgcm9vdCBjb21wb25lbnQuXG4gICAgICogLSBgcG9wdXBDbGFzczogU3RyaW5nYCZtZGFzaDtTcGVjaWZpZXMgYSBsaXN0IG9mIENTUyBjbGFzc2VzIHRoYXQgYXJlIHVzZWQgdG8gc3R5bGUgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHNldCBwb3B1cFNldHRpbmdzKHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX3BvcHVwU2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB7IGFuaW1hdGU6IHRydWUgfSwgc2V0dGluZ3MpO1xuICAgIH1cbiAgICBnZXQgcG9wdXBTZXR0aW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BvcHVwU2V0dGluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgc21hbGxlc3QgdmFsaWQgZGF0ZS5cbiAgICAgKiBUaGUgQ2FsZW5kYXIgd2lsbCBub3QgZGlzcGxheSBkYXRlcyBiZWZvcmUgdGhpcyB2YWx1ZS5cbiAgICAgKiBJZiB0aGUgYG1pbmAgdmFsdWUgb2YgdGhlIENhbGVuZGFyIGlzIHNlbGVjdGVkLCB0aGUgVGltZVBpY2tlciB3aWxsIG5vdCBkaXNwbGF5XG4gICAgICogdGltZSBlbnRyaWVzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIHRpbWUgcG9ydGlvbiBvZiB0aGlzIHZhbHVlXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlcmFuZ2VzX2RhdGV0aW1lcGlja2VyICV9KSkuXG4gICAgICovXG4gICAgc2V0IG1pbih2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9taW4gPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWluID0gZ2V0RGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBtaW4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgYmlnZ2VzdCB2YWxpZCBkYXRlLlxuICAgICAqIFRoZSBDYWxlbmRhciB3aWxsIG5vdCBkaXNwbGF5IGRhdGVzIGFmdGVyIHRoaXMgdmFsdWUuXG4gICAgICogSWYgdGhlIGBtYXhgIHZhbHVlIG9mIHRoZSBDYWxlbmRhciBpcyBzZWxlY3RlZCwgdGhlIFRpbWVQaWNrZXIgd2lsbCBub3QgZGlzcGxheVxuICAgICAqIHRpbWUgZW50cmllcyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUgcG9ydGlvbiBvZiB0aGlzIHZhbHVlXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRlcmFuZ2VzX2RhdGV0aW1lcGlja2VyICV9KSkuXG4gICAgICovXG4gICAgc2V0IG1heCh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9tYXggPSBjbG9uZURhdGUodmFsdWUpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyTWF4ID0gbGFzdE1pbGxpc2Vjb25kT2ZEYXRlKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IG1heCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21heDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBjdXJyZW50bHkgb3Blbi5cbiAgICAgKi9cbiAgICBnZXQgaXNPcGVuKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMucG9wdXBSZWYpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY29tcG9uZW50IG9yIGl0cyBwb3B1cCBjb250ZW50IGlzIGZvY3VzZWQuXG4gICAgICovXG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNBY3RpdmU7XG4gICAgfVxuICAgIHNldCBpc0FjdGl2ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhY3RpdmUgdGFiIG9uIG9wZW5pbmcgdGhlIHBvcHVwXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkYXRldGltZXBpY2tlcl9wb3B1cF9vcHRpb25zICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LXRhYikpLlxuICAgICAqL1xuICAgIHNldCBkZWZhdWx0VGFiKHRhYikge1xuICAgICAgICB0aGlzLl9kZWZhdWx0VGFiID0gdGFiIHx8IERFRkFVTFRfQUNUSVZFX1RBQjtcbiAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLmRlZmF1bHRUYWI7XG4gICAgfVxuICAgIGdldCBkZWZhdWx0VGFiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFRhYjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB0YWJTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgICAgICAvKlxuICAgICAgICAgV2hlbiB0aGUgcG9wdXAgaXMgb3BlbmluZywgZGlzYWJsZXMgdGhlIHNldCB0cmFuc2l0aW9uIGluIHRoZSB0aGVtZXMuIFdoZW4gYGRlZmF1bHRUYWJgIGlzIHNldCB0byBgdGltZWAsXG4gICAgICAgICB0aGUgcG9wdXAgb3BlbnMgd2l0aCBhbiBhY3RpdmUgKipUaW1lKiogdGFiIGFuZCB0aGUgYW5pbWF0aW9uIG9mIHRoZSBpbml0aWFsIHRyYW5zaXRpb24gaXMgdW5kZXNpcmVkLlxuICAgICAgICAgU2V0dGluZyB0aGUgaW5saW5lIHRyYW5zaXRpb24gc3R5bGUgdG8gYG5vbmVgIG92ZXJyaWRlcyB0aGUgc2V0IGFuaW1hdGlvbiBpbiB0aGUgdGhlbWVzLlxuICAgICAgICAgU2V0dGluZyB0aGUgaW5saW5lIHRyYW5zaXRpb24gc3R5bGUgdG8gYG51bGxgIGRvZXMgbm90IGFwcGx5IGFueSBpbmxpbmUgc3R5bGVzIG9yIG92ZXJyaWRlIHRoZSB0aGVtZXMgQ1NTLlxuICAgICAgICAqL1xuICAgICAgICByZXR1cm4gdGhpcy5pc09wZW4gPyBudWxsIDogJ25vbmUnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgQ2FsZW5kYXIgd2lsbCBiZSBkaXNhYmxlZC5cbiAgICAgKiBUaGUgaW5hY3RpdmUgdGFiIGNvbXBvbmVudCBnZXRzIGRpc2FibGVkIGFuZCBiZWNvbWVzIGluYWNjZXNzaWJsZSBvbiB0YWIgY2xpY2suXG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVDYWxlbmRhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVGFiICE9PSAnZGF0ZScgJiYgIXRoaXMuY2FsZW5kYXIuaXNBY3RpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaW5wdXRSb2xlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWFkT25seUlucHV0ID8gJ2xpc3Rib3gnIDogJ3NwaW5idXR0b24nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgVGltZVNlbGVjdG9yIHdpbGwgYmUgZGlzYWJsZWQuXG4gICAgICogVGhlIGluYWN0aXZlIHRhYiBjb21wb25lbnQgZ2V0cyBkaXNhYmxlZCBhbmQgYmVjb21lcyBpbmFjY2Vzc2libGUgb24gdGFiIGNsaWNrLlxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlVGltZVNlbGVjdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIgIT09ICd0aW1lJyAmJiAhdGhpcy50aW1lU2VsZWN0b3IuaXNBY3RpdmU7XG4gICAgfVxuICAgIGdldCBhY3RpdmVUYWJDb21wb25lbnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShpc1ByZXNlbnQodGhpcy5jYWxlbmRhcikgfHwgaXNQcmVzZW50KHRoaXMudGltZVNlbGVjdG9yKSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVUYWIgPT09ICdkYXRlJyA/IHRoaXMuY2FsZW5kYXIgOiB0aGlzLnRpbWVTZWxlY3RvcjtcbiAgICB9XG4gICAgZ2V0IGFwcGVuZFRvKCkge1xuICAgICAgICBjb25zdCB7IGFwcGVuZFRvIH0gPSB0aGlzLnBvcHVwU2V0dGluZ3M7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGFwcGVuZFRvKSB8fCBhcHBlbmRUbyA9PT0gJ3Jvb3QnKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcHBlbmRUbyA9PT0gJ2NvbXBvbmVudCcgPyB0aGlzLmNvbnRhaW5lciA6IGFwcGVuZFRvO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBpY2tlclNlcnZpY2Uub25Gb2N1c1xuICAgICAgICAgICAgLy8gZGV0ZWN0IHBvcHVwIGNoYW5nZXMgdG8gZGlzYWJsZSB0aGUgaW5hY3RpdmUgdmlldyBtYXJrLXVwIHdoZW4gdGhlIHBvcHVwIGlzIG9wZW5cbiAgICAgICAgICAgIC5waXBlKHRhcCh0aGlzLmRldGVjdFBvcHVwQ2hhbmdlcy5iaW5kKHRoaXMpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5oYW5kbGVGb2N1cy5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5waWNrZXJTZXJ2aWNlLm9uQmx1ci5zdWJzY3JpYmUodGhpcy5oYW5kbGVCbHVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnBpY2tlclNlcnZpY2Uuc2FtZURhdGVTZWxlY3RlZC5zdWJzY3JpYmUodGhpcy5oYW5kbGVDYWxlbmRhclZhbHVlQ2hhbmdlLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucGlja2VyU2VydmljZS5kYXRlQ29tcGxldGVuZXNzQ2hhbmdlLnN1YnNjcmliZSh0aGlzLmhhbmRsZURhdGVDb21wbGV0ZW5lc3NDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgICAgICBpZiAoaXNXaW5kb3dBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiBmcm9tRXZlbnQod2luZG93LCAnYmx1cicpLnN1YnNjcmliZSh0aGlzLmhhbmRsZUNhbmNlbC5iaW5kKHRoaXMpKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudChjaGFuZ2VzLm1pbikgfHwgaXNQcmVzZW50KGNoYW5nZXMubWF4KSkge1xuICAgICAgICAgICAgdGhpcy52ZXJpZnlNaW5NYXhSYW5nZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmRpc2FibGVkRGF0ZXNWYWxpZGF0aW9uIHx8IGNoYW5nZXMuZGlzYWJsZWREYXRlcyB8fCBjaGFuZ2VzLmluY29tcGxldGVEYXRlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtaW5WYWxpZGF0b3IodGhpcy5taW4pIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsaWRhdGVGbiA9IHRoaXMucmFuZ2VWYWxpZGF0aW9uID8gbWF4VmFsaWRhdG9yKHRoaXMubWF4KSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuID0gdGhpcy5kaXNhYmxlZERhdGVzVmFsaWRhdGlvbiA/IGRpc2FibGVkRGF0ZXNWYWxpZGF0b3IodGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZCkgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5pbmNvbXBsZXRlVmFsaWRhdG9yID0gdGhpcy5pbmNvbXBsZXRlRGF0ZVZhbGlkYXRpb24gPyBpbmNvbXBsZXRlRGF0ZVZhbGlkYXRvcigpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogKiBJZiB0aGUgcG9wdXAgaXMgY2xvc2VkLCBmb2N1c2VzIHRoZSBEYXRlVGltZVBpY2tlciBpbnB1dC5cbiAgICAgKiAqIElmIHRoZSBwb3B1cCBpcyBvcGVuLCB0aGUgZm9jdXMgaXMgbW92ZWQgdG8gaXRzIGNvbnRlbnQuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVRhYkNvbXBvbmVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJsdXJzIHRoZSBEYXRlVGltZVBpY2tlci5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5hY3RpdmVUYWJDb21wb25lbnQuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiQ29tcG9uZW50LmJsdXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHBvcHVwLiBJZiB5b3UgdXNlIHRoZSBgdG9nZ2xlYCBtZXRob2QgdG8gc2hvdyBvciBoaWRlIHRoZSBwb3B1cCxcbiAgICAgKiB0aGUgYG9wZW5gIGFuZCBgY2xvc2VgIGV2ZW50cyBkbyBub3QgZmlyZS5cbiAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfZGF0ZXRpbWVwaWNrZXIgJX0jdG9jLW1ldGhvZHMtYW5kLWV2ZW50cykpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHNob3cgLSBUaGUgc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHRvZ2dsZShzaG93KSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkgfHwgc2hvdyA9PT0gdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG91bGRPcGVuID0gaXNQcmVzZW50KHNob3cpID8gc2hvdyA6ICF0aGlzLmlzT3BlbjtcbiAgICAgICAgaWYgKHNob3VsZE9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKTtcbiAgICAgICAgICAgIC8vIENoYW5nZXMgdGhlIHRhYiBhbmQgdGhlIGNhbGVuZGFyIG9yIGNsb2NrIGljb24gdG8gdGhlIGRlc2lnbmF0ZWQgZGVmYXVsdC5cbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYiAhPT0gdGhpcy5kZWZhdWx0VGFiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSB0aGlzLmRlZmF1bHRUYWI7XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsaWRhdGUoY29udHJvbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMubWF4VmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLmRpc2FibGVkRGF0ZXNWYWxpZGF0ZUZuKGNvbnRyb2wpIHx8IHRoaXMuaW5jb21wbGV0ZVZhbGlkYXRvcihjb250cm9sLCB0aGlzLmlucHV0ICYmIHRoaXMuaW5wdXQuaXNEYXRlSW5jb21wbGV0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuKSB7XG4gICAgICAgIHRoaXMub25WYWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogVXNlZCBieSB0aGUgVGV4dEJveENvbnRhaW5lciB0byBkZXRlcm1pbmUgaWYgdGhlIGZsb2F0aW5nIGxhYmVsIHdpbGwgcmVuZGVyIGluIHRoZSBpbnB1dC5cbiAgICAgKi9cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICByZXR1cm4gIWlzUHJlc2VudCh0aGlzLnZhbHVlKSAmJiB0aGlzLmlucHV0LmlzRW1wdHkoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUljb25DbGljayhldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcHJldmVudHMgdGhlIGV2ZW50IGRlZmF1bHQgdG8gZXZhZGUgZm9jdXNpbmcgdGhlIERhdGVJbnB1dCBpbnB1dCB3aGVuIHBsYWNlZCBpbnNpZGUgYSBsYWJlbCAoRkYvSUUvRWRnZSlcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcnVuSW5ab25lID0gIXRoaXMuaXNPcGVuIHx8IGhhc09ic2VydmVycyh0aGlzLmNsb3NlKTtcbiAgICAgICAgdGhpcy5ydW4ocnVuSW5ab25lLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRPcGVuID0gIXRoaXMuaXNPcGVuO1xuICAgICAgICAgICAgLy8gaGFuZGxlIGZvY3VzIGZpcnN0IHRvIG1haW50YWluIGNvcnJlY3QgZXZlbnQgb3JkZXIgYGZvY3VzYCA9PiBgb3BlbmBcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlUG9wdXAoc2hvdWxkT3Blbik7XG4gICAgICAgICAgICB0aGlzLnN3aXRjaEZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5vbkZvY3VzKSkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMub25Gb2N1cy5lbWl0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVCbHVyKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSB8fCB0aGlzLmZvY3VzVGFyZ2V0SW5Db21wb25lbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBpc05nQ29udHJvbFVudG91Y2hlZCA9IHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctdW50b3VjaGVkJyk7XG4gICAgICAgIGNvbnN0IHJ1bkluWm9uZSA9IGlzTmdDb250cm9sVW50b3VjaGVkIHx8IGhhc09ic2VydmVycyh0aGlzLm9uQmx1cikgfHwgKHRoaXMuaXNPcGVuICYmIGhhc09ic2VydmVycyh0aGlzLmNsb3NlKSk7XG4gICAgICAgIHRoaXMucnVuKHJ1bkluWm9uZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZVBvcHVwKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNoYW5nZUFjdGl2ZVRhYih0YWIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3BlbiB8fCB0aGlzLmFjdGl2ZVRhYiA9PT0gdGFiKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGVyc2lzdHMgdGhlIFRjdXJyZW50IHZhbHVlIG9mIHRoZSBUaW1lU2VsZWN0b3Igd2hlbiBzd2l0Y2hpbmcgYmV0d2VlbiB0YWJzXG4gICAgICAgIGlmICghaXNFcXVhbCh0aGlzLnRpbWVTZWxlY3Rvci52YWx1ZSwgdGhpcy50aW1lU2VsZWN0b3IuY3VycmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMudGltZVNlbGVjdG9yLmhhbmRsZUFjY2VwdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuZGV0ZWN0UG9wdXBDaGFuZ2VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVUYWJDaGFuZ2VUcmFuc2l0aW9uRW5kKGRhdGVUaW1lU2VsZWN0b3IsIGV2ZW50KSB7XG4gICAgICAgIC8vIGhhbmRsZSBvbmx5IHRoZSAuay1kYXRldGltZS1zZWxlY3RvciBlbGVtZW50IHRyYW5zaXRpb24sIGlnbm9yZSBhbnkgY2hpbGQgZWxlbWVudCB0cmFuc2l0aW9uc1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ICE9PSBkYXRlVGltZVNlbGVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVUYWJDb21wb25lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUFjY2VwdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IG1lcmdlRGF0ZUFuZFRpbWUodGhpcy5jYWxlbmRhci52YWx1ZSwgdGhpcy50aW1lU2VsZWN0b3IuY3VycmVudCk7XG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlUHJlc2VudCA9ICFpc0VxdWFsKHRoaXMudmFsdWUsIGNhbmRpZGF0ZSk7XG4gICAgICAgIGNvbnN0IHJ1bkluWm9uZSA9IHZhbHVlQ2hhbmdlUHJlc2VudCB8fCBoYXNPYnNlcnZlcnModGhpcy5jbG9zZSk7XG4gICAgICAgIHRoaXMucnVuKHJ1bkluWm9uZSwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZShjYW5kaWRhdGUpO1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQ2FuY2VsKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVuSW5ab25lID0gaGFzT2JzZXJ2ZXJzKHRoaXMuY2xvc2UpO1xuICAgICAgICB0aGlzLnJ1bihydW5JblpvbmUsICgpID0+IHRoaXMudG9nZ2xlUG9wdXAoZmFsc2UpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUlucHV0VmFsdWVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVQb3B1cChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUNhbGVuZGFyVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZVNlbGVjdG9yTWluTWF4KHRoaXMuY2FsZW5kYXIudmFsdWUpO1xuICAgICAgICB0aGlzLmNoYW5nZUFjdGl2ZVRhYigndGltZScpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlS2V5RG93bihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBrZXlDb2RlLCBhbHRLZXkgfSA9IGV2ZW50O1xuICAgICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgICAgICAgIGNhc2UgYWx0S2V5ICYmIEtleXMuQXJyb3dVcDpcbiAgICAgICAgICAgIGNhc2UgS2V5cy5Fc2NhcGU6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgIXRoaXMuaXNPcGVuICYmIGFsdEtleSAmJiBLZXlzLkFycm93RG93bjpcbiAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy50b2dnbGVQb3B1cCh0cnVlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGFsdEtleSAmJiBLZXlzLkFycm93UmlnaHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VBY3RpdmVUYWIoJ3RpbWUnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgYWx0S2V5ICYmIEtleXMuQXJyb3dMZWZ0OlxuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlQWN0aXZlVGFiKCdkYXRlJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHRoaXMuaXNPcGVuICYmIHRoaXMudGltZVNlbGVjdG9yLmlzQWN0aXZlICYmIGlzUHJlc2VudCh0aGlzLmNhbGVuZGFyVmFsdWUpICYmIEtleXMuRW50ZXI6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVBY2NlcHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6IHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlVGFiT3V0KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsga2V5Q29kZSwgc2hpZnRLZXksIHRhcmdldCB9ID0gZXZlbnQ7XG4gICAgICAgIC8vIGlmIG5vIGZvY3VzYWJsZSBuZXh0IHNpYmxpbmcgZWxlbWVudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2xzIHNlY3Rpb25zLCB0aGUgdXNlciBpcyB0YWJiaW5nIG91dCBvZiB0aGUgcG9wdXBcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlU2libGluZ0F2YWlsYWJsZSA9IGlzUHJlc2VudCh0YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nKSAmJiAhdGFyZ2V0Lm5leHRFbGVtZW50U2libGluZy5kaXNhYmxlZDtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuVGFiICYmICFzaGlmdEtleSAmJiAhZm9jdXNhYmxlU2libGluZ0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDYW5jZWwoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQmFja1RhYk91dChldmVudCkge1xuICAgICAgICBjb25zdCB7IGtleUNvZGUsIHNoaWZ0S2V5IH0gPSBldmVudDtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuVGFiICYmIHNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogUHJldmVudHMgdGhlIGRpdmVyc2lvbiBvZiB0aGUgZm9jdXMgZnJvbSB0aGUgY3VycmVudGx5IGFjdGl2ZSBlbGVtZW50IGluIHRoZSBjb21wb25lbnQuXG4gICAgICovXG4gICAgcHJldmVudE1vdXNlRG93bihldmVudCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICB2ZXJpZnlWYWx1ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudCh2YWx1ZSkgJiYgISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndmFsdWUnIHNob3VsZCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZSBpbnN0YW5jZS4gQ2hlY2sgJHtWQUxVRV9ET0NfTElOSyQ0fSBmb3IgcG9zc2libGUgcmVzb2x1dGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2ZXJpZnlNaW5NYXhSYW5nZSgpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNWYWxpZFJhbmdlKHRoaXMubWluLCB0aGlzLm1heCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIG1heCB2YWx1ZSBzaG91bGQgYmUgYmlnZ2VyIHRoYW4gdGhlIG1pbi4gU2VlICR7TUlOX01BWF9ET0NfTElOS30uYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdGhlIHRpbWUgc2xvdHMgYW5kIHRoZSBsaXRlcmFscyB0aGF0IGFyZSBub3QgcHJlY2VkZWQgYnkgZGF0ZSBwYXJ0c1xuICAgICAqIGFuZCBjb25jYXRlbmF0ZXMgdGhlIHJlc3VsdGluZyBwYXJ0cyBpbnRvIGEgc3RyaW5nLlxuICAgICAqIElmIHRoZSBwcm92aWRlZCBmb3JtYXQgdmFsdWUgZG9lcyBub3QgY29udGFpbiBhbnkgdGltZSBwYXJ0cyxcbiAgICAgKiByZXR1cm5zIHRoZSBkZXNpZ25hdGVkIGZvcm1hdCBvZiB0aGUgZGVmYXVsdCBwb3B1cCBjb21wb25lbnQgb2YgdGhlIFRpbWVQaWNrZXIuXG4gICAgICovXG4gICAgZ2V0VGltZVNlbGVjdG9yRm9ybWF0KGZvcm1hdCkge1xuICAgICAgICBjb25zdCB0aW1lU2VsZWN0b3JGb3JtYXQgPSB0aGlzLmludGxcbiAgICAgICAgICAgIC5zcGxpdERhdGVGb3JtYXQoZm9ybWF0KVxuICAgICAgICAgICAgLmZpbHRlcih0aGlzLnRpbWVGb3JtYXRQYXJ0RmlsdGVyKVxuICAgICAgICAgICAgLnJlZHVjZSgoZm9ybWF0LCBwYXJ0KSA9PiBmb3JtYXQgKz0gcGFydC5wYXR0ZXJuLCAnJyk7XG4gICAgICAgIHJldHVybiB0aW1lU2VsZWN0b3JGb3JtYXQgfHwgREVGQVVMVF9USU1FU0VMRUNUT1JfRk9STUFUO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZmlsdGVyIGV4cHJlc3Npb24gdGhhdCBmaWx0ZXJzIG91dCBhbGwgZm9ybWF0IHBhcnRzXG4gICAgICogZXhjZXB0IGZvciBgaG91cmAsIGBtaW51dGVgLCBgc2Vjb25kYCwgYGRheXBlcmlvZGAsIGFuZCBzcGVjaWZpYyBsaXRlcmFscy5cbiAgICAgKiBMaXRlcmFscyB3aWxsIGJlIGxlZnQgb25seSBpZiB0aGV5IGFyZSBub3QgcHJlY2VkZWQgYnkgZGF0ZSBwYXJ0cy5cbiAgICAgKi9cbiAgICB0aW1lRm9ybWF0UGFydEZpbHRlcihwYXJ0LCBpbmRleCwgcGFydHMpIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNQYXJ0ID0gaW5kZXggPj0gMSAmJiBwYXJ0c1tpbmRleCAtIDFdO1xuICAgICAgICBpZiAocHJldmlvdXNQYXJ0ICYmIHBhcnQudHlwZSA9PT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGltZUZvcm1hdFJlZ0V4cC50ZXN0KHByZXZpb3VzUGFydC50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGltZUZvcm1hdFJlZ0V4cC50ZXN0KHBhcnQudHlwZSk7XG4gICAgfVxuICAgIHRvZ2dsZVBvcHVwKG9wZW4pIHtcbiAgICAgICAgaWYgKG9wZW4gPT09IHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgUHJldmVudGFibGVFdmVudCgpO1xuICAgICAgICBvcGVuID8gdGhpcy5vcGVuLmVtaXQoZXZlbnQpIDogdGhpcy5jbG9zZS5lbWl0KGV2ZW50KTtcbiAgICAgICAgaWYgKGV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2dnbGUob3Blbik7XG4gICAgICAgIHRoaXMuc3dpdGNoRm9jdXMoKTtcbiAgICB9XG4gICAgc3dpdGNoRm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWJDb21wb25lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy50b3VjaEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5pbnB1dC5pc0FjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVCbHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3BlblBvcHVwKCkge1xuICAgICAgICB0aGlzLnNldENhbGVuZGFyVmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VGltZVNlbGVjdG9yTWluTWF4KHRoaXMudmFsdWUpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICB0aGlzLnBvcHVwUmVmID0gdGhpcy5wb3B1cFNlcnZpY2Uub3Blbih7XG4gICAgICAgICAgICBhbmNob3I6IHRoaXMud3JhcHBlcixcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRoaXMucG9wdXBUZW1wbGF0ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uTW9kZTogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGFuaW1hdGU6IHRoaXMucG9wdXBTZXR0aW5ncy5hbmltYXRlLFxuICAgICAgICAgICAgYXBwZW5kVG86IHRoaXMuYXBwZW5kVG8sXG4gICAgICAgICAgICBwb3B1cENsYXNzOiBgay1kYXRldGltZS1jb250YWluZXIgJHt0aGlzLnBvcHVwU2V0dGluZ3MucG9wdXBDbGFzcyB8fCAnJ31gLFxuICAgICAgICAgICAgYW5jaG9yQWxpZ246IHsgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgIHBvcHVwQWxpZ246IHsgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGFuZGxlQ2FuY2VsKCkpO1xuICAgIH1cbiAgICBjbG9zZVBvcHVwKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICB9XG4gICAgaGFuZGxlVmFsdWVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKGlzRXF1YWwodGhpcy52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMub25Db250cm9sQ2hhbmdlKGNsb25lRGF0ZSh2YWx1ZSkpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBmb2N1cyB0YXJnZXQgaXMgcGFydCBvZiB0aGlzIGNvbXBvbmVudCxcbiAgICAgKiB0aGF0IGlzLCB3aGV0aGVyIHRoZSBmb2N1cyB0YXJnZXQgaXMgaW5zaWRlIHRoZSBjb21wb25lbnQgd3JhcHBlciBvciBpbiB0aGUgcG9wdXAuXG4gICAgICovXG4gICAgZm9jdXNUYXJnZXRJbkNvbXBvbmVudChldmVudCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gZXZlbnQucmVsYXRlZFRhcmdldCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBmb2N1c0luUG9wdXAgPSBpc1ByZXNlbnQodGhpcy5wb3B1cFJlZikgJiYgdGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG4gICAgICAgIGNvbnN0IGZvY3VzSW5XcmFwcGVyID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMocmVsYXRlZFRhcmdldCk7XG4gICAgICAgIHJldHVybiBmb2N1c0luUG9wdXAgfHwgZm9jdXNJbldyYXBwZXI7XG4gICAgfVxuICAgIHNldFRpbWVTZWxlY3Rvck1pbk1heChzZWxlY3RlZERhdGUpIHtcbiAgICAgICAgY29uc3QgbWluRGF0ZVNlbGVjdGVkID0gaXNQcmVzZW50KHNlbGVjdGVkRGF0ZSkgJiYgaXNFcXVhbChnZXREYXRlKHNlbGVjdGVkRGF0ZSksIGdldERhdGUodGhpcy5taW4pKTtcbiAgICAgICAgdGhpcy50aW1lU2VsZWN0b3JNaW4gPSBjbG9uZURhdGUobWluRGF0ZVNlbGVjdGVkID8gdGhpcy5taW4gOiBNSU5fVElNRSk7XG4gICAgICAgIGNvbnN0IG1heERhdGVTZWxlY3RlZCA9IGlzUHJlc2VudChzZWxlY3RlZERhdGUpICYmIGlzRXF1YWwoZ2V0RGF0ZShzZWxlY3RlZERhdGUpLCBnZXREYXRlKHRoaXMubWF4KSk7XG4gICAgICAgIHRoaXMudGltZVNlbGVjdG9yTWF4ID0gY2xvbmVEYXRlKG1heERhdGVTZWxlY3RlZCA/IHRoaXMubWF4IDogTUFYX1RJTUUpO1xuICAgIH1cbiAgICBzZXRDYWxlbmRhclZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlzSW5DYWxlbmRhclJhbmdlID0gaXNQcmVzZW50KHZhbHVlKSAmJiBpc0luUmFuZ2UodmFsdWUsIHRoaXMuY2FsZW5kYXJNaW4sIHRoaXMuY2FsZW5kYXJNYXgpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyVmFsdWUgPSBpc0luQ2FsZW5kYXJSYW5nZSA/IGdldERhdGUodmFsdWUpIDogbnVsbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHBvcHVwIGlzIGF2YWlsYWJsZSwgcnVucyBhIHBvcHVwIGNoYW5nZSBkZXRlY3Rpb24uXG4gICAgICovXG4gICAgZGV0ZWN0UG9wdXBDaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wb3B1cFJlZi5wb3B1cC5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlcGVuZGluZyBvbiB0aGUgcHJlZGljYXRlIGBydW5JblpvbmVgIHZhbHVlIHRoYXQgaXMgcGFzc2VkLFxuICAgICAqIHJ1bnMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIGVpdGhlciBpbiB0aGUgQW5ndWxhciBvciBpbiB0aGUgY3VycmVudCB6b25lLlxuICAgICAqL1xuICAgIHJ1bihydW5JblpvbmUsIGZuKSB7XG4gICAgICAgIGlmIChydW5JblpvbmUpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiBmbigpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZuKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlRGF0ZUNvbXBsZXRlbmVzc0NoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCkpO1xuICAgIH1cbn1cbkRhdGVUaW1lUGlja2VyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRldGltZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kby1kYXRldGltZXBpY2tlcicsXG4gICAgICAgICAgICAgICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIFBpY2tlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERpc2FibGVkRGF0ZXNTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEwxME5fUFJFRklYLCB1c2VWYWx1ZTogJ2tlbmRvLmRhdGV0aW1lcGlja2VyJyB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlVGltZVBpY2tlckNvbXBvbmVudCksIG11bHRpOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IEtlbmRvSW5wdXQsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ29tcG9uZW50KSB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBrZW5kb0RhdGVUaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNcblxuICAgICAgICAgICAgaTE4bi1kYXRlVGFiPVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIuZGF0ZVRhYnxUaGUgRGF0ZSB0YWIgdGV4dCBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgcG9wdXAgaGVhZGVyXCJcbiAgICAgICAgICAgIGRhdGVUYWI9XCJEYXRlXCJcblxuICAgICAgICAgICAgaTE4bi1kYXRlVGFiTGFiZWw9XCJrZW5kby5kYXRldGltZXBpY2tlci5kYXRlVGFiTGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgRGF0ZSB0YWIgaW4gdGhlIGRhdGV0aW1lcGlja2VyIHBvcHVwIGhlYWRlclwiXG4gICAgICAgICAgICBkYXRlVGFiTGFiZWw9XCJEYXRlIHRhYlwiXG5cbiAgICAgICAgICAgIGkxOG4tdGltZVRhYj1cImtlbmRvLmRhdGV0aW1lcGlja2VyLnRpbWVUYWJ8VGhlIFRpbWUgdGFiIHRleHQgaW4gdGhlIGRhdGV0aW1lcGlja2VyIHBvcHVwIGhlYWRlclwiXG4gICAgICAgICAgICB0aW1lVGFiPVwiVGltZVwiXG5cbiAgICAgICAgICAgIGkxOG4tdGltZVRhYkxhYmVsPVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIudGltZVRhYkxhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIFRpbWUgdGFiIGluIHRoZSBkYXRldGltZXBpY2tlciBwb3B1cCBoZWFkZXJcIlxuICAgICAgICAgICAgdGltZVRhYkxhYmVsPVwiVGltZSB0YWJcIlxuXG4gICAgICAgICAgICBpMThuLXRvZ2dsZT1cImtlbmRvLmRhdGV0aW1lcGlja2VyLnRvZ2dsZXxUaGUgbGFiZWwgZm9yIHRoZSB0b2dnbGUgYnV0dG9uIGluIHRoZSBkYXRldGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgdG9nZ2xlPVwiVG9nZ2xlIHBvcHVwXCJcblxuICAgICAgICAgICAgaTE4bi1hY2NlcHQ9XCJrZW5kby5kYXRldGltZXBpY2tlci5hY2NlcHR8VGhlIEFjY2VwdCBidXR0b24gdGV4dCBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGFjY2VwdD1cIlNldFwiXG5cbiAgICAgICAgICAgIGkxOG4tYWNjZXB0TGFiZWw9XCJrZW5kby5kYXRldGltZXBpY2tlci5hY2NlcHRMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBBY2NlcHQgYnV0dG9uIGluIHRoZSBkYXRldGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgYWNjZXB0TGFiZWw9XCJTZXRcIlxuXG4gICAgICAgICAgICBpMThuLWNhbmNlbD1cImtlbmRvLmRhdGV0aW1lcGlja2VyLmNhbmNlbHxUaGUgQ2FuY2VsIGJ1dHRvbiB0ZXh0IGluIHRoZSBkYXRldGltZXBpY2tlciBjb21wb25lbnRcIlxuICAgICAgICAgICAgY2FuY2VsPVwiQ2FuY2VsXCJcblxuICAgICAgICAgICAgaTE4bi1jYW5jZWxMYWJlbD1cImtlbmRvLmRhdGV0aW1lcGlja2VyLmNhbmNlbExhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIENhbmNlbCBidXR0b24gaW4gdGhlIGRhdGV0aW1lcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBjYW5jZWxMYWJlbD1cIkNhbmNlbFwiXG5cbiAgICAgICAgICAgIGkxOG4tbm93PVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIubm93fFRoZSBOb3cgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVwaWNrZXIgY29tcG9uZW50XCJcbiAgICAgICAgICAgIG5vdz1cIk5PV1wiXG5cbiAgICAgICAgICAgIGkxOG4tbm93TGFiZWw9XCJrZW5kby5kYXRldGltZXBpY2tlci5ub3dMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBOb3cgYnV0dG9uIGluIHRoZSB0aW1lcGlja2VyIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBub3dMYWJlbD1cIlNlbGVjdCBub3dcIlxuXG4gICAgICAgICAgICBpMThuLXRvZGF5PVwia2VuZG8uZGF0ZXRpbWVwaWNrZXIudG9kYXl8VGhlIGxhYmVsIGZvciB0aGUgdG9kYXkgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXJcIlxuICAgICAgICAgICAgdG9kYXk9XCJUT0RBWVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICN3cmFwcGVyXG4gICAgICAgICAgICBjbGFzcz1cImstcGlja2VyLXdyYXBcIlxuICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8a2VuZG8tZGF0ZWlucHV0XG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbaW5jb21wbGV0ZURhdGVWYWxpZGF0aW9uXT1cImluY29tcGxldGVEYXRlVmFsaWRhdGlvblwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5IHx8IHJlYWRPbmx5SW5wdXRcIlxuICAgICAgICAgICAgICAgIFtyb2xlXT1cImlucHV0Um9sZVwiXG4gICAgICAgICAgICAgICAgW2FyaWFSZWFkT25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgW3N0ZXBzXT1cInN0ZXBzXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW2ZvY3VzYWJsZUlkXT1cImZvY3VzYWJsZUlkXCJcbiAgICAgICAgICAgICAgICBbaGFzUG9wdXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2lzUG9wdXBPcGVuXT1cImlzT3BlblwiXG4gICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImhhbmRsZUlucHV0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlEb3duXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rZW5kby1kYXRlaW5wdXQ+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstc2VsZWN0XCJcbiAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCd0b2dnbGUnKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCd0b2dnbGUnKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IHByZXZlbnRNb3VzZURvd24sXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVJY29uQ2xpY2tcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWxpbmsgay1saW5rLWRhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWktY2FsZW5kYXJdPVwiYWN0aXZlVGFiID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstaS1jbG9ja109XCJhY3RpdmVUYWIgPT09ICd0aW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgI2NvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3BvcHVwVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWRhdGV0aW1lLXdyYXAgay17e2FjdGl2ZVRhYn19LXRhYlwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBtb3VzZWRvd246IHByZXZlbnRNb3VzZURvd24sXG4gICAgICAgICAgICAgICAgICAgIGtleWRvd246IGhhbmRsZUtleURvd25cbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZGF0ZXRpbWUtYnV0dG9uZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c2luOiBoYW5kbGVGb2N1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3Vzb3V0OiBoYW5kbGVCbHVyXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1idXR0b24tZ3JvdXAgay1idXR0b24tZ3JvdXAtc3RyZXRjaGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLWRhdGUtdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1hY3RpdmVdPVwiYWN0aXZlVGFiID09PSAnZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2RhdGVUYWJMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2RhdGVUYWJMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBjaGFuZ2VBY3RpdmVUYWIuYmluZCh0aGlzLCAnZGF0ZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVCYWNrVGFiT3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG9jYWxpemF0aW9uLmdldCgnZGF0ZVRhYicpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay10aW1lLXRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gJ3RpbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCd0aW1lVGFiTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsb2NhbGl6YXRpb24uZ2V0KCd0aW1lVGFiTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogY2hhbmdlQWN0aXZlVGFiLmJpbmQodGhpcywgJ3RpbWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bG9jYWxpemF0aW9uLmdldCgndGltZVRhYicpfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNkYXRlVGltZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1kYXRldGltZS1zZWxlY3RvclwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS50cmFuc2l0aW9uXT1cInRhYlN3aXRjaFRyYW5zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uZW5kOiBoYW5kbGVUYWJDaGFuZ2VUcmFuc2l0aW9uRW5kLmJpbmQodGhpcywgZGF0ZVRpbWVTZWxlY3RvcilcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1kYXRldGltZS1jYWxlbmRhci13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2VuZG8tY2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJjYWxlbmRhclZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cImNhbGVuZGFyTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cImNhbGVuZGFyTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9jdXNlZERhdGVdPVwiZm9jdXNlZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyXT1cIndlZWtOdW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuYXZpZ2F0aW9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2VsbFRlbXBsYXRlXT1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vbnRoQ2VsbFRlbXBsYXRlXT1cIm1vbnRoQ2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeWVhckNlbGxUZW1wbGF0ZV09XCJ5ZWFyQ2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVjYWRlQ2VsbFRlbXBsYXRlXT1cImRlY2FkZUNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NlbnR1cnlDZWxsVGVtcGxhdGVdPVwiY2VudHVyeUNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJUZW1wbGF0ZV09XCJ3ZWVrTnVtYmVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJUaXRsZVRlbXBsYXRlXT1cImhlYWRlclRpdGxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQ2FsZW5kYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVDYWxlbmRhclZhbHVlQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxrZW5kby1jYWxlbmRhci1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9kYXldPVwibG9jYWxpemF0aW9uLmdldCgndG9kYXknKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwva2VuZG8tY2FsZW5kYXItbWVzc2FnZXM+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZGF0ZXRpbWUtdGltZS13cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdGltZXNlbGVjdG9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybWF0XT1cInRpbWVTZWxlY3RvckZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21pbl09XCJ0aW1lU2VsZWN0b3JNaW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhdPVwidGltZVNlbGVjdG9yTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0QnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2FuY2VsQnV0dG9uXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RlcHNdPVwic3RlcHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVGltZVNlbGVjdG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdGltZXNlbGVjdG9yLW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub3ddPVwibG9jYWxpemF0aW9uLmdldCgnbm93JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbm93TGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnbm93TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwva2VuZG8tdGltZXNlbGVjdG9yLW1lc3NhZ2VzPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9rZW5kby10aW1lc2VsZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWRhdGV0aW1lLWZvb3RlciBrLWFjdGlvbi1idXR0b25zXCJcbiAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ZG93bjogaGFuZGxlVGFiT3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNpbjogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb2N1c291dDogaGFuZGxlQmx1clxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstYnV0dG9uIGstdGltZS1jYW5jZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgnY2FuY2VsTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbExhYmVsJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVDYW5jZWxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbCcpfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLXRpbWUtYWNjZXB0IGstYnV0dG9uIGstcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdhY2NlcHRMYWJlbCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnYWNjZXB0TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhbGVuZGFyVmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVBY2NlcHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdCcpfX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVUaW1lUGlja2VyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBpY2tlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbVE9VQ0hfRU5BQkxFRCxdIH1dIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEaXNhYmxlZERhdGVzU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH1cbl07XG5EYXRlVGltZVBpY2tlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRhdGV0aW1lcGlja2VyJyxdIH1dLFxuICAgIHdyYXBwZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWyd3cmFwcGVyJyxdIH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYmluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZERhdGVzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3B1cFNldHRpbmdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2FibGVJZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZWFkb25seTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVhZE9ubHlJbnB1dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2FuY2VsQnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXRQbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2Vla051bWJlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJhbmdlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWREYXRlc1ZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluY29tcGxldGVEYXRlVmFsaWRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvcGVuOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBvbkZvY3VzOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnZm9jdXMnLF0gfV0sXG4gICAgb25CbHVyOiBbeyB0eXBlOiBPdXRwdXQsIGFyZ3M6IFsnYmx1cicsXSB9XSxcbiAgICBkZWZhdWx0VGFiOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIHllYXJDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1llYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGNlbnR1cnlDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1dlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgY29udGFpbmVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0sXSB9XSxcbiAgICBwb3B1cFRlbXBsYXRlOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsncG9wdXBUZW1wbGF0ZScsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSxdIH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpjb21wb25lbnQtc2VsZWN0b3ItbmFtZSAgY29tcG9uZW50LXNlbGVjdG9yLXR5cGUgKi9cbmNvbnN0IERFRkFVTFRfVklFV1NfTEVOR1RIID0gMjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBIb3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGJ1cywgY2RyKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bS5tb250aDtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMubWluID0gbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgICAgICB0aGlzLm1heCA9IG5ldyBEYXRlKE1BWF9EQVRFKTtcbiAgICAgICAgdGhpcy52aWV3cyA9IERFRkFVTFRfVklFV1NfTEVOR1RIO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNlbGxFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZGF0ZXMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IHdlZWtOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dXZWVrTnVtYmVycyAmJiB0aGlzLmlzTW9udGhWaWV3KCk7XG4gICAgfVxuICAgIHNldCB3ZWVrTnVtYmVyKHNob3dXZWVrTnVtYmVycykge1xuICAgICAgICB0aGlzLnNob3dXZWVrTnVtYmVycyA9IHNob3dXZWVrTnVtYmVycztcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudE1vbnRoQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ubW9udGg7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRZZWFyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVZpZXcgPT09IENhbGVuZGFyVmlld0VudW0ueWVhcjtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudERlY2FkZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLmRlY2FkZTtcbiAgICB9XG4gICAgZ2V0IGdldENvbXBvbmVudENlbnR1cnlDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5jZW50dXJ5O1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuaW5pdFNlcnZpY2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZpZXdzID0gdGhpcy52aWV3cyB8fCBERUZBVUxUX1ZJRVdTX0xFTkdUSDtcbiAgICAgICAgY29uc3QgZm9jdXNlZERhdGUgPSB0aGlzLmZvY3VzZWREYXRlO1xuICAgICAgICBjb25zdCB2aWV3RGF0ZSA9IHRoaXMuY2xhbXBEYXRlKHRoaXMuc2VydmljZS52aWV3RGF0ZShmb2N1c2VkRGF0ZSwgdGhpcy5tYXgsIHRoaXMudmlld3MpKTtcbiAgICAgICAgdGhpcy5za2lwID0gdGhpcy5zZXJ2aWNlLnNraXAodmlld0RhdGUsIHRoaXMubWluKTtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRoaXMuc2VydmljZS50b3RhbCh0aGlzLm1pbiwgdGhpcy5tYXgpO1xuICAgICAgICBjb25zdCBhY3RpdmVWaWV3Q2hhbmdlZCA9IGhhc0NoYW5nZShjaGFuZ2VzLCAnYWN0aXZlVmlldycpO1xuICAgICAgICBjb25zdCB2aWV3c0hhc0NoYW5nZWQgPSB0aGlzLnZpZXdzID4gMCAmJiBoYXNDaGFuZ2UoY2hhbmdlcywgJ3ZpZXdzJyk7XG4gICAgICAgIGlmIChhY3RpdmVWaWV3Q2hhbmdlZCB8fCAhdGhpcy5pc0luRGF0ZXMoZm9jdXNlZERhdGUpIHx8IHZpZXdzSGFzQ2hhbmdlZCB8fCAhdGhpcy5hY3RpdmVEYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVzID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh2aWV3RGF0ZSwgdGhpcy5nZXRUYWtlKHRoaXMuc2tpcCkpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gY2xvbmVEYXRlKHRoaXMuZGF0ZXNbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRTZXJ2aWNlKCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuICAgIGhhbmRsZURhdGVDaGFuZ2UoY2FuZGlkYXRlKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjYW5kaWRhdGUpO1xuICAgIH1cbiAgICBpc01vbnRoVmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5tb250aDtcbiAgICB9XG4gICAgbmF2aWdhdGUoYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IHRoaXMubW92ZShhY3Rpb24pO1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy5zZXJ2aWNlLmRhdGVzTGlzdChjYW5kaWRhdGUsIHRoaXMuZ2V0VGFrZSh0aGlzLnNraXApKTtcbiAgICAgICAgaWYgKHRoaXMuaXNMaXN0SW5SYW5nZShsaXN0KSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlcyA9IGxpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gY2xvbmVEYXRlKHRoaXMuZGF0ZXNbMF0pO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gY2xvbmVEYXRlKGNhbmRpZGF0ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICByZXR1cm4gY2xvbmVEYXRlKGNhbmRpZGF0ZSk7XG4gICAgfVxuICAgIGNhbk5hdmlnYXRlKGFjdGlvbikge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdEluUmFuZ2UodGhpcy5zZXJ2aWNlLmRhdGVzTGlzdCh0aGlzLm1vdmUoYWN0aW9uKSwgdGhpcy5nZXRUYWtlKHRoaXMuc2tpcCkpKTtcbiAgICB9XG4gICAgY2xhbXBEYXRlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkYXRlSW5SYW5nZSh2YWx1ZSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICB9XG4gICAgbW92ZShhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5tb3ZlKHRoaXMuZGF0ZXNbMF0gfHwgdGhpcy5mb2N1c2VkRGF0ZSwgYWN0aW9uKTtcbiAgICB9XG4gICAgaXNMaXN0SW5SYW5nZShsaXN0KSB7XG4gICAgICAgIGNvbnN0IGxvd2VyQm91bmQgPSB0aGlzLnNlcnZpY2UuYmVnaW5uaW5nT2ZQZXJpb2QodGhpcy5taW4pO1xuICAgICAgICBjb25zdCB1cHBlckJvdW5kID0gdGhpcy5zZXJ2aWNlLmJlZ2lubmluZ09mUGVyaW9kKHRoaXMuc2VydmljZS5hZGRUb0RhdGUodGhpcy5tYXgsIDEpKTtcbiAgICAgICAgcmV0dXJuIGxvd2VyQm91bmQgPD0gbGlzdFswXSAmJiBsaXN0W2xpc3QubGVuZ3RoIC0gMV0gPCB1cHBlckJvdW5kO1xuICAgIH1cbiAgICBpc0luRGF0ZXModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5pc0luQXJyYXkodmFsdWUsIHRoaXMuZGF0ZXMpO1xuICAgIH1cbiAgICBnZXRUYWtlKHNraXApIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMudG90YWwgLSBza2lwLCB0aGlzLnZpZXdzKTtcbiAgICB9XG59XG5Ib3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNhbGVuZGFyLWhvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPGtlbmRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgW2N1cnJlbnREYXRlXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgW3JhbmdlTGVuZ3RoXT1cInZpZXdzXCJcbiAgICAgICAgW3RlbXBsYXRlUmVmXT1cImhlYWRlclRpdGxlVGVtcGxhdGVSZWZcIlxuICAgICAgICAodG9kYXkpPVwiaGFuZGxlRGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgPC9rZW5kby1jYWxlbmRhci1oZWFkZXI+XG4gICAgPHRhYmxlIGNsYXNzPVwiay1jb250ZW50XCI+XG4gICAgICAgIDx0Ym9keSAqa0Zvcj1cImxldCBkYXRlIG9mIGRhdGVzXCJcbiAgICAgICAgICAgICAgIGtlbmRvQ2FsZW5kYXJWaWV3XG4gICAgICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxuICAgICAgICAgICAgICAgZGlyZWN0aW9uPVwiaG9yaXpvbnRhbFwiXG4gICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgIFtpc0FjdGl2ZV09XCJpc0FjdGl2ZVwiXG4gICAgICAgICAgICAgICBbbWluXT1cIm1pblwiIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgIFtjZWxsVUlEXT1cImNlbGxVSURcIlxuICAgICAgICAgICAgICAgW2ZvY3VzZWREYXRlXT1cImZvY3VzZWREYXRlXCJcbiAgICAgICAgICAgICAgIFtzZWxlY3RlZERhdGVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgW3NlbGVjdGlvblJhbmdlXT1cInNlbGVjdGlvblJhbmdlXCJcbiAgICAgICAgICAgICAgIFthY3RpdmVSYW5nZUVuZF09XCJhY3RpdmVSYW5nZUVuZFwiXG4gICAgICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJjZWxsVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgW3dlZWtOdW1iZXJUZW1wbGF0ZVJlZl09XCJ3ZWVrTnVtYmVyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgW3ZpZXdEYXRlXT1cImRhdGVcIlxuICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgKGNlbGxFbnRlcik9XCJjZWxsRW50ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgIChjZWxsTGVhdmUpPVwiY2VsbExlYXZlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgID48L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5Ib3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhlYWRlclRpdGxlVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVJhbmdlRW5kOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjZWxsVUlEOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb2N1c2VkRGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNBY3RpdmU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3Rpb25SYW5nZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpZXdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxFbnRlcjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxMZWF2ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdldENvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci12aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnRNb250aENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1tb250aHZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudFllYXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstY2FsZW5kYXIteWVhcnZpZXdcIixdIH1dLFxuICAgIGdldENvbXBvbmVudERlY2FkZUNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1kZWNhZGV2aWV3XCIsXSB9XSxcbiAgICBnZXRDb21wb25lbnRDZW50dXJ5Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWNhbGVuZGFyLWNlbnR1cnl2aWV3XCIsXSB9XVxufTtcblxuY29uc3Qgbm9vcCQyID0gKCkgPT4gbnVsbDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBkaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0b3IgPSAoaXNEYXRlRGlzYWJsZWQpID0+IHtcbiAgICBpZiAoIWlzUHJlc2VudChpc0RhdGVEaXNhYmxlZCkpIHtcbiAgICAgICAgcmV0dXJuIG5vb3AkMjtcbiAgICB9XG4gICAgcmV0dXJuIChzZWxlY3RlZFJhbmdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmFuZ2VDb21wbGV0ZSA9IGlzUHJlc2VudChzZWxlY3RlZFJhbmdlKSAmJiBpc1ByZXNlbnQoc2VsZWN0ZWRSYW5nZS5zdGFydCkgJiYgaXNQcmVzZW50KHNlbGVjdGVkUmFuZ2UuZW5kKTtcbiAgICAgICAgaWYgKCFpc1JhbmdlQ29tcGxldGUgfHwgc2VsZWN0ZWRSYW5nZS5zdGFydCA+IHNlbGVjdGVkUmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkaXNhYmxlZERhdGVzID0gZGlzYWJsZWREYXRlc0luUmFuZ2Uoc2VsZWN0ZWRSYW5nZS5zdGFydCwgc2VsZWN0ZWRSYW5nZS5lbmQsIGlzRGF0ZURpc2FibGVkKTtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7XG4gICAgICAgICAgICBkaXNhYmxlZERhdGVzSW5SYW5nZTogZGlzYWJsZWREYXRlc1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZGlzYWJsZWREYXRlcy5sZW5ndGggPyBlcnJvciA6IG51bGw7XG4gICAgfTtcbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm5vLWZvcndhcmQtcmVmICovXG5jb25zdCBCT1RUT01fVklFV19ET0NfTElOSyQxID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0NhbGVuZGFyQ29tcG9uZW50LyN0b2MtYm90dG9tdmlldyc7XG5jb25zdCBUT1BfVklFV19ET0NfTElOSyQxID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvYXBpL0NhbGVuZGFyQ29tcG9uZW50LyN0b2MtdG9wdmlldyc7XG5jb25zdCBNSU5fRE9DX0xJTkskMyA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLW1pbic7XG5jb25zdCBNQVhfRE9DX0xJTkskMyA9ICdodHRwOi8vd3d3LnRlbGVyaWsuY29tL2tlbmRvLWFuZ3VsYXItdWkvY29tcG9uZW50cy9kYXRlaW5wdXRzL2FwaS9DYWxlbmRhckNvbXBvbmVudC8jdG9jLW1heCc7XG5jb25zdCBWQUxVRV9ET0NfTElOSyQ1ID0gJ2h0dHA6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9jb21wb25lbnRzL2RhdGVpbnB1dHMvY2FsZW5kYXIvI3RvYy11c2luZy13aXRoLWpzb24nO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFJBTkdFX0NBTEVOREFSX1ZBTFVFX0FDQ0VTU09SID0ge1xuICAgIG11bHRpOiB0cnVlLFxuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50KSAvL3RzbGludDpkaXNhYmxlLWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFJBTkdFX0NBTEVOREFSX1JBTkdFX1ZBTElEQVRPUlMgPSB7XG4gICAgbXVsdGk6IHRydWUsXG4gICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCkgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxufTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgTXVsdGlWaWV3Q2FsZW5kYXIgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogX0BDb21wb25lbnQoe1xuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8a2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXI+PC9rZW5kby1tdWx0aXZpZXdjYWxlbmRhcj5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHsgfVxuICogYGBgXG4gKi9cbmNsYXNzIE11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihidXMsIGVsZW1lbnQsIGxvY2FsaXphdGlvbiwgbmF2aWdhdG9yLCByZW5kZXJlciwgY2RyLCB6b25lLCBkaXNhYmxlZERhdGVzU2VydmljZSkge1xuICAgICAgICB0aGlzLmJ1cyA9IGJ1cztcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMubmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlID0gZGlzYWJsZWREYXRlc1NlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gZ3VpZCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiBtaW4gb3IgbWF4IHZhbGlkYXRvcnMgYXJlIGVuZm9yY2VkIHdoZW4gdmFsaWRhdGluZyBhIGZvcm0uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJhbmdlVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBidWlsdC1pbiB2YWxpZGF0b3IgZm9yIGRpc2FibGVkXG4gICAgICAgICAqIGRhdGUgcmFuZ2VzIGlzIGVuZm9yY2VkIHdoZW4gdmFsaWRhdGluZyBhIGZvcm1cbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRlc19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtdmFsaWRhdGlvbikpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBkaXNhYmxlZGAgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZFxuICAgICAgICAgKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9tdWx0aXZpZXdjYWxlbmRhciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyBvciBnZXRzIHRoZSBgdGFiaW5kZXhgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhci4gQmFzZWQgb24gdGhlXG4gICAgICAgICAqIFtIVE1MIGB0YWJpbmRleGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvR2xvYmFsX2F0dHJpYnV0ZXMvdGFiaW5kZXgpIGJlaGF2aW9yLFxuICAgICAgICAgKiBpdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBmb2N1c2FibGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRhYmluZGV4ID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGFjdGl2ZSB2aWV3IHRoYXQgdGhlIENhbGVuZGFyIGluaXRpYWxseSByZW5kZXJzXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYWN0aXZldmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSkpLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYWN0aXZlIHZpZXcgaXMgYG1vbnRoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBZb3UgaGF2ZSB0byBzZXQgYGFjdGl2ZVZpZXdgIHdpdGhpbiB0aGUgYHRvcFZpZXdgLWBib3R0b21WaWV3YCByYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IENhbGVuZGFyVmlld0VudW1bQ2FsZW5kYXJWaWV3RW51bS5tb250aF07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBib3R0b21tb3N0IHZpZXcsIHRvIHdoaWNoIHRoZSB1c2VyIGNhbiBuYXZpZ2F0ZVxuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1wYXJ0aWFsLWRhdGVzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvdHRvbVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0ubW9udGhdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgdG9wbW9zdCB2aWV3LCB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRvcFZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW0NhbGVuZGFyVmlld0VudW0uY2VudHVyeV07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIHdlZWsgbnVtYmVyIGNvbHVtbiBpbiB0aGUgYG1vbnRoYCB2aWV3XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgd2Vla251bWNvbHVtbl9tdWx0aXZpZXdjYWxlbmRhciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGB2aWV3c2AgcHJvcGVydHkgb2YgdGhlIENhbGVuZGFyIGFuZFxuICAgICAgICAgKiBkZWZpbmVzIHRoZSBudW1iZXIgb2YgcmVuZGVyZWQgbW9udGhzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52aWV3cyA9IDI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgdmlldyBpcyBjaGFuZ2VkXG4gICAgICAgICAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtZXZlbnRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGl2ZVZpZXdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIGEgdmlldyBjZWxsIGlzIGVudGVyZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2VsbEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiBhIHZpZXcgY2VsbCBpcyBsZWF2ZWRcbiAgICAgICAgICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIG92ZXJ2aWV3X211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1ldmVudHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2VsbExlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZFxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgb3ZlcnZpZXdfbXVsdGl2aWV3Y2FsZW5kYXIgJX0jdG9jLWV2ZW50cykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsVUlEID0gZ3VpZCgpO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNQcmV2RGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmlzTmV4dERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmV2VmlldyA9IEFjdGlvbi5QcmV2VmlldztcbiAgICAgICAgdGhpcy5uZXh0VmlldyA9IEFjdGlvbi5OZXh0VmlldztcbiAgICAgICAgdGhpcy5fbWluID0gbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgICAgICB0aGlzLl9tYXggPSBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgICAgIHRoaXMuX2ZvY3VzZWREYXRlID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBub29wO1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQgPSBub29wO1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gbm9vcDtcbiAgICAgICAgdGhpcy5taW5WYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0ZUZuID0gbm9vcDtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLnNldENsYXNzZXMoZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyBvciBnZXRzIHRoZSBgZm9jdXNlZERhdGVgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgKiBkZWZpbmVzIHRoZSBmb2N1c2VkIGRhdGUgb2YgdGhlIGNvbXBvbmVudFxuICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0ZXNfbXVsdGl2aWV3Y2FsZW5kYXIgJX0jdG9jLWZvY3VzZWQtZGF0ZXMpKS5cbiAgICAgKlxuICAgICAqID4gSWYgdGhlIENhbGVuZGFyIGlzIG91dCBvZiB0aGUgbWluIG9yIG1heCByYW5nZSwgaXQgbm9ybWFsaXplcyB0aGUgZGVmaW5lZCBgZm9jdXNlZERhdGVgLlxuICAgICAqL1xuICAgIHNldCBmb2N1c2VkRGF0ZShmb2N1c2VkRGF0ZSkge1xuICAgICAgICB0aGlzLl9mb2N1c2VkRGF0ZSA9IGZvY3VzZWREYXRlIHx8IGdldFRvZGF5KCk7XG4gICAgfVxuICAgIGdldCBmb2N1c2VkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZvY3VzZWREYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBtaW5gIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgKiBkZWZpbmVzIHRoZSBtaW5pbXVtIGFsbG93ZWQgZGF0ZSB2YWx1ZS5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYG1pbmAgdmFsdWUgaXMgYDE5MDAtMS0xYC5cbiAgICAgKi9cbiAgICBzZXQgbWluKG1pbikge1xuICAgICAgICB0aGlzLl9taW4gPSBtaW4gfHwgbmV3IERhdGUoTUlOX0RBVEUpO1xuICAgIH1cbiAgICBnZXQgbWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWluO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIG9yIGdldHMgdGhlIGBtYXhgIHByb3BlcnR5IG9mIHRoZSBDYWxlbmRhciBhbmRcbiAgICAgKiBkZWZpbmVzIHRoZSBtYXhpbXVtIGFsbG93ZWQgZGF0ZSB2YWx1ZS5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYG1heGAgdmFsdWUgaXMgYDIwOTktMTItMzFgLlxuICAgICAqL1xuICAgIHNldCBtYXgobWF4KSB7XG4gICAgICAgIHRoaXMuX21heCA9IG1heCB8fCBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgfVxuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHZhbHVlYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kIGRlZmluZXMgdGhlIHNlbGVjdGVkIHZhbHVlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICpcbiAgICAgKiA+IFRoZSBgdmFsdWVgIGhhcyB0byBiZSBhIHZhbGlkXG4gICAgICogW0phdmFTY3JpcHQgYERhdGVgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlKSBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgICB9XG4gICAgc2V0IHZhbHVlKGNhbmRpZGF0ZSkge1xuICAgICAgICB0aGlzLnZlcmlmeVZhbHVlKGNhbmRpZGF0ZSk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gY2xvbmVEYXRlKGNhbmRpZGF0ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgdGFiSW5kZXgodGFiSW5kZXgpIHtcbiAgICAgICAgdGhpcy50YWJpbmRleCA9IHRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkYXRlcyBvZiB0aGUgTXVsdGlWaWV3Q2FsZW5kYXIgdGhhdCB3aWxsIGJlIGRpc2FibGVkXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBkaXNhYmxlZF9kYXRlc19tdWx0aXZpZXdjYWxlbmRhciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaW5pdGlhbGl6ZSh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYHNlbGVjdGlvblJhbmdlYCBwcm9wZXJ0eSBvZiB0aGUgQ2FsZW5kYXIgYW5kXG4gICAgICogZGVmaW5lcyB0aGUgc2VsZWN0aW9uIHJhbmdlIG9mIHRoZSBjb21wb25lbnRcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGRhdGVzX211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1zZWxlY3Rpb24tcmFuZ2UpKS5cbiAgICAgKi9cbiAgICBzZXQgc2VsZWN0aW9uUmFuZ2UocmFuZ2UkJDEpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uUmFuZ2UgPSByYW5nZSQkMTtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5vblZhbGlkYXRvckNoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzZWxlY3Rpb25SYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblJhbmdlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IG1vbnRoQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMubW9udGhDZWxsVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldCB5ZWFyQ2VsbFRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMueWVhckNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGRlY2FkZUNlbGxUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmRlY2FkZUNlbGxUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0IGNlbnR1cnlDZWxsVGVtcGxhdGVSZWYodGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5jZW50dXJ5Q2VsbFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgd2Vla051bWJlclRlbXBsYXRlUmVmKHRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMud2Vla051bWJlclRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZih0ZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICB9XG4gICAgZ2V0IGFjdGl2ZVZpZXdFbnVtKCkge1xuICAgICAgICBjb25zdCBhY3RpdmVWaWV3ID0gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLmFjdGl2ZVZpZXddO1xuICAgICAgICByZXR1cm4gYWN0aXZlVmlldyA8IHRoaXMuYm90dG9tVmlld0VudW0gPyB0aGlzLmJvdHRvbVZpZXdFbnVtIDogYWN0aXZlVmlldztcbiAgICB9XG4gICAgZ2V0IGJvdHRvbVZpZXdFbnVtKCkge1xuICAgICAgICByZXR1cm4gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLmJvdHRvbVZpZXddO1xuICAgIH1cbiAgICBnZXQgdG9wVmlld0VudW0oKSB7XG4gICAgICAgIHJldHVybiBDYWxlbmRhclZpZXdFbnVtW3RoaXMudG9wVmlld107XG4gICAgfVxuICAgIGdldCB3aWRnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuICAgIGdldCB3aWRnZXRSb2xlKCkge1xuICAgICAgICByZXR1cm4gJ2dyaWQnO1xuICAgIH1cbiAgICBnZXQgY2FsZW5kYXJUYWJJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyB1bmRlZmluZWQgOiB0aGlzLnRhYkluZGV4O1xuICAgIH1cbiAgICBnZXQgYXJpYURpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IGFyaWFBY3RpdmVkZXNjZW5kYW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jZWxsVUlEICsgdGhpcy5mb2N1c2VkRGF0ZS5nZXRUaW1lKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVCbHVyKCkge1xuICAgICAgICB0aGlzLm9uQ29udHJvbFRvdWNoZWQoKTtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlOyAvL2Vuc3VyZSB0aGF0IGhvdmVyZWQgaXMgYWxzbyBub3QgYWN0aXZlXG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVGb2N1cygpIHtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVNb3VzZUVudGVyKCkge1xuICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVNb3VzZUxlYXZlKCkge1xuICAgICAgICB0aGlzLmlzSG92ZXJlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlTW91c2Vkb3duKGV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVDbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBrZXlkb3duKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGRhdGVJblJhbmdlKHRoaXMubmF2aWdhdG9yLm1vdmUodGhpcy5mb2N1c2VkRGF0ZSwgdGhpcy5uYXZpZ2F0b3IuYWN0aW9uKGV2ZW50KSwgdGhpcy5hY3RpdmVWaWV3RW51bSksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMuZm9jdXNlZERhdGUsIGNhbmRpZGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gY2FuZGlkYXRlO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZW50ZXIoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZSh0aGlzLmZvY3VzZWREYXRlKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0TWVzc2FnZXMoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldE1lc3NhZ2VzKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmJ1cy52aWV3Q2hhbmdlZC5zdWJzY3JpYmUoKHsgdmlldyB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXcgPSBDYWxlbmRhclZpZXdFbnVtW3ZpZXddO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3Q2hhbmdlLmVtaXQodGhpcy5hY3RpdmVWaWV3KTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQnV0dG9uU3RhdGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMudmVyaWZ5Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLmJ1cy5jb25maWd1cmUodGhpcy5ib3R0b21WaWV3RW51bSwgdGhpcy50b3BWaWV3RW51bSk7XG4gICAgICAgIGNvbnN0IHVzZVZhbHVlID0gaGFzRXhpc3RpbmdWYWx1ZShjaGFuZ2VzLCAndmFsdWUnKSAmJiAhaGFzRXhpc3RpbmdWYWx1ZShjaGFuZ2VzLCAnZm9jdXNlZERhdGUnKTtcbiAgICAgICAgY29uc3QgZm9jdXNlZERhdGUgPSBkYXRlSW5SYW5nZShjbG9uZURhdGUodXNlVmFsdWUgPyB0aGlzLnZhbHVlIDogdGhpcy5mb2N1c2VkRGF0ZSksIHRoaXMubWluLCB0aGlzLm1heCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUgPSAhaXNFcXVhbCh0aGlzLmZvY3VzZWREYXRlLCBmb2N1c2VkRGF0ZSkgPyBmb2N1c2VkRGF0ZSA6IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCB8fCBjaGFuZ2VzLnJhbmdlVmFsaWRhdGlvbiB8fCBjaGFuZ2VzLmRpc2FibGVkRGF0ZXMgfHwgY2hhbmdlcy5kaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm1pblZhbGlkYXRlRm4gPSB0aGlzLnJhbmdlVmFsaWRhdGlvbiA/IG1pblZhbGlkYXRvcih0aGlzLm1pbikgOiBub29wO1xuICAgICAgICAgICAgdGhpcy5tYXhWYWxpZGF0ZUZuID0gdGhpcy5yYW5nZVZhbGlkYXRpb24gPyBtYXhWYWxpZGF0b3IodGhpcy5tYXgpIDogbm9vcDtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGVGbiA9IHRoaXMuZGlzYWJsZWREYXRlc1JhbmdlVmFsaWRhdGlvbiA/IGRpc2FibGVkRGF0ZXNSYW5nZVZhbGlkYXRvcih0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmlzRGF0ZURpc2FibGVkKSA6IG5vb3A7XG4gICAgICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMubWluIHx8IGNoYW5nZXMubWF4IHx8IGNoYW5nZXMuZm9jdXNlZERhdGUgfHwgY2hhbmdlcy5hY3RpdmVWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm1lc3NhZ2VzVGltZW91dCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQnV0dG9uU3RhdGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgaG9zdCBlbGVtZW50IG9mIHRoZSBDYWxlbmRhci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cIm11bHRpdmlld2NhbGVuZGFyLmZvY3VzKClcIj5Gb2N1cyBjYWxlbmRhcjwvYnV0dG9uPlxuICAgICAqICA8a2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXIgI211bHRpdmlld2NhbGVuZGFyPjwva2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXI+XG4gICAgICogYFxuICAgICAqIH0pXG4gICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7IH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgQ2FsZW5kYXIgY29tcG9uZW50LlxuICAgICAqL1xuICAgIGJsdXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlRGF0ZUNoYW5nZShjYW5kaWRhdGUpIHtcbiAgICAgICAgY29uc3QgY2FuTmF2aWdhdGVEb3duID0gdGhpcy5idXMuY2FuTW92ZURvd24odGhpcy5hY3RpdmVWaWV3RW51bSk7XG4gICAgICAgIGNvbnN0IGlzU2FtZURhdGUgPSAhY2FuTmF2aWdhdGVEb3duICYmIGlzRXF1YWwoY2FuZGlkYXRlLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpIHx8IHRoaXMuZm9jdXNlZERhdGU7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IGlzU2FtZURhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FuTmF2aWdhdGVEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmJ1cy5tb3ZlRG93bih0aGlzLmFjdGl2ZVZpZXdFbnVtKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UuaXNEYXRlRGlzYWJsZWQoY2FuZGlkYXRlKSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UoY2xvbmVEYXRlKGNhbmRpZGF0ZSkpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGNsb25lRGF0ZShjYW5kaWRhdGUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgd3JpdGVWYWx1ZShjYW5kaWRhdGUpIHtcbiAgICAgICAgdGhpcy52ZXJpZnlWYWx1ZShjYW5kaWRhdGUpO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gZGF0ZUluUmFuZ2UoY2xvbmVEYXRlKGNhbmRpZGF0ZSkgfHwgdGhpcy5mb2N1c2VkRGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm4pIHtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xDaGFuZ2UgPSBmbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Db250cm9sVG91Y2hlZCA9IGZuO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHZhbGlkYXRlKGNvbnRyb2wpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluVmFsaWRhdGVGbihjb250cm9sKSB8fCB0aGlzLm1heFZhbGlkYXRlRm4oY29udHJvbCkgfHwgdGhpcy5kaXNhYmxlZERhdGVzUmFuZ2VWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0aW9uUmFuZ2UpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbikge1xuICAgICAgICB0aGlzLm9uVmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhY3RpdmVDZWxsVGVtcGxhdGUoKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hY3RpdmVWaWV3RW51bSkge1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1vbnRoQ2VsbFRlbXBsYXRlIHx8IHRoaXMuY2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLnllYXI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMueWVhckNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3RW51bS5kZWNhZGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjYWRlQ2VsbFRlbXBsYXRlO1xuICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXdFbnVtLmNlbnR1cnk6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2VudHVyeUNlbGxUZW1wbGF0ZTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5hdmlnYXRlKGFjdGlvbikge1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlID0gdGhpcy52aWV3TGlzdC5uYXZpZ2F0ZShhY3Rpb24pO1xuICAgICAgICB0aGlzLnVwZGF0ZUJ1dHRvblN0YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBlbWl0Q2VsbEV2ZW50KGVtaXR0ZXIsIGFyZ3MpIHtcbiAgICAgICAgaWYgKGhhc09ic2VydmVycyhlbWl0dGVyKSkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgZW1pdHRlci5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0Q2xhc3NlcyhlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2std2lkZ2V0Jyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stY2FsZW5kYXInKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnay1jYWxlbmRhci1pbmZpbml0ZScpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLWNhbGVuZGFyLXJhbmdlJyk7XG4gICAgfVxuICAgIHNldE1lc3NhZ2VzKCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubWVzc2FnZXNUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZXNUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2QnV0dG9uVGl0bGUgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ3ByZXZCdXR0b25UaXRsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMubmV4dEJ1dHRvblRpdGxlID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCduZXh0QnV0dG9uVGl0bGUnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZlcmlmeUNoYW5nZXMoKSB7XG4gICAgICAgIGlmICghaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5taW4gPiB0aGlzLm1heCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgbWF4IHZhbHVlIHNob3VsZCBiZSBiaWdnZXIgdGhhbiB0aGUgbWluLiBTZWUgJHtNSU5fRE9DX0xJTkskM30gYW5kICR7TUFYX0RPQ19MSU5LJDN9LmApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmJvdHRvbVZpZXdFbnVtID4gdGhpcy50b3BWaWV3RW51bSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgdG9wVmlldyBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIGJvdHRvbVZpZXcuIFNlZSAke0JPVFRPTV9WSUVXX0RPQ19MSU5LJDF9IGFuZCAke1RPUF9WSUVXX0RPQ19MSU5LJDF9LmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZlcmlmeVZhbHVlKGNhbmRpZGF0ZSkge1xuICAgICAgICBpZiAoIWlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbmRpZGF0ZSAmJiAhKGNhbmRpZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAndmFsdWUnIHNob3VsZCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZSBpbnN0YW5jZS4gQ2hlY2sgJHtWQUxVRV9ET0NfTElOSyQ1fSBmb3IgcG9zc2libGUgcmVzb2x1dGlvbi5gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVCdXR0b25TdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzUHJldkRpc2FibGVkID0gIXRoaXMudmlld0xpc3QuY2FuTmF2aWdhdGUodGhpcy5wcmV2Vmlldyk7XG4gICAgICAgICAgICB0aGlzLmlzTmV4dERpc2FibGVkID0gIXRoaXMudmlld0xpc3QuY2FuTmF2aWdhdGUodGhpcy5uZXh0Vmlldyk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLW11bHRpdmlld2NhbGVuZGFyJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgQnVzVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFJBTkdFX0NBTEVOREFSX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgICAgICAgICBSQU5HRV9DQUxFTkRBUl9SQU5HRV9WQUxJREFUT1JTLFxuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEaXNhYmxlZERhdGVzU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLm11bHRpdmlld2NhbGVuZGFyJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1tdWx0aXZpZXdjYWxlbmRhcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctY29udGFpbmVyIGtlbmRvTXVsdGlWaWV3Q2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc1xuICAgICAgICBpMThuLXRvZGF5PVwia2VuZG8ubXVsdGl2aWV3Y2FsZW5kYXIudG9kYXl8VGhlIGxhYmVsIGZvciB0aGUgdG9kYXkgYnV0dG9uIGluIHRoZSBjYWxlbmRhciBoZWFkZXJcIlxuICAgICAgICB0b2RheT1cIlRPREFZXCJcblxuICAgICAgICBpMThuLXByZXZCdXR0b25UaXRsZT1cImtlbmRvLm11bHRpdmlld2NhbGVuZGFyLnByZXZCdXR0b25UaXRsZXxUaGUgbGFiZWwgZm9yIHRoZSBwcmV2aW91cyBidXR0b24gaW4gdGhlIE11bHRpdmlldyBjYWxlbmRhclwiXG4gICAgICAgIHByZXZCdXR0b25UaXRsZT1cIk5hdmlnYXRlIHRvIHByZXZpb3VzIHZpZXdcIlxuXG4gICAgICAgIGkxOG4tbmV4dEJ1dHRvblRpdGxlPVwia2VuZG8ubXVsdGl2aWV3Y2FsZW5kYXIubmV4dEJ1dHRvblRpdGxlfFRoZSBsYWJlbCBmb3IgdGhlIG5leHQgYnV0dG9uIGluIHRoZSBNdWx0aXZpZXcgY2FsZW5kYXJcIlxuICAgICAgICBuZXh0QnV0dG9uVGl0bGU9XCJOYXZpZ2F0ZSB0byBuZXh0IHZpZXdcIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiay1idXR0b24gay1wcmV2LXZpZXdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc1ByZXZEaXNhYmxlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc1ByZXZEaXNhYmxlZFwiXG4gICAgICAgIFt0aXRsZV09XCJwcmV2QnV0dG9uVGl0bGVcIlxuICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUocHJldlZpZXcpXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1hcnJvdy1jaGV2cm9uLWxlZnRcIj48L3NwYW4+XG4gICAgPC9idXR0b24+XG4gICAgPGtlbmRvLWNhbGVuZGFyLWhvcml6b250YWxcbiAgICAgICAgW2FjdGl2ZVZpZXddPVwiYWN0aXZlVmlld0VudW1cIlxuICAgICAgICBbaXNBY3RpdmVdPVwiaXNBY3RpdmUgfHwgaXNIb3ZlcmVkXCJcbiAgICAgICAgW2NlbGxUZW1wbGF0ZVJlZl09XCJhY3RpdmVDZWxsVGVtcGxhdGUoKT8udGVtcGxhdGVSZWZcIlxuICAgICAgICBbaGVhZGVyVGl0bGVUZW1wbGF0ZVJlZl09XCJoZWFkZXJUaXRsZVRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFt3ZWVrTnVtYmVyVGVtcGxhdGVSZWZdPVwid2Vla051bWJlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtjZWxsVUlEXT1cImNlbGxVSURcIlxuICAgICAgICBbdmlld3NdPVwidmlld3NcIlxuICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgW2ZvY3VzZWREYXRlXT1cImZvY3VzZWREYXRlXCJcbiAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgIFthY3RpdmVSYW5nZUVuZF09XCJhY3RpdmVSYW5nZUVuZFwiXG4gICAgICAgIFtzZWxlY3Rpb25SYW5nZV09XCJzZWxlY3Rpb25SYW5nZVwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgICh2YWx1ZUNoYW5nZSk9XCJoYW5kbGVEYXRlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY2VsbEVudGVyKT1cImVtaXRDZWxsRXZlbnQoY2VsbEVudGVyLCAkZXZlbnQpXCJcbiAgICAgICAgKGNlbGxMZWF2ZSk9XCJlbWl0Q2VsbEV2ZW50KGNlbGxMZWF2ZSwgJGV2ZW50KVwiXG4gICAgPlxuICAgIDwva2VuZG8tY2FsZW5kYXItaG9yaXpvbnRhbD5cbiAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiay1idXR0b24gay1uZXh0LXZpZXdcIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc05leHREaXNhYmxlZFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc05leHREaXNhYmxlZFwiXG4gICAgICAgIFt0aXRsZV09XCJuZXh0QnV0dG9uVGl0bGVcIlxuICAgICAgICAoY2xpY2spPVwibmF2aWdhdGUobmV4dFZpZXcpXCJcbiAgICA+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1hcnJvdy1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IERpc2FibGVkRGF0ZXNTZXJ2aWNlIH1cbl07XG5NdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBpZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9jdXNlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkRGF0ZXNSYW5nZVZhbGlkYXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFiaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZERhdGVzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3R0b21WaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3BWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVSYW5nZUVuZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpZXdzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3Q2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbEVudGVyOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbExlYXZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnY2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIG1vbnRoQ2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydtb250aENlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICB5ZWFyQ2VsbFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgeWVhckNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsneWVhckNlbGxUZW1wbGF0ZScsXSB9XSxcbiAgICBkZWNhZGVDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGRlY2FkZUNlbGxUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnZGVjYWRlQ2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIGNlbnR1cnlDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBjZW50dXJ5Q2VsbFRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydjZW50dXJ5Q2VsbFRlbXBsYXRlJyxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHdlZWtOdW1iZXJUZW1wbGF0ZVJlZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnd2Vla051bWJlclRlbXBsYXRlJyxdIH1dLFxuICAgIGhlYWRlclRpdGxlVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0hlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBoZWFkZXJUaXRsZVRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydoZWFkZXJUaXRsZVRlbXBsYXRlJyxdIH1dLFxuICAgIHZpZXdMaXN0OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtIb3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQsXSB9XSxcbiAgICB3aWRnZXRJZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5pZCcsXSB9XSxcbiAgICB3aWRnZXRSb2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgY2FsZW5kYXJUYWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50YWJpbmRleCcsXSB9XSxcbiAgICBhcmlhRGlzYWJsZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1kaXNhYmxlZCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgYXJpYUFjdGl2ZWRlc2NlbmRhbnQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50JyxdIH1dLFxuICAgIGhhbmRsZUJsdXI6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wiYmx1clwiLF0gfV0sXG4gICAgaGFuZGxlRm9jdXM6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wiZm9jdXNcIixdIH1dLFxuICAgIGhhbmRsZU1vdXNlRW50ZXI6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wibW91c2VlbnRlclwiLF0gfV0sXG4gICAgaGFuZGxlTW91c2VMZWF2ZTogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbXCJtb3VzZWxlYXZlXCIsXSB9XSxcbiAgICBoYW5kbGVNb3VzZWRvd246IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogW1wibW91c2Vkb3duXCIsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBoYW5kbGVDbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbXCJjbGlja1wiLF0gfV0sXG4gICAga2V5ZG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbXCJrZXlkb3duXCIsIFtcIiRldmVudFwiXSxdIH1dLFxuICAgIGVudGVyOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFtcImtleWRvd24uZW50ZXJcIixdIH1dXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIHJlbmRlcnMgdGhlIGNvbnRlbnQgb2YgdGhlIERhdGVSYW5nZSBQb3B1cC4gVG8gZGVmaW5lIHRoZSBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuXG4gKiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb1JhbmdlUG9wdXBUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgY29tcG9uZW50IHRhZy5cbiAqL1xuY2xhc3MgRGF0ZVJhbmdlUG9wdXBUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkRhdGVSYW5nZVBvcHVwVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVSYW5nZVBvcHVwVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfVxuXTtcblxuY29uc3QgaXNBY3RpdmUgPSAoY21wKSA9PiAoY21wICYmIGNtcC5pc0FjdGl2ZSkgfHwgZmFsc2U7XG5jb25zdCBoYXNBY3RpdmVDb250ZW50ID0gKHBvcHVwKSA9PiBwb3B1cCAmJiBwb3B1cC5oYXNBY3RpdmVDb250ZW50KCk7XG4vKipcbiAqIEEgc2VydmljZSB0aGF0IGhhbmRsZXMgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgY29tcG9uZW50cyB0aGF0IGFyZSBwbGFjZWQgaW5zaWRlIHRoZSBEYXRlUmFuZ2VDb21wb25lbnQuXG4gKiBGb3IgZXhhbXBsZSwgdGhlIHN0YXJ0IGFuZCBlbmQgYERhdGVJbnB1dGAgYW5kIGBEYXRlUmFuZ2VQb3B1cGAgY29tcG9uZW50cy5cbiAqL1xuY2xhc3MgRGF0ZVJhbmdlU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBPYnNlcnZhYmxlIGluc3RhbmNlIHRoYXQgbm90aWZpZXMgd2hlbiB0aGUgYGFjdGl2ZVJhbmdlRW5kYCBzdGF0ZSBpcyBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVSYW5nZUVuZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gT2JzZXJ2YWJsZSBpbnN0YW5jZSB0aGF0IG5vdGlmaWVzIHdoZW4gdGhlIGBmb2N1c2VkRGF0ZWAgaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZm9jdXNlZERhdGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFuIE9ic2VydmFibGUgaW5zdGFuY2UgdGhhdCBub3RpZmllcyB3aGVuIHRoZSBlbmQgYERhdGVJbnB1dGAgY29tcG9uZW50IGlzIGNoYW5nZWQuXG4gICAgICAgICAqIEZvciBleGFtcGxlLCB3aGVuIGEgbmV3IGVuZCBgRGF0ZUlucHV0YCBpcyBhdHRhY2hlZCBvciB3aGVuIHRoZSBvbGQgb25lIGlzIGRldGFjaGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5lbmRJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gT2JzZXJ2YWJsZSBpbnN0YW5jZSB0aGF0IG5vdGlmaWVzIHdoZW4gdGhlIHN0YXJ0IGBEYXRlSW5wdXRgIGNvbXBvbmVudCBpcyBjaGFuZ2VkLlxuICAgICAgICAgKiBGb3IgZXhhbXBsZSwgd2hlbiBhIG5ldyBzdGFydCBgRGF0ZUlucHV0YCBpcyBhdHRhY2hlZCBvciB0aGUgb2xkIG9uZSBpcyBkZXRhY2hlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RhcnRJbnB1dCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQW4gT2JzZXJ2YWJsZSBpbnN0YW5jZSB0aGF0IG5vdGlmaWVzIHdoZW4gdGhlIGBEYXRlUmFuZ2VQb3B1cGAgY29tcG9uZW50IGlzIGNoYW5nZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVBvcHVwJCA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbiBPYnNlcnZhYmxlIGluc3RhbmNlIHRoYXQgbm90aWZpZXMgd2hlbiB0aGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbiByYW5nZSBpcyBjaGFuZ2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yYW5nZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KEVNUFRZX1NFTEVDVElPTlJBTkdFKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgY3VycmVudCBgYWN0aXZlUmFuZ2VFbmRgIHZhbHVlLlxuICAgICAqL1xuICAgIGdldCBhY3RpdmVSYW5nZUVuZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUmFuZ2VFbmQkLnZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGBmb2N1c2VkRGF0ZWAgdmFsdWUuXG4gICAgICovXG4gICAgZ2V0IGZvY3VzZWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb2N1c2VkRGF0ZSQudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGBtaW5gIHJhbmdlIHZhbHVlLlxuICAgICAqIFRoZSBgbWluYCB2YWx1ZSBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgYHN0YXJ0YCBEYXRlSW5wdXQgdmFsdWUgb3IgdGhlIGBtaW5gIHZhbHVlIG9mIHRoZSBDYWxlbmRhci5cbiAgICAgKi9cbiAgICBnZXQgbWluKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc3RhcnRJbnB1dCQudmFsdWUgfHwge30pLm1pbiB8fCBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBgbWF4YCByYW5nZSB2YWx1ZS5cbiAgICAgKiBUaGUgYG1heGAgdmFsdWUgaXMgZXh0cmFjdGVkIGZyb20gdGhlIGBlbmRgIERhdGVJbnB1dCB2YWx1ZSBvciB0aGUgYG1heGAgdmFsdWUgb2YgdGhlIENhbGVuZGFyLlxuICAgICAqL1xuICAgIGdldCBtYXgoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5lbmRJbnB1dCQudmFsdWUgfHwge30pLm1heCB8fCBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBjdXJyZW50IGBzZWxlY3Rpb25SYW5nZWAgdmFsdWUuXG4gICAgICovXG4gICAgZ2V0IHNlbGVjdGlvblJhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZSQudmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyB0aGUgcmVnaXN0ZXJlZCBgRGF0ZVJhbmdlUG9wdXBgIGNvbXBvbmVudC5cbiAgICAgKiBUaGUgbWV0aG9kIG9wZW5zIHRoZSBwb3B1cCBhbmQgZm9jdXNlcyB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgYWN0aXZhdGVQb3B1cCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZVJhbmdlUG9wdXAgPSB0aGlzLmRhdGVSYW5nZVBvcHVwJC52YWx1ZTtcbiAgICAgICAgaWYgKCFkYXRlUmFuZ2VQb3B1cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGVSYW5nZVBvcHVwLmFjdGl2YXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIHRoZSByZWdpc3RlcmVkIGBEYXRlUmFuZ2VQb3B1cGAgY29tcG9uZW50LlxuICAgICAqIFRoZSBtZXRob2QgY2xvc2VzIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBkZWFjdGl2YXRlUG9wdXAoKSB7XG4gICAgICAgIGNvbnN0IGRhdGVSYW5nZVBvcHVwID0gdGhpcy5kYXRlUmFuZ2VQb3B1cCQudmFsdWU7XG4gICAgICAgIGlmICghKGRhdGVSYW5nZVBvcHVwICYmIGRhdGVSYW5nZVBvcHVwLnNob3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGF0ZVJhbmdlUG9wdXAuc2hvdyA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBEZWFjdGl2YXRlcyB0aGUgcmVnaXN0ZXJlZCBgRGF0ZVJhbmdlUG9wdXBgIGNvbXBvbmVudCBhbmQgZmlyZXMgdGhlIGBjYW5jZWxgIGV2ZW50LlxuICAgICAqIFRoZSBtZXRob2QgY2xvc2VzIHRoZSBwb3B1cC5cbiAgICAgKi9cbiAgICBjYW5jZWxQb3B1cCgpIHtcbiAgICAgICAgY29uc3QgZGF0ZVJhbmdlUG9wdXAgPSB0aGlzLmRhdGVSYW5nZVBvcHVwJC52YWx1ZTtcbiAgICAgICAgaWYgKCEoZGF0ZVJhbmdlUG9wdXAgJiYgZGF0ZVJhbmdlUG9wdXAuc2hvdykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRlUmFuZ2VQb3B1cC5jYW5jZWxQb3B1cCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZXMgYWxsIG9ic2VydmFibGVzIHRvIG1pdGlnYXRlIHBvc3NpYmxlIG1lbW9yeSBsZWFrcy5cbiAgICAgKiBDYWxscyB0aGUgbWV0aG9kIHdoZW4gYSBjb21wb25lbnQgdGhhdCB1c2VzIGl0IGlzIGRlc3Ryb3llZC5cbiAgICAgKi9cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVJhbmdlRW5kJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVBvcHVwJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmZvY3VzZWREYXRlJC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmVuZElucHV0JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnN0YXJ0SW5wdXQkLmNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMucmFuZ2UkLmNvbXBsZXRlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIHdoZW4gYW4gYWN0aXZlIGNvbXBvbmVudCB0aGF0IGlzIHBsYWNlZCBpbnNpZGUgdGhlIGBEYXRlUmFuZ2VDb21wb25lbnRgIGlzIGRldGVjdGVkLlxuICAgICAqIEZvciBleGFtcGxlLCB0aGUgb3BlbmVkIHBvcHVwIG9yIHRoZSBmb2N1c2VkIERhdGVJbnB1dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBhbiBhY3RpdmUgY29tcG9uZW50IGlzIHByZXNlbnQuXG4gICAgICovXG4gICAgaGFzQWN0aXZlQ29tcG9uZW50KCkge1xuICAgICAgICBjb25zdCBwb3B1cCA9IHRoaXMuZGF0ZVJhbmdlUG9wdXAkLnZhbHVlO1xuICAgICAgICBjb25zdCBpc1BvcHVwID0gaXNBY3RpdmUocG9wdXApO1xuICAgICAgICBjb25zdCBpc1N0YXJ0ID0gaXNBY3RpdmUodGhpcy5zdGFydElucHV0JC52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGlzRW5kID0gaXNBY3RpdmUodGhpcy5lbmRJbnB1dCQudmFsdWUpO1xuICAgICAgICByZXR1cm4gaXNQb3B1cCB8fCBpc1N0YXJ0IHx8IGlzRW5kIHx8IGhhc0FjdGl2ZUNvbnRlbnQocG9wdXApIHx8IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgc3RhcnQgYERhdGVJbnB1dGAgY29tcG9uZW50LiBOb3RpZmllcyBhbGwgYHN0YXJ0SW5wdXQkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgcmVnaXN0ZXJTdGFydElucHV0KHN0YXJ0SW5wdXQpIHtcbiAgICAgICAgdGhpcy5zdGFydElucHV0JC5uZXh0KHN0YXJ0SW5wdXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgZW5kIGBEYXRlSW5wdXRgIGNvbXBvbmVudC4gTm90aWZpZXMgYWxsIGBlbmRJbnB1dCRgIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICByZWdpc3RlckVuZElucHV0KGVuZElucHV0KSB7XG4gICAgICAgIHRoaXMuZW5kSW5wdXQkLm5leHQoZW5kSW5wdXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgYERhdGVSYW5nZVBvcHVwYCBjb21wb25lbnQuIE5vdGlmaWVzIGFsbCBgZGF0ZVJhbmdlUG9wdXAkYCBsaXN0ZW5lcnMuXG4gICAgICovXG4gICAgcmVnaXN0ZXJQb3B1cChkYXRlUmFuZ2VQb3B1cCkge1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVBvcHVwJC5uZXh0KGRhdGVSYW5nZVBvcHVwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyB0aGUgYGFjdGl2ZVJhbmdlRW5kYCB2YWx1ZS4gTm90aWZpZXMgYWxsIGBhY3RpdmVSYW5nZUVuZCRgIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICBzZXRBY3RpdmVSYW5nZUVuZChhY3RpdmVSYW5nZSkge1xuICAgICAgICBpZiAoIWFjdGl2ZVJhbmdlIHx8IHRoaXMuYWN0aXZlUmFuZ2VFbmQgPT09IGFjdGl2ZVJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY3RpdmVSYW5nZUVuZCQubmV4dChhY3RpdmVSYW5nZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGZvY3VzZWQgZGF0ZS4gTm90aWZpZXMgYWxsIGBmb2N1c2VkRGF0ZSRgIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICBzZXRGb2N1c2VkRGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNFcXVhbCh0aGlzLmZvY3VzZWREYXRlJC52YWx1ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c2VkRGF0ZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNlbGVjdGlvbiByYW5nZS4gTm90aWZpZXMgYWxsIGByYW5nZSRgIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICBzZXRSYW5nZShyYW5nZSA9IEVNUFRZX1NFTEVDVElPTlJBTkdFKSB7XG4gICAgICAgIHRoaXMucmFuZ2UkLm5leHQocmFuZ2UpO1xuICAgIH1cbn1cbkRhdGVSYW5nZVNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgS2VuZG8gVUkgRGF0ZVJhbmdlUG9wdXAgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgRGF0ZUlucHV0c01vZHVsZSwgRGF0ZVJhbmdlU2VydmljZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqIHByb3ZpZGVyczogW0RhdGVSYW5nZVNlcnZpY2VdLFxuICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICogdGVtcGxhdGU6IGBcbiAqICA8YnV0dG9uICNhbmNob3IgKGNsaWNrKT1cInBvcHVwLnRvZ2dsZSgpXCI+VG9nZ2xlPC9idXR0b24+XG4gKiAgPGtlbmRvLWRhdGVyYW5nZS1wb3B1cCBbYW5jaG9yXT1cImFuY2hvclwiICNwb3B1cD48L2tlbmRvLWRhdGVyYW5nZS1wb3B1cD5cbiAqIGBcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBEYXRlUmFuZ2VQb3B1cENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IocG9wdXBTZXJ2aWNlLCBkYXRlUmFuZ2VTZXJ2aWNlLCB6b25lLCBydGwpIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZSA9IGRhdGVSYW5nZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMucnRsID0gcnRsO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29udHJvbHMgdGhlIHBvcHVwIGFuaW1hdGlvbi5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIG9wZW5pbmcgYW5kIGNsb3NpbmcgYW5pbWF0aW9ucyBhcmUgZW5hYmxlZC5cbiAgICAgICAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY29udHJvbGxpbmcgdGhlIHBvcHVwIGFuaW1hdGlvbnMsXG4gICAgICAgICAqIHJlZmVyIHRvIHRoZSBhcnRpY2xlIG9uIFthbmltYXRpb25zXSh7JSBzbHVnIGFuaW1hdGlvbnNfcG9wdXAgJX0pLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbmZpZ3VyZXMgdGhlIGNvbGxpc2lvbiBiZWhhdmlvciBvZiB0aGUgcG9wdXAuXG4gICAgICAgICAqIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0byB0aGUgYXJ0aWNsZSBvblxuICAgICAgICAgKiBbdmlld3BvcnQgYm91bmRhcnkgZGV0ZWN0aW9uXSh7JSBzbHVnIHZpZXdwb3J0Ym91bmRhcnlkZXRlY3Rpb25fcG9wdXAgJX0pLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2xsaXNpb24gPSB7IGhvcml6b250YWw6ICdmaXQnLCB2ZXJ0aWNhbDogJ2ZsaXAnIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHBvcHVwIGlzIGFib3V0IHRvIG9wZW4uXG4gICAgICAgICAqIFRoaXMgZXZlbnQgaXMgcHJldmVudGFibGUuIElmIHlvdSBjYW5jZWwgdGhlIGV2ZW50LCB0aGUgcG9wdXAgd2lsbCByZW1haW4gY2xvc2VkLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19kYXRlcGlja2VyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSBwb3B1cCBpcyBhYm91dCB0byBjbG9zZS5cbiAgICAgICAgICogVGhpcyBldmVudCBpcyBwcmV2ZW50YWJsZS4gSWYgeW91IGNhbmNlbCB0aGUgZXZlbnQsIHRoZSBwb3B1cCB3aWxsIHJlbWFpbiBvcGVuLlxuICAgICAgICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG8gdGhlIHNlY3Rpb24gb25cbiAgICAgICAgICogW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19kYXRlcGlja2VyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgY2FsZW5kYXIgZWxlbWVudCBpcyBibHVycmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7IC8vdHNsaW50OmRpc2FibGUtbGluZTpuby1vdXRwdXQtcmVuYW1lXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIGNhbGVuZGFyIGVsZW1lbnQgaXMgZm9jdXNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25Gb2N1cyA9IG5ldyBFdmVudEVtaXR0ZXIoKTsgLy90c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLW91dHB1dC1yZW5hbWVcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgcG9wdXAgaXMgY2xvc2VkIGVpdGhlciBvbiBgRVNDYCBrZXlwcmVzcyBvciBvbiBsZWF2aW5nIHRoZSB2aWV3cG9ydC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wb3B1cFVJRCA9IGd1aWQoKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHsgfSk7XG4gICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLnJlc29sdmVkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYWN0aXZlIGNhbGVuZGFyIHRoYXQgaXMgdmlzaWJsZSBpbiB0aGUgcG9wdXAuXG4gICAgICpcbiAgICAgKiA+IFdoZW4gdGhlIHBvcHVwIGlzIGNsb3NlZCwgdGhlIHByb3BlcnR5IHJldHVybnMgYG51bGxgLlxuICAgICAqL1xuICAgIGdldCBjYWxlbmRhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyO1xuICAgIH1cbiAgICBzZXQgY2FsZW5kYXIoY2FsZW5kYXIpIHtcbiAgICAgICAgdGhpcy5fY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVGb2N1c0JsdXIoY2FsZW5kYXIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBhY3RpdmUgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBXaGVuIHRoZSBvcGVuZWQgY2FsZW5kYXIgaXMgYWN0aXZlLCByZXR1cm5zIGB0cnVlYC5cbiAgICAgKi9cbiAgICBnZXQgaXNBY3RpdmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyICYmIHRoaXMuY2FsZW5kYXIuaXNBY3RpdmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgb3Igc2V0cyB0aGUgdmlzaWJpbGl0eSBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqL1xuICAgIHNldCBzaG93KHNob3cpIHtcbiAgICAgICAgaWYgKHRoaXMuX3Nob3cgPT09IHNob3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBQcmV2ZW50YWJsZUV2ZW50KCk7XG4gICAgICAgIGlmIChzaG93KSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4uZW1pdChldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3RvZ2dsZShzaG93KTtcbiAgICB9XG4gICAgZ2V0IHNob3coKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93O1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnJlZ2lzdGVyUG9wdXAodGhpcyk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuY29udGVudENhbGVuZGFyLmNoYW5nZXMuc3Vic2NyaWJlKChjaGFuZ2VzKSA9PiB0aGlzLmNhbGVuZGFyID0gY2hhbmdlcy5maXJzdCkpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyU3Vic2NyaXB0aW9ucy5hZGQodGhpcy52aWV3Q2FsZW5kYXIuY2hhbmdlcy5zdWJzY3JpYmUoKGNoYW5nZXMpID0+IHRoaXMuY2FsZW5kYXIgPSBjaGFuZ2VzLmZpcnN0KSk7XG4gICAgICAgIGlmIChpc1dpbmRvd0F2YWlsYWJsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uID0gZnJvbUV2ZW50KHdpbmRvdywgJ2JsdXInKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVXaW5kb3dCbHVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICAgICAgdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ibHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53aW5kb3dCbHVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLndpbmRvd0JsdXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiAgT3BlbnMgdGhlIHBvcHVwIGNvbXBvbmVudCBhbmQgZm9jdXNlcyB0aGUgY2FsZW5kYXIuXG4gICAgICovXG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3cgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hY3RpdmF0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvdyA9IHRydWU7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU3Vic2NyaXB0aW9uID0gbWVyZ2UodGhpcy5jb250ZW50Q2FsZW5kYXIuY2hhbmdlcywgdGhpcy52aWV3Q2FsZW5kYXIuY2hhbmdlcylcbiAgICAgICAgICAgICAgICAucGlwZShmaWx0ZXIoY2hhbmdlcyA9PiBjaGFuZ2VzICYmIGNoYW5nZXMuZmlyc3QpLCBtYXAoY2hhbmdlcyA9PiBjaGFuZ2VzLmZpcnN0KSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjYWxlbmRhcikgPT4gc2V0VGltZW91dCgoKSA9PiBjYWxlbmRhci5mb2N1cygpKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiAgRm9jdXNlcyB0aGUgY2FsZW5kYXIgKGlmIGF2YWlsYWJsZSkuXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGVuZGFyLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIGEgZm9jdXNlZCBlbGVtZW50IGlkcyBwbGFjZWQgaW5zaWRlIHRoZSBwb3B1cC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gYm9vbGVhbjtcbiAgICAgKi9cbiAgICBoYXNBY3RpdmVDb250ZW50KCkge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSB8fCAhdGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVG9nZ2xlcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgcG9wdXAuXG4gICAgICogSWYgeW91IHVzZSB0aGUgYHRvZ2dsZWAgbWV0aG9kIHRvIHNob3cgb3IgaGlkZSB0aGUgcG9wdXAsXG4gICAgICogdGhlIGBvcGVuYCBhbmQgYGNsb3NlYCBldmVudHMgZG8gbm90IGZpcmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gc2hvdyBUaGUgc3RhdGUgb2YgdGhlIHBvcHVwLlxuICAgICAqL1xuICAgIHRvZ2dsZShzaG93KSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fdG9nZ2xlKChzaG93ID09PSB1bmRlZmluZWQpID8gIXRoaXMuc2hvdyA6IHNob3cpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQ2xvc2VzIHRoZSBwb3B1cCBhbmQgdHJpZ2dlcnMgdGhlIGBjYW5jZWxgIGV2ZW50LlxuICAgICAqL1xuICAgIGNhbmNlbFBvcHVwKCkge1xuICAgICAgICB0aGlzLnNob3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICAgIH1cbiAgICBoYW5kbGVXaW5kb3dCbHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5jbG9zZSkpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5zaG93ID0gZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlTW91c2VMZWF2ZSgpIHtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldFJhbmdlKHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZWxlY3Rpb25SYW5nZSk7XG4gICAgfVxuICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyBhbHRLZXksIGtleUNvZGUgfSA9IGV2ZW50O1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUgfHwgKGFsdEtleSAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93VXApKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMuY2FuY2VsUG9wdXAoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3Vic2NyaWJlRm9jdXNCbHVyKGNhbGVuZGFyKSB7XG4gICAgICAgIGlmICh0aGlzLmJsdXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYmx1clN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2FsZW5kYXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gY2FsZW5kYXIuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmJsdXJTdWJzY3JpcHRpb24gPSBmcm9tRXZlbnQobmF0aXZlRWxlbWVudCwgJ2JsdXInKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkJsdXIuZW1pdCgpKTtcbiAgICAgICAgdGhpcy5mb2N1c1N1YnNjcmlwdGlvbiA9IGZyb21FdmVudChuYXRpdmVFbGVtZW50LCAnZm9jdXMnKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkZvY3VzLmVtaXQoKSk7XG4gICAgfVxuICAgIGFkZFBvcHVwU3Vic2NyaXB0aW9ucyguLi5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMucG9wdXBTdWJzY3JpcHRpb25zKSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaXB0aW9ucy5tYXAocyA9PiB0aGlzLnBvcHVwU3Vic2NyaXB0aW9ucy5hZGQocykpO1xuICAgIH1cbiAgICBnZXQgX2FwcGVuZFRvKCkge1xuICAgICAgICBjb25zdCBhcHBlbmRUbyA9IHRoaXMuYXBwZW5kVG87XG4gICAgICAgIGlmICghYXBwZW5kVG8gfHwgYXBwZW5kVG8gPT09ICdyb290Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBwZW5kVG8gPT09ICdjb21wb25lbnQnID8gdGhpcy5jb250YWluZXIgOiBhcHBlbmRUbztcbiAgICB9XG4gICAgX3RvZ2dsZShzaG93KSB7XG4gICAgICAgIHRoaXMuX3Nob3cgPSBzaG93O1xuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95UG9wdXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc2hvdykge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gdGhpcy5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgICAgIGFuY2hvcjogdGhpcy5hbmNob3IsXG4gICAgICAgICAgICAgICAgYW5jaG9yQWxpZ246IHRoaXMuYW5jaG9yQWxpZ24gfHwgeyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9LFxuICAgICAgICAgICAgICAgIGFuaW1hdGU6IHRoaXMuYW5pbWF0ZSxcbiAgICAgICAgICAgICAgICBhcHBlbmRUbzogdGhpcy5fYXBwZW5kVG8sXG4gICAgICAgICAgICAgICAgY29sbGlzaW9uOiB0aGlzLmNvbGxpc2lvbixcbiAgICAgICAgICAgICAgICBjb250ZW50OiAodGhpcy5jb250ZW50VGVtcGxhdGUgfHwge30pLnRlbXBsYXRlUmVmIHx8IHRoaXMuZGVmYXVsdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIG1hcmdpbjogdGhpcy5tYXJnaW4sXG4gICAgICAgICAgICAgICAgcG9wdXBBbGlnbjogdGhpcy5wb3B1cEFsaWduIHx8IHsgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbk1vZGU6ICdhYnNvbHV0ZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgeyBwb3B1cEVsZW1lbnQsIHBvcHVwQW5jaG9yVmlld3BvcnRMZWF2ZSB9ID0gdGhpcy5wb3B1cFJlZjtcbiAgICAgICAgICAgIHBvcHVwRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGhpcy5wb3B1cFVJRCk7XG4gICAgICAgICAgICB0aGlzLmFkZFBvcHVwU3Vic2NyaXB0aW9ucyh0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZnJvbUV2ZW50KHBvcHVwRWxlbWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVLZXlkb3duLmJpbmQodGhpcykpKSwgZnJvbUV2ZW50KHBvcHVwRWxlbWVudCwgJ21vdXNlbGVhdmUnKS5zdWJzY3JpYmUodGhpcy5oYW5kbGVNb3VzZUxlYXZlLmJpbmQodGhpcykpLCBwb3B1cEFuY2hvclZpZXdwb3J0TGVhdmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2FuY2VsUG9wdXAoKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3lQb3B1cCgpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnBvcHVwUmVmKSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLnBvcHVwU3Vic2NyaXB0aW9ucykpIHtcbiAgICAgICAgICAgIHRoaXMucG9wdXBTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5EYXRlUmFuZ2VQb3B1cENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG8tZGF0ZXJhbmdlLXBvcHVwJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWRhdGVyYW5nZS1wb3B1cCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1tdWx0aXZpZXdjYWxlbmRhciBrZW5kb0RhdGVSYW5nZVNlbGVjdGlvbj48L2tlbmRvLW11bHRpdmlld2NhbGVuZGFyPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVJhbmdlUG9wdXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERhdGVSYW5nZVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQm9vbGVhbiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtSVEwsXSB9XSB9XG5dO1xuRGF0ZVJhbmdlUG9wdXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29udGFpbmVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0sXSB9XSxcbiAgICBkZWZhdWx0VGVtcGxhdGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydkZWZhdWx0VGVtcGxhdGUnLF0gfV0sXG4gICAgY29udGVudFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEYXRlUmFuZ2VQb3B1cFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgdmlld0NhbGVuZGFyOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudCxdIH1dLFxuICAgIGNvbnRlbnRDYWxlbmRhcjogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbTXVsdGlWaWV3Q2FsZW5kYXJDb21wb25lbnQsXSB9XSxcbiAgICBhbmltYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhbmNob3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFuY2hvckFsaWduOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhcHBlbmRUbzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sbGlzaW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3B1cEFsaWduOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXJnaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9wZW46IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjbG9zZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIG9uQmx1cjogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2JsdXInLF0gfV0sXG4gICAgb25Gb2N1czogW3sgdHlwZTogT3V0cHV0LCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIGNhbmNlbDogW3sgdHlwZTogT3V0cHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIERhdGVSYW5nZSBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBfQENvbXBvbmVudCh7XG4gKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiB0ZW1wbGF0ZTogYFxuICogIDxrZW5kby1kYXRlcmFuZ2U+XG4gKiAgICAgIDxrZW5kby1kYXRlaW5wdXQga2VuZG9EYXRlUmFuZ2VTdGFydElucHV0IFsodmFsdWUpXT1cImRhdGVSYW5nZS5zdGFydFwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICogICAgICA8a2VuZG8tZGF0ZWlucHV0IGtlbmRvRGF0ZVJhbmdlRW5kSW5wdXQgWyh2YWx1ZSldPVwiZGF0ZVJhbmdlLmVuZFwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICogIDwva2VuZG8tZGF0ZXJhbmdlPlxuICogYFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0ZVJhbmdlOiBhbnkgPSB7IHN0YXJ0OiBudWxsLCBlbmQ6IG51bGwgfTtcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBEYXRlUmFuZ2VDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zaG93RGVmYXVsdCA9IGZhbHNlO1xuICAgIH1cbiAgICBnZXQgaGFzQ29udGVudFBvcHVwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50UG9wdXAubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNob3dEZWZhdWx0ID0gIXRoaXMuaGFzQ29udGVudFBvcHVwO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY29udGVudFBvcHVwLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0RlZmF1bHQgPSAhdGhpcy5oYXNDb250ZW50UG9wdXA7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRGF0ZVJhbmdlQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbRGF0ZVJhbmdlU2VydmljZV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kYXRlcmFuZ2UnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgICAgPGtlbmRvLWRhdGVyYW5nZS1wb3B1cCAqbmdJZj1cInNob3dEZWZhdWx0XCI+PC9rZW5kby1kYXRlcmFuZ2UtcG9wdXA+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuRGF0ZVJhbmdlQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbnRlbnRQb3B1cDogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbRGF0ZVJhbmdlUG9wdXBDb21wb25lbnQsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVSYW5nZUlucHV0IHtcbiAgICBjb25zdHJ1Y3RvcihhY3RpdmVSYW5nZUVuZCwgZGF0ZVJhbmdlU2VydmljZSwgaW5wdXQsIGVsZW1lbnQsIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlUmFuZ2VFbmQgPSBhY3RpdmVSYW5nZUVuZDtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlID0gZGF0ZVJhbmdlU2VydmljZTtcbiAgICAgICAgdGhpcy5pbnB1dCA9IGlucHV0O1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMubmF2aWdhdGVDYWxlbmRhck9uRm9jdXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHsgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKCkgPT4geyB9KTtcbiAgICB9XG4gICAgZ2V0IGlzQWN0aXZlRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmFjdGl2ZVJhbmdlRW5kID09PSB0aGlzLmFjdGl2ZVJhbmdlRW5kO1xuICAgIH1cbiAgICBnZXQgcG9wdXBDYWxlbmRhckFjdGl2YXRlZCgpIHtcbiAgICAgICAgY29uc3QgcG9wdXAgPSB0aGlzLmRhdGVSYW5nZVNlcnZpY2UuZGF0ZVJhbmdlUG9wdXAkLnZhbHVlO1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHBvcHVwKSAmJiBpc1ByZXNlbnQocG9wdXAuY2FsZW5kYXIpO1xuICAgIH1cbiAgICBpbml0KCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dC52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldFJhbmdlKHRoaXMuZ2V0UmFuZ2UodGhpcy5pbnB1dC52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIFtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQub25CbHVyLnN1YnNjcmliZSgoKSA9PiB0aGlzLmRlYWN0aXZhdGUoKSksXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm9uRm9jdXMucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucG9wdXBDYWxlbmRhckFjdGl2YXRlZCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFjdGl2YXRlKCkpLFxuICAgICAgICAgICAgdGhpcy5pbnB1dC52YWx1ZVVwZGF0ZS5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy51cGRhdGVSYW5nZSh2YWx1ZSwgJ2NoYW5nZScpKSxcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5hY3RpdmVSYW5nZUVuZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1cykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQWN0aXZlRGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUFjdGl2ZUNsYXNzKHRoaXMuaXNBY3RpdmVFbmQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UuZGF0ZVJhbmdlUG9wdXAkLnN1YnNjcmliZShwb3B1cCA9PiB0aGlzLmluaXRQb3B1cChwb3B1cCkpLFxuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnJhbmdlJC5zdWJzY3JpYmUocmFuZ2UgPT4gdGhpcy51cGRhdGVJbnB1dFZhbHVlKHJhbmdlKSksXG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdjbGljaycpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmFjdGl2YXRlKCkpLFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAna2V5ZG93bicpLnN1YnNjcmliZSgoZXZlbnQpID0+IHRoaXMudG9nZ2xlUG9wdXAoZXZlbnQgfHwge30pKVxuICAgICAgICBdLm1hcChzID0+IHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQocykpO1xuICAgIH1cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZVBvcHVwKCk7XG4gICAgfVxuICAgIGluaXRQb3B1cChwb3B1cCkge1xuICAgICAgICBpZiAoIXBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlUG9wdXAoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBvcHVwLmFuY2hvcikge1xuICAgICAgICAgICAgcG9wdXAuYW5jaG9yID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgW1xuICAgICAgICAgICAgcG9wdXAuY2FuY2VsLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzQWN0aXZlRW5kICYmIHRoaXMuaW5wdXQuZm9jdXMoKSksXG4gICAgICAgICAgICBwb3B1cC5vbkZvY3VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRvZ2dsZUFjdGl2ZUNsYXNzKHRoaXMuaXNBY3RpdmVFbmQpKSxcbiAgICAgICAgICAgIHBvcHVwLm9uQmx1ci5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZWFjdGl2YXRlKCkpXG4gICAgICAgIF0ubWFwKHMgPT4gdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMuYWRkKHMpKTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmVQb3B1cCgpIHtcbiAgICAgICAgdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5wb3B1cFN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHsgfSk7XG4gICAgfVxuICAgIGFjdGl2YXRlKCkge1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2V0QWN0aXZlUmFuZ2VFbmQodGhpcy5hY3RpdmVSYW5nZUVuZCk7XG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5hY3RpdmF0ZVBvcHVwKCk7XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJhbmdlKHRoaXMuaW5wdXQudmFsdWUsICdibHVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZVJhbmdlU2VydmljZS5oYXNBY3RpdmVDb21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlQWN0aXZlQ2xhc3MoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmRlYWN0aXZhdGVQb3B1cCgpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdXBkYXRlUmFuZ2UodmFsdWUsIGNvcnJlY3RPbikge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuZ2V0UmFuZ2UodmFsdWUsIGNvcnJlY3RPbik7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZURhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRSYW5nZShyYW5nZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9nZ2xlUG9wdXAoeyBhbHRLZXksIGtleUNvZGUgfSkge1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5jYW5jZWxQb3B1cCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFsdEtleSAmJiBrZXlDb2RlID09PSBLZXlzLkFycm93RG93bikge1xuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmFjdGl2YXRlUG9wdXAoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb2N1c0FjdGl2ZURhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0LnZhbHVlICYmIHRoaXMuaXNBY3RpdmVFbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZXRGb2N1c2VkRGF0ZShjbG9uZURhdGUodGhpcy5pbnB1dC52YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRvZ2dsZUFjdGl2ZUNsYXNzKHNob3cpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gc2hvdyA/ICdhZGRDbGFzcycgOiAncmVtb3ZlQ2xhc3MnO1xuICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChuYXRpdmVFbGVtZW50ICYmIG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlclthY3Rpb25dKG5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmstZGF0ZWlucHV0LXdyYXAnKSwgJ2stc3RhdGUtZm9jdXNlZCcpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIG1hbmFnZXMgdGhlIGVuZCByYW5nZSBzZWxlY3Rpb24uXG4gKlxuICogPiBZb3UgY2FuIHVzZSB0aGUgRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUgb25seSB3aXRoIGEgRGF0ZUlucHV0IGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUgZXh0ZW5kcyBEYXRlUmFuZ2VJbnB1dCB7XG4gICAgY29uc3RydWN0b3IocmFuZ2VTZXJ2aWNlLCBkYXRlSW5wdXQsIGVsZW1lbnQsIHJlbmRlcmVyLCB6b25lKSB7XG4gICAgICAgIHN1cGVyKCdlbmQnLCByYW5nZVNlcnZpY2UsIGRhdGVJbnB1dCwgZWxlbWVudCwgcmVuZGVyZXIsIHpvbmUpO1xuICAgICAgICB0aGlzLnJhbmdlU2VydmljZSA9IHJhbmdlU2VydmljZTtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQgPSBkYXRlSW5wdXQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG5hdmlnYXRpb24gYmVoYXZpb3Igb2YgdGhlIGNhbGVuZGFyIHdoZW4gdGhlIGFjdGl2ZSBlbmQgaXMgY2hhbmdlZCBvbiBpbnB1dCBmb2N1cy4gV2hlbiBlbmFibGVkLFxuICAgICAgICAgKiB0aGUgY2FsZW5kYXIgbmF2aWdhdGVzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZm9jdXNlZCBpbnB1dC4gT3RoZXJ3aXNlLCB0aGUgY2FsZW5kYXIgZGlzcGxheXMgdGhlIGxhc3QgcGlja2VkIGRhdGUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBhdXRvbWF0aWMgbmF2aWdhdGlvbiBiZWhhdmlvciBvbiBpbnB1dCBmb2N1cyBpcyBkaXNhYmxlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogX0BDb21wb25lbnQoe1xuICAgICAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICAgICAqICA8aDU+VG9nZ2xlIGlucHV0IGZvY3VzIHRvIHNlZSB0aGUgY2FsZW5kYXIgbmF2aWdhdGluZyBiZXR3ZWVuIHJhbmdlIGVuZHMuPC9oNT5cbiAgICAgICAgICogIDxrZW5kby1kYXRlcmFuZ2U+XG4gICAgICAgICAqICAgICAgPGtlbmRvLWRhdGVpbnB1dCBrZW5kb0RhdGVSYW5nZVN0YXJ0SW5wdXQgW25hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzXT1cInRydWVcIiBbKHZhbHVlKV09XCJzdGFydFwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgKiAgICAgIDxrZW5kby1kYXRlaW5wdXQga2VuZG9EYXRlUmFuZ2VFbmRJbnB1dCBbbmF2aWdhdGVDYWxlbmRhck9uRm9jdXNdPVwidHJ1ZVwiIFsodmFsdWUpXT1cImVuZFwiPjwva2VuZG8tZGF0ZWlucHV0PlxuICAgICAgICAgKiAgPC9rZW5kby1kYXRlcmFuZ2U+XG4gICAgICAgICAqIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogZXhwb3J0IGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICAgICAqICAgcHVibGljIHN0YXJ0OiBEYXRlID0gbmV3IERhdGUoMjAxOCwgMywgMTApO1xuICAgICAgICAgKiAgIHB1YmxpYyBlbmQ6IERhdGUgPSBuZXcgRGF0ZSgyMDE4LCAxMCwgMjApO1xuICAgICAgICAgKiB9XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1cyA9IGZhbHNlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yYW5nZVNlcnZpY2UucmVnaXN0ZXJFbmRJbnB1dCh0aGlzLmRhdGVJbnB1dCk7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgZ2V0UmFuZ2UodmFsdWUsIGNvcnJlY3RPbikge1xuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzLmRhdGVJbnB1dDtcbiAgICAgICAgaWYgKCFpc0luUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGFydCB9ID0gdGhpcy5yYW5nZVNlcnZpY2Uuc2VsZWN0aW9uUmFuZ2UgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgICAgIGNvbnN0IHNob3VsZENsYW1wID0gdGhpcy5hdXRvQ29ycmVjdE9uID09PSBjb3JyZWN0T24gJiYgaXNQcmVzZW50KHZhbHVlKSAmJiB2YWx1ZSA8IHN0YXJ0O1xuICAgICAgICByZXR1cm4gc2hvdWxkQ2xhbXAgPyBjbGFtcFJhbmdlKHZhbHVlKSA6IHsgc3RhcnQsIGVuZDogY2xvbmVEYXRlKHZhbHVlKSB9O1xuICAgIH1cbiAgICB1cGRhdGVJbnB1dFZhbHVlKHJhbmdlJCQxKSB7XG4gICAgICAgIGNvbnN0IHsgZW5kIH0gPSByYW5nZSQkMSB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpcy5kYXRlSW5wdXQ7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMuZGF0ZUlucHV0LnZhbHVlLCBlbmQpIHx8ICFpc0luUmFuZ2UoZW5kLCBtaW4sIG1heCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVJbnB1dC53cml0ZVZhbHVlKGNsb25lRGF0ZShlbmQpKTtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQubm90aWZ5KCk7XG4gICAgfVxufVxuRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVSYW5nZUVuZElucHV0XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEYXRlUmFuZ2VTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEYXRlSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5EYXRlUmFuZ2VFbmRJbnB1dERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhdXRvQ29ycmVjdE9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBuYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1czogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggbWFuYWdlcyB0aGUgc3RhcnQgc2VsZWN0aW9uIHJhbmdlLlxuICpcbiAqID4gWW91IGNhbiB1c2UgdGhlIERhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUgb25seSB3aXRoIGEgRGF0ZUlucHV0IGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgRGF0ZVJhbmdlU3RhcnRJbnB1dERpcmVjdGl2ZSBleHRlbmRzIERhdGVSYW5nZUlucHV0IHtcbiAgICBjb25zdHJ1Y3RvcihyYW5nZVNlcnZpY2UsIGRhdGVJbnB1dCwgZWxlbWVudCwgcmVuZGVyZXIsIHpvbmUpIHtcbiAgICAgICAgc3VwZXIoJ3N0YXJ0JywgcmFuZ2VTZXJ2aWNlLCBkYXRlSW5wdXQsIGVsZW1lbnQsIHJlbmRlcmVyLCB6b25lKTtcbiAgICAgICAgdGhpcy5yYW5nZVNlcnZpY2UgPSByYW5nZVNlcnZpY2U7XG4gICAgICAgIHRoaXMuZGF0ZUlucHV0ID0gZGF0ZUlucHV0O1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBuYXZpZ2F0aW9uIGJlaGF2aW9yIG9mIHRoZSBjYWxlbmRhciB3aGVuIHRoZSBhY3RpdmUgZW5kIGlzIGNoYW5nZWQgb24gaW5wdXQgZm9jdXMuXG4gICAgICAgICAqIFdoZW4gZW5hYmxlZCwgdGhlIGNhbGVuZGFyIG5hdmlnYXRlcyB0byB0aGUgdmFsdWUgb2YgdGhlIGZvY3VzZWQgaW5wdXQuIE90aGVyd2lzZSwgdGhlIGNhbGVuZGFyXG4gICAgICAgICAqIGRpc3BsYXlzIHRoZSBsYXN0IHBpY2tlZCBkYXRlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYXV0b21hdGljIG5hdmlnYXRpb24gYmVoYXZpb3Igb24gaW5wdXQgZm9jdXMgaXMgZGlzYWJsZWQuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYHRzXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgPGg1PlRvZ2dsZSBpbnB1dCBmb2N1cyB0byBzZWUgdGhlIGNhbGVuZGFyIG5hdmlnYXRpbmcgYmV0d2VlbiByYW5nZSBlbmRzLjwvaDU+XG4gICAgICAgICAqICA8a2VuZG8tZGF0ZXJhbmdlPlxuICAgICAgICAgKiAgICAgIDxrZW5kby1kYXRlaW5wdXQga2VuZG9EYXRlUmFuZ2VTdGFydElucHV0IFtuYXZpZ2F0ZUNhbGVuZGFyT25Gb2N1c109XCJ0cnVlXCIgWyh2YWx1ZSldPVwic3RhcnRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICogICAgICA8a2VuZG8tZGF0ZWlucHV0IGtlbmRvRGF0ZVJhbmdlRW5kSW5wdXQgW25hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzXT1cInRydWVcIiBbKHZhbHVlKV09XCJlbmRcIj48L2tlbmRvLWRhdGVpbnB1dD5cbiAgICAgICAgICogIDwva2VuZG8tZGF0ZXJhbmdlPlxuICAgICAgICAgKiBgXG4gICAgICAgICAqIH0pXG4gICAgICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgIHB1YmxpYyBzdGFydDogRGF0ZSA9IG5ldyBEYXRlKDIwMTgsIDMsIDEwKTtcbiAgICAgICAgICogICBwdWJsaWMgZW5kOiBEYXRlID0gbmV3IERhdGUoMjAxOCwgMTAsIDIwKTtcbiAgICAgICAgICogfVxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhdGVDYWxlbmRhck9uRm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucmFuZ2VTZXJ2aWNlLnJlZ2lzdGVyU3RhcnRJbnB1dCh0aGlzLmRhdGVJbnB1dCk7XG4gICAgICAgIHN1cGVyLmluaXQoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgZ2V0UmFuZ2UodmFsdWUsIGNvcnJlY3RPbikge1xuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzLmRhdGVJbnB1dDtcbiAgICAgICAgaWYgKCFpc0luUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBlbmQgfSA9IHRoaXMucmFuZ2VTZXJ2aWNlLnNlbGVjdGlvblJhbmdlIHx8IEVNUFRZX1NFTEVDVElPTlJBTkdFO1xuICAgICAgICBjb25zdCBzaG91bGRDbGFtcCA9IHRoaXMuYXV0b0NvcnJlY3RPbiA9PT0gY29ycmVjdE9uICYmIGVuZCAmJiB2YWx1ZSA+IGVuZDtcbiAgICAgICAgcmV0dXJuIHNob3VsZENsYW1wID8gY2xhbXBSYW5nZSh2YWx1ZSkgOiB7IHN0YXJ0OiBjbG9uZURhdGUodmFsdWUpLCBlbmQgfTtcbiAgICB9XG4gICAgdXBkYXRlSW5wdXRWYWx1ZShyYW5nZSQkMSkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0IH0gPSByYW5nZSQkMSB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpcy5kYXRlSW5wdXQ7XG4gICAgICAgIGlmIChpc0VxdWFsKHRoaXMuZGF0ZUlucHV0LnZhbHVlLCBzdGFydCkgfHwgIWlzSW5SYW5nZShzdGFydCwgbWluLCBtYXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlSW5wdXQud3JpdGVWYWx1ZShjbG9uZURhdGUoc3RhcnQpKTtcbiAgICAgICAgdGhpcy5kYXRlSW5wdXQubm90aWZ5KCk7XG4gICAgfVxufVxuRGF0ZVJhbmdlU3RhcnRJbnB1dERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRGF0ZVJhbmdlU3RhcnRJbnB1dF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEYXRlUmFuZ2VTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEYXRlSW5wdXRDb21wb25lbnQgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5EYXRlUmFuZ2VTdGFydElucHV0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGF1dG9Db3JyZWN0T246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5hdmlnYXRlQ2FsZW5kYXJPbkZvY3VzOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBtYW5hZ2VzIHRoZSBNdWx0aVZpZXdDYWxlbmRhciByYW5nZSBzZWxlY3Rpb24uXG4gKi9cbmNsYXNzIERhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoY2FsZW5kYXIsIGNkciwgZWxlbWVudCwgcmVuZGVyZXIsIGRhdGVSYW5nZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlID0gZGF0ZVJhbmdlU2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgYXV0by1jb3JyZWN0aW9uIGJlaGF2aW9yLiBJZiB0aGUgc3RhcnQgZGF0ZSBpcyBncmVhdGVyIHRoYW4gdGhlIGVuZCBkYXRlLFxuICAgICAgICAgKiB0aGUgZGlyZWN0aXZlIGZpeGVzIHRoZSBkYXRlIHJhbmdlIHRvIGEgc2luZ2xlIGRhdGUgZWl0aGVyIG9uIGlucHV0IGNoYW5nZSBvciBvbiBibHVyXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYXV0b2NvcnJlY3RfZGF0ZXJhbmdlICV9I3RvYy1jb25maWd1cmluZy10aGUtY2FsZW5kYXItc2VsZWN0aW9uLWRpcmVjdGl2ZSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYXV0by1jb3JyZWN0aW9uIGlzIHRyaWdnZXJlZCBvbiBjaGFuZ2UuXG4gICAgICAgICAqIFRvIGRpc2FibGUgdGhpcyBiZWhhdmlvciwgc2V0IHRoZSBgYXV0b0NvcnJlY3RPbmAgcHJvcGVydHkgdG8gYG5vbmVgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvQ29ycmVjdE9uID0gJ2NoYW5nZSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBhY3RpdmUgcmFuZ2UgZW5kIGlzIGNoYW5nZWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWZlciB0b1xuICAgICAgICAgKiB0aGUgc2VjdGlvbiBvbiBbZXZlbnRzXSh7JSBzbHVnIG92ZXJ2aWV3X211bHRpdmlld2NhbGVuZGFyICV9I3RvYy1ldmVudHMpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmVSYW5nZUVuZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGlvbiByYW5nZSBpcyBjaGFuZ2VkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmVmZXIgdG9cbiAgICAgICAgICogdGhlIHNlY3Rpb24gb24gW2V2ZW50c10oeyUgc2x1ZyBvdmVydmlld19tdWx0aXZpZXdjYWxlbmRhciAlfSN0b2MtZXZlbnRzKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2FsZW5kYXJTdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2UgPSB0aGlzLmRhdGVSYW5nZVNlcnZpY2UgfHwgbmV3IERhdGVSYW5nZVNlcnZpY2UoKTtcbiAgICAgICAgcmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJywgJ3RydWUnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb2YgdGhlIGNhbGVuZGFyLiBXaGVuIGEgbmV3IHJhbmdlIGlzIHNldCxcbiAgICAgKiB0aGUgY29ubmVjdGVkIERhdGVSYW5nZVNlcnZpY2Ugbm90aWZpZXMgYWxsIHJlbGF0ZWQgcGFydGllcy5cbiAgICAgKi9cbiAgICBnZXQgc2VsZWN0aW9uUmFuZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyID8gdGhpcy5jYWxlbmRhci5zZWxlY3Rpb25SYW5nZSA6IG51bGw7XG4gICAgfVxuICAgIHNldCBzZWxlY3Rpb25SYW5nZShyYW5nZSQkMSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNFcXVhbENhbGVuZGFyUmFuZ2UocmFuZ2UkJDEpKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlJCQxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRXF1YWxSYW5nZSh0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2VsZWN0aW9uUmFuZ2UsIHJhbmdlJCQxKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldFJhbmdlKHJhbmdlJCQxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUZvY3VzZWREYXRlKHJhbmdlJCQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBvciBzZXRzIHRoZSBhY3RpdmUgZW5kIG9mIHRoZSBzZWxlY3Rpb24gcmFuZ2UuIFRoaXMgb3B0aW9uIGRldGVybWluZXMgd2hpY2ggcmFuZ2UgZW5kIHdpbGwgYmUgdXBkYXRlZCBvblxuICAgICAqIHVzZXIgaW50ZXJhY3Rpb24uIFdoZW4gYSBuZXcgYWN0aXZlIGVuZCBpcyBzZXQsIHRoZSBjb25uZWN0ZWQgRGF0ZVJhbmdlU2VydmljZSBub3RpZmllcyBhbGwgcmVsYXRlZCBwYXJ0aWVzLlxuICAgICAqL1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB3aGljaCBlbmQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsIGJlIG1hcmtlZCBhcyBhY3RpdmUuIFRoZSBhY3RpdmUgZW5kIGdldHMgbW9kaWZpZWQgdXBvbiB1c2VyXG4gICAgICogaW50ZXJhY3Rpb24uIFdoZW4gYSBuZXcgYWN0aXZlIGVuZCBpcyBzZXQsIHRoZSB3aXJlZCBEYXRlUmFuZ2VTZXJ2aWNlIG5vdGlmaWVzIGFsbCByZWxhdGVkIGNvbXBvbmVudHMuIEZvclxuICAgICAqIGV4YW1wbGUsIHRoZSBzdGFydCBhbmQgZW5kIERhdGVJbnB1dCBjb21wb25lbnRzLlxuICAgICAqXG4gICAgICogPiBJZiB0aGUgc2VsZWN0aW9uIHJhbmdlIGlzIHVuZGVmaW5lZCwgdGhlIHZhbHVlIGlzIGlnbm9yZWQuXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZVJhbmdlRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhci5hY3RpdmVSYW5nZUVuZDtcbiAgICB9XG4gICAgc2V0IGFjdGl2ZVJhbmdlRW5kKGFjdGl2ZVJhbmdlKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGVSYW5nZVNlcnZpY2UuYWN0aXZlUmFuZ2VFbmQgPT09IGFjdGl2ZVJhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWxlbmRhci5hY3RpdmVSYW5nZUVuZCA9IGFjdGl2ZVJhbmdlO1xuICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2V0QWN0aXZlUmFuZ2VFbmQoYWN0aXZlUmFuZ2UpO1xuICAgIH1cbiAgICBnZXQgY2FsZW5kYXJSYW5nZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uUmFuZ2UgfHwgRU1QVFlfU0VMRUNUSU9OUkFOR0U7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBjb25zdCBjYWxlbmRhciA9IHRoaXMuY2FsZW5kYXI7XG4gICAgICAgIGNvbnN0IGRhdGVSYW5nZVNlcnZpY2UgPSB0aGlzLmRhdGVSYW5nZVNlcnZpY2U7XG4gICAgICAgIGNhbGVuZGFyLm1pbiA9IGVpdGhlcihkYXRlUmFuZ2VTZXJ2aWNlLm1pbiwgY2FsZW5kYXIubWluKTtcbiAgICAgICAgY2FsZW5kYXIubWF4ID0gZWl0aGVyKGRhdGVSYW5nZVNlcnZpY2UubWF4LCBjYWxlbmRhci5tYXgpO1xuICAgICAgICB0aGlzLmFkZFN1YnNjcmlwdGlvbnMoY2FsZW5kYXIuY2VsbEVudGVyLnN1YnNjcmliZSgodmFsdWUpID0+IHRoaXMuaGFuZGxlSG92ZXIodmFsdWUpKSwgY2FsZW5kYXIudmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpKSwgZGF0ZVJhbmdlU2VydmljZS5mb2N1c2VkRGF0ZSQuc3Vic2NyaWJlKGZvY3VzZWREYXRlID0+IHtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChjYWxlbmRhci5mb2N1c2VkRGF0ZSwgZm9jdXNlZERhdGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsZW5kYXIuZm9jdXNlZERhdGUgPSBmb2N1c2VkRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRhdGVSYW5nZVNlcnZpY2UuYWN0aXZlUmFuZ2VFbmQkLnN1YnNjcmliZShyYW5nZUVuZCA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQgPT09IHJhbmdlRW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQgPSByYW5nZUVuZDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUmFuZ2VFbmRDaGFuZ2UuZW1pdChyYW5nZUVuZCk7XG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSksIGRhdGVSYW5nZVNlcnZpY2UucmFuZ2UkLnN1YnNjcmliZShyYW5nZSQkMSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNFcXVhbENhbGVuZGFyUmFuZ2UocmFuZ2UkJDEpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY2NlcHRBbmRFbWl0KHJhbmdlJCQxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRm9jdXNlZERhdGUocmFuZ2UkJDEpO1xuICAgICAgICB9KSwgZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnYmx1cicpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhhbmRsZUJsdXIoKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgYWRkU3Vic2NyaXB0aW9ucyguLi5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMubWFwKHMgPT4gdGhpcy5jYWxlbmRhclN1YnNjcmlwdGlvbnMuYWRkKHMpKTtcbiAgICB9XG4gICAgaXNFcXVhbENhbGVuZGFyUmFuZ2UocmFuZ2UkJDEpIHtcbiAgICAgICAgcmV0dXJuIGlzRXF1YWxSYW5nZSh0aGlzLmNhbGVuZGFyLnNlbGVjdGlvblJhbmdlLCByYW5nZSQkMSk7XG4gICAgfVxuICAgIGhhbmRsZUJsdXIoKSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5jYWxlbmRhclJhbmdlO1xuICAgICAgICBjb25zdCBhdXRvQ29ycmVjdCA9IHRoaXMuYXV0b0NvcnJlY3RPbiA9PT0gJ2JsdXInICYmIHN0YXJ0ICE9PSBudWxsICYmIGVuZCAhPT0gbnVsbCAmJiBlbmQgPCBzdGFydDtcbiAgICAgICAgaWYgKGF1dG9Db3JyZWN0KSB7XG4gICAgICAgICAgICB0aGlzLmRhdGVSYW5nZVNlcnZpY2Uuc2V0UmFuZ2UoY2xhbXBSYW5nZShzdGFydCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICBjb25zdCBzZXJ2aWNlID0gdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlO1xuICAgICAgICBjb25zdCBhdXRvQ29ycmVjdCA9IHRoaXMuYXV0b0NvcnJlY3RPbiA9PT0gJ2NoYW5nZScgJiYgdGhpcy5zaG91bGRBdXRvQ29ycmVjdCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUVuZCA9IHRoaXMuY2FsZW5kYXIuYWN0aXZlUmFuZ2VFbmQgIT09ICdlbmQnID8gJ2VuZCcgOiAoYXV0b0NvcnJlY3QgPyAnZW5kJyA6ICdzdGFydCcpO1xuICAgICAgICBjb25zdCByYW5nZSQkMSA9IGF1dG9Db3JyZWN0ID8gY2xhbXBSYW5nZSh2YWx1ZSkgOiB0aGlzLnVwZGF0ZVJhbmdlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFpc0VxdWFsUmFuZ2Uoc2VydmljZS5zZWxlY3Rpb25SYW5nZSwgcmFuZ2UkJDEpKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2VwdEFuZEVtaXQocmFuZ2UkJDEpO1xuICAgICAgICAgICAgc2VydmljZS5zZXRBY3RpdmVSYW5nZUVuZChhY3RpdmVFbmQpO1xuICAgICAgICAgICAgc2VydmljZS5zZXRSYW5nZShyYW5nZSQkMSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlSG92ZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29tcGxldGVSYW5nZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSB0aGlzLmNhbGVuZGFyUmFuZ2U7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVJhbmdlRW5kID0gdGhpcy5jYWxlbmRhci5hY3RpdmVSYW5nZUVuZDtcbiAgICAgICAgY29uc3QgdXBkYXRlUmFuZ2UgPSAoc3RhcnQgJiYgYWN0aXZlUmFuZ2VFbmQgPT09ICdlbmQnKSB8fCAoZW5kICYmIGFjdGl2ZVJhbmdlRW5kID09PSAnc3RhcnQnKTtcbiAgICAgICAgaWYgKHVwZGF0ZVJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHRoaXMudXBkYXRlUmFuZ2UodmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNDb21wbGV0ZVJhbmdlKCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMuZGF0ZVJhbmdlU2VydmljZS5zZWxlY3Rpb25SYW5nZSB8fCBFTVBUWV9TRUxFQ1RJT05SQU5HRTtcbiAgICAgICAgcmV0dXJuIEJvb2xlYW4oc3RhcnQpICYmIEJvb2xlYW4oZW5kKTtcbiAgICB9XG4gICAgc2hvdWxkQXV0b0NvcnJlY3QodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBlbmQsIHN0YXJ0IH0gPSB0aGlzLmNhbGVuZGFyUmFuZ2U7XG4gICAgICAgIGlmICh0aGlzLmNhbGVuZGFyLmFjdGl2ZVJhbmdlRW5kICE9PSAnZW5kJykge1xuICAgICAgICAgICAgcmV0dXJuIGVuZCAhPT0gbnVsbCAmJiB2YWx1ZSA+IGVuZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGFydCAhPT0gbnVsbCAmJiB2YWx1ZSA8IHN0YXJ0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUZvY3VzZWREYXRlKHJhbmdlJCQxKSB7XG4gICAgICAgIGlmICghcmFuZ2UkJDEgfHwgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLmZvY3VzZWREYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlUmFuZ2VTZXJ2aWNlLnNldEZvY3VzZWREYXRlKHJhbmdlJCQxLnN0YXJ0IHx8IHJhbmdlJCQxLmVuZCk7XG4gICAgfVxuICAgIHVwZGF0ZVJhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHsgZW5kLCBzdGFydCB9ID0gdGhpcy5jYWxlbmRhclJhbmdlO1xuICAgICAgICByZXR1cm4gdGhpcy5jYWxlbmRhci5hY3RpdmVSYW5nZUVuZCAhPT0gJ2VuZCcgPyAoeyBzdGFydDogdmFsdWUsIGVuZCB9KSA6ICh7IHN0YXJ0LCBlbmQ6IHZhbHVlIH0pO1xuICAgIH1cbiAgICBzZXRTZWxlY3Rpb25SYW5nZShyYW5nZSQkMSkge1xuICAgICAgICB0aGlzLmNhbGVuZGFyLnNlbGVjdGlvblJhbmdlID0gcmFuZ2UkJDE7XG4gICAgICAgIHRoaXMuY2FsZW5kYXIud3JpdGVWYWx1ZShudWxsKTtcbiAgICB9XG4gICAgYWNjZXB0QW5kRW1pdChyYW5nZSQkMSkge1xuICAgICAgICB0aGlzLnNldFNlbGVjdGlvblJhbmdlKHJhbmdlJCQxKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25SYW5nZUNoYW5nZS5lbWl0KHJhbmdlJCQxKTtcbiAgICB9XG59XG5EYXRlUmFuZ2VTZWxlY3Rpb25EaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVSYW5nZVNlbGVjdGlvbl0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBEYXRlUmFuZ2VTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuRGF0ZVJhbmdlU2VsZWN0aW9uRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGF1dG9Db3JyZWN0T246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGlvblJhbmdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVSYW5nZUVuZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZlUmFuZ2VFbmRDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBzZWxlY3Rpb25SYW5nZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4IGRpcmVjdGl2ZS1zZWxlY3RvciAqL1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEtGb3JPZkNvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKCRpbXBsaWNpdCwga0Zvck9mLCBpbmRleCwgY291bnQpIHtcbiAgICAgICAgdGhpcy4kaW1wbGljaXQgPSAkaW1wbGljaXQ7XG4gICAgICAgIHRoaXMua0Zvck9mID0ga0Zvck9mO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICB9XG4gICAgZ2V0IGZpcnN0KCkgeyByZXR1cm4gdGhpcy5pbmRleCA9PT0gMDsgfVxuICAgIGdldCBsYXN0KCkgeyByZXR1cm4gdGhpcy5pbmRleCA9PT0gdGhpcy5jb3VudCAtIDE7IH1cbiAgICBnZXQgZXZlbigpIHsgcmV0dXJuIHRoaXMuaW5kZXggJSAyID09PSAwOyB9XG4gICAgZ2V0IG9kZCgpIHsgcmV0dXJuICF0aGlzLmV2ZW47IH1cbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBLRm9yT2Yge1xuICAgIGNvbnN0cnVjdG9yKF92aWV3Q29udGFpbmVyLCBfdGVtcGxhdGUsIF9kaWZmZXJzKSB7XG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIgPSBfdmlld0NvbnRhaW5lcjtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGUgPSBfdGVtcGxhdGU7XG4gICAgICAgIHRoaXMuX2RpZmZlcnMgPSBfZGlmZmVycztcbiAgICAgICAgdGhpcy5fZGlmZmVyID0gbnVsbDtcbiAgICB9XG4gICAgc2V0IGtGb3JUZW1wbGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoJ2tGb3JPZicgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjaGFuZ2VzLmtGb3JPZi5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodGhpcy5fZGlmZmVyIHx8ICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHZhbHVlKS5jcmVhdGUodGhpcy5rRm9yVHJhY2tCeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgYSBkaWZmZXIgc3VwcG9ydGluZyBvYmplY3QgJyR7dmFsdWV9JyBvZiB0eXBlICcke2dldFR5cGVOYW1lRm9yRGVidWdnaW5nKHZhbHVlKX0nLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RpZmZlcikge1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlcyA9IHRoaXMuX2RpZmZlci5kaWZmKHRoaXMua0Zvck9mKTtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYXBwbHlDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF9hcHBseUNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZpZXdDb250YWluZXJMZW5ndGggPSB0aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZGF0YUxlbmd0aCA9IHRoaXMua0Zvck9mLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdHVwbGVzID0ge307XG4gICAgICAgIGNoYW5nZXMuZm9yRWFjaE9wZXJhdGlvbigocmVjb3JkLCBfLCBjdXJyZW50SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50SW5kZXggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0dXBsZXNbY3VycmVudEluZGV4XSA9IHJlY29yZC5pdGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHZpZXdDb250YWluZXJMZW5ndGg7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlLCBuZXcgS0Zvck9mQ29udGV4dChudWxsLCB0aGlzLmtGb3JPZiwgLTEsIC0xKSwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX3ZpZXdDb250YWluZXIubGVuZ3RoOyBpID4gZGF0YUxlbmd0aDsgaS0tKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyLnJlbW92ZShpIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl92aWV3Q29udGFpbmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy5fdmlld0NvbnRhaW5lci5nZXQoaSk7XG4gICAgICAgICAgICB2aWV3LmNvbnRleHQuaW5kZXggPSBpO1xuICAgICAgICAgICAgdmlldy5jb250ZXh0LmNvdW50ID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmlldy5jb250ZXh0LiRpbXBsaWNpdCA9IHR1cGxlc1tpXSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuS0Zvck9mLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7IHNlbGVjdG9yOiAnW2tGb3JdW2tGb3JPZl0nIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuS0Zvck9mLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiB9LFxuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYgfSxcbiAgICB7IHR5cGU6IEl0ZXJhYmxlRGlmZmVycyB9XG5dO1xuS0Zvck9mLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGtGb3JPZjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAga0ZvclRyYWNrQnk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtGb3JUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZ2V0VHlwZU5hbWVGb3JEZWJ1Z2dpbmcodHlwZSkge1xuICAgIHJldHVybiB0eXBlLm5hbWUgfHwgdHlwZW9mIHR5cGU7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBIZWFkZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGJ1cywgY2RyLCBsb2NhbGl6YXRpb24sIGludGwsIGRpc2FibGVkRGF0ZXNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuYnVzID0gYnVzO1xuICAgICAgICB0aGlzLmNkciA9IGNkcjtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMuZGlzYWJsZWREYXRlc1NlcnZpY2UgPSBkaXNhYmxlZERhdGVzU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMudG9kYXlBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgICB0aGlzLm1pbiA9IG5ldyBEYXRlKE1JTl9EQVRFKTtcbiAgICAgICAgdGhpcy5tYXggPSBuZXcgRGF0ZShNQVhfREFURSk7XG4gICAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSAxO1xuICAgICAgICB0aGlzLnRvZGF5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIGdldCBnZXRDb21wb25lbnRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNcbiAgICAgICAgICAgIC5hZGQodGhpcy5pbnRsLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuaW50bENoYW5nZS5iaW5kKHRoaXMpKSlcbiAgICAgICAgICAgIC5hZGQodGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5sMTBuQ2hhbmdlLmJpbmQodGhpcykpKVxuICAgICAgICAgICAgLmFkZCh0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuc2V0VG9kYXlBdmFpbGFiaWxpdHkuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhfKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICghc2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlVmlld1ZhbHVlID0gQ2FsZW5kYXJWaWV3RW51bVt0aGlzLmFjdGl2ZVZpZXddO1xuICAgICAgICB0aGlzLnRvZGF5TWVzc2FnZSA9IHRoaXMubG9jYWxpemF0aW9uLmdldCgndG9kYXknKTtcbiAgICAgICAgdGhpcy5zZXRUb2RheUF2YWlsYWJpbGl0eSgpO1xuICAgICAgICB0aGlzLm5hdmlnYXRlID0gdGhpcy5idXMuY2FuTW92ZVVwKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLmdldFRpdGxlKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaGFuZGxlVG9kYXlDbGljaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRvZGF5QXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idXMubW92ZVRvQm90dG9tKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIHRoaXMudG9kYXkuZW1pdChkYXRlSW5SYW5nZShnZXRUb2RheSgpLCB0aGlzLm1pbiwgdGhpcy5tYXgpKTtcbiAgICB9XG4gICAgaGFuZGxlTmF2aWdhdGlvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5idXMubW92ZVVwKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgfVxuICAgIGludGxDaGFuZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREYXRlICYmIHRoaXMuYnVzLnNlcnZpY2UodGhpcy5hY3RpdmVWaWV3KSkge1xuICAgICAgICAgICAgdGhpcy50aXRsZSA9IHRoaXMuZ2V0VGl0bGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGwxMG5DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudG9kYXlNZXNzYWdlID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCd0b2RheScpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgZ2V0VGl0bGUoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGNvbnN0IHRha2UgPSB0aGlzLnJhbmdlTGVuZ3RoIC0gMTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSBzZXJ2aWNlLnRpdGxlKHRoaXMuY3VycmVudERhdGUpO1xuICAgICAgICBjb25zdCBuZXh0RGF0ZSA9IHNlcnZpY2UuYWRkVG9EYXRlKHRoaXMuY3VycmVudERhdGUsIHRha2UpO1xuICAgICAgICBpZiAodGFrZSA8IDEgfHwgIXNlcnZpY2UuaXNJblJhbmdlKG5leHREYXRlLCB0aGlzLm1pbiwgdGhpcy5tYXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGl0bGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3RpdGxlfSAtICR7c2VydmljZS50aXRsZShuZXh0RGF0ZSl9YDtcbiAgICB9XG4gICAgc2V0VG9kYXlBdmFpbGFiaWxpdHkoKSB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gZ2V0VG9kYXkoKTtcbiAgICAgICAgY29uc3QgaXNUb2RheUluUmFuZ2UgPSBpc0luUmFuZ2UodG9kYXksIGdldERhdGUodGhpcy5taW4pLCBnZXREYXRlKHRoaXMubWF4KSk7XG4gICAgICAgIGNvbnN0IGlzRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmlzRGF0ZURpc2FibGVkKHRvZGF5KTtcbiAgICAgICAgdGhpcy50b2RheUF2YWlsYWJsZSA9IGlzVG9kYXlJblJhbmdlICYmICFpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5IZWFkZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNhbGVuZGFyLWhlYWRlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8c3BhbiBjbGFzcz1cImstYnV0dG9uIGstYmFyZSBrLXRpdGxlXCIgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwiIW5hdmlnYXRlXCJcbiAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgY2xpY2s6IGhhbmRsZU5hdmlnYXRpb25cbiAgICAgICAgfVwiXG4gICAgICAgIFtzY29wZV09XCJ0aGlzXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhdGVtcGxhdGVSZWZcIj57e3RpdGxlfX08L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ0lmXT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGl0bGUsIGFjdGl2ZVZpZXc6IGFjdGl2ZVZpZXdWYWx1ZSwgZGF0ZTogY3VycmVudERhdGUgfVwiXG4gICAgICAgID48L25nLXRlbXBsYXRlPlxuICAgIDwvc3Bhbj5cbiAgICA8c3BhbiBjbGFzcz1cImstdG9kYXlcIiBbY2xhc3Muay1zdGF0ZS1kaXNhYmxlZF09XCIhdG9kYXlBdmFpbGFibGVcIlxuICAgICAgICBba2VuZG9FdmVudHNPdXRzaWRlQW5ndWxhcl09XCJ7XG4gICAgICAgICAgICBjbGljazogaGFuZGxlVG9kYXlDbGlja1xuICAgICAgICB9XCJcbiAgICAgICAgW3Njb3BlXT1cInRoaXNcIj5cbiAgICAgICAge3t0b2RheU1lc3NhZ2V9fVxuICAgIDwvc3Bhbj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5IZWFkZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCdXNWaWV3U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEaXNhYmxlZERhdGVzU2VydmljZSB9XG5dO1xuSGVhZGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGN1cnJlbnREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmFuZ2VMZW5ndGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b2RheTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdldENvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jYWxlbmRhci1oZWFkZXJcIixdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgV2Vla05hbWVzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaW50bCkge1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgIH1cbiAgICBnZXRXZWVrTmFtZXMoaW5jbHVkZVdlZWtOdW1iZXIgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCB3ZWVrTmFtZXMgPSBzaGlmdFdlZWtOYW1lcyh0aGlzLmludGwuZGF0ZUZvcm1hdE5hbWVzKHsgbmFtZVR5cGU6ICdzaG9ydCcsIHR5cGU6ICdkYXlzJyB9KSwgdGhpcy5pbnRsLmZpcnN0RGF5KCkpO1xuICAgICAgICByZXR1cm4gaW5jbHVkZVdlZWtOdW1iZXIgPyBbJyddLmNvbmNhdCh3ZWVrTmFtZXMpIDogd2Vla05hbWVzO1xuICAgIH1cbn1cbldlZWtOYW1lc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbldlZWtOYW1lc1NlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVmlld0NvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoYnVzLCBpbnRsLCBjZHIsIHdlZWtTZXJ2aWNlLCBlbGVtZW50LCB6b25lLCByZW5kZXJlciwgZGlzYWJsZWREYXRlc1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5idXMgPSBidXM7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLndlZWtTZXJ2aWNlID0gd2Vla1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZSA9IGRpc2FibGVkRGF0ZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbiA9ICd2ZXJ0aWNhbCc7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsRW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2VsbExlYXZlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLndlZWtOYW1lcyA9IFtdO1xuICAgICAgICB0aGlzLmNvbFNwYW4gPSAwO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gW107XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1xuICAgICAgICAgICAgLmFkZCh0aGlzLmludGwuY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5pbnRsQ2hhbmdlLmJpbmQodGhpcykpKVxuICAgICAgICAgICAgLmFkZCh0aGlzLmRpc2FibGVkRGF0ZXNTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuZGlzYWJsZWREYXRlc0NoYW5nZS5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIGdldCB3ZWVrTnVtYmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93V2Vla051bWJlcnMgJiYgdGhpcy5hY3RpdmVWaWV3ID09PSBDYWxlbmRhclZpZXdFbnVtLm1vbnRoO1xuICAgIH1cbiAgICBzZXQgd2Vla051bWJlcihzaG93V2Vla051bWJlcnMpIHtcbiAgICAgICAgdGhpcy5zaG93V2Vla051bWJlcnMgPSBzaG93V2Vla051bWJlcnM7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZEV2ZW50cygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLmJ1cy5zZXJ2aWNlKHRoaXMuYWN0aXZlVmlldyk7XG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ2VuZXJhdGVXZWVrTmFtZXMgPSB0aGlzLmlzSG9yaXpvbnRhbCgpICYmIHRoaXMud2Vla05hbWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgaWYgKGdlbmVyYXRlV2Vla05hbWVzICYmIChjaGFuZ2VzLndlZWtOdW1iZXIgfHwgY2hhbmdlcy5kaXJlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLndlZWtOYW1lcyA9IHRoaXMud2Vla1NlcnZpY2UuZ2V0V2Vla05hbWVzKHRoaXMud2Vla051bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2xTcGFuID0gdGhpcy5zZXJ2aWNlLnJvd0xlbmd0aCh0aGlzLndlZWtOdW1iZXIpO1xuICAgICAgICB0aGlzLnRpdGxlID0gdGhpcy5zZXJ2aWNlLnRpdGxlKHRoaXMudmlld0RhdGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZURhdGEoKTtcbiAgICAgICAgaWYgKGNoYW5nZXMuYWN0aXZlVmlldykge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2VsbEluZGV4ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmZvckVhY2godW5zdWJzY3JpYmVDYWxsYmFjayA9PiB1bnN1YnNjcmliZUNhbGxiYWNrKCkpO1xuICAgIH1cbiAgICBpc0hvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgIH1cbiAgICBpc01vbnRoVmlldygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlVmlldyA9PT0gQ2FsZW5kYXJWaWV3RW51bS5tb250aDtcbiAgICB9XG4gICAgZmlyc3REYXRlKHJvd0N0eCkge1xuICAgICAgICBjb25zdCBjdHggPSB0aGlzLmZpcnN0V2Vla0RhdGVDb250ZXh0KHJvd0N0eCk7XG4gICAgICAgIHJldHVybiBjdHggPyBjdHgudmFsdWUgOiBudWxsO1xuICAgIH1cbiAgICBnZXRXZWVrTnVtYmVyKGRhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLndlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB3ZWVrSW5ZZWFyKGRhdGUsIHRoaXMuaW50bC5maXJzdERheSgpKTtcbiAgICB9XG4gICAgZ2V0V2Vla051bWJlckNvbnRleHQocm93Q3R4KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuZmlyc3RXZWVrRGF0ZUNvbnRleHQocm93Q3R4KTtcbiAgICAgICAgaWYgKCF0aGlzLndlZWtOdW1iZXIgfHwgIWN0eCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2Vla051bWJlciA9IHdlZWtJblllYXIoY3R4LnZhbHVlLCB0aGlzLmludGwuZmlyc3REYXkoKSkudG9TdHJpbmcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFZhbHVlOiB3ZWVrTnVtYmVyLFxuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICBpc1dlZWtlbmQ6IGZhbHNlLFxuICAgICAgICAgICAgdGl0bGU6IHdlZWtOdW1iZXIsXG4gICAgICAgICAgICB2YWx1ZTogY2xvbmVEYXRlKGN0eC52YWx1ZSlcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0U3R5bGVzKGNvbnRleHQpIHtcbiAgICAgICAgY29uc3QgeyBpc1JhbmdlRW5kLCBpc1JhbmdlU3RhcnQgfSA9IGNvbnRleHQ7XG4gICAgICAgIGNvbnN0IGlzRW5kQWN0aXZlID0gdGhpcy5hY3RpdmVSYW5nZUVuZCA9PT0gJ2VuZCcgJiYgaXNSYW5nZUVuZDtcbiAgICAgICAgY29uc3QgaXNTdGFydEFjdGl2ZSA9IHRoaXMuYWN0aXZlUmFuZ2VFbmQgPT09ICdzdGFydCcgJiYgaXNSYW5nZVN0YXJ0O1xuICAgICAgICByZXR1cm4gc3RyaW5naWZ5Q2xhc3NPYmplY3Qoe1xuICAgICAgICAgICAgJ2stcmFuZ2UtZW5kJzogaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICdrLXJhbmdlLW1pZCc6IGNvbnRleHQuaXNSYW5nZU1pZCxcbiAgICAgICAgICAgICdrLXJhbmdlLXNwbGl0LWVuZCc6IGNvbnRleHQuaXNSYW5nZVNwbGl0RW5kLFxuICAgICAgICAgICAgJ2stcmFuZ2Utc3BsaXQtc3RhcnQnOiBjb250ZXh0LmlzUmFuZ2VTcGxpdFN0YXJ0LFxuICAgICAgICAgICAgJ2stcmFuZ2Utc3RhcnQnOiBpc1JhbmdlU3RhcnQsXG4gICAgICAgICAgICAnay1zdGF0ZS1hY3RpdmUnOiBpc1N0YXJ0QWN0aXZlIHx8IGlzRW5kQWN0aXZlLFxuICAgICAgICAgICAgJ2stc3RhdGUtZm9jdXNlZCc6IHRoaXMuaXNBY3RpdmUgJiYgY29udGV4dC5pc0ZvY3VzZWQsXG4gICAgICAgICAgICAnay1zdGF0ZS1zZWxlY3RlZCc6IGNvbnRleHQuaXNTZWxlY3RlZCB8fCBpc1JhbmdlU3RhcnQgfHwgaXNSYW5nZUVuZCxcbiAgICAgICAgICAgICdrLXRvZGF5JzogY29udGV4dC5pc1RvZGF5LFxuICAgICAgICAgICAgJ2std2Vla2VuZCc6IGNvbnRleHQuaXNXZWVrZW5kLFxuICAgICAgICAgICAgJ2stc3RhdGUtZGlzYWJsZWQnOiBjb250ZXh0LmlzRGlzYWJsZWRcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRhYmxlQ2VsbEluZGV4KHJvd0luZGV4LCBjZWxsSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGAke3Jvd0luZGV4fToke2NlbGxJbmRleH1gO1xuICAgIH1cbiAgICBmaXJzdFdlZWtEYXRlQ29udGV4dChyb3dDdHgpIHtcbiAgICAgICAgaWYgKCF0aGlzLndlZWtOdW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpZHggPSAwO1xuICAgICAgICBsZXQgY3R4ID0gcm93Q3R4W2lkeF07XG4gICAgICAgIHdoaWxlICghY3R4ICYmIGlkeCA8IHJvd0N0eC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGN0eCA9IHJvd0N0eFsrK2lkeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG4gICAgdXBkYXRlRGF0YSgpIHtcbiAgICAgICAgY29uc3QgdGltZSA9IHRoaXMuc2VsZWN0ZWREYXRlIHx8IGdldFRvZGF5KCk7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRlID0gc2V0VGltZSh0aGlzLnZpZXdEYXRlLCB0aW1lKTtcbiAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5zZXJ2aWNlLmRhdGEoe1xuICAgICAgICAgICAgY2VsbFVJRDogdGhpcy5jZWxsVUlELFxuICAgICAgICAgICAgZm9jdXNlZERhdGU6IHRoaXMuZm9jdXNlZERhdGUsXG4gICAgICAgICAgICBpc0FjdGl2ZVZpZXc6ICF0aGlzLmJ1cy5jYW5Nb3ZlRG93bih0aGlzLmFjdGl2ZVZpZXcpLFxuICAgICAgICAgICAgbWF4OiB0aGlzLm1heCxcbiAgICAgICAgICAgIG1pbjogdGhpcy5taW4sXG4gICAgICAgICAgICBzZWxlY3RlZERhdGU6IHRoaXMuc2VsZWN0ZWREYXRlLFxuICAgICAgICAgICAgc2VsZWN0aW9uUmFuZ2U6IHRoaXMuc2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgICAgICB2aWV3RGF0ZTogdmlld0RhdGUsXG4gICAgICAgICAgICBpc0RhdGVEaXNhYmxlZDogdGhpcy5kaXNhYmxlZERhdGVzU2VydmljZS5pc0RhdGVEaXNhYmxlZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW50bENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLmlzSG9yaXpvbnRhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLndlZWtOYW1lcyA9IHRoaXMud2Vla1NlcnZpY2UuZ2V0V2Vla05hbWVzKHRoaXMud2Vla051bWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGRpc2FibGVkRGF0ZXNDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gICAgYmluZEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdtb3VzZW92ZXInLCB0aGlzLmNlbGxNb3VzZW92ZXJIYW5kbGVyLmJpbmQodGhpcykpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnbW91c2VsZWF2ZScsIHRoaXMubW91c2VMZWF2ZUhhbmRsZXIuYmluZCh0aGlzKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsIHRoaXMuY2xpY2tIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgY2xpY2tIYW5kbGVyKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuY2xvc2VzdENlbGwoYXJncyk7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuZ2V0QXR0cmlidXRlKCdkYXRhLWNlbGwtaW5kZXgnKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxDb250ZXh0ID0gdGhpcy5jZWxsQnlJbmRleChpbmRleCk7XG4gICAgICAgICAgICBpZiAoIWNlbGxDb250ZXh0LmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KGNlbGxDb250ZXh0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBtb3VzZUxlYXZlSGFuZGxlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudENlbGxJbmRleCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Q2VsbExlYXZlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2VsbE1vdXNlb3ZlckhhbmRsZXIoYXJncykge1xuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5jbG9zZXN0Q2VsbChhcmdzKTtcbiAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2VsbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtY2VsbC1pbmRleCcpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudENlbGxJbmRleCAmJiB0aGlzLmN1cnJlbnRDZWxsSW5kZXggIT09IGluZGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q2VsbExlYXZlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuY2VsbEJ5SW5kZXgoaW5kZXgpLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jZWxsRW50ZXIuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDZWxsSW5kZXggPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmN1cnJlbnRDZWxsSW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdENlbGxMZWF2ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsb3Nlc3RDZWxsKGV2ZW50QXJncykge1xuICAgICAgICByZXR1cm4gY2xvc2VzdEluU2NvcGUoZXZlbnRBcmdzLnRhcmdldCwgbm9kZSA9PiBub2RlLmhhc0F0dHJpYnV0ZSgnZGF0YS1jZWxsLWluZGV4JyksIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICB9XG4gICAgZW1pdENlbGxMZWF2ZSgpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY2VsbEJ5SW5kZXgodGhpcy5jdXJyZW50Q2VsbEluZGV4KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuY2VsbExlYXZlLmVtaXQoaXRlbS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50Q2VsbEluZGV4ID0gbnVsbDtcbiAgICB9XG4gICAgY2VsbEJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgY29uc3QgW3Jvd0luZGV4LCBjZWxsSW5kZXhdID0gaW5kZXguc3BsaXQoJzonKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtyb3dJbmRleF1bY2VsbEluZGV4XTtcbiAgICB9XG59XG5WaWV3Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYWxlbmRhclZpZXddJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlDZWxsPjx0ZCBjbGFzcz1cImstZW1wdHlcIj4mbmJzcDs8L3RkPjwvbmctdGVtcGxhdGU+XG4gICAgPHRyICpuZ0lmPVwiIWlzSG9yaXpvbnRhbCgpXCIgcm9sZT1cInJvd1wiPjx0aCBzY29wZT1cImNvbFwiIFtjb2xTcGFuXT1cImNvbFNwYW5cIj57e3RpdGxlfX08L3RoPjwvdHI+XG4gICAgPHRyIHJvbGU9XCJyb3dcIiAqbmdJZj1cImlzTW9udGhWaWV3KCkgJiYgaXNIb3Jpem9udGFsKClcIj5cbiAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBuYW1lIG9mIHdlZWtOYW1lc1wiPnt7bmFtZX19PC90aD5cbiAgICA8L3RyPlxuICAgIDx0ciAqa0Zvcj1cImxldCByb3cgb2YgZGF0YTsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIiByb2xlPVwicm93XCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJ3ZWVrTnVtYmVyXCI+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWFsdFwiICpuZ0lmPVwiZmlyc3REYXRlKHJvdyk7IGVsc2UgZW1wdHlDZWxsXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiF3ZWVrTnVtYmVyVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICAgICAge3tnZXRXZWVrTnVtYmVyKGZpcnN0RGF0ZShyb3cpKX19XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgW25nSWZdPVwid2Vla051bWJlclRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwid2Vla051bWJlclRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmlyc3REYXRlKHJvdyksXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsQ29udGV4dDogZ2V0V2Vla051bWJlckNvbnRleHQocm93KVxuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXIgKmtGb3I9XCJsZXQgY2VsbCBvZiByb3c7IGxldCBjZWxsSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjZWxsOyBlbHNlIGVtcHR5Q2VsbFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJjZWxsLmlkXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLWNlbGwtaW5kZXhdPVwidGFibGVDZWxsSW5kZXgocm93SW5kZXgsIGNlbGxJbmRleClcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiY2VsbC5pc1NlbGVjdGVkIHx8IGNlbGwuaXNSYW5nZVN0YXJ0IHx8IGNlbGwuaXNSYW5nZU1pZCB8fCBjZWxsLmlzUmFuZ2VFbmRcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiY2VsbC5pc0Rpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRTdHlsZXMoY2VsbClcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjZWxsLnRpdGxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstbGlua1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIXRlbXBsYXRlUmVmXCI+e3tjZWxsLmZvcm1hdHRlZFZhbHVlfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjZWxsLnZhbHVlLCBjZWxsQ29udGV4dDogY2VsbCB9XCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90cj5cbiAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5WaWV3Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnVzVmlld1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogV2Vla05hbWVzU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IERpc2FibGVkRGF0ZXNTZXJ2aWNlIH1cbl07XG5WaWV3Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNBY3RpdmU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNlbGxVSUQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvY3VzZWREYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RlZERhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpZXdEYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVSYW5nZUVuZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0aW9uUmFuZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aWV3SW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlUmVmOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyVGVtcGxhdGVSZWY6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxFbnRlcjogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNlbGxMZWF2ZTogW3sgdHlwZTogT3V0cHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYEhlYWRlckNvbXBvbmVudGAmbWRhc2g7VGhlIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIFVJIGZvciB2ZXJ0aWNhbCBuYXZpZ2F0aW9uLlxuICogLSBgVmlld0NvbXBvbmVudGAmbWRhc2g7VGhlIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIGFjdGl2ZSBDYWxlbmRhciB2aWV3LlxuICovXG5jbGFzcyBDYWxlbmRhckNvbW1vbk1vZHVsZSB7XG59XG5DYWxlbmRhckNvbW1vbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIEtGb3JPZixcbiAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBWaWV3Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIEtGb3JPZixcbiAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBWaWV3Q29tcG9uZW50XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBFdmVudHNNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFRoZSBleHBvcnRlZCBwYWNrYWdlIG1vZHVsZS5cbiAqXG4gKiBUaGUgcGFja2FnZSBleHBvcnRzOlxuICogLSBgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIHllYXIgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBkZWNhZGUgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgY2VudHVyeSBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYFdlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCB3ZWVrIG51bWJlciBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYEhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBoZWFkZXIgdGl0bGUgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgTmF2aWdhdGlvbkl0ZW1UZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG5hdmlnYXRpb24gaXRlbSB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKi9cbmNsYXNzIFRlbXBsYXRlc01vZHVsZSB7XG59XG5UZW1wbGF0ZXNNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIE1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIENlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIFdlZWtOdW1iZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIEhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBNb250aENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgWWVhckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ2FsZW5kYXJNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbkNhbGVuZGFyTWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdG9kYXk6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIENhbGVuZGFyTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG59XG5DYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENhbGVuZGFyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZGF0ZWlucHV0cyAlfSN0b2MtY3VzdG9tLW1lc3NhZ2VzKSkuXG4gKi9cbmNsYXNzIENhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBDYWxlbmRhck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDYWxlbmRhck1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNhbGVuZGFyLW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuY29uc3QgQ09NUE9ORU5UX0RJUkVDVElWRVMgPSBbXG4gICAgVmlydHVhbGl6YXRpb25Db21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgVmlydHVhbGl6YXRpb24gY29tcG9uZW50LlxuICovXG5jbGFzcyBWaXJ0dWFsaXphdGlvbk1vZHVsZSB7XG59XG5WaXJ0dWFsaXphdGlvbk1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQ09NUE9ORU5UX0RJUkVDVElWRVNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtDT01QT05FTlRfRElSRUNUSVZFU10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYENlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgTW9udGhDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYFllYXJDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSB5ZWFyIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgRGVjYWRlQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgZGVjYWRlIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgQ2VudHVyeUNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGNlbnR1cnkgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggd2VlayBudW1iZXIgY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBIZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgaGVhZGVyIHRpdGxlIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYE5hdmlnYXRpb25JdGVtVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBuYXZpZ2F0aW9uIGl0ZW0gdGVtcGxhdGUgZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIENhbGVuZGFyIG1vZHVsZVxuICogaW1wb3J0IHsgQ2FsZW5kYXJNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kYXRlaW5wdXRzJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgQ2FsZW5kYXJNb2R1bGVdLCAvLyBpbXBvcnQgQ2FsZW5kYXIgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDYWxlbmRhck1vZHVsZSB7XG59XG5DYWxlbmRhck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBWaWV3TGlzdENvbXBvbmVudFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgTmF2aWdhdGlvbkNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgVmlld0xpc3RDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyQ29tbW9uTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZXNNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckNvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgSW50bE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsaXphdGlvbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRzTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBSZXNpemVTZW5zb3JNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckRPTVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENlbnR1cnlWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRGVjYWRlVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIE1vbnRoVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFllYXJWaWV3U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgV2Vla05hbWVzU2VydmljZVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgQ29tcG9uZW50TWVzc2FnZXMge1xufVxuTWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdG9kYXk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByZXZCdXR0b25UaXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbmV4dEJ1dHRvblRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE11bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbk11bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvTXVsdGlWaWV3Q2FsZW5kYXJMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk11bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZGF0ZWlucHV0cyAlfSN0b2MtY3VzdG9tLW1lc3NhZ2VzKSkuXG4gKi9cbmNsYXNzIE11bHRpVmlld0NhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbk11bHRpVmlld0NhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tbXVsdGl2aWV3Y2FsZW5kYXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5NdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBtb250aCBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYE1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgbW9udGggY2VsbCB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKiAtIGBZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlYCZtZGFzaDtUaGUgeWVhciBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYERlY2FkZUNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGRlY2FkZSBjZWxsIHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYENlbnR1cnlDZWxsVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBjZW50dXJ5IGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgV2Vla051bWJlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIG1vbnRoIHdlZWsgbnVtYmVyIGNlbGwgdGVtcGxhdGUgZGlyZWN0aXZlLlxuICogLSBgSGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZWAmbWRhc2g7VGhlIGhlYWRlciB0aXRsZSB0ZW1wbGF0ZSBkaXJlY3RpdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgTXVsdGlWaWV3Q2FsZW5kYXIgbW9kdWxlXG4gKiBpbXBvcnQgeyBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZV0sIC8vIGltcG9ydCBNdWx0aVZpZXdDYWxlbmRhciBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKi9cbmNsYXNzIE11bHRpVmlld0NhbGVuZGFyTW9kdWxlIHtcbn1cbk11bHRpVmlld0NhbGVuZGFyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgSG9yaXpvbnRhbFZpZXdMaXN0Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBNdWx0aVZpZXdDYWxlbmRhckNvbXBvbmVudFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBIb3Jpem9udGFsVmlld0xpc3RDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIE11bHRpVmlld0NhbGVuZGFyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsXG4gICAgICAgICAgICAgICAgICAgIE11bHRpVmlld0NhbGVuZGFyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIE11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhckNvbW1vbk1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDYWxlbmRhckNvbW1vbk1vZHVsZSwgSW50bE1vZHVsZSwgVGVtcGxhdGVzTW9kdWxlLCBQb3B1cE1vZHVsZV0sXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBDZW50dXJ5Vmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERlY2FkZVZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBNb250aFZpZXdTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBZZWFyVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFdlZWtOYW1lc1NlcnZpY2VcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogVGhlIGV4cG9ydGVkIHBhY2thZ2UgbW9kdWxlLlxuICpcbiAqIFRoZSBwYWNrYWdlIGV4cG9ydHM6XG4gKiAtIGBDYWxlbmRhck1vZHVsZWAmbWRhc2g7VGhlIGNhbGVuZGFyIG1vZHVsZS5cbiAqIC0gYE11bHRpVmlld0NhbGVuZGFyTW9kdWxlYCZtZGFzaDtUaGUgbXVsdGktdmlldyBjYWxlbmRhciBtb2R1bGUuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgQ2FsZW5kYXJzIG1vZHVsZVxuICogaW1wb3J0IHsgQ2FsZW5kYXJzTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0cyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgYXBwIGNvbXBvbmVudFxuICogICAgIGltcG9ydHM6ICAgICAgW0Jyb3dzZXJNb2R1bGUsIENhbGVuZGFyc01vZHVsZV0sIC8vIGltcG9ydCB0aGUgQ2FsZW5kYXJzIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2FsZW5kYXJzTW9kdWxlIHtcbn1cbkNhbGVuZGFyc01vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBDYWxlbmRhck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgTXVsdGlWaWV3Q2FsZW5kYXJNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ2FsZW5kYXJNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIE11bHRpVmlld0NhbGVuZGFyTW9kdWxlXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0ZUlucHV0TWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5EYXRlSW5wdXRNZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBkZWNyZW1lbnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluY3JlbWVudDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIERhdGVJbnB1dE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRGF0ZUlucHV0TWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVJbnB1dExvY2FsaXplZE1lc3NhZ2VzXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZUlucHV0TG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZGF0ZWlucHV0cyAlfSN0b2MtY3VzdG9tLW1lc3NhZ2VzKSkuXG4gKi9cbmNsYXNzIERhdGVJbnB1dEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgRGF0ZUlucHV0TWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5EYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBEYXRlSW5wdXRNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVJbnB1dEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGF0ZWlucHV0LW1lc3NhZ2VzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZUlucHV0Q3VzdG9tTWVzc2FnZXNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIERhdGVJbnB1dCBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERhdGVJbnB1dE1vZHVsZSB7XG59XG5EYXRlSW5wdXRNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVJbnB1dEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVJbnB1dEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgSW50bE1vZHVsZSwgRXZlbnRzTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0ZVBpY2tlck1lc3NhZ2VzIGV4dGVuZHMgQ29tcG9uZW50TWVzc2FnZXMge1xufVxuRGF0ZVBpY2tlck1lc3NhZ2VzLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvZGF5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b2dnbGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgRGF0ZVBpY2tlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IERhdGVQaWNrZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ2xvYmFsaXphdGlvbl9kYXRlaW5wdXRzICV9I3RvYy1jdXN0b20tbWVzc2FnZXMpKS5cbiAqL1xuY2xhc3MgRGF0ZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgRGF0ZVBpY2tlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuRGF0ZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IERhdGVQaWNrZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWRhdGVwaWNrZXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbmNvbnN0IMm1MCRlID0gdG91Y2hFbmFibGVkO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRGF0ZVBpY2tlciBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERhdGVQaWNrZXJNb2R1bGUge1xufVxuRGF0ZVBpY2tlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgIERhdGVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZXNNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBJbnRsTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBQb3B1cE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGVzTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBFdmVudHNNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVE9VQ0hfRU5BQkxFRCwgdXNlVmFsdWU6IMm1MCRlIH1dXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbmNvbnN0IENPTVBPTkVOVF9ESVJFQ1RJVkVTJDEgPSBbXG4gICAgRGF0ZVJhbmdlQ29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBvcHVwQ29tcG9uZW50LFxuICAgIERhdGVSYW5nZVBvcHVwVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgRGF0ZVJhbmdlU2VsZWN0aW9uRGlyZWN0aXZlLFxuICAgIERhdGVSYW5nZVN0YXJ0SW5wdXREaXJlY3RpdmUsXG4gICAgRGF0ZVJhbmdlRW5kSW5wdXREaXJlY3RpdmVcbl07XG5jb25zdCBDT01QT05FTlRfTU9EVUxFUyA9IFtcbiAgICBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZSxcbiAgICBEYXRlSW5wdXRNb2R1bGUsXG4gICAgUG9wdXBNb2R1bGUsXG4gICAgRXZlbnRzTW9kdWxlXG5dO1xuLyoqXG4gKiBUaGUgZXhwb3J0ZWQgcGFja2FnZSBtb2R1bGUuXG4gKlxuICogVGhlIHBhY2thZ2UgZXhwb3J0czpcbiAqIC0gYERhdGVSYW5nZUNvbXBvbmVudGAmbWRhc2g7VGhlIERhdGVSYW5nZSBjb21wb25lbnQgY2xhc3MuXG4gKiAtIGBEYXRlUmFuZ2VQb3B1cENvbXBvbmVudGAmbWRhc2g7VGhlIERhdGVSYW5nZVBvcHVwIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYERhdGVSYW5nZVNlbGVjdGlvbkRpcmVjdGl2ZWAmbWRhc2g7VGhlIE11bHRpdmlld0NhbGVuZGFyIGRhdGUgcmFuZ2Ugc2VsZWN0aW9uIGRpcmVjdGl2ZS5cbiAqIC0gYERhdGVSYW5nZUVuZElucHV0RGlyZWN0aXZlYCZtZGFzaDtUaGUgZW5kIERhdGVJbnB1dCBkYXRlIHJhbmdlIHNlbGVjdGlvbiBkaXJlY3RpdmUuXG4gKiAtIGBEYXRlUmFuZ2VTdGFydElucHV0RGlyZWN0aXZlYCZtZGFzaDtUaGUgc3RhcnQgRGF0ZUlucHV0IGRhdGUgcmFuZ2Ugc2VsZWN0aW9uIGRpcmVjdGl2ZS5cbiAqIC0gYERhdGVSYW5nZVBvcHVwVGVtcGxhdGVEaXJlY3RpdmVgJm1kYXNoO1RoZSBEYXRlUmFuZ2VQb3B1cCBjb250ZW50IHRlbXBsYXRlIGRpcmVjdGl2ZS5cbiAqIC0gYE11bHRpVmlld0NhbGVuZGFyTW9kdWxlYCZtZGFzaDtUaGUgTXVsdGlWaWV3Q2FsZW5kYXIgbW9kdWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIERhdGVSYW5nZSBtb2R1bGVcbiAqIGltcG9ydCB7IERhdGVSYW5nZU1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBEYXRlUmFuZ2VNb2R1bGVdLCAvLyBpbXBvcnQgRGF0ZVJhbmdlIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgRGF0ZVJhbmdlTW9kdWxlIHtcbn1cbkRhdGVSYW5nZU1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbQ09NUE9ORU5UX0RJUkVDVElWRVMkMV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTJDFdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIENPTVBPTkVOVF9NT0RVTEVTXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBkaXYkMSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ2RpdicpO1xuY29uc3QgdWwkMSA9IGRvbUNvbnRhaW5lckZhY3RvcnkoJ3VsJyk7XG5jb25zdCBsaSQxID0gZG9tQ29udGFpbmVyRmFjdG9yeSgnbGknKTtcbmNvbnN0IGxpc3RJdGVtID0gKCkgPT4gbGkkMSgnPHNwYW4+MDI8L3NwYW4+JywgJ2staXRlbScpO1xuY29uc3QgbGlzdCA9ICgpID0+IHVsJDEoW2xpc3RJdGVtKCldLCAnay1yZXNldCcpO1xuY29uc3Qgc2Nyb2xsYWJsZSQxID0gKCkgPT4gKGRpdiQxKFtsaXN0KCldLCAnay10aW1lLWNvbnRhaW5lciBrLWNvbnRlbnQgay1zY3JvbGxhYmxlJykpO1xuY29uc3QgdGltZUxpc3RXcmFwcGVyID0gKCkgPT4ge1xuICAgIGlmICghaXNEb2N1bWVudEF2YWlsYWJsZSgpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZGl2JDEoW2RpdiQxKFtzY3JvbGxhYmxlJDEoKV0sICdrLXRpbWUtbGlzdCcpXSwgJ2stdGltZS1saXN0LXdyYXBwZXInLCB7IGxlZnQ6ICctMTAwMDBweCcsIHBvc2l0aW9uOiAnYWJzb2x1dGUnIH0pO1xufTtcbmNvbnN0IFRJTUVMSVNUX1dSQVBQRVIgPSB0aW1lTGlzdFdyYXBwZXIoKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUaW1lUGlja2VyRE9NU2VydmljZSB7XG4gICAgZW5zdXJlSGVpZ2h0cygpIHtcbiAgICAgICAgaWYgKHRoaXMudGltZUxpc3RIZWlnaHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlSGVpZ2h0cygpO1xuICAgIH1cbiAgICBjYWxjdWxhdGVIZWlnaHRzKGNvbnRhaW5lcikge1xuICAgICAgICBpZiAoIWlzRG9jdW1lbnRBdmFpbGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpc3RDb250YWluZXIgPSBjb250YWluZXIgJiYgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5rLXRpbWUtbGlzdC1jb250YWluZXInKTtcbiAgICAgICAgY29uc3QgaG9zdENvbnRhaW5lciA9IGxpc3RDb250YWluZXIgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGhvc3RDb250YWluZXIuYXBwZW5kQ2hpbGQoVElNRUxJU1RfV1JBUFBFUik7XG4gICAgICAgIHRoaXMudGltZUxpc3RIZWlnaHQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoJy5rLXNjcm9sbGFibGUnKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcignbGknKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIGhvc3RDb250YWluZXIucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgfVxuICAgIGlzQWN0aXZlKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkgfHwgIWVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKGVsZW1lbnQubmF0aXZlRWxlbWVudCB8fCBlbGVtZW50KSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICB9XG59XG5UaW1lUGlja2VyRE9NU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuY29uc3QgSE9VUlNfSU5fREFZID0gMjQ7XG5jb25zdCBjbGFtcFRvUmFuZ2UgPSAocmFuZ2VWYWx1ZSkgPT4gKHZhbHVlKSA9PiB2YWx1ZSAlIHJhbmdlVmFsdWU7XG5jb25zdCBjbGFtcCA9IGNsYW1wVG9SYW5nZShIT1VSU19JTl9EQVkpO1xuY29uc3Qgc3RlcHBlciA9IChzdGFydCwgc3RlcCkgPT4gKGlkeCkgPT4gY2xhbXAoc3RhcnQgKyAoaWR4ICogc3RlcCkpO1xuY29uc3QgZGlzdGFuY2VGcm9tTWluID0gKHZhbHVlLCBtaW4pID0+IGNsYW1wKEhPVVJTX0lOX0RBWSArIHZhbHVlIC0gbWluKTtcbmNvbnN0IGxpbWl0ID0gKGJvcmRlclZhbHVlKSA9PiAoYmFycmllciwgdmFsdWUpID0+IHtcbiAgICBjb25zdCB1c2VCYXJyaWVyID0gIXZhbHVlIHx8IGdldERhdGUoYmFycmllcikuZ2V0VGltZSgpID09PSBnZXREYXRlKHZhbHVlKS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIHVzZUJhcnJpZXIgPyBiYXJyaWVyIDogc2V0SG91cnMoYmFycmllciwgYm9yZGVyVmFsdWUpO1xufTtcbmNvbnN0IGxpbWl0RG93biA9IGxpbWl0KDApO1xuY29uc3QgbGltaXRVcCA9IGxpbWl0KEhPVVJTX0lOX0RBWSAtIDEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEhvdXJzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaW50bCkge1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmJvdW5kUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggPSBmYWxzZTtcbiAgICB9XG4gICAgYXBwbHkodmFsdWUsIGNhbmRpZGF0ZSkge1xuICAgICAgICByZXR1cm4gc2V0SG91cnModmFsdWUsIGNhbmRpZGF0ZS5nZXRIb3VycygpKTtcbiAgICB9XG4gICAgY29uZmlndXJlKHNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHsgYm91bmRSYW5nZSA9IHRoaXMuYm91bmRSYW5nZSwgaW5zZXJ0VW5kaXZpZGVkTWF4ID0gdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXgsIG1pbiA9IHRoaXMubWluLCBtYXggPSB0aGlzLm1heCwgcGFydCwgc3RlcCA9IHRoaXMuc3RlcCB9ID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuYm91bmRSYW5nZSA9IGJvdW5kUmFuZ2U7XG4gICAgICAgIHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ID0gaW5zZXJ0VW5kaXZpZGVkTWF4O1xuICAgICAgICB0aGlzLnRvTGlzdEl0ZW0gPSAoaG91cikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IHNldEhvdXJzKE1JRE5JR0hUX0RBVEUsIGhvdXIpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmludGwuZm9ybWF0RGF0ZShkYXRlLCBwYXJ0LnBhdHRlcm4pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgfVxuICAgIGRhdGEoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluXSA9IHRoaXMucmFuZ2Uoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGdldEhvdXIgPSBzdGVwcGVyKG1pbiwgdGhpcy5zdGVwKTtcbiAgICAgICAgY29uc3QgY29udmVydFRvSXRlbSA9IChpZHgpID0+ICh0aGlzLnRvTGlzdEl0ZW0oZ2V0SG91cihpZHgpKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByYW5nZSgwLCB0aGlzLmNvdW50RnJvbU1pbihzZWxlY3RlZFZhbHVlKSkubWFwKGNvbnZlcnRUb0l0ZW0pO1xuICAgICAgICB0aGlzLmFkZExhc3QoZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZyhkYXRhLCBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlzUmFuZ2VDaGFuZ2VkKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiAhaXNFcXVhbCh0aGlzLm1pbiwgbWluKSB8fCAhaXNFcXVhbCh0aGlzLm1heCwgbWF4KTtcbiAgICB9XG4gICAgbGltaXRSYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm91bmRSYW5nZSA/IFtsaW1pdERvd24obWluLCB2YWx1ZSksIGxpbWl0VXAobWF4LCB2YWx1ZSldIDogW21pbiwgbWF4XTtcbiAgICB9XG4gICAgdG90YWwodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbGFzdCQkMSA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkgPyAxIDogMDtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IHRoaXMuaXNNaXNzaW5nKHZhbHVlKSA/IDEgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEZyb21NaW4odmFsdWUpICsgbWlzc2luZyArIGxhc3QkJDE7XG4gICAgfVxuICAgIHNlbGVjdGVkSW5kZXgodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmRpdmlkZUJ5U3RlcCh2YWx1ZSkpO1xuICAgIH1cbiAgICB2YWx1ZUluTGlzdCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXRjaE1heCA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMubGFzdEhvdXIodmFsdWUpID09PSB2YWx1ZS5nZXRIb3VycygpO1xuICAgICAgICByZXR1cm4gbWF0Y2hNYXggfHwgIXRoaXMuaXNNaXNzaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgYWRkTGFzdChkYXRhLCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggJiYgdGhpcy5pc0xhc3RNaXNzaW5nKHZhbHVlKSkge1xuICAgICAgICAgICAgZGF0YS5wdXNoKHRoaXMudG9MaXN0SXRlbSh0aGlzLmxhc3RIb3VyKHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBhZGRNaXNzaW5nKGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlSW5MaXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW0gPSB0aGlzLnRvTGlzdEl0ZW0odmFsdWUuZ2V0SG91cnMoKSk7XG4gICAgICAgIGRhdGEuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSksIDAsIG1pc3NpbmdJdGVtKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvdW50RnJvbU1pbih2YWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5yYW5nZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRpc3RhbmNlRnJvbU1pbihtYXgsIG1pbikgLyB0aGlzLnN0ZXApICsgMTsgLyogaW5jbHVkZSBtaW4gKi9cbiAgICB9XG4gICAgaXNNaXNzaW5nKHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEluZGV4KHZhbHVlKSAhPT0gdGhpcy5kaXZpZGVCeVN0ZXAodmFsdWUpO1xuICAgIH1cbiAgICBpc0xhc3RNaXNzaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTWlzc2luZyhzZXRIb3Vycyh0aGlzLm1heCwgdGhpcy5sYXN0SG91cih2YWx1ZSkpKTtcbiAgICB9XG4gICAgZGl2aWRlQnlTdGVwKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkaXN0YW5jZUZyb21NaW4odmFsdWUuZ2V0SG91cnMoKSwgdGhpcy5taW4uZ2V0SG91cnMoKSkgLyB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIGxhc3RIb3VyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhbmdlKHZhbHVlKVsxXTtcbiAgICB9XG4gICAgcmFuZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMubGltaXRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFttaW4uZ2V0SG91cnMoKSwgbWF4LmdldEhvdXJzKCldO1xuICAgIH1cbn1cbkhvdXJzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSG91cnNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuY29uc3QgTUlOVVRFU19JTl9IT1VSID0gNjA7XG5jb25zdCBjbGFtcFRvUmFuZ2UkMSA9IChyYW5nZVZhbHVlKSA9PiAodmFsdWUpID0+IHZhbHVlICUgcmFuZ2VWYWx1ZTtcbmNvbnN0IGNsYW1wJDEgPSBjbGFtcFRvUmFuZ2UkMShNSU5VVEVTX0lOX0hPVVIpO1xuY29uc3Qgc3RlcHBlciQxID0gKHN0YXJ0LCBzdGVwKSA9PiAoaWR4KSA9PiBjbGFtcCQxKHN0YXJ0ICsgKGlkeCAqIHN0ZXApKTtcbmNvbnN0IGRpc3RhbmNlRnJvbU1pbiQxID0gKHZhbHVlLCBtaW4pID0+IGNsYW1wJDEoTUlOVVRFU19JTl9IT1VSICsgdmFsdWUgLSBtaW4pO1xuY29uc3QgbGltaXQkMSA9IChib3JkZXJWYWx1ZSkgPT4gKGJhcnJpZXIsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdXNlQmFycmllciA9ICF2YWx1ZSB8fCBiYXJyaWVyLmdldEhvdXJzKCkgPT09IHZhbHVlLmdldEhvdXJzKCk7XG4gICAgcmV0dXJuIHVzZUJhcnJpZXIgPyBiYXJyaWVyIDogc2V0TWludXRlcyhiYXJyaWVyLCBib3JkZXJWYWx1ZSk7XG59O1xuY29uc3QgbGltaXREb3duJDEgPSBsaW1pdCQxKDApO1xuY29uc3QgbGltaXRVcCQxID0gbGltaXQkMShNSU5VVEVTX0lOX0hPVVIgLSAxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBNaW51dGVzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaW50bCkge1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmluc2VydFVuZGl2aWRlZE1heCA9IGZhbHNlO1xuICAgIH1cbiAgICBhcHBseSh2YWx1ZSwgY2FuZGlkYXRlKSB7XG4gICAgICAgIHJldHVybiBzZXRNaW51dGVzKHZhbHVlLCBjYW5kaWRhdGUuZ2V0TWludXRlcygpKTtcbiAgICB9XG4gICAgY29uZmlndXJlKHNldHRpbmdzKSB7XG4gICAgICAgIGNvbnN0IHsgaW5zZXJ0VW5kaXZpZGVkTWF4ID0gdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXgsIG1pbiA9IHRoaXMubWluLCBtYXggPSB0aGlzLm1heCwgcGFydCwgc3RlcCA9IHRoaXMuc3RlcCB9ID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ID0gaW5zZXJ0VW5kaXZpZGVkTWF4O1xuICAgICAgICB0aGlzLnRvTGlzdEl0ZW0gPSAobWludXRlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRlID0gc2V0TWludXRlcyhNSUROSUdIVF9EQVRFLCBtaW51dGUpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmludGwuZm9ybWF0RGF0ZShkYXRlLCBwYXJ0LnBhdHRlcm4pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgfVxuICAgIGRhdGEoc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBjb25zdCBbbWluXSA9IHRoaXMucmFuZ2Uoc2VsZWN0ZWRWYWx1ZSk7XG4gICAgICAgIGNvbnN0IGdldE1pbnV0ZSA9IHN0ZXBwZXIkMShtaW4sIHRoaXMuc3RlcCk7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRUb0l0ZW0gPSAoaWR4KSA9PiAodGhpcy50b0xpc3RJdGVtKGdldE1pbnV0ZShpZHgpKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSByYW5nZSgwLCB0aGlzLmNvdW50RnJvbU1pbihzZWxlY3RlZFZhbHVlKSkubWFwKGNvbnZlcnRUb0l0ZW0pO1xuICAgICAgICB0aGlzLmFkZExhc3QoZGF0YSk7XG4gICAgICAgIHRoaXMuYWRkTWlzc2luZyhkYXRhLCBzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlzUmFuZ2VDaGFuZ2VkKG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiAhaXNFcXVhbCh0aGlzLm1pbiwgbWluKSB8fCAhaXNFcXVhbCh0aGlzLm1heCwgbWF4KTtcbiAgICB9XG4gICAgbGltaXRSYW5nZShtaW4sIG1heCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFtsaW1pdERvd24kMShtaW4sIHZhbHVlKSwgbGltaXRVcCQxKG1heCwgdmFsdWUpXTtcbiAgICB9XG4gICAgdG90YWwodmFsdWUpIHtcbiAgICAgICAgY29uc3QgbGFzdCQkMSA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkgPyAxIDogMDtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IHRoaXMuaXNNaXNzaW5nKHZhbHVlKSA/IDEgOiAwO1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEZyb21NaW4odmFsdWUpICsgbWlzc2luZyArIGxhc3QkJDE7XG4gICAgfVxuICAgIHNlbGVjdGVkSW5kZXgodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmRpdmlkZUJ5U3RlcCh2YWx1ZSkpO1xuICAgIH1cbiAgICB2YWx1ZUluTGlzdCh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXRjaE1heCA9IHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMubGFzdE1pbnV0ZSh2YWx1ZSkgPT09IHZhbHVlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoTWF4IHx8ICF0aGlzLmlzTWlzc2luZyh2YWx1ZSk7XG4gICAgfVxuICAgIGFkZExhc3QoZGF0YSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh0aGlzLnRvTGlzdEl0ZW0odGhpcy5sYXN0TWludXRlKHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBhZGRNaXNzaW5nKGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlSW5MaXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW0gPSB0aGlzLnRvTGlzdEl0ZW0odmFsdWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgZGF0YS5zcGxpY2UodGhpcy5zZWxlY3RlZEluZGV4KHZhbHVlKSwgMCwgbWlzc2luZ0l0ZW0pO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY291bnRGcm9tTWluKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLnJhbmdlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGlzdGFuY2VGcm9tTWluJDEobWF4LCBtaW4pIC8gdGhpcy5zdGVwKSArIDE7IC8qIGluY2x1ZGUgbWluICovXG4gICAgfVxuICAgIGlzTWlzc2luZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSkgIT09IHRoaXMuZGl2aWRlQnlTdGVwKHZhbHVlKTtcbiAgICB9XG4gICAgaXNMYXN0TWlzc2luZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01pc3Npbmcoc2V0TWludXRlcyh0aGlzLm1heCwgdGhpcy5sYXN0TWludXRlKHZhbHVlKSkpO1xuICAgIH1cbiAgICBkaXZpZGVCeVN0ZXAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlRnJvbU1pbiQxKHZhbHVlLmdldE1pbnV0ZXMoKSwgdGhpcy5taW4uZ2V0TWludXRlcygpKSAvIHRoaXMuc3RlcDtcbiAgICB9XG4gICAgbGFzdE1pbnV0ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5yYW5nZSh2YWx1ZSlbMV07XG4gICAgfVxuICAgIHJhbmdlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLmxpbWl0UmFuZ2UodGhpcy5taW4sIHRoaXMubWF4LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiBbbWluLmdldE1pbnV0ZXMoKSwgbWF4LmdldE1pbnV0ZXMoKV07XG4gICAgfVxufVxuTWludXRlc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk1pbnV0ZXNTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfVxuXTtcblxuY29uc3QgU0VDT05EU19JTl9IT1VSID0gNjA7XG5jb25zdCBjbGFtcFRvUmFuZ2UkMiA9IChyYW5nZVZhbHVlKSA9PiAodmFsdWUpID0+IHZhbHVlICUgcmFuZ2VWYWx1ZTtcbmNvbnN0IGNsYW1wJDIgPSBjbGFtcFRvUmFuZ2UkMihTRUNPTkRTX0lOX0hPVVIpO1xuY29uc3Qgc3RlcHBlciQyID0gKHN0YXJ0LCBzdGVwKSA9PiAoaWR4KSA9PiBjbGFtcCQyKHN0YXJ0ICsgKGlkeCAqIHN0ZXApKTtcbmNvbnN0IGRpc3RhbmNlRnJvbU1pbiQyID0gKHZhbHVlLCBtaW4pID0+IGNsYW1wJDIoU0VDT05EU19JTl9IT1VSICsgdmFsdWUgLSBtaW4pO1xuY29uc3QgbGltaXQkMiA9IChib3JkZXJWYWx1ZSkgPT4gKGJhcnJpZXIsIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdXNlQmFycmllciA9ICF2YWx1ZSB8fCBiYXJyaWVyLmdldEhvdXJzKCkgPT09IHZhbHVlLmdldEhvdXJzKCkgJiYgYmFycmllci5nZXRNaW51dGVzKCkgPT09IHZhbHVlLmdldE1pbnV0ZXMoKTtcbiAgICByZXR1cm4gdXNlQmFycmllciA/IGJhcnJpZXIgOiBzZXRTZWNvbmRzKGJhcnJpZXIsIGJvcmRlclZhbHVlKTtcbn07XG5jb25zdCBsaW1pdERvd24kMiA9IGxpbWl0JDIoMCk7XG5jb25zdCBsaW1pdFVwJDIgPSBsaW1pdCQyKFNFQ09ORFNfSU5fSE9VUiAtIDEpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNlY29uZHNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihpbnRsKSB7XG4gICAgICAgIHRoaXMuaW50bCA9IGludGw7XG4gICAgICAgIHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ID0gZmFsc2U7XG4gICAgfVxuICAgIGFwcGx5KHZhbHVlLCBjYW5kaWRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHNldFNlY29uZHModmFsdWUsIGNhbmRpZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgIH1cbiAgICBjb25maWd1cmUoc2V0dGluZ3MpIHtcbiAgICAgICAgY29uc3QgeyBpbnNlcnRVbmRpdmlkZWRNYXggPSB0aGlzLmluc2VydFVuZGl2aWRlZE1heCwgbWluID0gdGhpcy5taW4sIG1heCA9IHRoaXMubWF4LCBwYXJ0LCBzdGVwID0gdGhpcy5zdGVwIH0gPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggPSBpbnNlcnRVbmRpdmlkZWRNYXg7XG4gICAgICAgIHRoaXMudG9MaXN0SXRlbSA9IChtaW51dGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBzZXRTZWNvbmRzKE1JRE5JR0hUX0RBVEUsIG1pbnV0ZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuaW50bC5mb3JtYXREYXRlKGRhdGUsIHBhcnQucGF0dGVybiksXG4gICAgICAgICAgICAgICAgdmFsdWU6IGRhdGVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy5zdGVwID0gc3RlcDtcbiAgICB9XG4gICAgZGF0YShzZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW5dID0gdGhpcy5yYW5nZShzZWxlY3RlZFZhbHVlKTtcbiAgICAgICAgY29uc3QgZ2V0U2Vjb25kID0gc3RlcHBlciQyKG1pbiwgdGhpcy5zdGVwKTtcbiAgICAgICAgY29uc3QgY29udmVydFRvSXRlbSA9IChpZHgpID0+ICh0aGlzLnRvTGlzdEl0ZW0oZ2V0U2Vjb25kKGlkeCkpKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHJhbmdlKDAsIHRoaXMuY291bnRGcm9tTWluKHNlbGVjdGVkVmFsdWUpKS5tYXAoY29udmVydFRvSXRlbSk7XG4gICAgICAgIHRoaXMuYWRkTGFzdChkYXRhKTtcbiAgICAgICAgdGhpcy5hZGRNaXNzaW5nKGRhdGEsIHNlbGVjdGVkVmFsdWUpO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaXNSYW5nZUNoYW5nZWQobWluLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICFpc0VxdWFsKHRoaXMubWluLCBtaW4pIHx8ICFpc0VxdWFsKHRoaXMubWF4LCBtYXgpO1xuICAgIH1cbiAgICBsaW1pdFJhbmdlKG1pbiwgbWF4LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gW2xpbWl0RG93biQyKG1pbiwgdmFsdWUpLCBsaW1pdFVwJDIobWF4LCB2YWx1ZSldO1xuICAgIH1cbiAgICB0b3RhbCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBsYXN0JCQxID0gdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggJiYgdGhpcy5pc0xhc3RNaXNzaW5nKHZhbHVlKSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gdGhpcy5pc01pc3NpbmcodmFsdWUpID8gMSA6IDA7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50RnJvbU1pbih2YWx1ZSkgKyBtaXNzaW5nICsgbGFzdCQkMTtcbiAgICB9XG4gICAgc2VsZWN0ZWRJbmRleCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZGl2aWRlQnlTdGVwKHZhbHVlKSk7XG4gICAgfVxuICAgIHZhbHVlSW5MaXN0KHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoTWF4ID0gdGhpcy5pbnNlcnRVbmRpdmlkZWRNYXggJiYgdGhpcy5sYXN0U2Vjb25kKHZhbHVlKSA9PT0gdmFsdWUuZ2V0U2Vjb25kcygpO1xuICAgICAgICByZXR1cm4gbWF0Y2hNYXggfHwgIXRoaXMuaXNNaXNzaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZGl2aWRlQnlTdGVwKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkaXN0YW5jZUZyb21NaW4kMih2YWx1ZS5nZXRTZWNvbmRzKCksIHRoaXMubWluLmdldFNlY29uZHMoKSkgLyB0aGlzLnN0ZXA7XG4gICAgfVxuICAgIGFkZExhc3QoZGF0YSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5zZXJ0VW5kaXZpZGVkTWF4ICYmIHRoaXMuaXNMYXN0TWlzc2luZyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh0aGlzLnRvTGlzdEl0ZW0odGhpcy5sYXN0U2Vjb25kKHZhbHVlKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBhZGRNaXNzaW5nKGRhdGEsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlSW5MaXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWlzc2luZ0l0ZW0gPSB0aGlzLnRvTGlzdEl0ZW0odmFsdWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgZGF0YS5zcGxpY2UodGhpcy5zZWxlY3RlZEluZGV4KHZhbHVlKSwgMCwgbWlzc2luZ0l0ZW0pO1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgY291bnRGcm9tTWluKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLnJhbmdlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGlzdGFuY2VGcm9tTWluJDIobWF4LCBtaW4pIC8gdGhpcy5zdGVwKSArIDE7IC8qIGluY2x1ZGUgbWluICovXG4gICAgfVxuICAgIGlzTWlzc2luZyh2YWx1ZSkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJbmRleCh2YWx1ZSkgIT09IHRoaXMuZGl2aWRlQnlTdGVwKHZhbHVlKTtcbiAgICB9XG4gICAgaXNMYXN0TWlzc2luZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc01pc3Npbmcoc2V0U2Vjb25kcyh0aGlzLm1heCwgdGhpcy5sYXN0U2Vjb25kKHZhbHVlKSkpO1xuICAgIH1cbiAgICBsYXN0U2Vjb25kKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJhbmdlKHZhbHVlKVsxXTtcbiAgICB9XG4gICAgcmFuZ2UodmFsdWUpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMubGltaXRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgsIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIFttaW4uZ2V0U2Vjb25kcygpLCBtYXguZ2V0U2Vjb25kcygpXTtcbiAgICB9XG59XG5TZWNvbmRzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU2Vjb25kc1NlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9XG5dO1xuXG5jb25zdCBzZXRIb3VycyQxID0gKGRhdGUsIGhvdXJzKSA9PiB7XG4gICAgY29uc3QgY2xvbmUgPSBjbG9uZURhdGUoZGF0ZSk7XG4gICAgY2xvbmUuc2V0SG91cnMoaG91cnMpO1xuICAgIHJldHVybiBjbG9uZTtcbn07XG5jb25zdCBpc0FNID0gKHZhbHVlKSA9PiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSA8IDEyO1xuY29uc3QgaXNQTSA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgKCF2YWx1ZSB8fCB2YWx1ZSA+IDExKTtcbmNvbnN0IGluUmFuZ2UgPSAodmFsdWUsIG1pbiwgbWF4KSA9PiAoKCFtaW4gJiYgIW1heCkgfHwgKHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgpKTtcbmNvbnN0IGluUmV2ZXJzZVJhbmdlID0gKHZhbHVlLCBtaW4sIG1heCkgPT4gKCghbWluICYmICFtYXgpIHx8IHZhbHVlID49IG1pbiB8fCB2YWx1ZSA8PSBtYXgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERheVBlcmlvZFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGludGwpIHtcbiAgICAgICAgdGhpcy5pbnRsID0gaW50bDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGFwcGx5KHZhbHVlLCBjYW5kaWRhdGUpIHtcbiAgICAgICAgY29uc3QgaG91ciA9IHZhbHVlLmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IGhvdXJBTSA9IGlzQU0oaG91cik7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZUFNID0gaXNBTShjYW5kaWRhdGUuZ2V0SG91cnMoKSk7XG4gICAgICAgIGlmICgoaG91ckFNICYmIGNhbmRpZGF0ZUFNKSB8fCAoIWhvdXJBTSAmJiAhY2FuZGlkYXRlQU0pKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW21pbiwgbWF4ID0gMjRdID0gdGhpcy5ub3JtYWxpemVkUmFuZ2UoKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gaG91ciArIChjYW5kaWRhdGVBTSA/IC0xMiA6IDEyKTtcbiAgICAgICAgcmV0dXJuIHNldEhvdXJzJDEodmFsdWUsIE1hdGgubWluKE1hdGgubWF4KG1pbiwgcmVzdWx0KSwgKG1heCB8fCAyNCkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbmZpZ3VyZShzZXR0aW5ncykge1xuICAgICAgICBjb25zdCB7IG1pbiA9IHRoaXMubWluLCBtYXggPSB0aGlzLm1heCwgcGFydCA9IHRoaXMucGFydCB9ID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgdGhpcy5wYXJ0ID0gcGFydDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGRhdGEoXykge1xuICAgICAgICBjb25zdCBuYW1lcyA9IHRoaXMucGFydC5uYW1lcztcbiAgICAgICAgaWYgKCFuYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSBbXTtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IHRoaXMubm9ybWFsaXplZFJhbmdlKCk7XG4gICAgICAgIGNvbnN0IGRheVBlcmlvZCA9IHRoaXMuaW50bC5kYXRlRm9ybWF0TmFtZXMobmFtZXMpO1xuICAgICAgICBpZiAoaXNBTShtaW4pKSB7XG4gICAgICAgICAgICBkYXRhLnB1c2goeyB0ZXh0OiBkYXlQZXJpb2QuYW0sIHZhbHVlOiBzZXRIb3VycyQxKHRoaXMubWluLCBtaW4pIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BNKG1heCkpIHtcbiAgICAgICAgICAgIGRhdGEucHVzaCh7IHRleHQ6IGRheVBlcmlvZC5wbSwgdmFsdWU6IHNldEhvdXJzJDEodGhpcy5taW4sIE1hdGgubWF4KDEyLCBtYXgpKSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5taW4uZ2V0SG91cnMoKSAhPT0gbWluID8gZGF0YS5yZXZlcnNlKCkgOiBkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaXNSYW5nZUNoYW5nZWQoXywgX18pIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbGltaXRSYW5nZShtaW4sIG1heCwgXykge1xuICAgICAgICByZXR1cm4gW21pbiwgbWF4XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvdGFsKCkge1xuICAgICAgICBjb25zdCBbbWluLCBtYXhdID0gdGhpcy5ub3JtYWxpemVkUmFuZ2UoKTtcbiAgICAgICAgaWYgKCFtaW4gJiYgIW1heCkge1xuICAgICAgICAgICAgcmV0dXJuIDI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbiA+IDExIHx8IG1heCA8IDEyKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNlbGVjdGVkSW5kZXgodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlSW5MaXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gTWF0aC5mbG9vcih2YWx1ZS5nZXRIb3VycygpIC8gMTIpO1xuICAgICAgICByZXR1cm4gdGhpcy5taW4uZ2V0SG91cnMoKSA9PT0gdGhpcy5ub3JtYWxpemVkUmFuZ2UoKVswXSA/IGluZGV4IDogKGluZGV4ID09PSAwID8gMSA6IDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdmFsdWVJbkxpc3QodmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IHRoaXMubWluLmdldEhvdXJzKCkgIT09IHRoaXMubm9ybWFsaXplZFJhbmdlKClbMF07XG4gICAgICAgIGNvbnN0IGlzSW5SYW5nZSA9IHJldmVyc2UgPyBpblJldmVyc2VSYW5nZSA6IGluUmFuZ2U7XG4gICAgICAgIHJldHVybiBpc0luUmFuZ2UodmFsdWUuZ2V0SG91cnMoKSwgdGhpcy5taW4uZ2V0SG91cnMoKSwgdGhpcy5tYXguZ2V0SG91cnMoKSk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZWRSYW5nZSgpIHtcbiAgICAgICAgY29uc3QgbWluSG91ciA9IHRoaXMubWluLmdldEhvdXJzKCk7XG4gICAgICAgIGNvbnN0IG1heEhvdXIgPSB0aGlzLm1heC5nZXRIb3VycygpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgTWF0aC5taW4obWluSG91ciwgbWF4SG91ciksXG4gICAgICAgICAgICBNYXRoLm1heChtaW5Ib3VyLCBtYXhIb3VyKVxuICAgICAgICBdO1xuICAgIH1cbn1cbkRheVBlcmlvZFNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRheVBlcmlvZFNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBJbnRsU2VydmljZSB9XG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpjb21wb25lbnQtc2VsZWN0b3ItbmFtZSAgY29tcG9uZW50LXNlbGVjdG9yLXR5cGUgKi9cbmNvbnN0IFNOQVBfVEhSRVNIT0xEID0gMC4wNTsgLy8lIG9mIHRoZSBpdGVtIGhlaWdodFxuY29uc3QgU0NST0xMX1RIUkVTSE9MRCA9IDI7IC8vPCAycHggdGhyZXNob2xkXG5jb25zdCBuaWwgPSAoKSA9PiAobnVsbCk7XG5jb25zdCBnZXR0ZXJzID0ge1xuICAgIDM1OiAoZGF0YSwgXykgPT4gZGF0YVtkYXRhLmxlbmd0aCAtIDFdLFxuICAgIDM2OiAoZGF0YSwgXykgPT4gZGF0YVswXSxcbiAgICAzODogKGRhdGEsIGluZGV4KSA9PiBkYXRhW2luZGV4IC0gMV0sXG4gICAgNDA6IChkYXRhLCBpbmRleCkgPT4gZGF0YVtpbmRleCArIDFdXG59O1xuY29uc3Qgc2VydmljZXMkMSA9IHtcbiAgICBbVElNRV9QQVJULmRheXBlcmlvZF06IERheVBlcmlvZFNlcnZpY2UsXG4gICAgW1RJTUVfUEFSVC5ob3VyXTogSG91cnNTZXJ2aWNlLFxuICAgIFtUSU1FX1BBUlQubWludXRlXTogTWludXRlc1NlcnZpY2UsXG4gICAgW1RJTUVfUEFSVC5zZWNvbmRdOiBTZWNvbmRzU2VydmljZVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUaW1lTGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgaW5qZWN0b3IsIGRvbSwgcmVuZGVyZXIsIHpvbmUpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLm1pbiA9IGNsb25lRGF0ZShNSUROSUdIVF9EQVRFKTtcbiAgICAgICAgdGhpcy5tYXggPSBjbG9uZURhdGUoTUFYX1RJTUUpO1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50Q2xhc3MgPSB0cnVlO1xuICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNraXAgPSAwO1xuICAgICAgICB0aGlzLnRvdGFsID0gNjA7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSAtMTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBbXTtcbiAgICB9XG4gICAgZ2V0IHRhYkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IHVuZGVmaW5lZCA6IDA7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMucGFydCkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoc2VydmljZXMkMVt0aGlzLnBhcnQudHlwZV0pO1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ3VyZSh0aGlzLnNlcnZpY2VTZXR0aW5ncygpKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlcyA9IGNoYW5nZXMudmFsdWUgfHwge307XG4gICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSB0aGlzLnNlcnZpY2UubGltaXRSYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgsIHZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VydmljZS5pc1JhbmdlQ2hhbmdlZChtaW4sIG1heCkgfHwgY2hhbmdlcy5taW4gfHwgY2hhbmdlcy5tYXggfHwgY2hhbmdlcy5zdGVwKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5jb25maWd1cmUodGhpcy5zZXJ2aWNlU2V0dGluZ3MoeyBtaW4sIG1heCB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU2tpcCB0aGUgcmVuZGVyaW5nIG9mIHRoZSBsaXN0IHdoZW5ldmVyIHBvc3NpYmxlXG4gICAgICAgIGlmICghdGhpcy5kYXRhLmxlbmd0aCB8fCB0aGlzLmhhc01pc3NpbmdWYWx1ZSh2YWx1ZUNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLnNlcnZpY2UuZGF0YSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hbmltYXRlVG9JbmRleCA9IHRoaXMuYW5pbWF0ZVRvSW5kZXggJiYgdGhpcy50ZXh0SGFzQ2hhbmdlZCh2YWx1ZUNoYW5nZXMpO1xuICAgICAgICB0aGlzLnRvdGFsID0gdGhpcy5zZXJ2aWNlLnRvdGFsKHZhbHVlKTtcbiAgICAgICAgdGhpcy5pbmRleFRvU2Nyb2xsID0gdGhpcy5zZWxlY3RlZEluZGV4KHZhbHVlKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0ZVRvSW5kZXggPSB0cnVlO1xuICAgICAgICB0aGlzLmRvbS5lbnN1cmVIZWlnaHRzKCk7XG4gICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IHRoaXMuZG9tLml0ZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMubGlzdEhlaWdodCA9IHRoaXMuZG9tLnRpbWVMaXN0SGVpZ2h0O1xuICAgICAgICB0aGlzLnRvcE9mZnNldCA9ICh0aGlzLmxpc3RIZWlnaHQgLSB0aGlzLml0ZW1IZWlnaHQpIC8gMjtcbiAgICAgICAgdGhpcy5ib3R0b21PZmZzZXQgPSB0aGlzLmxpc3RIZWlnaHQgLSB0aGlzLml0ZW1IZWlnaHQ7XG4gICAgICAgIHRoaXMudG9wVGhyZXNob2xkID0gdGhpcy5pdGVtSGVpZ2h0ICogU05BUF9USFJFU0hPTEQ7XG4gICAgICAgIHRoaXMuYm90dG9tVGhyZXNob2xkID0gdGhpcy5pdGVtSGVpZ2h0ICogKDEgLSBTTkFQX1RIUkVTSE9MRCk7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZSA9IGB0cmFuc2xhdGVZKCR7dGhpcy50b3BPZmZzZXR9cHgpYDtcbiAgICAgICAgdGhpcy5zdHlsZSA9IHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUsICctbXMtdHJhbnNmb3JtJzogdHJhbnNsYXRlIH07XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kb21FdmVudHMuZm9yRWFjaCh1bmJpbmRDYWxsYmFjayA9PiB1bmJpbmRDYWxsYmFjaygpKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLnNjcm9sbE9uY2UoKGluZGV4KSA9PiB0aGlzLnZpcnR1YWxpemF0aW9uLnNjcm9sbFRvSW5kZXgoaW5kZXgpKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICB0aGlzLnNjcm9sbE9uY2UoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSB0aGlzLmFuaW1hdGVUb0luZGV4ID8gJ2FuaW1hdGVUb0luZGV4JyA6ICdzY3JvbGxUb0luZGV4JztcbiAgICAgICAgICAgIHRoaXMudmlydHVhbGl6YXRpb25bYWN0aW9uXShpbmRleCk7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGVUb0luZGV4ID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGhhbmRsZUNoYW5nZShkYXRhSXRlbSkge1xuICAgICAgICBjb25zdCBjYW5kaWRhdGUgPSB0aGlzLnNlcnZpY2UuYXBwbHkodGhpcy52YWx1ZSwgZGF0YUl0ZW0udmFsdWUpO1xuICAgICAgICBpZiAodGhpcy52YWx1ZS5nZXRUaW1lKCkgPT09IGNhbmRpZGF0ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluZGV4VG9TY3JvbGwgPSB0aGlzLmRhdGEuaW5kZXhPZihkYXRhSXRlbSk7XG4gICAgICAgIHRoaXMudmFsdWUgPSBjYW5kaWRhdGU7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdChjYW5kaWRhdGUpO1xuICAgIH1cbiAgICBoYW5kbGVJdGVtQ2xpY2soYXJncykge1xuICAgICAgICBjb25zdCBpdGVtID0gY2xvc2VzdEluU2NvcGUoYXJncy50YXJnZXQsIG5vZGUgPT4gbm9kZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtdGltZWxpc3QtaXRlbS1pbmRleCcpLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uZ2V0QXR0cmlidXRlKCdkYXRhLXRpbWVsaXN0LWl0ZW0taW5kZXgnKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YVtpbmRleF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIGhvc3QgZWxlbWVudCBvZiB0aGUgVGltZUxpc3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiB0ZW1wbGF0ZTogYFxuICAgICAqICA8YnV0dG9uIChjbGljayk9XCJ0aW1lbGlzdC5mb2N1cygpXCI+Rm9jdXMgVGltZUxpc3Q8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLXRpbWVsaXN0ICN0aW1lbGlzdD48L2tlbmRvLXRpbWVsaXN0PlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQmx1cnMgdGhlIFRpbWVMaXN0IGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICB9XG4gICAgaXRlbU9mZnNldChzY3JvbGxUb3ApIHtcbiAgICAgICAgY29uc3QgdmFsdWVJbmRleCA9IHRoaXMuc2VsZWN0ZWRJbmRleCh0aGlzLnZhbHVlKTtcbiAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLnZpcnR1YWxpemF0aW9uLmFjdGl2ZUluZGV4KCk7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHRoaXMudmlydHVhbGl6YXRpb24uaXRlbU9mZnNldChhY3RpdmVJbmRleCk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoTWF0aC5jZWlsKHNjcm9sbFRvcCkgLSBvZmZzZXQpO1xuICAgICAgICBpZiAodmFsdWVJbmRleCA9PT0gYWN0aXZlSW5kZXggJiYgZGlzdGFuY2UgPCBTQ1JPTExfVEhSRVNIT0xEKSB7XG4gICAgICAgICAgICByZXR1cm4gb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcm9sbFVwID0gdmFsdWVJbmRleCA+IGFjdGl2ZUluZGV4O1xuICAgICAgICBjb25zdCBtb3ZlVG9OZXh0ID0gc2Nyb2xsVXAgJiYgZGlzdGFuY2UgPj0gdGhpcy5ib3R0b21UaHJlc2hvbGQgfHwgIXNjcm9sbFVwICYmIGRpc3RhbmNlID4gdGhpcy50b3BUaHJlc2hvbGQ7XG4gICAgICAgIHJldHVybiBtb3ZlVG9OZXh0ID8gdGhpcy52aXJ0dWFsaXphdGlvbi5pdGVtT2Zmc2V0KGFjdGl2ZUluZGV4ICsgMSkgOiBvZmZzZXQ7XG4gICAgfVxuICAgIGhhc01pc3NpbmdWYWx1ZSh7IHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSB9KSB7XG4gICAgICAgIGNvbnN0IGlzUHJldmlvdXNNaXNzaW5nID0gcHJldmlvdXNWYWx1ZSAmJiAhdGhpcy5zZXJ2aWNlLnZhbHVlSW5MaXN0KHByZXZpb3VzVmFsdWUpO1xuICAgICAgICBjb25zdCBpc0N1cnJlbnRNaXNzaW5nID0gY3VycmVudFZhbHVlICYmICF0aGlzLnNlcnZpY2UudmFsdWVJbkxpc3QoY3VycmVudFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIGlzUHJldmlvdXNNaXNzaW5nIHx8IGlzQ3VycmVudE1pc3Npbmc7XG4gICAgfVxuICAgIHNjcm9sbE9uY2UoYWN0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4VG9TY3JvbGwgIT09IC0xKSB7XG4gICAgICAgICAgICBhY3Rpb24odGhpcy5pbmRleFRvU2Nyb2xsKTtcbiAgICAgICAgICAgIHRoaXMuaW5kZXhUb1Njcm9sbCA9IC0xO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlcnZpY2VTZXR0aW5ncyhzZXR0aW5ncykge1xuICAgICAgICBjb25zdCBkZWZhdWx0cyA9IHtcbiAgICAgICAgICAgIGJvdW5kUmFuZ2U6IGZhbHNlLFxuICAgICAgICAgICAgaW5zZXJ0VW5kaXZpZGVkTWF4OiBmYWxzZSxcbiAgICAgICAgICAgIG1heDogdGhpcy5tYXgsXG4gICAgICAgICAgICBtaW46IHRoaXMubWluLFxuICAgICAgICAgICAgcGFydDogdGhpcy5wYXJ0LFxuICAgICAgICAgICAgc3RlcDogdGhpcy5zdGVwXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzLCBzZXR0aW5ncyk7XG4gICAgICAgIHJlc3VsdC5ib3VuZFJhbmdlID0gcmVzdWx0LnBhcnQudHlwZSAhPT0gJ2hvdXInO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzZWxlY3RlZEluZGV4KHZhbHVlKSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLnNlbGVjdGVkSW5kZXgodmFsdWUpO1xuICAgIH1cbiAgICB0ZXh0SGFzQ2hhbmdlZCh7IHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSB9KSB7XG4gICAgICAgIGlmICghcHJldmlvdXNWYWx1ZSB8fCAhY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkRGF0YSA9IHRoaXMuZGF0YVt0aGlzLnNlbGVjdGVkSW5kZXgocHJldmlvdXNWYWx1ZSldO1xuICAgICAgICBjb25zdCBuZXdEYXRhID0gdGhpcy5kYXRhW3RoaXMuc2VsZWN0ZWRJbmRleChjdXJyZW50VmFsdWUpXTtcbiAgICAgICAgcmV0dXJuIG9sZERhdGEgJiYgbmV3RGF0YSAmJiBvbGREYXRhLnRleHQgIT09IG5ld0RhdGEudGV4dDtcbiAgICB9XG4gICAgaGFuZGxlS2V5RG93bihlKSB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGdldHRlcnNbZS5rZXlDb2RlXSB8fCBuaWw7XG4gICAgICAgIGNvbnN0IGRhdGFJdGVtID0gZ2V0dGVyKHRoaXMuZGF0YSwgdGhpcy5zZXJ2aWNlLnNlbGVjdGVkSW5kZXgodGhpcy52YWx1ZSkpO1xuICAgICAgICBpZiAoZGF0YUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKGRhdGFJdGVtKTtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBiaW5kRXZlbnRzKCkge1xuICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMudmlydHVhbGl6YXRpb25cbiAgICAgICAgICAgIC5zY3JvbGwkKClcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApLCBtYXAoKGUpID0+IGUudGFyZ2V0LnNjcm9sbFRvcCksIG1hcCgodG9wKSA9PiB0aGlzLml0ZW1PZmZzZXQodG9wKSksIG1hcCgoaXRlbU9mZnNldCkgPT4gdGhpcy52aXJ0dWFsaXphdGlvbi5pdGVtSW5kZXgoaXRlbU9mZnNldCkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShpbmRleCA9PiB7XG4gICAgICAgICAgICB0aGlzLnZpcnR1YWxpemF0aW9uLnNjcm9sbFRvSW5kZXgoaW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5kYXRhW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ21vdXNlb3ZlcicsICgpID0+ICF0aGlzLmlzQWN0aXZlICYmIHRoaXMuZm9jdXMoKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdjbGljaycsICgpID0+IHRoaXMuZm9jdXMoKSksIHRoaXMucmVuZGVyZXIubGlzdGVuKGVsZW1lbnQsICdibHVyJywgKCkgPT4gdGhpcy5pc0FjdGl2ZSA9IGZhbHNlKSwgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2ZvY3VzJywgKCkgPT4gdGhpcy5pc0FjdGl2ZSA9IHRydWUpLCB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAna2V5ZG93bicsIHRoaXMuaGFuZGxlS2V5RG93bi5iaW5kKHRoaXMpKSk7XG4gICAgfVxufVxuVGltZUxpc3RDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRpbWVsaXN0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgIDxrZW5kby12aXJ0dWFsaXphdGlvblxuICAgICAgICBbc2tpcF09XCJza2lwXCJcbiAgICAgICAgW3Rha2VdPVwidG90YWxcIlxuICAgICAgICBbdG90YWxdPVwidG90YWxcIlxuICAgICAgICBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCJcbiAgICAgICAgW21heFNjcm9sbERpZmZlcmVuY2VdPVwibGlzdEhlaWdodFwiXG4gICAgICAgIFt0b3BPZmZzZXRdPVwidG9wT2Zmc2V0XCJcbiAgICAgICAgW2JvdHRvbU9mZnNldF09XCJib3R0b21PZmZzZXRcIlxuICAgICAgICBjbGFzcz1cImstdGltZS1jb250YWluZXJcIlxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgPlxuICAgICAgICA8dWwgW25nU3R5bGVdPVwic3R5bGVcIiBjbGFzcz1cImstcmVzZXRcIlxuICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgIGNsaWNrOiBoYW5kbGVJdGVtQ2xpY2tcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YTsgbGV0IGluZGV4ID0gaW5kZXg7XCIgY2xhc3M9XCJrLWl0ZW1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdGltZWxpc3QtaXRlbS1pbmRleF09XCJpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7aXRlbS50ZXh0fX08L3NwYW4+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIDwva2VuZG8tdmlydHVhbGl6YXRpb24+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGltZUxpc3RDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBJbmplY3RvciB9LFxuICAgIHsgdHlwZTogVGltZVBpY2tlckRPTVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5UaW1lTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFydDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGlzYWJsZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHZpcnR1YWxpemF0aW9uOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFtWaXJ0dWFsaXphdGlvbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIHRhYkluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiYXR0ci50YWJpbmRleFwiLF0gfV0sXG4gICAgY29tcG9uZW50Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLXRpbWUtbGlzdFwiLF0gfV1cbn07XG5cbmNvbnN0IGlzRXF1YWxUaWxsTWludXRlID0gKHZhbHVlLCBtaW4pID0+IHZhbHVlLmdldEhvdXJzKCkgPT09IG1pbi5nZXRIb3VycygpICYmIHZhbHVlLmdldE1pbnV0ZXMoKSA9PT0gbWluLmdldE1pbnV0ZXMoKTtcbmNvbnN0IGlzRXF1YWxUaWxsU2Vjb25kID0gKHZhbHVlLCBtaW4pID0+IGlzRXF1YWxUaWxsTWludXRlKHZhbHVlLCBtaW4pICYmIHZhbHVlLmdldFNlY29uZHMoKSA9PT0gbWluLmdldFNlY29uZHMoKTtcbmNvbnN0IGlzRXF1YWxUaWxsTWlsbGlzZWNvbmQgPSAodmFsdWUsIG1pbikgPT4gaXNFcXVhbFRpbGxTZWNvbmQodmFsdWUsIG1pbikgJiYgdmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCkgPT09IG1pbi5nZXRNaWxsaXNlY29uZHMoKTtcbmNvbnN0IMm1MyQ2ID0gKHZhbHVlKSA9PiB2YWx1ZS5nZXRIb3VycygpLCDJtTQkMiA9IChfLCBtaW4pID0+IG1pbi5nZXRIb3VycygpLCDJtTUkMSA9ICh2YWx1ZSkgPT4gdmFsdWUuZ2V0TWludXRlcygpLCDJtTYkMSA9ICh2YWx1ZSwgbWluKSA9PiBpc0VxdWFsVGlsbE1pbnV0ZSh2YWx1ZSwgbWluKSA/IG1pbi5nZXRNaW51dGVzKCkgOiAwLCDJtTckMSA9ICh2YWx1ZSkgPT4gdmFsdWUuZ2V0U2Vjb25kcygpLCDJtTgkMSA9ICh2YWx1ZSwgbWluKSA9PiBpc0VxdWFsVGlsbFNlY29uZCh2YWx1ZSwgbWluKSA/IG1pbi5nZXRTZWNvbmRzKCkgOiAwLCDJtTkkMSA9ICh2YWx1ZSkgPT4gdmFsdWUuZ2V0TWlsbGlzZWNvbmRzKCksIMm1MTAkMSA9ICh2YWx1ZSwgbWluKSA9PiBpc0VxdWFsVGlsbE1pbGxpc2Vjb25kKHZhbHVlLCBtaW4pID8gbWluLmdldE1pbGxpc2Vjb25kcygpIDogMDtcbmNvbnN0IGRlZmF1bHRHZXR0ZXJzID0gW1xuICAgIHtcbiAgICAgICAgdHlwZTogVElNRV9QQVJULmhvdXIsXG4gICAgICAgIGdldHRlcjogybUzJDYsXG4gICAgICAgIG1pbkdldHRlcjogybU0JDJcbiAgICB9LCB7XG4gICAgICAgIHR5cGU6IFRJTUVfUEFSVC5taW51dGUsXG4gICAgICAgIGdldHRlcjogybU1JDEsXG4gICAgICAgIG1pbkdldHRlcjogybU2JDFcbiAgICB9LCB7XG4gICAgICAgIHR5cGU6IFRJTUVfUEFSVC5zZWNvbmQsXG4gICAgICAgIGdldHRlcjogybU3JDEsXG4gICAgICAgIG1pbkdldHRlcjogybU4JDFcbiAgICB9LCB7XG4gICAgICAgIHR5cGU6IFRJTUVfUEFSVC5taWxsaXNlY29uZCxcbiAgICAgICAgZ2V0dGVyOiDJtTkkMSxcbiAgICAgICAgbWluR2V0dGVyOiDJtTEwJDFcbiAgICB9XG5dO1xuY29uc3QgbGVmdCA9IGdldHRlciA9PiAob3JpZ2luLCBfKSA9PiBnZXR0ZXIob3JpZ2luKTtcbmNvbnN0IHJpZ2h0ID0gZ2V0dGVyID0+IChfLCBjYW5kaWRhdGUpID0+IGdldHRlcihjYW5kaWRhdGUpO1xuY29uc3QgY29udmVydFRvT2JqZWN0ID0gKHBhcnRzKSA9PiBwYXJ0cy5yZWR1Y2UoKG9iaiwgcCkgPT4geyBvYmpbcC50eXBlXSA9IHAudHlwZTsgcmV0dXJuIG9iajsgfSwge30pO1xuY29uc3QgZ2V0dGVyQnlQYXJ0ID0gcGFydHMgPT4gZyA9PiBwYXJ0c1tnLnR5cGVdID8gcmlnaHQoZy5nZXR0ZXIpIDogbGVmdChnLmdldHRlcik7XG5jb25zdCBnZXR0ZXJzRmFjdG9yeSA9IGdldHRlcnMgPT4gcGFydHMgPT4gKGdldHRlcnMubWFwKGdldHRlckJ5UGFydChjb252ZXJ0VG9PYmplY3QocGFydHMpKSkpO1xuY29uc3Qgc25hcFZhbHVlID0gKGdldHRlciwgbWluR2V0dGVyLCBzdGVwKSA9PiAoZGF0ZSwgbWluKSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXR0ZXIoZGF0ZSk7XG4gICAgY29uc3QgbWluVmFsdWUgPSBtaW5HZXR0ZXIoZGF0ZSwgbWluKTtcbiAgICBjb25zdCByZXN0ID0gdmFsdWUgLSBtaW5WYWx1ZTtcbiAgICBpZiAocmVzdCA8IDApIHtcbiAgICAgICAgcmV0dXJuIG1pblZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBtb2QgPSByZXN0ICUgc3RlcDtcbiAgICByZXR1cm4gdmFsdWUgLSBtb2QgKyAobW9kID4gc3RlcCAvIDIgPyBzdGVwIDogMCk7XG59O1xuY29uc3Qgc25hcHBlcnNGYWN0b3J5ID0gKGdldHRlcnMpID0+IHN0ZXBzID0+IChnZXR0ZXJzLm1hcChnID0+IHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNbZy50eXBlXTtcbiAgICByZXR1cm4gc3RlcCA/IHNuYXBWYWx1ZShnLmdldHRlciwgZy5taW5HZXR0ZXIsIHN0ZXApIDogZy5nZXR0ZXI7XG59KSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2VuZXJhdGVHZXR0ZXJzID0gZ2V0dGVyc0ZhY3RvcnkoZGVmYXVsdEdldHRlcnMpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdlbmVyYXRlU25hcHBlcnMgPSBzbmFwcGVyc0ZhY3RvcnkoZGVmYXVsdEdldHRlcnMpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHZhbHVlTWVyZ2VyID0gZ2V0dGVycyA9PiAob3JpZ2luLCBjYW5kaWRhdGUpID0+IHtcbiAgICBvcmlnaW4uc2V0SG91cnMoLi4uZ2V0dGVycy5tYXAoZyA9PiBnKG9yaWdpbiwgY2FuZGlkYXRlKSkpO1xuICAgIHJldHVybiBvcmlnaW47XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNuYXBUaW1lID0gc25hcHBlcnMgPT4gKGNhbmRpZGF0ZSwgbWluKSA9PiB7XG4gICAgY29uc3QgZGF0ZSA9IGNsb25lRGF0ZShjYW5kaWRhdGUpO1xuICAgIGRhdGUuc2V0SG91cnMoLi4uc25hcHBlcnMubWFwKHMgPT4gcyhkYXRlLCBtaW4pKSk7XG4gICAgcmV0dXJuIGRhdGU7XG59O1xuXG5jb25zdCBsaXN0UmVkdWNlciA9IChzdGF0ZSwgbGlzdCwgaWR4LCBhbGwpID0+IHtcbiAgICBpZiAoc3RhdGUubGVuZ3RoIHx8ICFsaXN0LmlzQWN0aXZlKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIFt7XG4gICAgICAgICAgICBuZXh0OiBhbGxbaWR4ICsgMV0gfHwgbGlzdCxcbiAgICAgICAgICAgIHByZXY6IGFsbFtpZHggLSAxXSB8fCBsaXN0XG4gICAgICAgIH1dO1xufTtcbnZhciBEaXJlY3Rpb247XG4oZnVuY3Rpb24gKERpcmVjdGlvbikge1xuICAgIERpcmVjdGlvbltEaXJlY3Rpb25bXCJMZWZ0XCJdID0gMF0gPSBcIkxlZnRcIjtcbiAgICBEaXJlY3Rpb25bRGlyZWN0aW9uW1wiUmlnaHRcIl0gPSAxXSA9IFwiUmlnaHRcIjtcbn0pKERpcmVjdGlvbiB8fCAoRGlyZWN0aW9uID0ge30pKTtcbi8qKlxuICogQGhpZGRlblxuICpcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIFRpbWVTZWxlY3RvciBjb21wb25lbnQgZm9yIEFuZ3VsYXIuXG4gKi9cbmNsYXNzIFRpbWVTZWxlY3RvckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBjZHIsIGVsZW1lbnQsIGludGwsIGRvbSwgem9uZSwgcmVuZGVyZXIsIHBpY2tlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmludGwgPSBpbnRsO1xuICAgICAgICB0aGlzLmRvbSA9IGRvbTtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UgPSBwaWNrZXJTZXJ2aWNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21wb25lbnRDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHRpbWUgZm9ybWF0IHVzZWQgdG8gZGlzcGxheSB0aGUgdGltZSBsaXN0IGNvbHVtbnMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcm1hdCA9ICd0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgc21hbGxlc3QgdmFsaWQgdGltZSB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWluID0gY2xvbmVEYXRlKE1JTl9USU1FKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgYmlnZ2VzdCB2YWxpZCB0aW1lIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXggPSBjbG9uZURhdGUoTUFYX1RJTUUpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlICoqQ2FuY2VsKiogYnV0dG9uIGluIHRoZSBwb3B1cC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FuY2VsQnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IHRoZSAqKlNldCoqIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNldEJ1dHRvbiA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzcGxheSB0aGUgKipOb3cqKiBidXR0b24gaW4gdGhlIHBvcHVwLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IElmIHRoZSBjdXJyZW50IHRpbWUgaXMgb3V0IG9mIHJhbmdlIG9yIHRoZSBpbmNyZW1lbnRhbCBzdGVwIGlzIGdyZWF0ZXIgdGhhbiBgMWAsIHRoZSAqKk5vdyoqIGJ1dHRvbiB3aWxsIGJlIGhpZGRlbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubm93QnV0dG9uID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgb3IgZ2V0cyB0aGUgYGRpc2FibGVkYCBwcm9wZXJ0eSBvZiB0aGUgVGltZVNlbGVjdG9yIGFuZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHZhbHVlIG9mIHRoZSBUaW1lU2VsZWN0b3IgY29tcG9uZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgc2VsZWN0cyBhIG5ldyB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgY2FuY2VscyB0aGUgc2VsZWN0ZWQgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlUmVqZWN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd05vd0J1dHRvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUxpc3RJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLl9zdGVwcyA9IHt9O1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IFtdO1xuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2UudGltZVNlbGVjdG9yID0gdGhpcztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmVzIHRoZSBpbmNyZW1lbnRhbCBzdGVwcyBvZiB0aGUgVGltZVNlbGVjdG9yLlxuICAgICAqXG4gICAgICogVGhlIGF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiAgICAgKiAtIGBob3VyOiBOdW1iZXJgJm1kYXNoO0NvbnRyb2xzIHRoZSBpbmNyZW1lbnRhbCBzdGVwIG9mIHRoZSBob3VyIHZhbHVlLlxuICAgICAqIC0gYG1pbnV0ZTogTnVtYmVyYCZtZGFzaDtDb250cm9scyB0aGUgaW5jcmVtZW50YWwgc3RlcCBvZiB0aGUgbWludXRlIHZhbHVlLlxuICAgICAqIC0gYHNlY29uZDogTnVtYmVyYCZtZGFzaDtDb250cm9scyB0aGUgaW5jcmVtZW50YWwgc3RlcCBvZiB0aGUgc2Vjb25kIHZhbHVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogdGVtcGxhdGU6IGBcbiAgICAgKiAgPGtlbmRvLXRpbWVzZWxlY3RvciBmb3JtYXQ9XCJISDptbTpzc1wiIFtzdGVwc109XCJzdGVwc1wiPjwva2VuZG8tdGltZXNlbGVjdG9yPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgcHVibGljIHN0ZXBzID0geyBob3VyOiAyLCBtaW51dGU6IDE1LCBzZWNvbmQ6IDE1IH07XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogPiBJZiB0aGUgaW5jcmVtZW50YWwgc3RlcCBpcyBncmVhdGVyIHRoYW4gYDFgLCB0aGUgKipOb3cqKiBidXR0b24gd2lsbCBiZSBoaWRkZW4uXG4gICAgICovXG4gICAgc2V0IHN0ZXBzKHN0ZXBzKSB7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0gc3RlcHMgfHwge307XG4gICAgfVxuICAgIGdldCBzdGVwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0ZXBzO1xuICAgIH1cbiAgICBzZXQgY3VycmVudCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50ID0gdGltZUluUmFuZ2UodGhpcy5zbmFwVGltZShjbG9uZURhdGUodmFsdWUgfHwgTUlETklHSFRfREFURSksIHRoaXMubWluKSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICAgICAgaWYgKCFOZ1pvbmUuaXNJbkFuZ3VsYXJab25lKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgY3VycmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gICAgfVxuICAgIGdldCBhY3RpdmVMaXN0SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVMaXN0SW5kZXg7XG4gICAgfVxuICAgIHNldCBhY3RpdmVMaXN0SW5kZXgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlTGlzdEluZGV4ID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy50aW1lTGlzdFdyYXBwZXJzIHx8ICF0aGlzLnRpbWVMaXN0V3JhcHBlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lTGlzdFdyYXBwZXJzLmZvckVhY2gobGlzdFdyYXBwZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhsaXN0V3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1zdGF0ZS1mb2N1c2VkJyk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodmFsdWUgPj0gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlzdEluZGV4ID0gdGhpcy5saXN0SW5kZXgodmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZFdyYXBwZXIgPSB0aGlzLnRpbWVMaXN0V3JhcHBlcnMudG9BcnJheSgpW2xpc3RJbmRleF07XG4gICAgICAgICAgICBpZiAoZm9jdXNlZFdyYXBwZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGZvY3VzZWRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IHRoaXMuaW50bC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmludGxDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvY2FsaXphdGlvblxuICAgICAgICAgICAgICAgIC5jaGFuZ2VzXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZG9tLmNhbGN1bGF0ZUhlaWdodHModGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhfKSB7XG4gICAgICAgIHRoaXMuaW5pdCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLnRpbWVTZWxlY3RvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kb21FdmVudHMuZm9yRWFjaCh1bmJpbmRDYWxsYmFjayA9PiB1bmJpbmRDYWxsYmFjaygpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9jdXNlcyB0aGUgVGltZVNlbGVjdG9yIGNvbXBvbmVudC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqIHRlbXBsYXRlOiBgXG4gICAgICogIDxidXR0b24gKGNsaWNrKT1cInRpbWVzZWxlY3Rvci5mb2N1cygpXCI+Rm9jdXMgdGltZSBwaWNrZXI8L2J1dHRvbj5cbiAgICAgKiAgPGtlbmRvLXRpbWVzZWxlY3RvciAjdGltZXNlbGVjdG9yPjwva2VuZG8tdGltZXNlbGVjdG9yPlxuICAgICAqIGBcbiAgICAgKiB9KVxuICAgICAqIGV4cG9ydCBjbGFzcyBBcHBDb21wb25lbnQgeyB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSB0aGlzLnRpbWVMaXN0cy5maXJzdDtcbiAgICAgICAgaWYgKCFsaXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGlzdC5mb2N1cygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBCbHVycyB0aGUgVGltZVNlbGVjdG9yIGNvbXBvbmVudC5cbiAgICAgKi9cbiAgICBibHVyKCkge1xuICAgICAgICBjb25zdCBsaXN0ID0gdGhpcy50aW1lTGlzdHMuZmlyc3Q7XG4gICAgICAgIGlmICghbGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxpc3QuYmx1cigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlQWNjZXB0KCkge1xuICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh0aGlzLm1lcmdlVmFsdWUoY2xvbmVEYXRlKHRoaXMudmFsdWUgfHwgZ2V0RGF0ZShnZXROb3coKSkpLCB0aGlzLmN1cnJlbnQpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZU5vdygpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gZ2V0Tm93KCk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuY3VycmVudCk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFuZGxlUmVqZWN0KCkge1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlUmVqZWN0LmVtaXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhhbmRsZUZvY3VzKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5lbWl0Rm9jdXMoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXMoYXJncykge1xuICAgICAgICBjb25zdCBpbmRleCA9IHBhcnNlSW50KGFyZ3MudGFyZ2V0LmdldEF0dHJpYnV0ZSgnZGF0YS10aW1lbGlzdC1pbmRleCcpLCAxMCk7XG4gICAgICAgIHRoaXMuYWN0aXZlTGlzdEluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuaGFuZGxlRm9jdXMoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBoYW5kbGVCbHVyKGFyZ3MpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGN1cnJlbnRGb2N1c1RhcmdldChhcmdzKTtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXJnZXQgJiYgdGhpcy5jb250YWluc0VsZW1lbnQoY3VycmVudFRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZUxpc3RJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW1pdEJsdXIoYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb250YWluc0VsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbihjbG9zZXN0KGVsZW1lbnQsIG5vZGUgPT4gbm9kZSA9PT0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKTtcbiAgICB9XG4gICAgcGFydFN0ZXAocGFydCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGVwc1twYXJ0LnR5cGVdIHx8IDE7XG4gICAgfVxuICAgIGluaXQoY2hhbmdlcykge1xuICAgICAgICBpZiAoIWNoYW5nZXMgfHwgaGFzQ2hhbmdlKGNoYW5nZXMsICdmb3JtYXQnKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRlRm9ybWF0UGFydHMgPSB0aGlzLmludGwuc3BsaXREYXRlRm9ybWF0KHRoaXMuZm9ybWF0KTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VWYWx1ZSA9IHZhbHVlTWVyZ2VyKGdlbmVyYXRlR2V0dGVycyh0aGlzLmRhdGVGb3JtYXRQYXJ0cykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hhbmdlcyB8fCBoYXNDaGFuZ2UoY2hhbmdlcywgJ3N0ZXBzJykpIHtcbiAgICAgICAgICAgIHRoaXMuc25hcFRpbWUgPSBzbmFwVGltZShnZW5lcmF0ZVNuYXBwZXJzKHRoaXMuc3RlcHMpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNoYW5nZXMgfHwgaGFzQ2hhbmdlKGNoYW5nZXMsICd2YWx1ZScpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2hvd05vd0J1dHRvbiA9ICF0aGlzLmhhc1N0ZXBzKCkgJiYgdGhpcy5ub3dCdXR0b24gJiYgaXNJblRpbWVSYW5nZShnZXROb3coKSwgdGhpcy5taW4sIHRoaXMubWF4KTtcbiAgICB9XG4gICAgZm9jdXNMaXN0KGRpcikge1xuICAgICAgICBpZiAoIXRoaXMudGltZUxpc3RzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZUxpc3RzLnJlZHVjZShsaXN0UmVkdWNlciwgW10pXG4gICAgICAgICAgICAubWFwKHN0YXRlID0+IGRpciA9PT0gRGlyZWN0aW9uLlJpZ2h0ID8gc3RhdGUubmV4dCA6IHN0YXRlLnByZXYpXG4gICAgICAgICAgICAubWFwKGxpc3QgPT4gbGlzdCAmJiBsaXN0LmZvY3VzKCkpO1xuICAgIH1cbiAgICBoYW5kbGVDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoY2xvbmVEYXRlKHZhbHVlKSk7XG4gICAgfVxuICAgIGhhc0FjdGl2ZUJ1dHRvbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFjY2VwdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbdGhpcy5hY2NlcHQsIHRoaXMuY2FuY2VsLCB0aGlzLm5vd10ucmVkdWNlKChpc0FjdGl2ZSwgZWwpID0+IGlzQWN0aXZlIHx8IHRoaXMuZG9tLmlzQWN0aXZlKGVsKSwgZmFsc2UpO1xuICAgIH1cbiAgICBoYXNTdGVwcygpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuc3RlcHMpO1xuICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGggIT09IGtleXMucmVkdWNlKChhY2MsIGspID0+IGFjYyArIHRoaXMuc3RlcHNba10sIDApO1xuICAgIH1cbiAgICBpbnRsQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmRhdGVGb3JtYXRQYXJ0cyA9IHRoaXMuaW50bC5zcGxpdERhdGVGb3JtYXQodGhpcy5mb3JtYXQpO1xuICAgICAgICB0aGlzLm1lcmdlVmFsdWUgPSB2YWx1ZU1lcmdlcihnZW5lcmF0ZUdldHRlcnModGhpcy5kYXRlRm9ybWF0UGFydHMpKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICAgIGJpbmRFdmVudHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2tleWRvd24nLCB0aGlzLmhhbmRsZUtleWRvd24uYmluZCh0aGlzKSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGNvbnN0IHsga2V5Q29kZSwgYWx0S2V5IH0gPSBhcmdzO1xuICAgICAgICAvLyByZXNlcnZlIHRoZSBhbHQgKyBhcnJvdyBrZXkgY29tbWFuZHMgZm9yIHRoZSBwaWNrZXJcbiAgICAgICAgY29uc3QgYXJyb3dLZXlQcmVzc2VkID0gW0tleXMuQXJyb3dMZWZ0LCBLZXlzLkFycm93UmlnaHRdLmluZGV4T2Yoa2V5Q29kZSkgIT09IC0xO1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMucGlja2VyU2VydmljZSkgJiYgYXJyb3dLZXlQcmVzc2VkICYmIGFsdEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXlDb2RlID09PSBLZXlzLkVudGVyICYmICF0aGlzLmhhc0FjdGl2ZUJ1dHRvbigpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFjY2VwdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGtleUNvZGUgPT09IEtleXMuQXJyb3dMZWZ0IHx8IGtleUNvZGUgPT09IEtleXMuQXJyb3dSaWdodCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0xpc3Qoa2V5Q29kZSA9PT0gS2V5cy5BcnJvd0xlZnQgPyBEaXJlY3Rpb24uTGVmdCA6IERpcmVjdGlvbi5SaWdodCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEJsdXIoYXJncykge1xuICAgICAgICBpZiAodGhpcy5waWNrZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnBpY2tlclNlcnZpY2Uub25CbHVyLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEZvY3VzKGFyZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMucGlja2VyU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5waWNrZXJTZXJ2aWNlLm9uRm9jdXMuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsaXN0SW5kZXgocGFydEluZGV4KSB7XG4gICAgICAgIGxldCBsaXN0SWR4ID0gMDtcbiAgICAgICAgbGV0IHBhcnRJZHggPSAwO1xuICAgICAgICB3aGlsZSAocGFydElkeCA8IHBhcnRJbmRleCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGF0ZUZvcm1hdFBhcnRzW3BhcnRJZHhdLnR5cGUgIT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgIGxpc3RJZHgrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRJZHgrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGlzdElkeDtcbiAgICB9XG59XG5UaW1lU2VsZWN0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvLXRpbWVzZWxlY3RvcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby50aW1lc2VsZWN0b3InXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tdGltZXNlbGVjdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvVGltZVNlbGVjdG9yTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tYWNjZXB0PVwia2VuZG8udGltZXNlbGVjdG9yLmFjY2VwdHxUaGUgQWNjZXB0IGJ1dHRvbiB0ZXh0IGluIHRoZSB0aW1lc2VsZWN0b3IgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGFjY2VwdD1cIlNldFwiXG5cbiAgICAgICAgICAgIGkxOG4tYWNjZXB0TGFiZWw9XCJrZW5kby50aW1lc2VsZWN0b3IuYWNjZXB0TGFiZWx8VGhlIGxhYmVsIGZvciB0aGUgQWNjZXB0IGJ1dHRvbiBpbiB0aGUgdGltZXNlbGVjdG9yIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBhY2NlcHRMYWJlbD1cIlNldCB0aW1lXCJcblxuICAgICAgICAgICAgaTE4bi1jYW5jZWw9XCJrZW5kby50aW1lc2VsZWN0b3IuY2FuY2VsfFRoZSBDYW5jZWwgYnV0dG9uIHRleHQgaW4gdGhlIHRpbWVzZWxlY3RvciBjb21wb25lbnRcIlxuICAgICAgICAgICAgY2FuY2VsPVwiQ2FuY2VsXCJcblxuICAgICAgICAgICAgaTE4bi1jYW5jZWxMYWJlbD1cImtlbmRvLnRpbWVzZWxlY3Rvci5jYW5jZWxMYWJlbHxUaGUgbGFiZWwgZm9yIHRoZSBDYW5jZWwgYnV0dG9uIGluIHRoZSB0aW1lc2VsZWN0b3IgY29tcG9uZW50XCJcbiAgICAgICAgICAgIGNhbmNlbExhYmVsPVwiQ2FuY2VsIGNoYW5nZXNcIlxuXG4gICAgICAgICAgICBpMThuLW5vdz1cImtlbmRvLnRpbWVzZWxlY3Rvci5ub3d8VGhlIE5vdyBidXR0b24gdGV4dCBpbiB0aGUgdGltZXNlbGVjdG9yIGNvbXBvbmVudFwiXG4gICAgICAgICAgICBub3c9XCJOb3dcIlxuXG4gICAgICAgICAgICBpMThuLW5vd0xhYmVsPVwia2VuZG8udGltZXNlbGVjdG9yLm5vd0xhYmVsfFRoZSBsYWJlbCBmb3IgdGhlIE5vdyBidXR0b24gaW4gdGhlIHRpbWVzZWxlY3RvciBjb21wb25lbnRcIlxuICAgICAgICAgICAgbm93TGFiZWw9XCJTZWxlY3Qgbm93XCJcbiAgICAgICAgPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstdGltZS1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay10aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IGludGwuZm9ybWF0RGF0ZShjdXJyZW50LCBmb3JtYXQpIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgI25vd1xuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd05vd0J1dHRvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLWJhcmUgay10aW1lLW5vd1wiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ25vd0xhYmVsJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnbm93TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlTm93LFxuICAgICAgICAgICAgICAgICAgICBmb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID57e2xvY2FsaXphdGlvbi5nZXQoJ25vdycpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLXRpbWUtbGlzdC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay10aW1lLWhpZ2hsaWdodFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBbbmdGb3JPZl09XCJkYXRlRm9ybWF0UGFydHNcIiBsZXQtcGFydCBsZXQtaWR4PVwiaW5kZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICNsaXN0V3JhcHBlclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstdGltZS1saXN0LXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCIgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicGFydC50eXBlICE9PSAnbGl0ZXJhbCdcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLXRpdGxlXCI+e3tpbnRsLmRhdGVGaWVsZE5hbWUocGFydCl9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRpbWVsaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGFydF09XCJwYXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdGVwXT1cInBhcnRTdGVwKHBhcnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbKHZhbHVlKV09XCJjdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1czogaGFuZGxlTGlzdEZvY3VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10aW1lbGlzdC1pbmRleF09XCJpZHhcIlxuICAgICAgICAgICAgICAgICAgICA+PC9rZW5kby10aW1lbGlzdD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay10aW1lLXNlcGFyYXRvclwiICpuZ0lmPVwicGFydC50eXBlID09PSAnbGl0ZXJhbCdcIj5cbiAgICAgICAgICAgICAgICAgICAge3twYXJ0LnBhdHRlcm59fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLXRpbWUtZm9vdGVyIGstYWN0aW9uLWJ1dHRvbnNcIiAqbmdJZj1cInNldEJ1dHRvbiB8fCBjYW5jZWxCdXR0b25cIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAjY2FuY2VsXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5jZWxCdXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay10aW1lLWNhbmNlbFwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbExhYmVsJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnY2FuY2VsTGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlUmVqZWN0LFxuICAgICAgICAgICAgICAgICAgICBmb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID57e2xvY2FsaXphdGlvbi5nZXQoJ2NhbmNlbCcpfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAjYWNjZXB0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzZXRCdXR0b25cIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay10aW1lLWFjY2VwdCBrLWJ1dHRvbiBrLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cImxvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdExhYmVsJylcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibG9jYWxpemF0aW9uLmdldCgnYWNjZXB0TGFiZWwnKVwiXG4gICAgICAgICAgICAgICAgW2tlbmRvRXZlbnRzT3V0c2lkZUFuZ3VsYXJdPVwie1xuICAgICAgICAgICAgICAgICAgICBjbGljazogaGFuZGxlQWNjZXB0LFxuICAgICAgICAgICAgICAgICAgICBmb2N1czogaGFuZGxlRm9jdXMsXG4gICAgICAgICAgICAgICAgICAgIGJsdXI6IGhhbmRsZUJsdXJcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBbc2NvcGVdPVwidGhpc1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID57e2xvY2FsaXphdGlvbi5nZXQoJ2FjY2VwdCcpfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lU2VsZWN0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogSW50bFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFRpbWVQaWNrZXJET01TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogUGlja2VyU2VydmljZSwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblRpbWVTZWxlY3RvckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhY2NlcHQ6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydhY2NlcHQnLF0gfV0sXG4gICAgY2FuY2VsOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnY2FuY2VsJyxdIH1dLFxuICAgIG5vdzogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ25vdycsXSB9XSxcbiAgICB0aW1lTGlzdHM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogW1RpbWVMaXN0Q29tcG9uZW50LF0gfV0sXG4gICAgdGltZUxpc3RXcmFwcGVyczogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbJ2xpc3RXcmFwcGVyJyxdIH1dLFxuICAgIGNvbXBvbmVudENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRpbWVzZWxlY3RvcicsXSB9XSxcbiAgICBkaXNhYmxlZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0YXRlLWRpc2FibGVkJyxdIH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbmNlbEJ1dHRvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2V0QnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub3dCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdmFsdWVSZWplY3Q6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRpbWVQaWNrZXJNZXNzYWdlcyBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cblRpbWVQaWNrZXJNZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBhY2NlcHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjY2VwdExhYmVsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjYW5jZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNhbmNlbExhYmVsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub3c6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vd0xhYmVsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b2dnbGU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIGV4dGVuZHMgVGltZVBpY2tlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuVGltZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRpbWVQaWNrZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1RpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZ2xvYmFsaXphdGlvbl9kYXRlaW5wdXRzICV9I3RvYy1jdXN0b20tbWVzc2FnZXMpKS5cbiAqL1xuY2xhc3MgVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgVGltZVBpY2tlck1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxuICAgIGdldCBvdmVycmlkZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRpbWVQaWNrZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRpbWVwaWNrZXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIFRpbWVQaWNrZXJNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cblRpbWVTZWxlY3RvckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRpbWVQaWNrZXJNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRpbWVTZWxlY3RvckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvVGltZVNlbGVjdG9yTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKlxuICogQ3VzdG9tIGNvbXBvbmVudCBtZXNzYWdlcyBvdmVycmlkZSBkZWZhdWx0IGNvbXBvbmVudCBtZXNzYWdlcy5cbiAqL1xuY2xhc3MgVGltZVNlbGVjdG9yQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBUaW1lUGlja2VyTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5UaW1lU2VsZWN0b3JDdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBUaW1lUGlja2VyTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaW1lU2VsZWN0b3JDdXN0b21NZXNzYWdlc0NvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRpbWVzZWxlY3Rvci1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRpbWVTZWxlY3RvckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG5jb25zdCBDT01QT05FTlRfRElSRUNUSVZFUyQyID0gW1xuICAgIFRpbWVQaWNrZXJMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICBUaW1lTGlzdENvbXBvbmVudCxcbiAgICBUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBUaW1lU2VsZWN0b3JMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICBUaW1lU2VsZWN0b3JDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBUaW1lU2VsZWN0b3JDb21wb25lbnRcbl07XG5jb25zdCBDT01QT05FTlRfTU9EVUxFUyQxID0gW1xuICAgIERhdGVJbnB1dE1vZHVsZSxcbiAgICBJbnRsTW9kdWxlLFxuICAgIFBvcHVwTW9kdWxlLFxuICAgIFZpcnR1YWxpemF0aW9uTW9kdWxlLFxuICAgIEV2ZW50c01vZHVsZVxuXTtcbmNvbnN0IMm1MCRuID0gdG91Y2hFbmFibGVkO1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICAgIFRpbWVQaWNrZXJET01TZXJ2aWNlLFxuICAgIEhvdXJzU2VydmljZSxcbiAgICBNaW51dGVzU2VydmljZSxcbiAgICBTZWNvbmRzU2VydmljZSxcbiAgICBEYXlQZXJpb2RTZXJ2aWNlLFxuICAgIHtcbiAgICAgICAgcHJvdmlkZTogVE9VQ0hfRU5BQkxFRCxcbiAgICAgICAgdXNlVmFsdWU6IMm1MCRuXG4gICAgfVxuXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIFRpbWVQaWNrZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBUaW1lUGlja2VyTW9kdWxlIHtcbn1cblRpbWVQaWNrZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0NPTVBPTkVOVF9ESVJFQ1RJVkVTJDJdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtDT01QT05FTlRfRElSRUNUSVZFUyQyXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCAuLi5DT01QT05FTlRfTU9EVUxFUyQxXSxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IHByb3ZpZGVyc1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWVzc2FnZXMkMSBleHRlbmRzIENvbXBvbmVudE1lc3NhZ2VzIHtcbn1cbk1lc3NhZ2VzJDEucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdG9nZ2xlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRlVGFiOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRlVGFiTGFiZWw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpbWVUYWI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRpbWVUYWJMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWNjZXB0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY2NlcHRMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2FuY2VsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjYW5jZWxMYWJlbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG9kYXk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vdzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm93TGFiZWw6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEN1c3RvbSBjb21wb25lbnQgbWVzc2FnZXMgb3ZlcnJpZGUgZGVmYXVsdCBjb21wb25lbnQgbWVzc2FnZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBnbG9iYWxpemF0aW9uX2RhdGVpbnB1dHMgJX0jdG9jLWN1c3RvbS1tZXNzYWdlcykpLlxuICovXG5jbGFzcyBEYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgTWVzc2FnZXMkMSB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkRhdGVUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGVUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZGF0ZXRpbWVwaWNrZXItbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBNZXNzYWdlcyQxIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RhdGVUaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuY29uc3QgQ09NUE9ORU5UX0RJUkVDVElWRVMkMyA9IFtcbiAgICBEYXRlVGltZVBpY2tlckNvbXBvbmVudCxcbiAgICBEYXRlVGltZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlXG5dO1xuY29uc3QgybUwJG8gPSB0b3VjaEVuYWJsZWQ7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBEYXRlVGltZVBpY2tlciBjb21wb25lbnQuXG4gKi9cbmNsYXNzIERhdGVUaW1lUGlja2VyTW9kdWxlIHtcbn1cbkRhdGVUaW1lUGlja2VyTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLi4uQ09NUE9ORU5UX0RJUkVDVElWRVMkM1xuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW1xuICAgICAgICAgICAgICAgICAgICAuLi5DT01QT05FTlRfRElSRUNUSVZFUyQzLFxuICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZXNNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBJbnRsTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBEYXRlSW5wdXRNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIENhbGVuZGFyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBUaW1lUGlja2VyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBQb3B1cE1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRXZlbnRzTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZXNNb2R1bGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7IHByb3ZpZGU6IFRPVUNIX0VOQUJMRUQsIHVzZVZhbHVlOiDJtTAkbyB9XG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBDT01QT05FTlRfTU9EVUxFUyQyID0gW1xuICAgIENhbGVuZGFyc01vZHVsZSxcbiAgICBEYXRlSW5wdXRNb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZSxcbiAgICBUaW1lUGlja2VyTW9kdWxlLFxuICAgIERhdGVSYW5nZU1vZHVsZSxcbiAgICBEYXRlVGltZVBpY2tlck1vZHVsZVxuXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIERhdGUgSW5wdXRzIGNvbXBvbmVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgRGF0ZSBJbnB1dHMgbW9kdWxlXG4gKiBpbXBvcnQgeyBEYXRlSW5wdXRzTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZGF0ZWlucHV0cyc7XG4gKlxuICogLy8gVGhlIGJyb3dzZXIgcGxhdGZvcm0gd2l0aCBhIGNvbXBpbGVyXG4gKiBpbXBvcnQgeyBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci1keW5hbWljJztcbiAqXG4gKiBpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuICpcbiAqIC8vIEltcG9ydCB0aGUgYXBwIGNvbXBvbmVudFxuICogaW1wb3J0IHsgQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9hcHAuY29tcG9uZW50JztcbiAqXG4gKiAvLyBEZWZpbmUgdGhlIGFwcCBtb2R1bGVcbiAqIF9ATmdNb2R1bGUoe1xuICogICAgIGRlY2xhcmF0aW9uczogW0FwcENvbXBvbmVudF0sIC8vIGRlY2xhcmUgdGhlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBEYXRlSW5wdXRzTW9kdWxlXSwgLy8gaW1wb3J0IHRoZSBEYXRlIElucHV0cyBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIERhdGVJbnB1dHNNb2R1bGUge1xufVxuRGF0ZUlucHV0c01vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0czogQ09NUE9ORU5UX01PRFVMRVMkMixcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBDT01QT05FTlRfTU9EVUxFUyQyXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0IHsgQ2FsZW5kYXJDb21tb25Nb2R1bGUsIENBTEVOREFSX1JBTkdFX1ZBTElEQVRPUlMsIENBTEVOREFSX1ZBTFVFX0FDQ0VTU09SLCBLRU5ET19JTlBVVF9QUk9WSURFUiwgS0Zvck9mLCBLRm9yT2ZDb250ZXh0LCBIZWFkZXJDb21wb25lbnQsIEhvcml6b250YWxWaWV3TGlzdENvbXBvbmVudCwgQ2FsZW5kYXJNZXNzYWdlcywgTXVsdGlWaWV3Q2FsZW5kYXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgTWVzc2FnZXMsIFJBTkdFX0NBTEVOREFSX1JBTkdFX1ZBTElEQVRPUlMsIFJBTkdFX0NBTEVOREFSX1ZBTFVFX0FDQ0VTU09SLCBOYXZpZ2F0aW9uQ29tcG9uZW50LCBCdXNWaWV3U2VydmljZSwgQ2VudHVyeVZpZXdTZXJ2aWNlLCBEZWNhZGVWaWV3U2VydmljZSwgRGlzYWJsZWREYXRlc1NlcnZpY2UsIENhbGVuZGFyRE9NU2VydmljZSwgTW9udGhWaWV3U2VydmljZSwgTmF2aWdhdGlvblNlcnZpY2UsIFNjcm9sbFN5bmNTZXJ2aWNlLCBXZWVrTmFtZXNTZXJ2aWNlLCBZZWFyVmlld1NlcnZpY2UsIFRlbXBsYXRlc01vZHVsZSwgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBDZW50dXJ5Q2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBEZWNhZGVDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIEhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUsIE1vbnRoQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBOYXZpZ2F0aW9uSXRlbVRlbXBsYXRlRGlyZWN0aXZlLCBXZWVrTnVtYmVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBZZWFyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBWaWV3TGlzdENvbXBvbmVudCwgVmlld0NvbXBvbmVudCwgUGlja2VyU2VydmljZSwgRGF0ZUlucHV0TWVzc2FnZXMsIERhdGVQaWNrZXJNZXNzYWdlcywgRGF0ZVJhbmdlSW5wdXQsIERhdGVSYW5nZVBvcHVwVGVtcGxhdGVEaXJlY3RpdmUsIERhdGVUaW1lUGlja2VyQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBNZXNzYWdlcyQxLCBUaW1lUGlja2VyTWVzc2FnZXMsIFRpbWVQaWNrZXJDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgVGltZVNlbGVjdG9yQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIERheVBlcmlvZFNlcnZpY2UsIFRpbWVQaWNrZXJET01TZXJ2aWNlLCBIb3Vyc1NlcnZpY2UsIE1pbnV0ZXNTZXJ2aWNlLCBTZWNvbmRzU2VydmljZSwgVGltZUxpc3RDb21wb25lbnQsIFRpbWVTZWxlY3RvckNvbXBvbmVudCwgVE9VQ0hfRU5BQkxFRCwgU2Nyb2xsZXJTZXJ2aWNlLCBERUZBVUxUX1NDUk9MTEVSX0ZBQ1RPUlksIFNDUk9MTEVSX0ZBQ1RPUllfVE9LRU4sIFZpcnR1YWxpemF0aW9uQ29tcG9uZW50LCBWaXJ0dWFsaXphdGlvbk1vZHVsZSwgQ2FsZW5kYXJDb21wb25lbnQsIERhdGVJbnB1dENvbXBvbmVudCwgRGF0ZVBpY2tlckNvbXBvbmVudCwgVGltZVBpY2tlckNvbXBvbmVudCwgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIE11bHRpVmlld0NhbGVuZGFyQ29tcG9uZW50LCBEYXRlUmFuZ2VDb21wb25lbnQsIERhdGVSYW5nZVBvcHVwQ29tcG9uZW50LCBEYXRlUmFuZ2VFbmRJbnB1dERpcmVjdGl2ZSwgRGF0ZVJhbmdlU3RhcnRJbnB1dERpcmVjdGl2ZSwgRGF0ZVJhbmdlU2VsZWN0aW9uRGlyZWN0aXZlLCBDYWxlbmRhck1vZHVsZSwgQ2FsZW5kYXJzTW9kdWxlLCBEYXRlSW5wdXRNb2R1bGUsIERhdGVQaWNrZXJNb2R1bGUsIERhdGVJbnB1dHNNb2R1bGUsIFRpbWVQaWNrZXJNb2R1bGUsIERhdGVUaW1lUGlja2VyTW9kdWxlLCBNdWx0aVZpZXdDYWxlbmRhck1vZHVsZSwgRGF0ZVJhbmdlTW9kdWxlLCBEYXRlUmFuZ2VTZXJ2aWNlLCBDYWxlbmRhckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBEYXRlSW5wdXRDdXN0b21NZXNzYWdlc0NvbXBvbmVudCwgRGF0ZVBpY2tlckN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBQcmV2ZW50YWJsZUV2ZW50LCBDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBNdWx0aVZpZXdDYWxlbmRhckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBEYXRlSW5wdXRMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgRGF0ZVBpY2tlckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLCBUaW1lUGlja2VyTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUsIFRpbWVTZWxlY3RvckxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlIH07XG4iXX0=","export function saveAs(data, fileName, options = {}) {\n let save = postToProxy;\n\n if (options.forceProxy && !options.proxyURL) {\n throw new Error('No proxyURL is set, but forceProxy is true');\n }\n\n if (!options.forceProxy) {\n if (canDownload()) {\n save = saveAsDataURI;\n }\n\n if (navigator.msSaveBlob) {\n save = saveAsBlob;\n }\n }\n\n save(data, fileName, options);\n}\n\nconst anchor = () => document.createElement('a');\nconst canDownload = () => 'download' in anchor();\n\nfunction saveAsBlob(data, fileName) {\n let blob = data; // could be a Blob object\n\n if (typeof data === 'string') {\n const parts = data.split(';base64,');\n const contentType = parts[0];\n const base64 = atob(parts[1]);\n const array = new Uint8Array(base64.length);\n\n for (let idx = 0; idx < base64.length; idx++) {\n array[idx] = base64.charCodeAt(idx);\n }\n\n blob = new Blob([ array.buffer ], { type: contentType });\n }\n\n navigator.msSaveBlob(blob, fileName);\n}\n\nfunction saveAsDataURI(data, fileName) {\n let dataURI = data;\n if (window.Blob && data instanceof Blob) {\n dataURI = URL.createObjectURL(data);\n }\n\n const fileSaver = anchor();\n fileSaver.download = fileName;\n fileSaver.href = dataURI;\n\n const e = document.createEvent('MouseEvents');\n e.initMouseEvent('click', true, false, window,\n 0, 0, 0, 0, 0, false, false, false, false, 0, null);\n\n fileSaver.dispatchEvent(e);\n setTimeout(() => URL.revokeObjectURL(dataURI));\n}\n\nfunction postToProxy(dataURI, fileName, options) {\n if (!options.proxyURL) {\n return;\n }\n\n const form = document.createElement('form');\n form.setAttribute('action', options.proxyURL);\n form.setAttribute('method', 'POST');\n form.setAttribute('target', options.proxyTarget || '_self');\n\n const formData = options.proxyData || {};\n formData.fileName = fileName;\n\n const parts = dataURI.split(\";base64,\");\n formData.contentType = parts[0].replace(\"data:\", \"\");\n formData.base64 = parts[1];\n\n for (let name in formData) {\n if (formData.hasOwnProperty(name)) {\n const input = document.createElement('input');\n input.setAttribute('type', 'hidden');\n input.setAttribute('name', name);\n input.setAttribute('value', formData[name]);\n\n form.appendChild(input);\n }\n }\n\n document.body.appendChild(form);\n form.submit();\n document.body.removeChild(form);\n}\n\n","let current = {\n toString: (value) => value\n};\n\nclass IntlService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static toString(value, format) {\n return current.toString(value, format);\n }\n}\n\nexport default IntlService;","let current = {\n compile: function(template) {\n return template;\n }\n};\n\nclass TemplateService {\n static register(userImplementation) {\n current = userImplementation;\n }\n\n static compile(template) {\n return current.compile(template);\n }\n}\n\nexport default TemplateService;","const FIELD_REGEX = /\\[(?:(\\d+)|['\"](.*?)['\"])\\]|((?:(?!\\[.*?\\]|\\.).)+)/g;\nconst getterCache = {};\nconst UNDEFINED = 'undefined';\n\ngetterCache[UNDEFINED] = function(obj) {\n return obj;\n};\n\nexport default function getter(field) {\n if (getterCache[field]) {\n return getterCache[field];\n }\n\n const fields = [];\n field.replace(FIELD_REGEX, function(match, index, indexAccessor, field) {\n fields.push(typeof index !== UNDEFINED ? index : (indexAccessor || field));\n });\n\n getterCache[field] = function(obj) {\n let result = obj;\n for (let idx = 0; idx < fields.length && result; idx++) {\n result = result[fields[idx]];\n }\n\n return result;\n };\n\n return getterCache[field];\n}","export default function map(array, func) {\n return array.reduce((result, el, i) => {\n const val = func(el, i);\n if (val != null) {\n result.push(val);\n }\n return result;\n }, []);\n}","import TemplateService from './services/template-service';\nimport getter from './utils/getter';\nimport map from './utils/map';\n\nfunction defaultGroupHeaderTemplate(data) {\n return `${ data.title }: ${ data.value }`;\n}\n\nfunction createArray(length, callback) {\n const result = [];\n\n for (let idx = 0; idx < length; idx++) {\n result.push(callback(idx));\n }\n\n return result;\n}\n\nfunction defaultItemId(item) {\n return item.id;\n}\n\nclass ExcelExporter {\n constructor(options) {\n options.columns = this._trimColumns(options.columns || []);\n\n this.allColumns = map(this._leafColumns(options.columns || []), this._prepareColumn);\n\n this.columns = this._visibleColumns(this.allColumns);\n\n this.options = options;\n this.data = options.data || [];\n this.aggregates = options.aggregates || {};\n this.groups = [].concat(options.groups || []);\n this.hasGroups = this.groups.length > 0;\n this.hierarchy = options.hierarchy;\n this.hasGroupHeaderColumn = this.columns.some(column => column.groupHeaderColumnTemplate);\n this.collapsible = this.options.collapsible;\n }\n\n workbook() {\n const workbook = {\n sheets: [ {\n columns: this._columns(),\n rows: this.hierarchy ? this._hierarchyRows() : this._rows(),\n freezePane: this._freezePane(),\n filter: this._filter()\n } ]\n };\n\n return workbook;\n }\n\n _trimColumns(columns) {\n return columns.filter((column) => {\n let result = Boolean(column.field);\n\n if (!result && column.columns) {\n result = this._trimColumns(column.columns).length > 0;\n }\n\n return result;\n });\n }\n\n _leafColumns(columns) {\n let result = [];\n\n for (let idx = 0; idx < columns.length; idx++) {\n if (!columns[idx].columns) {\n result.push(columns[idx]);\n } else {\n result = result.concat(this._leafColumns(columns[idx].columns));\n }\n }\n\n return result;\n }\n\n _prepareColumn(column) {\n if (!column.field) {\n return null;\n }\n\n let value = function(dataItem) {\n return getter(column.field, true)(dataItem);\n };\n\n let values = null;\n\n if (column.values) {\n values = {};\n\n column.values.forEach(function(item) {\n values[item.value] = item.text;\n });\n\n value = function(dataItem) {\n return values[getter(column.field, true)(dataItem)];\n };\n }\n\n return Object.assign({}, column, {\n value: value,\n values: values,\n groupHeaderTemplate: column.groupHeaderTemplate ? TemplateService.compile(column.groupHeaderTemplate) : defaultGroupHeaderTemplate,\n groupHeaderColumnTemplate: column.groupHeaderColumnTemplate ? TemplateService.compile(column.groupHeaderColumnTemplate) : null,\n groupFooterTemplate: column.groupFooterTemplate ? TemplateService.compile(column.groupFooterTemplate) : null,\n footerTemplate: column.footerTemplate ? TemplateService.compile(column.footerTemplate) : null\n });\n }\n\n _filter() {\n if (!this.options.filterable) {\n return null;\n }\n\n const depth = this._depth();\n\n return {\n from: depth,\n to: depth + this.columns.length - 1\n };\n }\n\n _createPaddingCells(length) {\n return createArray(length, () => Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\"\n }, this.options.paddingCellOptions));\n }\n\n _dataRow(dataItem, level, depth) {\n let cells = this._createPaddingCells(level);\n\n // grouped\n if (this.hasGroups && depth && dataItem.items) {\n cells = cells.concat(this._groupHeaderCells(dataItem, level, depth));\n const rows = this._dataRows(dataItem.items, level + 1);\n\n rows.unshift({\n type: \"group-header\",\n cells: cells,\n level: this.collapsible ? level : null\n });\n\n return rows.concat(this._footer(dataItem, level));\n }\n\n const dataCells = [];\n\n for (let cellIdx = 0; cellIdx < this.columns.length; cellIdx++) {\n dataCells[cellIdx] = this._cell(dataItem, this.columns[cellIdx]);\n }\n\n if (this.hierarchy) {\n dataCells[0].colSpan = depth - level + 1;\n }\n\n return [ {\n type: \"data\",\n cells: cells.concat(dataCells),\n level: this.collapsible ? level : null\n } ];\n }\n\n _groupHeaderCells(dataItem, level, depth) {\n const cells = [];\n\n const column = this.allColumns.filter(function(column) {\n return column.field === dataItem.field;\n })[0] || {};\n\n const title = column && column.title ? column.title : dataItem.field;\n const template = column ? column.groupHeaderTemplate || column.groupHeaderColumnTemplate : null;\n const group = Object.assign({\n title: title,\n field: dataItem.field,\n value: column && column.values ? column.values[dataItem.value] : dataItem.value,\n aggregates: dataItem.aggregates,\n items: dataItem.items\n }, dataItem.aggregates[dataItem.field]);\n\n const value = template ? template(group) : `${ title }: ${ dataItem.value }`;\n\n cells.push(Object.assign({\n value: value,\n background: \"#dfdfdf\",\n color: \"#333\",\n colSpan: (this.hasGroupHeaderColumn ? 1 : this.columns.length) + depth - level\n }, column.groupHeaderCellOptions));\n\n if (this.hasGroupHeaderColumn) {\n this.columns.forEach(function(column, index) {\n if (index > 0) {\n cells.push(Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\",\n value: column.groupHeaderColumnTemplate ?\n column.groupHeaderColumnTemplate(Object.assign({ group: group }, group, dataItem.aggregates[column.field])) :\n undefined\n }, column.groupHeaderCellOptions));\n }\n });\n }\n\n return cells;\n }\n\n _dataRows(dataItems, level) {\n const depth = this._depth();\n const rows = [];\n\n for (let idx = 0; idx < dataItems.length; idx++) {\n rows.push.apply(rows, this._dataRow(dataItems[idx], level, depth));\n }\n\n return rows;\n }\n\n _hierarchyRows() {\n const depth = this._depth();\n const data = this.data;\n const itemLevel = this.hierarchy.itemLevel;\n const itemId = this.hierarchy.itemId || defaultItemId;\n const hasFooter = this._hasFooterTemplate();\n const rows = [];\n const parents = [];\n let previousLevel = 0;\n let previousItemId;\n\n if (!hasFooter) {\n this.collapsible = false;\n }\n\n for (let idx = 0; idx < data.length; idx++) {\n const item = data[idx];\n const level = itemLevel(item, idx);\n\n if (hasFooter) {\n if (level > previousLevel) {\n parents.push({ id: previousItemId, level: previousLevel });\n } else if (level < previousLevel) {\n rows.push.apply(rows, this._hierarchyFooterRows(parents, level, depth));\n }\n\n previousLevel = level;\n previousItemId = itemId(item, idx);\n }\n\n rows.push.apply(rows, this._dataRow(item, level + 1, depth));\n }\n\n if (hasFooter) {\n rows.push.apply(rows, this._hierarchyFooterRows(parents, 0, depth));\n\n const rootAggregate = data.length ? this.aggregates[data[0].parentId] : {};\n rows.push(this._hierarchyFooter(rootAggregate, 0, depth));\n }\n\n this._prependHeaderRows(rows);\n\n return rows;\n }\n\n _hierarchyFooterRows(parents, currentLevel, depth) {\n const rows = [];\n while (parents.length && parents[parents.length - 1].level >= currentLevel) {\n const parent = parents.pop();\n rows.push(this._hierarchyFooter(this.aggregates[parent.id], parent.level + 1, depth));\n }\n\n return rows;\n }\n\n _hasFooterTemplate() {\n const columns = this.columns;\n for (let idx = 0; idx < columns.length; idx++) {\n if (columns[idx].footerTemplate) {\n return true;\n }\n }\n }\n\n _hierarchyFooter(aggregates, level, depth) {\n const cells = this.columns.map(function(column, index) {\n const colSpan = index ? 1 : depth - level + 1;\n if (column.footerTemplate) {\n const fieldAggregates = (aggregates || {})[column.field];\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\",\n colSpan: colSpan,\n value: column.footerTemplate(Object.assign({ aggregates: aggregates }, fieldAggregates))\n }, column.footerCellOptions);\n }\n\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\",\n colSpan: colSpan\n }, column.footerCellOptions);\n });\n\n return {\n type: \"footer\",\n cells: this._createPaddingCells(level).concat(cells),\n level: this.collapsible ? level : null\n };\n }\n\n _footer(dataItem, level) {\n const rows = [];\n const footer = this.columns.some(column => column.groupFooterTemplate);\n\n let templateData, group;\n if (footer) {\n group = {\n group: { items: dataItem.items,\n field: dataItem.field,\n value: dataItem.value }\n };\n templateData = {};\n Object.keys(dataItem.aggregates).forEach(key => {\n templateData[key] = Object.assign({}, dataItem.aggregates[key], group);\n });\n }\n\n const cells = this.columns.map((column) => {\n if (column.groupFooterTemplate) {\n let data = Object.assign({}, templateData, dataItem.aggregates[column.field], group);\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\",\n value: column.groupFooterTemplate(data)\n }, column.groupFooterCellOptions);\n }\n\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\"\n }, column.groupFooterCellOptions);\n });\n\n if (footer) {\n rows.push({\n type: \"group-footer\",\n cells: this._createPaddingCells(this.groups.length).concat(cells),\n level: this.collapsible ? level : null\n });\n }\n\n return rows;\n }\n\n _isColumnVisible(column) {\n return this._visibleColumns([ column ]).length > 0 && (column.field || column.columns);\n }\n\n _visibleColumns(columns) {\n return columns.filter((column) => {\n let exportable = column.exportable;\n if (typeof exportable === 'object') {\n exportable = column.exportable.excel;\n }\n\n const visibleInExport = !column.hidden && exportable !== false;\n const visibleInExportOnly = column.hidden && exportable === true;\n let visible = visibleInExport || visibleInExportOnly;\n if (visible && column.columns) {\n visible = this._visibleColumns(column.columns).length > 0;\n }\n return visible;\n });\n }\n\n _headerRow(row, groups) {\n const headers = row.cells.map(function(cell) {\n return Object.assign(cell, {\n colSpan: cell.colSpan > 1 ? cell.colSpan : 1,\n rowSpan: row.rowSpan > 1 && !cell.colSpan ? row.rowSpan : 1\n });\n });\n\n if (this.hierarchy && headers[0].firstCell) {\n headers[0].colSpan += this._depth();\n }\n\n return {\n type: \"header\",\n cells: createArray(groups.length, () => Object.assign({\n background: \"#7a7a7a\",\n color: \"#fff\"\n }, this.options.headerPaddingCellOptions)).concat(headers)\n };\n }\n\n _prependHeaderRows(rows) {\n const groups = this.groups;\n\n const headerRows = [ { rowSpan: 1, cells: [], index: 0 } ];\n\n this._prepareHeaderRows(headerRows, this.options.columns);\n\n for (let idx = headerRows.length - 1; idx >= 0; idx--) {\n rows.unshift(this._headerRow(headerRows[idx], groups));\n }\n }\n\n _prepareHeaderRows(rows, columns, parentCell, parentRow) {\n const row = parentRow || rows[rows.length - 1];\n let childRow = rows[row.index + 1];\n let totalColSpan = 0;\n\n for (let idx = 0; idx < columns.length; idx++) {\n const column = columns[idx];\n if (this._isColumnVisible(column)) {\n\n const cell = Object.assign({\n background: \"#7a7a7a\",\n color: \"#fff\",\n value: column.title || column.field,\n colSpan: 0,\n firstCell: idx === 0 && (!parentCell || parentCell.firstCell)\n }, column.headerCellOptions);\n row.cells.push(cell);\n\n if (column.columns && column.columns.length) {\n if (!childRow) {\n childRow = { rowSpan: 0, cells: [], index: rows.length };\n rows.push(childRow);\n }\n cell.colSpan = this._trimColumns(this._visibleColumns(column.columns)).length;\n this._prepareHeaderRows(rows, column.columns, cell, childRow);\n totalColSpan += cell.colSpan - 1;\n row.rowSpan = rows.length - row.index;\n }\n }\n }\n\n if (parentCell) {\n parentCell.colSpan += totalColSpan;\n }\n }\n\n _rows() {\n const rows = this._dataRows(this.data, 0);\n\n if (this.columns.length) {\n this._prependHeaderRows(rows);\n let footer = false;\n\n const cells = this.columns.map((column) => {\n if (column.footerTemplate) {\n footer = true;\n\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\",\n value: column.footerTemplate(Object.assign({}, this.aggregates, this.aggregates[column.field]))\n }, column.footerCellOptions);\n }\n\n return Object.assign({\n background: \"#dfdfdf\",\n color: \"#333\"\n }, column.footerCellOptions);\n });\n\n if (footer) {\n rows.push({\n type: \"footer\",\n cells: this._createPaddingCells(this.groups.length).concat(cells)\n });\n }\n }\n\n return rows;\n }\n\n _headerDepth(columns) {\n const result = 1;\n let max = 0;\n\n for (let idx = 0; idx < columns.length; idx++) {\n if (columns[idx].columns) {\n const temp = this._headerDepth(columns[idx].columns);\n if (temp > max) {\n max = temp;\n }\n }\n }\n return result + max;\n }\n\n _freezePane() {\n const columns = this._visibleColumns(this.options.columns || []);\n\n const colSplit = this._visibleColumns(this._trimColumns(this._leafColumns(columns.filter(function(column) {\n return column.locked;\n })))).length;\n\n return {\n rowSplit: this._headerDepth(columns),\n colSplit: colSplit ? colSplit + this.groups.length : 0\n };\n }\n\n _cell(dataItem, column) {\n return Object.assign({\n value: column.value(dataItem)\n }, column.cellOptions);\n }\n\n _depth() {\n let depth = 0;\n\n if (this.hierarchy) {\n depth = this.hierarchy.depth;\n } else {\n depth = this.groups.length;\n }\n\n return depth;\n }\n\n _columns() {\n const depth = this._depth();\n const columns = createArray(depth, () => ({ width: 20 }));\n\n return columns.concat(this.columns.map(function(column) {\n return {\n width: parseInt(column.width, 10),\n autoWidth: column.width ? false : true\n };\n }));\n }\n}\n\nexport default ExcelExporter;\n","import { Deflate, Inflate } from '@progress/pako-esm';\n\n/**\n * Let the user use/change some implementations.\n */\nvar external = {\n Promise: Promise\n};\n\nconst support = {\n base64: true,\n array: true,\n string: true,\n nodebuffer: false,\n nodestream: false,\n\n get arraybuffer() {\n return typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\n },\n\n // Returns true if JSZip can read/generate Uint8Array, false otherwise.\n get uint8array() {\n return typeof Uint8Array !== \"undefined\";\n },\n\n get blob() {\n return blob();\n }\n};\n\nlet blob = function() {\n let supported;\n\n if (typeof ArrayBuffer === \"undefined\") {\n supported = false;\n } else {\n const buffer = new ArrayBuffer(0);\n try {\n supported = new Blob([ buffer ], {\n type: \"application/zip\"\n }).size === 0;\n } catch (e) {\n supported = false;\n }\n }\n\n blob = () => supported;\n return supported;\n};\n\n/* eslint-disable */\n\n// private property\nconst _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n// public method for encoding\nconst encode = function(input) {\n let output = [];\n let chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n let i = 0, len = input.length, remainingBytes = len;\n\n let isArray = typeof input !== \"string\";\n while (i < input.length) {\n remainingBytes = len - i;\n\n if (!isArray) {\n chr1 = input.charCodeAt(i++);\n chr2 = i < len ? input.charCodeAt(i++) : 0;\n chr3 = i < len ? input.charCodeAt(i++) : 0;\n } else {\n chr1 = input[i++];\n chr2 = i < len ? input[i++] : 0;\n chr3 = i < len ? input[i++] : 0;\n }\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n }\n\n return output.join(\"\");\n};\n\n// public method for decoding\nconst decode = function(input) {\n let chr1, chr2, chr3;\n let enc1, enc2, enc3, enc4;\n let i = 0, resultIndex = 0;\n\n let dataUrlPrefix = \"data:\";\n\n if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n // This is a common error: people give a data url\n // (data:image/png;base64,iVBOR...) with a {base64: true} and\n // wonders why things don't work.\n // We can detect that the string input looks like a data url but we\n // *can't* be sure it is one: removing everything up to the comma would\n // be too dangerous.\n throw new Error(\"Invalid base64 input, it looks like a data url.\");\n }\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n let totalLength = input.length * 3 / 4;\n if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n totalLength--;\n }\n if (totalLength % 1 !== 0) {\n // totalLength is not an integer, the length does not match a valid\n // base64 content. That can happen if:\n // - the input is not a base64 content\n // - the input is *almost* a base64 content, with a extra chars at the\n // beginning or at the end\n // - the input uses a base64 letiant (base64url for example)\n throw new Error(\"Invalid base64 input, bad content length.\");\n }\n let output;\n if (support.uint8array) {\n output = new Uint8Array(totalLength|0);\n } else {\n output = new Array(totalLength|0);\n }\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output[resultIndex++] = chr1;\n\n if (enc3 !== 64) {\n output[resultIndex++] = chr2;\n }\n if (enc4 !== 64) {\n output[resultIndex++] = chr3;\n }\n\n }\n\n return output;\n};\n\n/* eslint-disable */\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n var result = null;\n if (support.uint8array) {\n result = new Uint8Array(str.length);\n } else {\n result = new Array(str.length);\n }\n return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nconst newBlob = function(part, type) {\n checkSupport(\"blob\");\n\n // Blob constructor\n return new Blob([part], {\n type: type\n });\n};\n\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n for (var i = 0; i < str.length; ++i) {\n array[i] = str.charCodeAt(i) & 0xFF;\n }\n return array;\n}\n\n/**\n * Transform an array of int into a string, chunk by chunk.\n * See the performances notes on arrayLikeToString.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @param {String} type the type of the array.\n * @param {Integer} chunk the chunk size.\n * @return {String} the resulting string.\n * @throws Error if the chunk is too big for the stack.\n */\nfunction stringifyByChunk(array, type, chunk) {\n var result = [], k = 0, len = array.length;\n // shortcut\n if (len <= chunk) {\n return String.fromCharCode.apply(null, array);\n }\n while (k < len) {\n if (type === \"array\") {\n result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n }\n else {\n result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n }\n k += chunk;\n }\n return result.join(\"\");\n}\n\n/**\n * Call String.fromCharCode on every item in the array.\n * This is the naive implementation, which generate A LOT of intermediate string.\n * This should be used when everything else fail.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction stringifyByChar(array) {\n var resultStr = \"\";\n for(var i = 0; i < array.length; i++) {\n resultStr += String.fromCharCode(array[i]);\n }\n return resultStr;\n}\n\n/**\n * true if the browser accepts to use String.fromCharCode on Uint8Array\n */\nlet fromCharCodeSupportsTypedArrays = () => {\n let supported;\n try {\n supported = support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n } catch (e) {\n supported = false;\n }\n\n fromCharCodeSupportsTypedArrays = () => supported;\n return supported;\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n // Performances notes :\n // --------------------\n // String.fromCharCode.apply(null, array) is the fastest, see\n // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n // but the stack is limited (and we can get huge arrays !).\n //\n // result += String.fromCharCode(array[i]); generate too many strings !\n //\n // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n // TODO : we now have workers that split the work. Do we still need that ?\n var chunk = 65536,\n type = getTypeOf(array),\n canUseApply = true;\n if (type === \"uint8array\") {\n canUseApply = fromCharCodeSupportsTypedArrays();\n }\n\n if (canUseApply) {\n while (chunk > 1) {\n try {\n return stringifyByChunk(array, type, chunk);\n } catch (e) {\n chunk = Math.floor(chunk / 2);\n }\n }\n }\n\n // no apply or chunk error : slow and painful algorithm\n // default browser on android 4.*\n return stringifyByChar(array);\n}\n\nconst applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n for (var i = 0; i < arrayFrom.length; i++) {\n arrayTo[i] = arrayFrom[i];\n }\n return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {\n // string to ?\n \"string\": {\n \"string\": identity,\n \"array\": function(input) {\n return stringToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return transform[\"string\"][\"uint8array\"](input).buffer;\n },\n \"uint8array\": function(input) {\n return stringToArrayLike(input, new Uint8Array(input.length));\n }\n },\n\n // array to ?\n \"array\": {\n \"string\": arrayLikeToString,\n \"array\": identity,\n \"arraybuffer\": function(input) {\n return (new Uint8Array(input)).buffer;\n },\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n }\n },\n\n // arraybuffer to ?\n \"arraybuffer\": {\n \"string\": function(input) {\n return arrayLikeToString(new Uint8Array(input));\n },\n \"array\": function(input) {\n return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n },\n \"arraybuffer\": identity,\n \"uint8array\": function(input) {\n return new Uint8Array(input);\n }\n },\n\n // uint8array to ?\n \"uint8array\": {\n \"string\": arrayLikeToString,\n \"array\": function(input) {\n return arrayLikeToArrayLike(input, new Array(input.length));\n },\n \"arraybuffer\": function(input) {\n return input.buffer;\n },\n \"uint8array\": identity\n }\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nconst transformTo = function(outputType, input) {\n if (!input) {\n // undefined, null, etc\n // an empty string won't harm.\n input = \"\";\n }\n if (!outputType) {\n return input;\n }\n checkSupport(outputType);\n var inputType = getTypeOf(input);\n var result = transform[inputType][outputType](input);\n return result;\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nconst getTypeOf = function(input) {\n if (typeof input === \"string\") {\n return \"string\";\n }\n if (Object.prototype.toString.call(input) === \"[object Array]\") {\n return \"array\";\n }\n if (support.uint8array && input instanceof Uint8Array) {\n return \"uint8array\";\n }\n if (support.arraybuffer && input instanceof ArrayBuffer) {\n return \"arraybuffer\";\n }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nconst checkSupport = function(type) {\n var supported = support[type.toLowerCase()];\n if (!supported) {\n throw new Error(type + \" is not supported by this platform\");\n }\n};\n\nconst MAX_VALUE_16BITS = 65535;\nconst MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nconst pretty = function(str) {\n var res = '',\n code, i;\n for (i = 0; i < (str || \"\").length; i++) {\n code = str.charCodeAt(i);\n res += '\\\\x' + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n }\n return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nconst delay = function(callback, args, self) {\n setTimeout(function() {\n callback.apply(self || null, args || []);\n }, 0);\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nconst extend = function() {\n var result = {}, i, attr;\n for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n for (attr in arguments[i]) {\n if (Object.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n result[attr] = arguments[i][attr];\n }\n }\n }\n return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nconst prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n // if inputData is already a promise, this flatten it.\n var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n if (isBlob && typeof FileReader !== \"undefined\") {\n return new external.Promise(function (resolve, reject) {\n var reader = new FileReader();\n\n reader.onload = function(e) {\n resolve(e.target.result);\n };\n reader.onerror = function(e) {\n reject(e.target.error);\n };\n reader.readAsArrayBuffer(data);\n });\n } else {\n return data;\n }\n });\n\n return promise.then(function(data) {\n var dataType = getTypeOf(data);\n\n if (!dataType) {\n return external.Promise.reject(\n new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n );\n }\n // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n if (dataType === \"arraybuffer\") {\n data = transformTo(\"uint8array\", data);\n } else if (dataType === \"string\") {\n if (isBase64) {\n data = decode(data);\n }\n else if (isBinary) {\n // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n if (isOptimizedBinaryString !== true) {\n // this is a string, not in a base64 format.\n // Be sure that this is a correct \"binary string\"\n data = string2binary(data);\n }\n }\n }\n return data;\n });\n};\n\n/* eslint-disable */\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nclass GenericWorker {\n constructor(name) {\n // the name of the worker\n this.name = name || \"default\";\n // an object containing metadata about the workers chain\n this.streamInfo = {};\n // an error which happened when the worker was paused\n this.generatedError = null;\n // an object containing metadata to be merged by this worker into the general metadata\n this.extraStreamInfo = {};\n // true if the stream is paused (and should not do anything), false otherwise\n this.isPaused = true;\n // true if the stream is finished (and should not do anything), false otherwise\n this.isFinished = false;\n // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n this.isLocked = false;\n // the event listeners\n this._listeners = {\n 'data':[],\n 'end':[],\n 'error':[]\n };\n // the previous worker, if any\n this.previous = null;\n }\n\n /**\n * Push a chunk to the next workers.\n * @param {Object} chunk the chunk to push\n */\n push(chunk) {\n this.emit(\"data\", chunk);\n }\n\n /**\n * End the stream.\n * @return {Boolean} true if this call ended the worker, false otherwise.\n */\n end() {\n if (this.isFinished) {\n return false;\n }\n\n this.flush();\n try {\n this.emit(\"end\");\n this.cleanUp();\n this.isFinished = true;\n } catch (e) {\n this.emit(\"error\", e);\n }\n return true;\n }\n\n /**\n * End the stream with an error.\n * @param {Error} e the error which caused the premature end.\n * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n */\n error(e) {\n if (this.isFinished) {\n return false;\n }\n\n if(this.isPaused) {\n this.generatedError = e;\n } else {\n this.isFinished = true;\n\n this.emit(\"error\", e);\n\n // in the workers chain exploded in the middle of the chain,\n // the error event will go downward but we also need to notify\n // workers upward that there has been an error.\n if(this.previous) {\n this.previous.error(e);\n }\n\n this.cleanUp();\n }\n return true;\n }\n\n /**\n * Add a callback on an event.\n * @param {String} name the name of the event (data, end, error)\n * @param {Function} listener the function to call when the event is triggered\n * @return {GenericWorker} the current object for chainability\n */\n on(name, listener) {\n this._listeners[name].push(listener);\n return this;\n }\n\n /**\n * Clean any references when a worker is ending.\n */\n cleanUp() {\n this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n this._listeners = [];\n }\n\n /**\n * Trigger an event. This will call registered callback with the provided arg.\n * @param {String} name the name of the event (data, end, error)\n * @param {Object} arg the argument to call the callback with.\n */\n emit(name, arg) {\n if (this._listeners[name]) {\n for(var i = 0; i < this._listeners[name].length; i++) {\n this._listeners[name][i].call(this, arg);\n }\n }\n }\n\n /**\n * Chain a worker with an other.\n * @param {Worker} next the worker receiving events from the current one.\n * @return {worker} the next worker for chainability\n */\n pipe(next) {\n return next.registerPrevious(this);\n }\n\n /**\n * Same as `pipe` in the other direction.\n * Using an API with `pipe(next)` is very easy.\n * Implementing the API with the point of view of the next one registering\n * a source is easier, see the ZipFileWorker.\n * @param {Worker} previous the previous worker, sending events to this one\n * @return {Worker} the current worker for chainability\n */\n registerPrevious(previous) {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n\n // sharing the streamInfo...\n this.streamInfo = previous.streamInfo;\n // ... and adding our own bits\n this.mergeStreamInfo();\n this.previous = previous;\n var self = this;\n previous.on('data', function (chunk) {\n self.processChunk(chunk);\n });\n previous.on('end', function () {\n self.end();\n });\n previous.on('error', function (e) {\n self.error(e);\n });\n return this;\n }\n\n /**\n * Pause the stream so it doesn't send events anymore.\n * @return {Boolean} true if this call paused the worker, false otherwise.\n */\n pause() {\n if(this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = true;\n\n if(this.previous) {\n this.previous.pause();\n }\n return true;\n }\n\n /**\n * Resume a paused stream.\n * @return {Boolean} true if this call resumed the worker, false otherwise.\n */\n resume() {\n if(!this.isPaused || this.isFinished) {\n return false;\n }\n this.isPaused = false;\n\n // if true, the worker tried to resume but failed\n var withError = false;\n if(this.generatedError) {\n this.error(this.generatedError);\n withError = true;\n }\n if(this.previous) {\n this.previous.resume();\n }\n\n return !withError;\n }\n\n /**\n * Flush any remaining bytes as the stream is ending.\n */\n flush() {}\n\n /**\n * Process a chunk. This is usually the method overridden.\n * @param {Object} chunk the chunk to process.\n */\n processChunk(chunk) {\n this.push(chunk);\n }\n\n /**\n * Add a key/value to be added in the workers chain streamInfo once activated.\n * @param {String} key the key to use\n * @param {Object} value the associated value\n * @return {Worker} the current worker for chainability\n */\n withStreamInfo(key, value) {\n this.extraStreamInfo[key] = value;\n this.mergeStreamInfo();\n return this;\n }\n\n /**\n * Merge this worker's streamInfo into the chain's streamInfo.\n */\n mergeStreamInfo() {\n for(var key in this.extraStreamInfo) {\n if (!this.extraStreamInfo.hasOwnProperty(key)) {\n continue;\n }\n this.streamInfo[key] = this.extraStreamInfo[key];\n }\n }\n\n /**\n * Lock the stream to prevent further updates on the workers chain.\n * After calling this method, all calls to pipe will fail.\n */\n lock() {\n if (this.isLocked) {\n throw new Error(\"The stream '\" + this + \"' has already been used.\");\n }\n this.isLocked = true;\n if (this.previous) {\n this.previous.lock();\n }\n }\n\n /**\n *\n * Pretty print the workers chain.\n */\n toString() {\n var me = \"Worker \" + this.name;\n if (this.previous) {\n return this.previous + \" -> \" + me;\n } else {\n return me;\n }\n }\n}\n\n/* eslint-disable */\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Returns the utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nlet utf8len = function(c) {\n const _utf8len = new Array(256);\n for (let i = 0; i < 256; i++) {\n _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n }\n _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n // Memoize table after first call\n utf8len = function(c) {\n return _utf8len[c];\n };\n\n return _utf8len[c];\n};\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n if (support.uint8array) {\n buf = new Uint8Array(buf_len);\n } else {\n buf = new Array(buf_len);\n }\n\n // convert\n for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n c2 = str.charCodeAt(m_pos+1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nvar utf8border = function(buf, max) {\n var pos;\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n pos = max-1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Fuckup - very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means vuffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + utf8len(buf[pos]) > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n var i, out, c, c_len;\n var len = buf.length;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n var utf16buf = new Array(len*2);\n\n for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n // shrinkBuf(utf16buf, out)\n if (utf16buf.length !== out) {\n if(utf16buf.subarray) {\n utf16buf = utf16buf.subarray(0, out);\n } else {\n utf16buf.length = out;\n }\n }\n\n // return String.fromCharCode.apply(null, utf16buf);\n return applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nconst utf8encode = function utf8encode(str) {\n return string2buf(str);\n};\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nconst utf8decode = function utf8decode(buf) {\n buf = transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nclass Utf8DecodeWorker extends GenericWorker {\n constructor() {\n super(\"utf-8 decode\");\n\n // the last bytes if a chunk didn't end with a complete codepoint.\n this.leftOver = null;\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk (chunk) {\n var data = transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n // 1st step, re-use what's left of the previous chunk\n if (this.leftOver && this.leftOver.length) {\n if(support.uint8array) {\n var previousData = data;\n data = new Uint8Array(previousData.length + this.leftOver.length);\n data.set(this.leftOver, 0);\n data.set(previousData, this.leftOver.length);\n } else {\n data = this.leftOver.concat(data);\n }\n this.leftOver = null;\n }\n\n var nextBoundary = utf8border(data);\n var usableData = data;\n if (nextBoundary !== data.length) {\n if (support.uint8array) {\n usableData = data.subarray(0, nextBoundary);\n this.leftOver = data.subarray(nextBoundary, data.length);\n } else {\n usableData = data.slice(0, nextBoundary);\n this.leftOver = data.slice(nextBoundary, data.length);\n }\n }\n\n this.push({\n data : utf8decode(usableData),\n meta : chunk.meta\n });\n }\n\n /**\n * @see GenericWorker.flush\n */\n flush() {\n if (this.leftOver && this.leftOver.length) {\n this.push({\n data : utf8decode(this.leftOver),\n meta : {}\n });\n this.leftOver = null;\n }\n }\n}\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nclass Utf8EncodeWorker extends GenericWorker {\n constructor() {\n super(\"utf-8 encode\");\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk(chunk) {\n this.push({\n data: utf8encode(chunk.data),\n meta: chunk.meta\n });\n }\n}\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nclass ConvertWorker extends GenericWorker {\n constructor(destType) {\n super(\"ConvertWorker to \" + destType);\n this.destType = destType;\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk(chunk) {\n this.push({\n data: transformTo(this.destType, chunk.data),\n meta: chunk.meta\n });\n }\n}\n\n/* eslint-disable */\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n switch(type) {\n case \"blob\" :\n return newBlob(transformTo(\"arraybuffer\", content), mimeType);\n case \"base64\" :\n return encode(content);\n default :\n return transformTo(type, content);\n }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n var i, index = 0, res = null, totalLength = 0;\n for(i = 0; i < dataArray.length; i++) {\n totalLength += dataArray[i].length;\n }\n switch(type) {\n case \"string\":\n return dataArray.join(\"\");\n case \"array\":\n return Array.prototype.concat.apply([], dataArray);\n case \"uint8array\":\n res = new Uint8Array(totalLength);\n for(i = 0; i < dataArray.length; i++) {\n res.set(dataArray[i], index);\n index += dataArray[i].length;\n }\n return res;\n default:\n throw new Error(\"concat : unsupported type '\" + type + \"'\");\n }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n return new external.Promise(function (resolve, reject){\n var dataArray = [];\n var chunkType = helper._internalType,\n resultType = helper._outputType,\n mimeType = helper._mimeType;\n helper\n .on('data', function (data, meta) {\n dataArray.push(data);\n if(updateCallback) {\n updateCallback(meta);\n }\n })\n .on('error', function(err) {\n dataArray = [];\n reject(err);\n })\n .on('end', function (){\n try {\n var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n resolve(result);\n } catch (e) {\n reject(e);\n }\n dataArray = [];\n })\n .resume();\n });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nclass StreamHelper {\n constructor (worker, outputType, mimeType) {\n var internalType = outputType;\n switch(outputType) {\n case \"blob\":\n case \"arraybuffer\":\n internalType = \"uint8array\";\n break;\n case \"base64\":\n internalType = \"string\";\n break;\n }\n\n try {\n // the type used internally\n this._internalType = internalType;\n // the type used to output results\n this._outputType = outputType;\n // the mime type\n this._mimeType = mimeType;\n checkSupport(internalType);\n this._worker = worker.pipe(new ConvertWorker(internalType));\n // the last workers can be rewired without issues but we need to\n // prevent any updates on previous workers.\n worker.lock();\n } catch(e) {\n this._worker = new GenericWorker(\"error\");\n this._worker.error(e);\n }\n }\n\n /**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {Function} updateCb the update callback.\n * @return Promise the promise for the accumulation.\n */\n accumulate(updateCb) {\n return accumulate(this, updateCb);\n }\n\n /**\n * Add a listener on an event triggered on a stream.\n * @param {String} evt the name of the event\n * @param {Function} fn the listener\n * @return {StreamHelper} the current helper.\n */\n on(evt, fn) {\n var self = this;\n\n if(evt === \"data\") {\n this._worker.on(evt, function (chunk) {\n fn.call(self, chunk.data, chunk.meta);\n });\n } else {\n this._worker.on(evt, function () {\n delay(fn, arguments, self);\n });\n }\n return this;\n }\n\n /**\n * Resume the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n resume() {\n delay(this._worker.resume, [], this._worker);\n return this;\n }\n\n /**\n * Pause the flow of chunks.\n * @return {StreamHelper} the current helper.\n */\n pause() {\n this._worker.pause();\n return this;\n }\n}\n\nconst base64 = false;\nconst binary = false;\nconst dir = false;\nconst createFolders = true;\nconst date = null;\nconst compression = null;\nconst compressionOptions = null;\nconst comment = null;\nconst unixPermissions = null;\nconst dosPermissions = null;\n\nvar defaults = /*#__PURE__*/Object.freeze({\n __proto__: null,\n base64: base64,\n binary: binary,\n dir: dir,\n createFolders: createFolders,\n date: date,\n compression: compression,\n compressionOptions: compressionOptions,\n comment: comment,\n unixPermissions: unixPermissions,\n dosPermissions: dosPermissions\n});\n\n/* eslint-disable */\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nconst DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nclass DataWorker extends GenericWorker {\n constructor(dataP) {\n super(\"DataWorker\");\n var self = this;\n this.dataIsReady = false;\n this.index = 0;\n this.max = 0;\n this.data = null;\n this.type = \"\";\n\n this._tickScheduled = false;\n\n dataP.then(function (data) {\n self.dataIsReady = true;\n self.data = data;\n self.max = data && data.length || 0;\n self.type = getTypeOf(data);\n if(!self.isPaused) {\n self._tickAndRepeat();\n }\n }, function (e) {\n self.error(e);\n });\n }\n\n /**\n * @see GenericWorker.cleanUp\n */\n cleanUp() {\n super.cleanUp();\n this.data = null;\n }\n\n /**\n * @see GenericWorker.resume\n */\n resume() {\n if(!super.resume()) {\n return false;\n }\n\n if (!this._tickScheduled && this.dataIsReady) {\n this._tickScheduled = true;\n delay(this._tickAndRepeat, [], this);\n }\n return true;\n }\n\n /**\n * Trigger a tick a schedule an other call to this function.\n */\n _tickAndRepeat() {\n this._tickScheduled = false;\n if(this.isPaused || this.isFinished) {\n return;\n }\n this._tick();\n if(!this.isFinished) {\n delay(this._tickAndRepeat, [], this);\n this._tickScheduled = true;\n }\n };\n\n /**\n * Read and push a chunk.\n */\n _tick() {\n\n if(this.isPaused || this.isFinished) {\n return false;\n }\n\n var size = DEFAULT_BLOCK_SIZE;\n var data = null, nextIndex = Math.min(this.max, this.index + size);\n if (this.index >= this.max) {\n // EOF\n return this.end();\n } else {\n switch(this.type) {\n case \"string\":\n data = this.data.substring(this.index, nextIndex);\n break;\n case \"uint8array\":\n data = this.data.subarray(this.index, nextIndex);\n break;\n case \"array\":\n data = this.data.slice(this.index, nextIndex);\n break;\n }\n this.index = nextIndex;\n return this.push({\n data : data,\n meta : {\n percent : this.max ? this.index / this.max * 100 : 0\n }\n });\n }\n }\n}\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nclass DataLengthProbe extends GenericWorker {\n constructor(propName) {\n super(\"DataLengthProbe for \" + propName);\n this.propName = propName;\n this.withStreamInfo(propName, 0);\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk(chunk) {\n if (chunk) {\n const length = this.streamInfo[this.propName] || 0;\n this.streamInfo[this.propName] = length + chunk.data.length;\n }\n super.processChunk(chunk);\n }\n}\n\n/* eslint-disable */\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\nlet makeTable = function() {\n // Use ordinary array, since untyped makes no boost here\n const table = [];\n\n for (let n =0; n < 256; n++){\n let c = n;\n for(let k =0; k < 8; k++){\n c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n // Memoize table on first call.\n makeTable = function() {\n return table;\n };\n\n return table;\n};\n\nfunction crc32(crc, buf, len, pos) {\n const t = makeTable();\n let end = pos + len;\n\n crc = crc ^ (-1);\n\n for (let i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n const t = makeTable();\n let end = pos + len;\n\n crc = crc ^ (-1);\n\n for (let i = pos; i < end; i++ ) {\n crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\nfunction crc32wrapper(input, crc) {\n if (typeof input === \"undefined\" || !input.length) {\n return 0;\n }\n\n const isArray = getTypeOf(input) !== \"string\";\n\n if (isArray) {\n return crc32(crc | 0, input, input.length, 0);\n } else {\n return crc32str(crc | 0, input, input.length, 0);\n }\n}\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nclass Crc32Probe extends GenericWorker {\n constructor() {\n super(\"Crc32Probe\");\n this.withStreamInfo(\"crc32\", 0);\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk(chunk) {\n this.streamInfo.crc32 = crc32wrapper(chunk.data, this.streamInfo.crc32 || 0);\n this.push(chunk);\n }\n}\n\n/* eslint-disable */\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nclass CompressedObject {\n constructor(compressedSize, uncompressedSize, crc32, compression, data) {\n this.compressedSize = compressedSize;\n this.uncompressedSize = uncompressedSize;\n this.crc32 = crc32;\n this.compression = compression;\n this.compressedContent = data;\n }\n\n /**\n * Create a worker to get the uncompressed content.\n * @return {GenericWorker} the worker.\n */\n getContentWorker() {\n var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n .pipe(this.compression.uncompressWorker())\n .pipe(new DataLengthProbe(\"data_length\"));\n\n var that = this;\n worker.on(\"end\", function () {\n if(this.streamInfo['data_length'] !== that.uncompressedSize) {\n throw new Error(\"Bug : uncompressed data size mismatch\");\n }\n });\n return worker;\n }\n\n /**\n * Create a worker to get the compressed content.\n * @return {GenericWorker} the worker.\n */\n getCompressedWorker() {\n return new DataWorker(external.Promise.resolve(this.compressedContent))\n .withStreamInfo(\"compressedSize\", this.compressedSize)\n .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n .withStreamInfo(\"crc32\", this.crc32)\n .withStreamInfo(\"compression\", this.compression)\n ;\n }\n\n /**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\n static createWorkerFrom(uncompressedWorker, compression, compressionOptions) {\n return uncompressedWorker\n .pipe(new Crc32Probe())\n .pipe(new DataLengthProbe(\"uncompressedSize\"))\n .pipe(compression.compressWorker(compressionOptions))\n .pipe(new DataLengthProbe(\"compressedSize\"))\n .withStreamInfo(\"compression\", compression);\n }\n}\n\n/* eslint-disable */\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nclass ZipObject {\n constructor(name, data, options) {\n this.name = name;\n this.dir = options.dir;\n this.date = options.date;\n this.comment = options.comment;\n this.unixPermissions = options.unixPermissions;\n this.dosPermissions = options.dosPermissions;\n\n this._data = data;\n this._dataBinary = options.binary;\n // keep only the compression\n this.options = {\n compression : options.compression,\n compressionOptions : options.compressionOptions\n };\n }\n\n /**\n * Create an internal stream for the content of this object.\n * @param {String} type the type of each chunk.\n * @return StreamHelper the stream.\n */\n internalStream(type) {\n var result = null, outputType = \"string\";\n try {\n if (!type) {\n throw new Error(\"No output type specified.\");\n }\n outputType = type.toLowerCase();\n var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n if (outputType === \"binarystring\" || outputType === \"text\") {\n outputType = \"string\";\n }\n result = this._decompressWorker();\n\n var isUnicodeString = !this._dataBinary;\n\n if (isUnicodeString && !askUnicodeString) {\n result = result.pipe(new Utf8EncodeWorker());\n }\n if (!isUnicodeString && askUnicodeString) {\n result = result.pipe(new Utf8DecodeWorker());\n }\n } catch (e) {\n result = new GenericWorker(\"error\");\n result.error(e);\n }\n\n return new StreamHelper(result, outputType, \"\");\n }\n\n /**\n * Prepare the content in the asked type.\n * @param {String} type the type of the result.\n * @param {Function} onUpdate a function to call on each internal update.\n * @return Promise the promise of the result.\n */\n async(type, onUpdate) {\n return this.internalStream(type).accumulate(onUpdate);\n }\n\n /**\n * Return a worker for the compressed content.\n * @private\n * @param {Object} compression the compression object to use.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return Worker the worker.\n */\n _compressWorker(compression, compressionOptions) {\n if (\n this._data instanceof CompressedObject &&\n this._data.compression.magic === compression.magic\n ) {\n return this._data.getCompressedWorker();\n } else {\n var result = this._decompressWorker();\n if(!this._dataBinary) {\n result = result.pipe(new Utf8EncodeWorker());\n }\n return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n }\n }\n\n /**\n * Return a worker for the decompressed content.\n * @private\n * @return Worker the worker.\n */\n _decompressWorker() {\n if (this._data instanceof CompressedObject) {\n return this._data.getContentWorker();\n } else if (this._data instanceof GenericWorker) {\n return this._data;\n } else {\n return new DataWorker(this._data);\n }\n }\n}\n\nlet arrayType = function() {\n const useTypedArray = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined');\n const resolved = useTypedArray ? \"uint8array\" : \"array\";\n\n arrayType = function() {\n return resolved;\n };\n};\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nclass FlateWorker extends GenericWorker {\n constructor(action, options) {\n super(\"FlateWorker/\" + action);\n\n this._pako = null;\n this._pakoAction = action;\n this._pakoOptions = options;\n // the `meta` object from the last chunk received\n // this allow this worker to pass around metadata\n this.meta = {};\n }\n\n /**\n * @see GenericWorker.processChunk\n */\n processChunk(chunk) {\n this.meta = chunk.meta;\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push(transformTo(arrayType(), chunk.data), false);\n }\n\n /**\n * @see GenericWorker.flush\n */\n flush() {\n super.flush();\n if (this._pako === null) {\n this._createPako();\n }\n this._pako.push([], true);\n }\n /**\n * @see GenericWorker.cleanUp\n */\n cleanUp() {\n super.cleanUp();\n this._pako = null;\n }\n\n /**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\n _createPako() {\n const params = {\n raw: true,\n level: this._pakoOptions.level || -1 // default compression\n };\n this._pako = this._pakoAction === 'Deflate' ? new Deflate(params) : new Inflate(params);\n this._pako.onData = (data) => {\n this.push({\n data: data,\n meta: this.meta\n });\n };\n }\n}\n\nvar DEFLATE = {\n magic: \"\\x08\\x00\",\n compressWorker: function(compressionOptions) {\n return new FlateWorker(\"Deflate\", compressionOptions);\n },\n\n uncompressWorker: function() {\n return new FlateWorker(\"Inflate\", {});\n }\n};\n\nconst STORE = {\n magic: \"\\x00\\x00\",\n compressWorker: function() {\n return new GenericWorker(\"STORE compression\");\n },\n uncompressWorker: function() {\n return new GenericWorker(\"STORE decompression\");\n }\n};\n\nvar compressions = {\n STORE,\n DEFLATE\n};\n\nconst LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nconst CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nconst CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nconst ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nconst ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nconst DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n\n/* eslint-disable */\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n var hex = \"\", i;\n for (i = 0; i < bytes; i++) {\n hex += String.fromCharCode(dec & 0xff);\n dec = dec >>> 8;\n }\n return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n * ^^^_________________________ setuid, setgid, sticky\n * ^^^^^^^^^________________ permissions\n * ^^^^^^^^^^______ not used ?\n * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n var result = unixPermissions;\n if (!unixPermissions) {\n // I can't use octal values in strict mode, hence the hexa.\n // 040775 => 0x41fd\n // 0100664 => 0x81b4\n result = isDir ? 0x41fd : 0x81b4;\n }\n return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0 Read-Only\n * Bit 1 Hidden\n * Bit 2 System\n * Bit 3 Volume Label\n * Bit 4 Directory\n * Bit 5 Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions, isDir) {\n\n // the dir flag is already set for compatibility\n return (dosPermissions || 0) & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n var file = streamInfo['file'],\n compression = streamInfo['compression'],\n useCustomEncoding = encodeFileName !== utf8encode,\n encodedFileName = transformTo(\"string\", encodeFileName(file.name)),\n utfEncodedFileName = transformTo(\"string\", utf8encode(file.name)),\n comment = file.comment,\n encodedComment = transformTo(\"string\", encodeFileName(comment)),\n utfEncodedComment = transformTo(\"string\", utf8encode(comment)),\n useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n useUTF8ForComment = utfEncodedComment.length !== comment.length,\n dosTime,\n dosDate,\n extraFields = \"\",\n unicodePathExtraField = \"\",\n unicodeCommentExtraField = \"\",\n dir = file.dir,\n date = file.date;\n\n\n var dataInfo = {\n crc32 : 0,\n compressedSize : 0,\n uncompressedSize : 0\n };\n\n // if the content is streamed, the sizes/crc32 are only available AFTER\n // the end of the stream.\n if (!streamedContent || streamingEnded) {\n dataInfo.crc32 = streamInfo['crc32'];\n dataInfo.compressedSize = streamInfo['compressedSize'];\n dataInfo.uncompressedSize = streamInfo['uncompressedSize'];\n }\n\n var bitflag = 0;\n if (streamedContent) {\n // Bit 3: the sizes/crc32 are set to zero in the local header.\n // The correct values are put in the data descriptor immediately\n // following the compressed data.\n bitflag |= 0x0008;\n }\n if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n // Bit 11: Language encoding flag (EFS).\n bitflag |= 0x0800;\n }\n\n\n var extFileAttr = 0;\n var versionMadeBy = 0;\n if (dir) {\n // dos or unix, we set the dos dir flag\n extFileAttr |= 0x00010;\n }\n if(platform === \"UNIX\") {\n versionMadeBy = 0x031E; // UNIX, version 3.0\n extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n } else { // DOS or other, fallback to DOS\n versionMadeBy = 0x0014; // DOS, version 2.0\n extFileAttr |= generateDosExternalFileAttr(file.dosPermissions);\n }\n\n // date\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n dosTime = date.getUTCHours();\n dosTime = dosTime << 6;\n dosTime = dosTime | date.getUTCMinutes();\n dosTime = dosTime << 5;\n dosTime = dosTime | date.getUTCSeconds() / 2;\n\n dosDate = date.getUTCFullYear() - 1980;\n dosDate = dosDate << 4;\n dosDate = dosDate | (date.getUTCMonth() + 1);\n dosDate = dosDate << 5;\n dosDate = dosDate | date.getUTCDate();\n\n if (useUTF8ForFileName) {\n // set the unicode path extra field. unzip needs at least one extra\n // field to correctly handle unicode path, so using the path is as good\n // as any other information. This could improve the situation with\n // other archive managers too.\n // This field is usually used without the utf8 flag, with a non\n // unicode path in the header (winrar, winzip). This helps (a bit)\n // with the messy Windows' default compressed folders feature but\n // breaks on p7zip which doesn't seek the unicode path extra field.\n // So for now, UTF-8 everywhere !\n unicodePathExtraField =\n // Version\n decToHex(1, 1) +\n // NameCRC32\n decToHex(crc32wrapper(encodedFileName), 4) +\n // UnicodeName\n utfEncodedFileName;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x70\" +\n // size\n decToHex(unicodePathExtraField.length, 2) +\n // content\n unicodePathExtraField;\n }\n\n if(useUTF8ForComment) {\n\n unicodeCommentExtraField =\n // Version\n decToHex(1, 1) +\n // CommentCRC32\n decToHex(crc32wrapper(encodedComment), 4) +\n // UnicodeName\n utfEncodedComment;\n\n extraFields +=\n // Info-ZIP Unicode Path Extra Field\n \"\\x75\\x63\" +\n // size\n decToHex(unicodeCommentExtraField.length, 2) +\n // content\n unicodeCommentExtraField;\n }\n\n var header = \"\";\n\n // version needed to extract\n header += \"\\x0A\\x00\";\n // general purpose bit flag\n header += decToHex(bitflag, 2);\n // compression method\n header += compression.magic;\n // last mod file time\n header += decToHex(dosTime, 2);\n // last mod file date\n header += decToHex(dosDate, 2);\n // crc-32\n header += decToHex(dataInfo.crc32, 4);\n // compressed size\n header += decToHex(dataInfo.compressedSize, 4);\n // uncompressed size\n header += decToHex(dataInfo.uncompressedSize, 4);\n // file name length\n header += decToHex(encodedFileName.length, 2);\n // extra field length\n header += decToHex(extraFields.length, 2);\n\n\n var fileRecord = LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n var dirRecord = CENTRAL_FILE_HEADER +\n // version made by (00: DOS)\n decToHex(versionMadeBy, 2) +\n // file header (common to file and central directory)\n header +\n // file comment length\n decToHex(encodedComment.length, 2) +\n // disk number start\n \"\\x00\\x00\" +\n // internal file attributes TODO\n \"\\x00\\x00\" +\n // external file attributes\n decToHex(extFileAttr, 4) +\n // relative offset of local header\n decToHex(offset, 4) +\n // file name\n encodedFileName +\n // extra field\n extraFields +\n // file comment\n encodedComment;\n\n return {\n fileRecord: fileRecord,\n dirRecord: dirRecord\n };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n var dirEnd = \"\";\n var encodedComment = transformTo(\"string\", encodeFileName(comment));\n\n // end of central dir signature\n dirEnd = CENTRAL_DIRECTORY_END +\n // number of this disk\n \"\\x00\\x00\" +\n // number of the disk with the start of the central directory\n \"\\x00\\x00\" +\n // total number of entries in the central directory on this disk\n decToHex(entriesCount, 2) +\n // total number of entries in the central directory\n decToHex(entriesCount, 2) +\n // size of the central directory 4 bytes\n decToHex(centralDirLength, 4) +\n // offset of start of central directory with respect to the starting disk number\n decToHex(localDirLength, 4) +\n // .ZIP file comment length\n decToHex(encodedComment.length, 2) +\n // .ZIP file comment\n encodedComment;\n\n return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n var descriptor = \"\";\n descriptor = DATA_DESCRIPTOR +\n // crc-32 4 bytes\n decToHex(streamInfo['crc32'], 4) +\n // compressed size 4 bytes\n decToHex(streamInfo['compressedSize'], 4) +\n // uncompressed size 4 bytes\n decToHex(streamInfo['uncompressedSize'], 4);\n\n return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nclass ZipFileWorker extends GenericWorker {\n constructor(streamFiles, comment, platform, encodeFileName) {\n super(\"ZipFileWorker\");\n // The number of bytes written so far. This doesn't count accumulated chunks.\n this.bytesWritten = 0;\n // The comment of the zip file\n this.zipComment = comment;\n // The platform \"generating\" the zip file.\n this.zipPlatform = platform;\n // the function to encode file names and comments.\n this.encodeFileName = encodeFileName;\n // Should we stream the content of the files ?\n this.streamFiles = streamFiles;\n // If `streamFiles` is false, we will need to accumulate the content of the\n // files to calculate sizes / crc32 (and write them *before* the content).\n // This boolean indicates if we are accumulating chunks (it will change a lot\n // during the lifetime of this worker).\n this.accumulate = false;\n // The buffer receiving chunks when accumulating content.\n this.contentBuffer = [];\n // The list of generated directory records.\n this.dirRecords = [];\n // The offset (in bytes) from the beginning of the zip file for the current source.\n this.currentSourceOffset = 0;\n // The total number of entries in this zip file.\n this.entriesCount = 0;\n // the name of the file currently being added, null when handling the end of the zip file.\n // Used for the emitted metadata.\n this.currentFile = null;\n\n this._sources = [];\n }\n\n /**\n * @see GenericWorker.push\n */\n push(chunk) {\n\n var currentFilePercent = chunk.meta.percent || 0;\n var entriesCount = this.entriesCount;\n var remainingFiles = this._sources.length;\n\n if(this.accumulate) {\n this.contentBuffer.push(chunk);\n } else {\n this.bytesWritten += chunk.data.length;\n\n super.push({\n data : chunk.data,\n meta : {\n currentFile : this.currentFile,\n percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n }\n });\n }\n }\n\n /**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\n openedSource(streamInfo) {\n this.currentSourceOffset = this.bytesWritten;\n this.currentFile = streamInfo['file'].name;\n\n var streamedContent = this.streamFiles && !streamInfo['file'].dir;\n\n // don't stream folders (because they don't have any content)\n if(streamedContent) {\n var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n } else {\n // we need to wait for the whole file before pushing anything\n this.accumulate = true;\n }\n }\n\n /**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\n closedSource(streamInfo) {\n this.accumulate = false;\n var streamedContent = this.streamFiles && !streamInfo['file'].dir;\n var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n this.dirRecords.push(record.dirRecord);\n if(streamedContent) {\n // after the streamed file, we put data descriptors\n this.push({\n data : generateDataDescriptors(streamInfo),\n meta : {percent:100}\n });\n } else {\n // the content wasn't streamed, we need to push everything now\n // first the file record, then the content\n this.push({\n data : record.fileRecord,\n meta : {percent:0}\n });\n while(this.contentBuffer.length) {\n this.push(this.contentBuffer.shift());\n }\n }\n this.currentFile = null;\n }\n\n /**\n * @see GenericWorker.flush\n */\n flush() {\n\n var localDirLength = this.bytesWritten;\n for(var i = 0; i < this.dirRecords.length; i++) {\n this.push({\n data : this.dirRecords[i],\n meta : {percent:100}\n });\n }\n var centralDirLength = this.bytesWritten - localDirLength;\n\n var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n this.push({\n data : dirEnd,\n meta : {percent:100}\n });\n }\n\n /**\n * Prepare the next source to be read.\n */\n prepareNextSource() {\n this.previous = this._sources.shift();\n this.openedSource(this.previous.streamInfo);\n if (this.isPaused) {\n this.previous.pause();\n } else {\n this.previous.resume();\n }\n }\n\n /**\n * @see GenericWorker.registerPrevious\n */\n registerPrevious(previous) {\n this._sources.push(previous);\n var self = this;\n\n previous.on('data', function (chunk) {\n self.processChunk(chunk);\n });\n previous.on('end', function () {\n self.closedSource(self.previous.streamInfo);\n if(self._sources.length) {\n self.prepareNextSource();\n } else {\n self.end();\n }\n });\n previous.on('error', function (e) {\n self.error(e);\n });\n return this;\n }\n\n /**\n * @see GenericWorker.resume\n */\n resume() {\n if(!super.resume()) {\n return false;\n }\n\n if (!this.previous && this._sources.length) {\n this.prepareNextSource();\n return true;\n }\n if (!this.previous && !this._sources.length && !this.generatedError) {\n this.end();\n return true;\n }\n }\n\n /**\n * @see GenericWorker.error\n */\n error(e) {\n var sources = this._sources;\n if(!super.error(e)) {\n return false;\n }\n for(var i = 0; i < sources.length; i++) {\n try {\n sources[i].error(e);\n } catch(e) {\n // the `error` exploded, nothing to do\n }\n }\n return true;\n }\n\n /**\n * @see GenericWorker.lock\n */\n lock() {\n super.lock();\n var sources = this._sources;\n for(var i = 0; i < sources.length; i++) {\n sources[i].lock();\n }\n }\n}\n\n/* eslint-disable */\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n var compressionName = fileCompression || zipCompression;\n var compression = compressions[compressionName];\n if (!compression) {\n throw new Error(compressionName + \" is not a valid compression method !\");\n }\n return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nconst generateWorker = function (zip, options, comment) {\n\n var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n var entriesCount = 0;\n try {\n\n zip.forEach(function (relativePath, file) {\n entriesCount++;\n var compression = getCompression(file.options.compression, options.compression);\n var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n var dir = file.dir, date = file.date;\n\n file._compressWorker(compression, compressionOptions)\n .withStreamInfo(\"file\", {\n name : relativePath,\n dir : dir,\n date : date,\n comment : file.comment || \"\",\n unixPermissions : file.unixPermissions,\n dosPermissions : file.dosPermissions\n })\n .pipe(zipFileWorker);\n });\n zipFileWorker.entriesCount = entriesCount;\n } catch (e) {\n zipFileWorker.error(e);\n }\n\n return zipFileWorker;\n};\n\n/* eslint-disable */\n\nclass DataReader {\n constructor(data) {\n this.data = data; // type : see implementation\n this.length = data.length;\n this.index = 0;\n this.zero = 0;\n }\n\n /**\n * Check that the offset will not go too far.\n * @param {string} offset the additional offset to check.\n * @throws {Error} an Error if the offset is out of bounds.\n */\n checkOffset(offset) {\n this.checkIndex(this.index + offset);\n }\n\n /**\n * Check that the specified index will not be too far.\n * @param {string} newIndex the index to check.\n * @throws {Error} an Error if the index is out of bounds.\n */\n checkIndex(newIndex) {\n if (this.length < this.zero + newIndex || newIndex < 0) {\n throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n }\n }\n\n /**\n * Change the index.\n * @param {number} newIndex The new index.\n * @throws {Error} if the new index is out of the data.\n */\n setIndex(newIndex) {\n this.checkIndex(newIndex);\n this.index = newIndex;\n }\n\n /**\n * Skip the next n bytes.\n * @param {number} n the number of bytes to skip.\n * @throws {Error} if the new index is out of the data.\n */\n skip(n) {\n this.setIndex(this.index + n);\n }\n\n /**\n * Get the byte at the specified index.\n * @param {number} i the index to use.\n * @return {number} a byte.\n */\n byteAt(i) {\n // see implementations\n }\n\n /**\n * Get the next number with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {number} the corresponding number.\n */\n readInt(size) {\n var result = 0,\n i;\n this.checkOffset(size);\n for (i = this.index + size - 1; i >= this.index; i--) {\n result = (result << 8) + this.byteAt(i);\n }\n this.index += size;\n return result;\n }\n\n /**\n * Get the next string with a given byte size.\n * @param {number} size the number of bytes to read.\n * @return {string} the corresponding string.\n */\n readString(size) {\n return transformTo(\"string\", this.readData(size));\n }\n\n /**\n * Get raw data without conversion, bytes.\n * @param {number} size the number of bytes to read.\n * @return {Object} the raw data, implementation specific.\n */\n readData(size) {\n // see implementations\n }\n\n /**\n * Find the last occurrence of a zip signature (4 bytes).\n * @param {string} sig the signature to find.\n * @return {number} the index of the last occurrence, -1 if not found.\n */\n lastIndexOfSignature(sig) {\n // see implementations\n }\n\n /**\n * Read the signature (4 bytes) at the current position and compare it with sig.\n * @param {string} sig the expected signature\n * @return {boolean} true if the signature matches, false otherwise.\n */\n readAndCheckSignature(sig) {\n // see implementations\n }\n\n /**\n * Get the next date.\n * @return {Date} the date.\n */\n readDate() {\n var dostime = this.readInt(4);\n return new Date(Date.UTC(\n ((dostime >> 25) & 0x7f) + 1980, // year\n ((dostime >> 21) & 0x0f) - 1, // month\n (dostime >> 16) & 0x1f, // day\n (dostime >> 11) & 0x1f, // hour\n (dostime >> 5) & 0x3f, // minute\n (dostime & 0x1f) << 1)); // second\n }\n}\n\n/* eslint-disable */\n\nclass ArrayReader extends DataReader {\n constructor(data) {\n super(data);\n for(var i = 0; i < this.data.length; i++) {\n data[i] = data[i] & 0xFF;\n }\n }\n\n /**\n * @see DataReader.byteAt\n */\n byteAt(i) {\n return this.data[this.zero + i];\n }\n\n /**\n * @see DataReader.lastIndexOfSignature\n */\n lastIndexOfSignature(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3);\n for (var i = this.length - 4; i >= 0; --i) {\n if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n return i - this.zero;\n }\n }\n\n return -1;\n }\n\n /**\n * @see DataReader.readAndCheckSignature\n */\n readAndCheckSignature(sig) {\n var sig0 = sig.charCodeAt(0),\n sig1 = sig.charCodeAt(1),\n sig2 = sig.charCodeAt(2),\n sig3 = sig.charCodeAt(3),\n data = this.readData(4);\n return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n }\n\n /**\n * @see DataReader.readData\n */\n readData(size) {\n this.checkOffset(size);\n if(size === 0) {\n return [];\n }\n var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n }\n}\n\nclass StringReader extends DataReader {\n constructor(data) {\n super(data);\n }\n\n /**\n * @see DataReader.byteAt\n */\n byteAt(i) {\n return this.data.charCodeAt(this.zero + i);\n }\n\n /**\n * @see DataReader.lastIndexOfSignature\n */\n lastIndexOfSignature(sig) {\n return this.data.lastIndexOf(sig) - this.zero;\n }\n\n /**\n * @see DataReader.readAndCheckSignature\n */\n readAndCheckSignature(sig) {\n const data = this.readData(4);\n return sig === data;\n }\n\n /**\n * @see DataReader.readData\n */\n readData(size) {\n this.checkOffset(size);\n // this will work because the constructor applied the \"& 0xff\" mask.\n const result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n }\n}\n\n/* eslint-disable */\n\nclass Uint8ArrayReader extends ArrayReader {\n constructor(data) {\n super(data);\n }\n\n /**\n * @see DataReader.readData\n */\n readData(size) {\n this.checkOffset(size);\n if(size === 0) {\n // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n return new Uint8Array(0);\n }\n var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n this.index += size;\n return result;\n }\n}\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nfunction readerFor(data) {\n const type = getTypeOf(data);\n checkSupport(type);\n if (type === \"string\" && !support.uint8array) {\n return new StringReader(data);\n }\n if (support.uint8array) {\n return new Uint8ArrayReader(transformTo(\"uint8array\", data));\n }\n return new ArrayReader(transformTo(\"array\", data));\n}\n\n/* eslint-disable */\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n for (var method in compressions) {\n if (!compressions.hasOwnProperty(method)) {\n continue;\n }\n if (compressions[method].magic === compressionMethod) {\n return compressions[method];\n }\n }\n return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nclass ZipEntry {\n constructor(options, loadOptions) {\n this.options = options;\n this.loadOptions = loadOptions;\n }\n\n /**\n * say if the file is encrypted.\n * @return {boolean} true if the file is encrypted, false otherwise.\n */\n isEncrypted() {\n // bit 1 is set\n return (this.bitFlag & 0x0001) === 0x0001;\n }\n\n /**\n * say if the file has utf-8 filename/comment.\n * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n */\n useUTF8() {\n // bit 11 is set\n return (this.bitFlag & 0x0800) === 0x0800;\n }\n\n /**\n * Read the local part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readLocalPart(reader) {\n var compression, localExtraFieldsLength;\n\n // we already know everything from the central dir !\n // If the central dir data are false, we are doomed.\n // On the bright side, the local part is scary : zip64, data descriptors, both, etc.\n // The less data we get here, the more reliable this should be.\n // Let's skip the whole header and dash to the data !\n reader.skip(22);\n // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n // Strangely, the filename here is OK.\n // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n // the internet.\n //\n // I think I see the logic here : the central directory is used to display\n // content and the local directory is used to extract the files. Mixing / and \\\n // may be used to display \\ to windows users and use / when extracting the files.\n // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n this.fileNameLength = reader.readInt(2);\n localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n this.fileName = reader.readData(this.fileNameLength);\n reader.skip(localExtraFieldsLength);\n\n if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n }\n\n compression = findCompression(this.compressionMethod);\n if (compression === null) { // no compression found\n throw new Error(\"Corrupted zip : compression \" + pretty(this.compressionMethod) + \" unknown (inner file : \" + transformTo(\"string\", this.fileName) + \")\");\n }\n this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n }\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readCentralPart(reader) {\n this.versionMadeBy = reader.readInt(2);\n reader.skip(2);\n // this.versionNeeded = reader.readInt(2);\n this.bitFlag = reader.readInt(2);\n this.compressionMethod = reader.readString(2);\n this.date = reader.readDate();\n this.crc32 = reader.readInt(4);\n this.compressedSize = reader.readInt(4);\n this.uncompressedSize = reader.readInt(4);\n var fileNameLength = reader.readInt(2);\n this.extraFieldsLength = reader.readInt(2);\n this.fileCommentLength = reader.readInt(2);\n this.diskNumberStart = reader.readInt(2);\n this.internalFileAttributes = reader.readInt(2);\n this.externalFileAttributes = reader.readInt(4);\n this.localHeaderOffset = reader.readInt(4);\n\n if (this.isEncrypted()) {\n throw new Error(\"Encrypted zip are not supported\");\n }\n\n // will be read in the local part, see the comments there\n reader.skip(fileNameLength);\n this.readExtraFields(reader);\n this.parseZIP64ExtraField(reader);\n this.fileComment = reader.readData(this.fileCommentLength);\n }\n\n /**\n * Parse the external file attributes and get the unix/dos permissions.\n */\n processAttributes() {\n this.unixPermissions = null;\n this.dosPermissions = null;\n var madeBy = this.versionMadeBy >> 8;\n\n // Check if we have the DOS directory flag set.\n // We look for it in the DOS and UNIX permissions\n // but some unknown platform could set it as a compatibility flag.\n this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n if(madeBy === MADE_BY_DOS) {\n // first 6 bits (0 to 5)\n this.dosPermissions = this.externalFileAttributes & 0x3F;\n }\n\n if(madeBy === MADE_BY_UNIX) {\n this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n }\n\n // fail safe : if the name ends with a / it probably means a folder\n if (!this.dir && this.fileNameStr.slice(-1) === '/') {\n this.dir = true;\n }\n }\n\n /**\n * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n * @param {DataReader} reader the reader to use.\n */\n parseZIP64ExtraField(reader) {\n\n if (!this.extraFields[0x0001]) {\n return;\n }\n\n // should be something, preparing the extra reader\n var extraReader = readerFor(this.extraFields[0x0001].value);\n\n // I really hope that these 64bits integer can fit in 32 bits integer, because js\n // won't let us have more.\n if (this.uncompressedSize === MAX_VALUE_32BITS) {\n this.uncompressedSize = extraReader.readInt(8);\n }\n if (this.compressedSize === MAX_VALUE_32BITS) {\n this.compressedSize = extraReader.readInt(8);\n }\n if (this.localHeaderOffset === MAX_VALUE_32BITS) {\n this.localHeaderOffset = extraReader.readInt(8);\n }\n if (this.diskNumberStart === MAX_VALUE_32BITS) {\n this.diskNumberStart = extraReader.readInt(4);\n }\n }\n\n /**\n * Read the central part of a zip file and add the info in this object.\n * @param {DataReader} reader the reader to use.\n */\n readExtraFields(reader) {\n var end = reader.index + this.extraFieldsLength,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n\n if (!this.extraFields) {\n this.extraFields = {};\n }\n\n while (reader.index < end) {\n extraFieldId = reader.readInt(2);\n extraFieldLength = reader.readInt(2);\n extraFieldValue = reader.readData(extraFieldLength);\n\n this.extraFields[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n }\n\n /**\n * Apply an UTF8 transformation if needed.\n */\n handleUTF8() {\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n if (this.useUTF8()) {\n this.fileNameStr = utf8decode(this.fileName);\n this.fileCommentStr = utf8decode(this.fileComment);\n } else {\n var upath = this.findExtraFieldUnicodePath();\n if (upath !== null) {\n this.fileNameStr = upath;\n } else {\n // ASCII text or unsupported code page\n var fileNameByteArray = transformTo(decodeParamType, this.fileName);\n this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n }\n\n var ucomment = this.findExtraFieldUnicodeComment();\n if (ucomment !== null) {\n this.fileCommentStr = ucomment;\n } else {\n // ASCII text or unsupported code page\n var commentByteArray = transformTo(decodeParamType, this.fileComment);\n this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n }\n }\n }\n\n /**\n * Find the unicode path declared in the extra field, if any.\n * @return {String} the unicode path, null otherwise.\n */\n findExtraFieldUnicodePath() {\n var upathField = this.extraFields[0x7075];\n if (upathField) {\n var extraReader = readerFor(upathField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the filename changed, this field is out of date.\n if (crc32wrapper(this.fileName) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8decode(extraReader.readData(upathField.length - 5));\n }\n return null;\n }\n\n /**\n * Find the unicode comment declared in the extra field, if any.\n * @return {String} the unicode comment, null otherwise.\n */\n findExtraFieldUnicodeComment() {\n var ucommentField = this.extraFields[0x6375];\n if (ucommentField) {\n var extraReader = readerFor(ucommentField.value);\n\n // wrong version\n if (extraReader.readInt(1) !== 1) {\n return null;\n }\n\n // the crc of the comment changed, this field is out of date.\n if (crc32wrapper(this.fileComment) !== extraReader.readInt(4)) {\n return null;\n }\n\n return utf8decode(extraReader.readData(ucommentField.length - 5));\n }\n return null;\n }\n}\n\n/* eslint-disable */\n\n// class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nclass ZipEntries {\n constructor(loadOptions) {\n this.files = [];\n this.loadOptions = loadOptions;\n }\n\n /**\n * Check that the reader is on the specified signature.\n * @param {string} expectedSignature the expected signature.\n * @throws {Error} if it is an other signature.\n */\n checkSignature(expectedSignature) {\n if (!this.reader.readAndCheckSignature(expectedSignature)) {\n this.reader.index -= 4;\n var signature = this.reader.readString(4);\n throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + pretty(signature) + \", expected \" + pretty(expectedSignature) + \")\");\n }\n }\n\n /**\n * Check if the given signature is at the given index.\n * @param {number} askedIndex the index to check.\n * @param {string} expectedSignature the signature to expect.\n * @return {boolean} true if the signature is here, false otherwise.\n */\n isSignature(askedIndex, expectedSignature) {\n var currentIndex = this.reader.index;\n this.reader.setIndex(askedIndex);\n var signature = this.reader.readString(4);\n var result = signature === expectedSignature;\n this.reader.setIndex(currentIndex);\n return result;\n }\n\n /**\n * Read the end of the central directory.\n */\n readBlockEndOfCentral() {\n this.diskNumber = this.reader.readInt(2);\n this.diskWithCentralDirStart = this.reader.readInt(2);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n this.centralDirRecords = this.reader.readInt(2);\n this.centralDirSize = this.reader.readInt(4);\n this.centralDirOffset = this.reader.readInt(4);\n\n this.zipCommentLength = this.reader.readInt(2);\n // warning : the encoding depends of the system locale\n // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n // On a windows machine, this field is encoded with the localized windows code page.\n var zipComment = this.reader.readData(this.zipCommentLength);\n var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n // To get consistent behavior with the generation part, we will assume that\n // this is utf8 encoded unless specified otherwise.\n var decodeContent = transformTo(decodeParamType, zipComment);\n this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n }\n\n /**\n * Read the end of the Zip 64 central directory.\n * Not merged with the method readEndOfCentral :\n * The end of central can coexist with its Zip64 brother,\n * I don't want to read the wrong number of bytes !\n */\n readBlockZip64EndOfCentral() {\n this.zip64EndOfCentralSize = this.reader.readInt(8);\n this.reader.skip(4);\n // this.versionMadeBy = this.reader.readString(2);\n // this.versionNeeded = this.reader.readInt(2);\n this.diskNumber = this.reader.readInt(4);\n this.diskWithCentralDirStart = this.reader.readInt(4);\n this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n this.centralDirRecords = this.reader.readInt(8);\n this.centralDirSize = this.reader.readInt(8);\n this.centralDirOffset = this.reader.readInt(8);\n\n this.zip64ExtensibleData = {};\n var extraDataSize = this.zip64EndOfCentralSize - 44,\n index = 0,\n extraFieldId,\n extraFieldLength,\n extraFieldValue;\n while (index < extraDataSize) {\n extraFieldId = this.reader.readInt(2);\n extraFieldLength = this.reader.readInt(4);\n extraFieldValue = this.reader.readData(extraFieldLength);\n this.zip64ExtensibleData[extraFieldId] = {\n id: extraFieldId,\n length: extraFieldLength,\n value: extraFieldValue\n };\n }\n }\n\n /**\n * Read the end of the Zip 64 central directory locator.\n */\n readBlockZip64EndOfCentralLocator() {\n this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n this.disksCount = this.reader.readInt(4);\n if (this.disksCount > 1) {\n throw new Error(\"Multi-volumes zip are not supported\");\n }\n }\n\n /**\n * Read the local files, based on the offset read in the central part.\n */\n readLocalFiles() {\n var i, file;\n for (i = 0; i < this.files.length; i++) {\n file = this.files[i];\n this.reader.setIndex(file.localHeaderOffset);\n this.checkSignature(LOCAL_FILE_HEADER);\n file.readLocalPart(this.reader);\n file.handleUTF8();\n file.processAttributes();\n }\n }\n\n /**\n * Read the central directory.\n */\n readCentralDir() {\n var file;\n\n this.reader.setIndex(this.centralDirOffset);\n while (this.reader.readAndCheckSignature(CENTRAL_FILE_HEADER)) {\n file = new ZipEntry({\n zip64: this.zip64\n }, this.loadOptions);\n file.readCentralPart(this.reader);\n this.files.push(file);\n }\n\n if (this.centralDirRecords !== this.files.length) {\n if (this.centralDirRecords !== 0 && this.files.length === 0) {\n // We expected some records but couldn't find ANY.\n // This is really suspicious, as if something went wrong.\n throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n }\n }\n }\n\n /**\n * Read the end of central directory.\n */\n readEndOfCentral() {\n var offset = this.reader.lastIndexOfSignature(CENTRAL_DIRECTORY_END);\n if (offset < 0) {\n // Check if the content is a truncated zip or complete garbage.\n // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n // extractible zip for example) but it can give a good hint.\n // If an ajax request was used without responseType, we will also\n // get unreadable data.\n var isGarbage = !this.isSignature(0, LOCAL_FILE_HEADER);\n\n if (isGarbage) {\n throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n } else {\n throw new Error(\"Corrupted zip: can't find end of central directory\");\n }\n\n }\n this.reader.setIndex(offset);\n var endOfCentralDirOffset = offset;\n this.checkSignature(CENTRAL_DIRECTORY_END);\n this.readBlockEndOfCentral();\n\n\n /* extract from the zip spec :\n 4) If one of the fields in the end of central directory\n record is too small to hold required data, the field\n should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n ZIP64 format record should be created.\n 5) The end of central directory record and the\n Zip64 end of central directory locator record must\n reside on the same disk when splitting or spanning\n an archive.\n */\n if (this.diskNumber === MAX_VALUE_16BITS || this.diskWithCentralDirStart === MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === MAX_VALUE_16BITS || this.centralDirRecords === MAX_VALUE_16BITS || this.centralDirSize === MAX_VALUE_32BITS || this.centralDirOffset === MAX_VALUE_32BITS) {\n this.zip64 = true;\n\n /*\n Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n all numbers as 64-bit double precision IEEE 754 floating point numbers.\n So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n */\n\n // should look for a zip64 EOCD locator\n offset = this.reader.lastIndexOfSignature(ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n if (offset < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n }\n this.reader.setIndex(offset);\n this.checkSignature(ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n this.readBlockZip64EndOfCentralLocator();\n\n // now the zip64 EOCD record\n if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, ZIP64_CENTRAL_DIRECTORY_END)) {\n // console.warn(\"ZIP64 end of central directory not where expected.\");\n this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(ZIP64_CENTRAL_DIRECTORY_END);\n if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n }\n }\n this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n this.checkSignature(ZIP64_CENTRAL_DIRECTORY_END);\n this.readBlockZip64EndOfCentral();\n }\n\n var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n if (this.zip64) {\n expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n }\n\n var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n if (extraBytes > 0) {\n // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n if (this.isSignature(endOfCentralDirOffset, CENTRAL_FILE_HEADER)) ; else {\n // the offset is wrong, update the \"zero\" of the reader\n // this happens if data has been prepended (crx files for example)\n this.reader.zero = extraBytes;\n }\n } else if (extraBytes < 0) {\n throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n }\n }\n\n prepareReader(data) {\n this.reader = readerFor(data);\n }\n\n /**\n * Read a zip file and create ZipEntries.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n */\n load(data) {\n this.prepareReader(data);\n this.readEndOfCentral();\n this.readCentralDir();\n this.readLocalFiles();\n }\n}\n\nvar nodejsUtils = {\n isNode: false\n};\n\n/* eslint-disable */\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n return new external.Promise(function (resolve, reject) {\n var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n worker.on(\"error\", function (e) {\n reject(e);\n })\n .on(\"end\", function () {\n if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n } else {\n resolve();\n }\n })\n .resume();\n });\n}\n\nfunction load(data, options) {\n var zip = this;\n options = extend(options || {}, {\n base64: false,\n checkCRC32: false,\n optimizedBinaryString: false,\n createFolders: false,\n decodeFileName: utf8decode\n });\n\n if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n }\n\n return prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n .then(function(data) {\n var zipEntries = new ZipEntries(options);\n zipEntries.load(data);\n return zipEntries;\n }).then(function checkCRC32(zipEntries) {\n var promises = [external.Promise.resolve(zipEntries)];\n var files = zipEntries.files;\n if (options.checkCRC32) {\n for (var i = 0; i < files.length; i++) {\n promises.push(checkEntryCRC32(files[i]));\n }\n }\n return external.Promise.all(promises);\n }).then(function addFiles(results) {\n var zipEntries = results.shift();\n var files = zipEntries.files;\n for (var i = 0; i < files.length; i++) {\n var input = files[i];\n zip.file(input.fileNameStr, input.decompressed, {\n binary: true,\n optimizedBinaryString: true,\n date: input.date,\n dir: input.dir,\n comment : input.fileCommentStr.length ? input.fileCommentStr : null,\n unixPermissions : input.unixPermissions,\n dosPermissions : input.dosPermissions,\n createFolders: options.createFolders\n });\n }\n if (zipEntries.zipComment.length) {\n zip.comment = zipEntries.zipComment;\n }\n\n return zip;\n });\n}\n\n/* eslint-disable */\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n // be sure sub folders exist\n var dataType = getTypeOf(data),\n parent;\n\n\n /*\n * Correct options.\n */\n\n var o = extend(originalOptions || {}, defaults);\n o.date = o.date || new Date();\n if (o.compression !== null) {\n o.compression = o.compression.toUpperCase();\n }\n\n if (typeof o.unixPermissions === \"string\") {\n o.unixPermissions = parseInt(o.unixPermissions, 8);\n }\n\n // UNX_IFDIR 0040000 see zipinfo.c\n if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n o.dir = true;\n }\n // Bit 4 Directory\n if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n o.dir = true;\n }\n\n if (o.dir) {\n name = forceTrailingSlash(name);\n }\n if (o.createFolders && (parent = parentFolder(name))) {\n folderAdd.call(this, parent, true);\n }\n\n var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n o.binary = !isUnicodeString;\n }\n\n\n var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n o.base64 = false;\n o.binary = true;\n data = \"\";\n o.compression = \"STORE\";\n dataType = \"string\";\n }\n\n /*\n * Convert content to fit.\n */\n\n var zipObjectContent = null;\n if (data instanceof CompressedObject || data instanceof GenericWorker) {\n zipObjectContent = data;\n } else {\n zipObjectContent = prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n }\n\n var object = new ZipObject(name, zipObjectContent, o);\n this.files[name] = object;\n /*\n TODO: we can't throw an exception because we have async promises\n (we can have a promise of a Date() for example) but returning a\n promise is useless because file(name, data) returns the JSZip\n object for chaining. Should we break that to allow the user\n to catch the error ?\n\n return external.Promise.resolve(zipObjectContent)\n .then(function () {\n return object;\n });\n */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n if (path.slice(-1) === '/') {\n path = path.substring(0, path.length - 1);\n }\n var lastSlash = path.lastIndexOf('/');\n return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n // Check the name ends with a /\n if (path.slice(-1) !== \"/\") {\n path += \"/\"; // IE doesn't like substr(-1)\n }\n return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n * folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders$1) {\n createFolders$1 = (typeof createFolders$1 !== 'undefined') ? createFolders$1 : createFolders;\n\n name = forceTrailingSlash(name);\n\n // Does this folder already exist?\n if (!this.files[name]) {\n fileAdd.call(this, name, null, {\n dir: true,\n createFolders: createFolders$1\n });\n }\n return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param {Object} object Anything\n* @return {Boolean} true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nclass JSZip {\n constructor() {\n if (arguments.length) {\n throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n }\n\n // object containing the files :\n // {\n // \"folder/\" : {...},\n // \"folder/data.txt\" : {...}\n // }\n this.files = {};\n\n this.comment = null;\n\n // Where we are in the hierarchy\n this.root = \"\";\n this.clone = function() {\n const newObj = new JSZip();\n for (const i in this) {\n if (typeof this[i] !== \"function\") {\n newObj[i] = this[i];\n }\n }\n return newObj;\n };\n }\n\n /**\n * @see loadAsync\n */\n load() {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n }\n\n /**\n * Call a callback function for each entry at this folder level.\n * @param {Function} cb the callback function:\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n */\n forEach(cb) {\n var filename, relativePath, file;\n for (filename in this.files) {\n if (!this.files.hasOwnProperty(filename)) {\n continue;\n }\n file = this.files[filename];\n relativePath = filename.slice(this.root.length, filename.length);\n if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n }\n }\n }\n\n /**\n * Filter nested files/folders with the specified function.\n * @param {Function} search the predicate to use :\n * function (relativePath, file) {...}\n * It takes 2 arguments : the relative path and the file.\n * @return {Array} An array of matching elements.\n */\n filter(search) {\n var result = [];\n this.forEach(function (relativePath, entry) {\n if (search(relativePath, entry)) { // the file matches the function\n result.push(entry);\n }\n\n });\n return result;\n }\n\n /**\n * Add a file to the zip file, or search a file.\n * @param {string|RegExp} name The name of the file to add (if data is defined),\n * the name of the file to find (if no data) or a regex to match files.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded\n * @param {Object} o File options\n * @return {JSZip|Object|Array} this JSZip object (when adding a file),\n * a file (when searching by string) or an array of files (when searching by regex).\n */\n file(name, data, o) {\n if (arguments.length === 1) {\n if (isRegExp(name)) {\n var regexp = name;\n return this.filter(function(relativePath, file) {\n return !file.dir && regexp.test(relativePath);\n });\n }\n else { // text\n var obj = this.files[this.root + name];\n if (obj && !obj.dir) {\n return obj;\n } else {\n return null;\n }\n }\n }\n else { // more than one argument : we have data !\n name = this.root + name;\n fileAdd.call(this, name, data, o);\n }\n return this;\n }\n\n /**\n * Add a directory to the zip file, or search.\n * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n * @return {JSZip} an object with the new directory as the root, or an array containing matching folders.\n */\n folder(arg) {\n if (!arg) {\n return this;\n }\n\n if (isRegExp(arg)) {\n return this.filter(function(relativePath, file) {\n return file.dir && arg.test(relativePath);\n });\n }\n\n // else, name is a new folder\n var name = this.root + arg;\n var newFolder = folderAdd.call(this, name);\n\n // Allow chaining by returning a new object with this folder as the root\n var ret = this.clone();\n ret.root = newFolder.name;\n return ret;\n }\n\n /**\n * Delete a file, or a directory and all sub-files, from the zip\n * @param {string} name the name of the file to delete\n * @return {JSZip} this JSZip object\n */\n remove(name) {\n name = this.root + name;\n var file = this.files[name];\n if (!file) {\n // Look for any folders\n if (name.slice(-1) !== \"/\") {\n name += \"/\";\n }\n file = this.files[name];\n }\n\n if (file && !file.dir) {\n // file\n delete this.files[name];\n } else {\n // maybe a folder, delete recursively\n var kids = this.filter(function(relativePath, file) {\n return file.name.slice(0, name.length) === name;\n });\n for (var i = 0; i < kids.length; i++) {\n delete this.files[kids[i].name];\n }\n }\n\n return this;\n }\n\n /**\n * Generate the complete zip file\n * @param {Object} options the options to generate the zip file :\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n */\n generate(options) {\n throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n }\n\n /**\n * Generate the complete zip file as an internal stream.\n * @param {Object} options the options to generate the zip file :\n * - compression, \"STORE\" by default.\n * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n * @return {StreamHelper} the streamed zip file.\n */\n generateInternalStream(options) {\n var worker, opts = {};\n try {\n opts = extend(options || {}, {\n streamFiles: false,\n compression: \"STORE\",\n compressionOptions : null,\n type: \"\",\n platform: \"DOS\",\n comment: null,\n mimeType: 'application/zip',\n encodeFileName: utf8encode\n });\n\n opts.type = opts.type.toLowerCase();\n opts.compression = opts.compression.toUpperCase();\n\n // \"binarystring\" is preferred but the internals use \"string\".\n if(opts.type === \"binarystring\") {\n opts.type = \"string\";\n }\n\n if (!opts.type) {\n throw new Error(\"No output type specified.\");\n }\n\n checkSupport(opts.type);\n\n // accept nodejs `process.platform`\n if(\n opts.platform === 'darwin' ||\n opts.platform === 'freebsd' ||\n opts.platform === 'linux' ||\n opts.platform === 'sunos'\n ) {\n opts.platform = \"UNIX\";\n }\n if (opts.platform === 'win32') {\n opts.platform = \"DOS\";\n }\n\n var comment = opts.comment || this.comment || \"\";\n worker = generateWorker(this, opts, comment);\n } catch (e) {\n worker = new GenericWorker(\"error\");\n worker.error(e);\n }\n return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n }\n\n /**\n * Generate the complete zip file asynchronously.\n * @see generateInternalStream\n */\n generateAsync(options, onUpdate) {\n return this.generateInternalStream(options).accumulate(onUpdate);\n }\n\n loadAsync(data, options) {\n return load.apply(this, [data, options]);\n }\n\n static loadAsync(content, options) {\n return new JSZip().loadAsync(content, options);\n }\n \n static get support() {\n return support;\n }\n\n static get defaults() {\n return defaults;\n }\n\n static get version() {\n return \"3.2.2-esm\";\n }\n\n static get external() {\n return external;\n }\n}\n\nexport default JSZip;\n","// date packing utilities from Kendo Spreadsheet\n\n// Julian days algorithms from http://www.hermetic.ch/cal_stud/jdn.htm#comp\nfunction dateToJulianDays(y, m, d) {\n return ((1461 * (y + 4800 + ((m - 13) / 12 | 0))) / 4 | 0) +\n ((367 * (m - 1 - 12 * ((m - 13) / 12 | 0))) / 12 | 0) -\n ((3 * (((y + 4900 + ((m - 13) / 12 | 0)) / 100 | 0))) / 4 | 0) +\n d - 32075;\n}\n\n// This uses the Google Spreadsheet approach: treat 1899-12-31 as day 1, allowing to avoid\n// implementing the \"Leap Year Bug\" yet still be Excel compatible for dates starting 1900-03-01.\nconst BASE_DATE = dateToJulianDays(1900, 0, -1);\n\nfunction packDate(year, month, date) {\n return dateToJulianDays(year, month, date) - BASE_DATE;\n}\n\nfunction packTime(hh, mm, ss, ms) {\n return (hh + (mm + (ss + ms / 1000) / 60) / 60) / 24;\n}\n\nexport default function dateToSerial(date) {\n const time = packTime(date.getHours(),\n date.getMinutes(),\n date.getSeconds(),\n date.getMilliseconds());\n const serial = packDate(date.getFullYear(),\n date.getMonth(),\n date.getDate());\n return serial < 0 ? serial - 1 + time : serial + time;\n}\n","import map from './utils/map';\nimport createZip from './utils/create-zip';\nimport IntlService from './services/intl-service';\nimport dateToSerial from './utils/time';\n\nconst MIME_TYPE = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\nconst DATA_URL_PREFIX = `data:${MIME_TYPE};base64,`;\nconst DATA_URL_OPTIONS = { compression: \"DEFLATE\", type: \"base64\" };\nconst BLOB_OPTIONS = { compression: \"DEFLATE\", type: \"blob\" };\nconst ARRAYBUFFER_OPTIONS = { compression: \"DEFLATE\", type: \"arraybuffer\" };\n\n/* eslint-disable key-spacing, no-arrow-condition, indent, no-nested-ternary, consistent-return */\n\nfunction toDataURI(content) {\n return DATA_URL_PREFIX + content;\n}\n\nfunction indexOf(thing, array) {\n return array.indexOf(thing);\n}\n\nconst parseJSON = JSON.parse.bind(JSON);\n\nfunction ESC(val) {\n return String(val)\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/\\\"/g, \""\")\n .replace(/\\'/g, \"'\");\n}\n\nfunction repeat(count, func) {\n let str = \"\";\n for (let i = 0; i < count; ++i) {\n str += func(i);\n }\n return str;\n}\n\nfunction foreach(arr, func) {\n let str = \"\";\n if (arr != null) {\n if (Array.isArray(arr)) {\n for (let i = 0; i < arr.length; ++i) {\n str += func(arr[i], i);\n }\n } else if (typeof arr == \"object\") {\n Object.keys(arr).forEach((key, i) => {\n str += func(arr[key], key, i);\n });\n }\n }\n return str;\n}\n\nconst XMLHEAD = '\\r';\n\nconst RELS = `${XMLHEAD}\n \n \n \n \n `;\n\nconst CORE = ({ creator, lastModifiedBy, created, modified }) => `${XMLHEAD}\n \n ${ESC(creator)}\n ${ESC(lastModifiedBy)}\n ${ESC(created)}\n ${ESC(modified)}\n`;\n\nconst APP = ({ sheets }) => `${XMLHEAD}\n\n Microsoft Excel\n 0\n false\n \n \n \n Worksheets\n \n \n ${sheets.length}\n \n \n \n \n ${\n foreach(sheets, (sheet, i) =>\n sheet.options.title\n ? `${ESC(sheet.options.title)}`\n : `Sheet${i + 1}`\n )\n }\n \n false\n false\n false\n 14.0300\n`;\n\nconst CONTENT_TYPES = ({ sheetCount, commentFiles, drawingFiles }) => `${XMLHEAD}\n\n \n \n \n \n \n \n \n \n \n ${repeat(sheetCount, idx =>\n ``)}\n ${foreach(commentFiles, filename =>\n ``)}\n ${foreach(drawingFiles, filename =>\n ``)}\n \n \n`;\n\nconst WORKBOOK = ({ sheets, filterNames, userNames }) => `${XMLHEAD}\n\n \n \n \n \n \n \n ${foreach(sheets, ({ options }, i) => {\n const name = options.name || options.title || `Sheet${i + 1}`;\n return ``;\n })}\n \n ${filterNames.length || userNames.length ? `\n \n ${foreach(filterNames, (f) => `\n `)}\n ${foreach(userNames, (f) => `\n `)}\n ` : ''}\n \n`;\n\nconst WORKSHEET = ({\n frozenColumns,\n frozenRows,\n columns,\n defaults,\n data,\n index,\n mergeCells,\n autoFilter,\n filter,\n showGridLines,\n hyperlinks,\n validations,\n defaultCellStyleId,\n rtl,\n legacyDrawing,\n drawing,\n lastRow,\n lastCol\n}) => `${XMLHEAD}\n\n ${lastRow && lastCol ? `` : \"\"}\n\n \n \n ${frozenRows || frozenColumns ? `\n ` : ''}\n \n \n\n \n\n ${defaultCellStyleId != null || (columns && columns.length > 0) ? `\n \n ${!columns || !columns.length ? `\n ` : ''}\n ${foreach(columns, (column, ci) => {\n const columnIndex = typeof column.index === \"number\" ? column.index + 1 : (ci + 1);\n if (column.width === 0) {\n return ``;\n }\n return ``;\n })}\n ` : ''}\n\n \n ${foreach(data, (row, ri) => {\n const rowIndex = typeof row.index === \"number\" ? row.index + 1 : (ri + 1);\n return `\n \n ${foreach(row.data, (cell) => `\n \n ${cell.formula != null ? writeFormula(cell.formula) : ''}\n ${cell.value != null ? `${ESC(cell.value)}` : ''}\n `)}\n \n `;})}\n \n\n ${autoFilter ? ``\n : filter ? spreadsheetFilters(filter) : ''}\n\n ${mergeCells.length ? `\n \n ${foreach(mergeCells, (ref) => ``)}\n ` : ''}\n\n ${validations.length ? `\n \n ${foreach(validations, (val) => `\n \n ${val.formula1 ? `${ESC(val.formula1)}` : ''}\n ${val.formula2 ? `${ESC(val.formula2)}` : ''}\n `)}\n ` : ''}\n\n ${hyperlinks.length ? `\n \n ${foreach(hyperlinks, (link) => `\n `)}\n ` : ''}\n\n \n ${drawing ? `` : ''}\n ${legacyDrawing ? `` : ''}\n`;\n\nconst WORKBOOK_RELS = ({ count }) => `${XMLHEAD}\n\n ${repeat(count, (idx) => `\n `)}\n \n \n`;\n\nconst WORKSHEET_RELS = ({ hyperlinks, comments, sheetIndex, drawings }) => `${XMLHEAD}\n\n ${foreach(hyperlinks, (link) => `\n `)}\n ${!comments.length ? '' : `\n \n `}\n ${!drawings.length ? '' : `\n `}\n`;\n\nconst COMMENTS_XML = ({ comments }) => `${XMLHEAD}\n\n \n \n \n \n ${foreach(comments, comment => `\n \n \n \n \n \n \n \n \n \n ${ESC(comment.text)}\n \n \n `)}\n \n`;\n\nconst LEGACY_DRAWING = ({ comments }) => `\\\n\n \n \n \n \n ${foreach(comments, comment => `\n \n \n \n \n \n ${comment.anchor}\n False\n ${comment.row}\n ${comment.col}\n \n `)}\n`;\n\nconst DRAWINGS_XML = (drawings) => `${XMLHEAD}\n\n ${foreach(drawings, (drawing, index) => `\n \n \n ${drawing.col}\n ${drawing.colOffset}\n ${drawing.row}\n ${drawing.rowOffset}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `)}\n`;\n\nconst DRAWINGS_RELS_XML = (rels) => `${XMLHEAD}\n\n ${foreach(rels, rel => `\n `)}\n`;\n\nconst SHARED_STRINGS = ({ count, uniqueCount, indexes }) => `${XMLHEAD}\n\n ${foreach(Object.keys(indexes), (index) => `\n ${ESC(index.substring(1))}`)}\n`;\n\nconst STYLES = ({\n formats,\n fonts,\n fills,\n borders,\n styles\n}) => `${XMLHEAD}\n\n \n ${foreach(formats, (format, fi) => `\n `)}\n \n \n \n \n \n \n \n \n \n ${foreach(fonts, (font) => `\n \n ${font.bold ? '' : ''}\n ${font.italic ? '' : ''}\n ${font.underline ? '' : ''}\n \n ${font.color ? `` : ''}\n ${font.fontFamily ? `\n \n \n ` : `\n \n \n \n `}\n `)}\n \n \n \n \n ${foreach(fills, (fill) => `\n ${fill.background ? `\n \n \n \n \n \n ` : ''}`)}\n \n \n \n ${foreach(borders, borderTemplate)}\n \n \n \n \n \n \n ${foreach(styles, (style) => `\n \n ${style.textAlign || style.verticalAlign || style.wrap ? `\n \n ` : ''}\n \n `)}\n \n \n \n \n \n \n`;\n\nfunction writeFormula(formula) {\n if (typeof formula == \"string\") {\n return `${ESC(formula)}`;\n }\n // array formulas\n return `${ESC(formula.src)}`;\n}\n\nfunction numChar(colIndex) {\n const letter = Math.floor(colIndex / 26) - 1;\n\n return (letter >= 0 ? numChar(letter) : \"\") + String.fromCharCode(65 + (colIndex % 26));\n}\n\nfunction ref(rowIndex, colIndex) {\n return numChar(colIndex) + (rowIndex + 1);\n}\n\nfunction $ref(rowIndex, colIndex) {\n return \"$\" + numChar(colIndex) + \"$\" + (rowIndex + 1);\n}\n\nfunction filterRowIndex(options) {\n const frozenRows = options.frozenRows || (options.freezePane || {}).rowSplit || 1;\n return frozenRows - 1;\n}\n\nfunction toWidth(px) {\n const maximumDigitWidth = 7;\n return (px / maximumDigitWidth) - (Math.floor(128 / maximumDigitWidth) / 256);\n}\n\nfunction toHeight(px) {\n return px * 0.75;\n}\n\nfunction stripFunnyChars(value) {\n return String(value)\n .replace(/[\\x00-\\x09\\x0B\\x0C\\x0E-\\x1F]/g, \"\") // leave CRLF in\n .replace(/\\r?\\n/g, \"\\r\\n\"); // make sure LF is preceded by CR\n}\n\nclass Worksheet {\n\n constructor(options, sharedStrings, styles, borders) {\n this.options = options;\n this._strings = sharedStrings;\n this._styles = styles;\n this._borders = borders;\n this._validations = {};\n this._comments = [];\n this._drawings = options.drawings || [];\n this._hyperlinks = (this.options.hyperlinks || []).map(\n (link, i) => Object.assign({}, link, { rId: `link${i}` }));\n }\n\n relsToXML() {\n const hyperlinks = this._hyperlinks;\n const comments = this._comments;\n const drawings = this._drawings;\n\n if (hyperlinks.length || comments.length || drawings.length) {\n return WORKSHEET_RELS({\n hyperlinks : hyperlinks,\n comments : comments,\n sheetIndex : this.options.sheetIndex,\n drawings : drawings\n });\n }\n }\n\n toXML(index) {\n const mergeCells = this.options.mergedCells || [];\n const rows = this.options.rows || [];\n const data = inflate(rows, mergeCells);\n\n this._readCells(data);\n\n let autoFilter = this.options.filter;\n let filter;\n if (autoFilter && (typeof autoFilter.from === \"number\") && (typeof autoFilter.to === \"number\")) {\n // Grid enables auto filter\n autoFilter = {\n from: ref(filterRowIndex(this.options), autoFilter.from),\n to: ref(filterRowIndex(this.options), autoFilter.to)\n };\n } else if (autoFilter && autoFilter.ref && autoFilter.columns) {\n // this is probably from the Spreadsheet\n filter = autoFilter;\n autoFilter = null;\n }\n\n const validations = [];\n for (let i in this._validations) {\n if (Object.prototype.hasOwnProperty.call(this._validations, i)) {\n validations.push(this._validations[i]);\n }\n }\n\n let defaultCellStyleId = null;\n if (this.options.defaultCellStyle) {\n defaultCellStyleId = this._lookupStyle(this.options.defaultCellStyle);\n }\n\n const freezePane = this.options.freezePane || {};\n const defaults = this.options.defaults || {};\n const lastRow = this.options.rows ? this._getLastRow() : 1;\n const lastCol = this.options.rows ? this._getLastCol() : 1;\n\n return WORKSHEET({\n frozenColumns: this.options.frozenColumns || freezePane.colSplit,\n frozenRows: this.options.frozenRows || freezePane.rowSplit,\n columns: this.options.columns,\n defaults: defaults,\n data: data,\n index: index,\n mergeCells: mergeCells,\n autoFilter: autoFilter,\n filter: filter,\n showGridLines: this.options.showGridLines,\n hyperlinks: this._hyperlinks,\n validations: validations,\n defaultCellStyleId: defaultCellStyleId,\n rtl: this.options.rtl !== undefined ? this.options.rtl : defaults.rtl,\n legacyDrawing: this._comments.length ? `vml${this.options.sheetIndex}` : null,\n drawing: this._drawings.length ? `drw${this.options.sheetIndex}` : null,\n lastRow: lastRow,\n lastCol: lastCol\n });\n }\n\n commentsXML() {\n if (this._comments.length) {\n return COMMENTS_XML({ comments: this._comments });\n }\n }\n\n drawingsXML(images) {\n if (this._drawings.length) {\n let rels = {};\n let main = this._drawings.map(drw => {\n let ref = parseRef(drw.topLeftCell);\n let img = rels[drw.image];\n if (!img) {\n img = rels[drw.image] = {\n rId: `img${drw.image}`,\n target: images[drw.image].target\n };\n }\n return {\n col : ref.col,\n colOffset : pixelsToExcel(drw.offsetX),\n row : ref.row,\n rowOffset : pixelsToExcel(drw.offsetY),\n width : pixelsToExcel(drw.width),\n height : pixelsToExcel(drw.height),\n imageId : img.rId\n };\n });\n return {\n main: DRAWINGS_XML(main),\n rels: DRAWINGS_RELS_XML(rels)\n };\n }\n }\n\n legacyDrawing() {\n if (this._comments.length) {\n return LEGACY_DRAWING({ comments: this._comments });\n }\n }\n\n _lookupString(value) {\n const key = \"$\" + value;\n const index = this._strings.indexes[key];\n let result;\n\n if (index !== undefined) {\n result = index;\n } else {\n result = this._strings.indexes[key] = this._strings.uniqueCount;\n this._strings.uniqueCount ++;\n }\n\n this._strings.count ++;\n\n return result;\n }\n\n _lookupStyle(style) {\n const json = JSON.stringify(style);\n\n if (json === \"{}\") {\n return 0;\n }\n\n let index = indexOf(json, this._styles);\n\n if (index < 0) {\n index = this._styles.push(json) - 1;\n }\n\n // There is one default style\n return index + 1;\n }\n\n _lookupBorder(border) {\n const json = JSON.stringify(border);\n if (json === \"{}\") {\n return;\n }\n\n let index = indexOf(json, this._borders);\n if (index < 0) {\n index = this._borders.push(json) - 1;\n }\n\n // There is one default border\n return index + 1;\n }\n\n _readCells(rowData) {\n for (let i = 0; i < rowData.length; i++) {\n const row = rowData[i];\n const cells = row.cells;\n\n row.data = [];\n\n for (let j = 0; j < cells.length; j++) {\n const cellData = this._cell(cells[j], row.index, j);\n if (cellData) {\n row.data.push(cellData);\n }\n }\n }\n }\n\n _cell(data, rowIndex, cellIndex) {\n if (!data || data === EMPTY_CELL) {\n return null;\n }\n\n let value = data.value;\n\n let border = {};\n\n if (data.borderLeft) {\n border.left = data.borderLeft;\n }\n\n if (data.borderRight) {\n border.right = data.borderRight;\n }\n\n if (data.borderTop) {\n border.top = data.borderTop;\n }\n\n if (data.borderBottom) {\n border.bottom = data.borderBottom;\n }\n\n border = this._lookupBorder(border);\n\n const defStyle = this.options.defaultCellStyle || {};\n let style = { borderId: border };\n\n (function(add) {\n add(\"color\");\n add(\"background\");\n add(\"bold\");\n add(\"italic\");\n add(\"underline\");\n if (!add(\"fontFamily\")) { add(\"fontName\", \"fontFamily\"); }\n add(\"fontSize\");\n add(\"format\");\n if (!add(\"textAlign\")) { add(\"hAlign\", \"textAlign\"); }\n if (!add(\"verticalAlign\")) { add(\"vAlign\", \"verticalAlign\"); }\n add(\"wrap\");\n add(\"indent\");\n })(\n function(prop, target) {\n let val = data[prop];\n if (val === undefined) {\n val = defStyle[prop];\n }\n if (val !== undefined) {\n style[target || prop] = val;\n return true;\n }\n }\n );\n\n const columns = this.options.columns || [];\n\n const column = columns[cellIndex];\n let type = typeof value;\n\n if (column && column.autoWidth && (!data.colSpan || data.colSpan === 1)) {\n let displayValue = value;\n\n // XXX: let's not bring kendo.toString in only for this.\n // better wait until the spreadsheet engine is available as a separate\n // component, then we can use a real Excel-like formatter.\n //\n if (type === \"number\") {\n // kendo.toString will not behave exactly like the Excel format\n // Still, it's the best we have available for estimating the character count.\n displayValue = IntlService.toString(value, data.format);\n }\n\n column.width = Math.max(column.width || 0, String(displayValue).length);\n }\n\n if (type === \"string\") {\n value = stripFunnyChars(value);\n value = this._lookupString(value);\n type = \"s\";\n } else if (type === \"number\") {\n type = \"n\";\n } else if (type === \"boolean\") {\n type = \"b\";\n value = Number(value);\n } else if (value && value.getTime) {\n type = null;\n value = dateToSerial(value);\n if (!style.format) {\n style.format = \"mm-dd-yy\";\n }\n } else {\n type = null;\n value = null;\n }\n\n style = this._lookupStyle(style);\n\n const cellName = ref(rowIndex, cellIndex);\n\n if (data.validation) {\n this._addValidation(data.validation, cellName);\n }\n\n if (data.comment) {\n let anchor = [\n cellIndex + 1, // start column\n 15, // start column offset\n rowIndex, // start row\n 10, // start row offset\n cellIndex + 3, // end column\n 15, // end column offset\n rowIndex + 3, // end row\n 4 // end row offset\n ];\n this._comments.push({\n ref : cellName,\n text : data.comment,\n row : rowIndex,\n col : cellIndex,\n anchor : anchor.join(\", \")\n });\n }\n\n return {\n value: value,\n formula: data.formula,\n type: type,\n style: style,\n ref: cellName\n };\n }\n\n _addValidation(v, ref) {\n const tmp = {\n showErrorMessage : v.type === \"reject\" ? 1 : 0,\n formula1 : v.from,\n formula2 : v.to,\n type : MAP_EXCEL_TYPE[v.dataType] || v.dataType,\n operator : MAP_EXCEL_OPERATOR[v.comparerType] || v.comparerType,\n allowBlank : v.allowNulls ? 1 : 0,\n showDropDown : v.showButton ? 0 : 1, // LOL, Excel!\n error : v.messageTemplate,\n errorTitle : v.titleTemplate\n };\n const json = JSON.stringify(tmp);\n if (!this._validations[json]) {\n this._validations[json] = tmp;\n tmp.sqref = [];\n }\n this._validations[json].sqref.push(ref);\n }\n\n _getLastRow() {\n return countData(this.options.rows);\n }\n\n _getLastCol() {\n let last = 0;\n this.options.rows.forEach(function(row) {\n if (row.cells) {\n last = Math.max(last, countData(row.cells));\n }\n });\n return last;\n }\n}\n\nfunction countData(data) {\n let last = data.length;\n data.forEach(function(el) {\n if (el.index && el.index >= last) {\n last = el.index + 1;\n }\n });\n return last;\n}\n\nconst MAP_EXCEL_OPERATOR = {\n // includes only what differs; key is our operator, value is Excel\n // operator.\n greaterThanOrEqualTo : \"greaterThanOrEqual\",\n lessThanOrEqualTo : \"lessThanOrEqual\"\n};\n\nconst MAP_EXCEL_TYPE = {\n number: \"decimal\"\n};\n\nconst defaultFormats = {\n \"General\": 0,\n \"0\": 1,\n \"0.00\": 2,\n \"#,##0\": 3,\n \"#,##0.00\": 4,\n \"0%\": 9,\n \"0.00%\": 10,\n \"0.00E+00\": 11,\n \"# ?/?\": 12,\n \"# ??/??\": 13,\n \"mm-dd-yy\": 14,\n \"d-mmm-yy\": 15,\n \"d-mmm\": 16,\n \"mmm-yy\": 17,\n \"h:mm AM/PM\": 18,\n \"h:mm:ss AM/PM\": 19,\n \"h:mm\": 20,\n \"h:mm:ss\": 21,\n \"m/d/yy h:mm\": 22,\n \"#,##0 ;(#,##0)\": 37,\n \"#,##0 ;[Red](#,##0)\": 38,\n \"#,##0.00;(#,##0.00)\": 39,\n \"#,##0.00;[Red](#,##0.00)\": 40,\n \"mm:ss\": 45,\n \"[h]:mm:ss\": 46,\n \"mmss.0\": 47,\n \"##0.0E+0\": 48,\n \"@\": 49,\n \"[$-404]e/m/d\": 27,\n \"m/d/yy\": 30,\n \"t0\": 59,\n \"t0.00\": 60,\n \"t#,##0\": 61,\n \"t#,##0.00\": 62,\n \"t0%\": 67,\n \"t0.00%\": 68,\n \"t# ?/?\": 69,\n \"t# ??/??\": 70\n};\n\nfunction convertColor(value) {\n let color = value;\n if (color.length < 6) {\n color = color.replace(/(\\w)/g, function($0, $1) {\n return $1 + $1;\n });\n }\n\n color = color.substring(1).toUpperCase();\n\n if (color.length < 8) {\n color = \"FF\" + color;\n }\n\n return color;\n}\n\nclass Workbook {\n\n constructor(options) {\n this.options = options || {};\n this._strings = {\n indexes: {},\n count: 0,\n uniqueCount: 0\n };\n this._styles = [];\n this._borders = [];\n this._images = this.options.images;\n this._imgId = 0;\n\n this._sheets = map(this.options.sheets || [], (options, i) => {\n options.defaults = this.options;\n options.sheetIndex = i + 1;\n return new Worksheet(options, this._strings, this._styles, this._borders);\n });\n }\n\n imageFilename(mimeType) {\n const id = ++this._imgId;\n switch (mimeType) {\n case \"image/jpg\":\n case \"image/jpeg\":\n return `image${id}.jpg`;\n case \"image/png\":\n return `image${id}.png`;\n case \"image/gif\":\n return `image${id}.gif`;\n default:\n return `image${id}.bin`; // XXX: anything better to do here?\n }\n }\n\n toZIP() {\n const zip = createZip();\n\n const docProps = zip.folder(\"docProps\");\n\n docProps.file(\"core.xml\", CORE({\n creator: this.options.creator || \"Kendo UI\",\n lastModifiedBy: this.options.creator || \"Kendo UI\",\n created: this.options.date || new Date().toJSON(),\n modified: this.options.date || new Date().toJSON()\n }));\n\n const sheetCount = this._sheets.length;\n\n docProps.file(\"app.xml\", APP({ sheets: this._sheets }));\n\n const rels = zip.folder(\"_rels\");\n rels.file(\".rels\", RELS);\n\n const xl = zip.folder(\"xl\");\n\n const xlRels = xl.folder(\"_rels\");\n xlRels.file(\"workbook.xml.rels\", WORKBOOK_RELS({ count: sheetCount }));\n\n if (this._images) {\n const media = xl.folder(\"media\");\n Object.keys(this._images).forEach(id => {\n const img = this._images[id];\n const filename = this.imageFilename(img.type);\n media.file(filename, img.data);\n img.target = `../media/${filename}`;\n });\n }\n\n const sheetIds = {};\n xl.file(\"workbook.xml\", WORKBOOK({\n sheets: this._sheets,\n filterNames: map(this._sheets, function(sheet, index) {\n const options = sheet.options;\n const sheetName = (options.name || options.title || \"Sheet\" + (index + 1));\n sheetIds[sheetName.toLowerCase()] = index;\n const filter = options.filter;\n if (filter) {\n if (filter.ref) {\n // spreadsheet provides `ref`\n let a = filter.ref.split(\":\");\n let from = parseRef(a[0]);\n let to = parseRef(a[1]);\n return {\n localSheetId: index,\n name: sheetName,\n from: $ref(from.row, from.col),\n to: $ref(to.row, to.col)\n };\n } else if (typeof filter.from !== \"undefined\" && typeof filter.to !== \"undefined\") {\n // grid does this\n return {\n localSheetId: index,\n name: sheetName,\n from: $ref(filterRowIndex(options), filter.from),\n to: $ref(filterRowIndex(options), filter.to)\n };\n }\n }\n }),\n userNames: map(this.options.names || [], function(def) {\n return {\n name: def.localName,\n localSheetId: def.sheet ? sheetIds[def.sheet.toLowerCase()] : null,\n value: def.value,\n hidden: def.hidden\n };\n })\n }));\n\n const worksheets = xl.folder(\"worksheets\");\n const drawings = xl.folder(\"drawings\");\n const drawingsRels = drawings.folder(\"_rels\");\n const sheetRels = worksheets.folder(\"_rels\");\n const commentFiles = [];\n const drawingFiles = [];\n\n for (let idx = 0; idx < sheetCount; idx++) {\n const sheet = this._sheets[idx];\n const sheetName = `sheet${idx + 1}.xml`;\n const sheetXML = sheet.toXML(idx); // must be called before relsToXML\n const relsXML = sheet.relsToXML();\n const commentsXML = sheet.commentsXML();\n const legacyDrawing = sheet.legacyDrawing();\n const drawingsXML = sheet.drawingsXML(this._images);\n\n if (relsXML) {\n sheetRels.file(sheetName + \".rels\", relsXML);\n }\n if (commentsXML) {\n let name = `comments${sheet.options.sheetIndex}.xml`;\n xl.file(name, commentsXML);\n commentFiles.push(name);\n }\n if (legacyDrawing) {\n drawings.file(`vmlDrawing${sheet.options.sheetIndex}.vml`, legacyDrawing);\n }\n if (drawingsXML) {\n let name = `drawing${sheet.options.sheetIndex}.xml`;\n drawings.file(name, drawingsXML.main);\n drawingsRels.file(`${name}.rels`, drawingsXML.rels);\n drawingFiles.push(name);\n }\n\n worksheets.file(sheetName, sheetXML);\n }\n\n const borders = map(this._borders, parseJSON);\n\n const styles = map(this._styles, parseJSON);\n\n const hasFont = function(style) {\n return style.underline || style.bold || style.italic || style.color || style.fontFamily || style.fontSize;\n };\n\n const convertFontSize = function(value) {\n let fontInPx = Number(value);\n let fontInPt;\n\n if (fontInPx) {\n fontInPt = fontInPx * 3 / 4;\n }\n\n return fontInPt;\n };\n\n const fonts = map(styles, function(style) {\n if (style.fontSize) {\n style.fontSize = convertFontSize(style.fontSize);\n }\n\n if (style.color) {\n style.color = convertColor(style.color);\n }\n\n if (hasFont(style)) {\n return style;\n }\n });\n\n const formats = map(styles, function(style) {\n if (style.format && defaultFormats[style.format] === undefined) {\n return style;\n }\n });\n\n const fills = map(styles, function(style) {\n if (style.background) {\n style.background = convertColor(style.background);\n return style;\n }\n });\n\n xl.file(\"styles.xml\", STYLES({\n fonts: fonts,\n fills: fills,\n formats: formats,\n borders: borders,\n styles: map(styles, function(style) {\n const result = {};\n\n if (hasFont(style)) {\n result.fontId = indexOf(style, fonts) + 1;\n }\n\n if (style.background) {\n result.fillId = indexOf(style, fills) + 2;\n }\n\n result.textAlign = style.textAlign;\n result.indent = style.indent;\n result.verticalAlign = style.verticalAlign;\n result.wrap = style.wrap;\n result.borderId = style.borderId;\n\n if (style.format) {\n if (defaultFormats[style.format] !== undefined) {\n result.numFmtId = defaultFormats[style.format];\n } else {\n result.numFmtId = 165 + indexOf(style, formats);\n }\n }\n\n return result;\n })\n }));\n\n xl.file(\"sharedStrings.xml\", SHARED_STRINGS(this._strings));\n\n zip.file(\"[Content_Types].xml\", CONTENT_TYPES({\n sheetCount: sheetCount,\n commentFiles: commentFiles,\n drawingFiles: drawingFiles\n }));\n\n return zip;\n }\n\n toDataURL() {\n const zip = this.toZIP();\n\n return zip.generateAsync ? zip.generateAsync(DATA_URL_OPTIONS).then(toDataURI) : toDataURI(zip.generate(DATA_URL_OPTIONS));\n }\n\n toBlob() {\n const zip = this.toZIP();\n if (zip.generateAsync) {\n return zip.generateAsync(BLOB_OPTIONS);\n }\n return new Blob([ zip.generate(ARRAYBUFFER_OPTIONS) ], { type: MIME_TYPE });\n }\n}\n\nfunction borderStyle(width) {\n let alias = \"thin\";\n\n if (width === 2) {\n alias = \"medium\";\n } else if (width === 3) {\n alias = \"thick\";\n }\n\n return alias;\n}\n\nfunction borderSideTemplate(name, style) {\n let result = \"\";\n\n if (style) {\n result += \"<\" + name + \" style=\\\"\" + borderStyle(style.size) + \"\\\">\";\n if (style.color) {\n result += \"\";\n }\n result += \"\";\n }\n\n return result;\n}\n\nfunction borderTemplate(border) {\n return \"\" +\n borderSideTemplate(\"left\", border.left) +\n borderSideTemplate(\"right\", border.right) +\n borderSideTemplate(\"top\", border.top) +\n borderSideTemplate(\"bottom\", border.bottom) +\n \"\";\n}\n\nconst EMPTY_CELL = {};\nfunction inflate(rows, mergedCells) {\n const rowData = [];\n const rowsByIndex = [];\n\n indexRows(rows, function(row, index) {\n const data = {\n _source: row,\n index: index,\n height: row.height,\n level: row.level,\n cells: []\n };\n\n rowData.push(data);\n rowsByIndex[index] = data;\n });\n\n const sorted = sortByIndex(rowData).slice(0);\n const ctx = {\n rowData: rowData,\n rowsByIndex: rowsByIndex,\n mergedCells: mergedCells\n };\n\n for (let i = 0; i < sorted.length; i++) {\n fillCells(sorted[i], ctx);\n delete sorted[i]._source;\n }\n\n return sortByIndex(rowData);\n}\n\nfunction indexRows(rows, callback) {\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n if (!row) {\n continue;\n }\n\n let index = row.index;\n if (typeof index !== \"number\") {\n index = i;\n }\n\n callback(row, index);\n }\n}\n\nfunction sortByIndex(items) {\n return items.sort(function(a, b) {\n return a.index - b.index;\n });\n}\n\nfunction pushUnique(array, el) {\n if (array.indexOf(el) < 0) {\n array.push(el);\n }\n}\n\nfunction getSpan(mergedCells, ref) {\n for (let i = 0; i < mergedCells.length; ++i) {\n const range = mergedCells[i];\n const a = range.split(\":\");\n let topLeft = a[0];\n if (topLeft === ref) {\n let bottomRight = a[1];\n topLeft = parseRef(topLeft);\n bottomRight = parseRef(bottomRight);\n return {\n rowSpan: bottomRight.row - topLeft.row + 1,\n colSpan: bottomRight.col - topLeft.col + 1\n };\n }\n }\n}\n\nfunction parseRef(ref) {\n function getcol(str) {\n let upperStr = str.toUpperCase();\n let col = 0;\n for (let i = 0; i < upperStr.length; ++i) {\n col = col * 26 + upperStr.charCodeAt(i) - 64;\n }\n return col - 1;\n }\n\n function getrow(str) {\n return parseInt(str, 10) - 1;\n }\n\n const m = /^([a-z]+)(\\d+)$/i.exec(ref);\n return {\n row: getrow(m[2]),\n col: getcol(m[1])\n };\n}\n\nfunction pixelsToExcel(px) {\n return Math.round(px * 9525);\n}\n\nfunction fillCells(data, ctx) {\n const row = data._source;\n const rowIndex = data.index;\n const cells = row.cells;\n const cellData = data.cells;\n\n if (!cells) {\n return;\n }\n\n for (let i = 0; i < cells.length; i++) {\n const cell = cells[i] || EMPTY_CELL;\n\n let rowSpan = cell.rowSpan || 1;\n let colSpan = cell.colSpan || 1;\n\n const cellIndex = insertCell(cellData, cell);\n const topLeftRef = ref(rowIndex, cellIndex);\n\n if (rowSpan === 1 && colSpan === 1) {\n // could still be merged: the spreadsheet does not send\n // rowSpan/colSpan, but mergedCells is already populated.\n // https://github.com/telerik/kendo-ui-core/issues/2401\n const tmp = getSpan(ctx.mergedCells, topLeftRef);\n if (tmp) {\n colSpan = tmp.colSpan;\n rowSpan = tmp.rowSpan;\n }\n }\n\n spanCell(cell, cellData, cellIndex, colSpan);\n\n if (rowSpan > 1 || colSpan > 1) {\n pushUnique(ctx.mergedCells,\n topLeftRef + \":\" + ref(rowIndex + rowSpan - 1,\n cellIndex + colSpan - 1));\n }\n\n if (rowSpan > 1) {\n for (let ri = rowIndex + 1; ri < rowIndex + rowSpan; ri++) {\n let nextRow = ctx.rowsByIndex[ri];\n if (!nextRow) {\n nextRow = ctx.rowsByIndex[ri] = { index: ri, cells: [] };\n ctx.rowData.push(nextRow);\n }\n\n spanCell(cell, nextRow.cells, cellIndex - 1, colSpan + 1);\n }\n }\n }\n}\n\nfunction insertCell(data, cell) {\n let index;\n\n if (typeof cell.index === \"number\") {\n index = cell.index;\n insertCellAt(data, cell, cell.index);\n } else {\n index = appendCell(data, cell);\n }\n\n return index;\n}\n\nfunction insertCellAt(data, cell, index) {\n data[index] = cell;\n}\n\nfunction appendCell(data, cell) {\n let index = data.length;\n\n for (let i = 0; i < data.length + 1; i++) {\n if (!data[i]) {\n data[i] = cell;\n index = i;\n break;\n }\n }\n\n return index;\n}\n\nfunction spanCell(cell, row, startIndex, colSpan) {\n for (let i = 1; i < colSpan; i++) {\n const tmp = {\n borderTop : cell.borderTop,\n borderRight : cell.borderRight,\n borderBottom : cell.borderBottom,\n borderLeft : cell.borderLeft\n };\n insertCellAt(row, tmp, startIndex + i);\n }\n}\n\nconst SPREADSHEET_FILTERS = ({ ref, columns, generators }) => `\n\n ${foreach(columns, (col) => `\n \n ${generators[col.filter](col)}\n \n `)}\n`;\n\nconst SPREADSHEET_CUSTOM_FILTER = ({ logic, criteria }) => `\n\n${foreach(criteria, (f) => {\n let op = spreadsheetFilters.customOperator(f);\n let val = spreadsheetFilters.customValue(f);\n return ``;\n})}\n`;\n\nconst SPREADSHEET_DYNAMIC_FILTER = ({ type }) =>\n``;\n\nconst SPREADSHEET_TOP_FILTER = ({ type, value }) =>\n``;\n\nconst SPREADSHEET_VALUE_FILTER = ({ blanks, values }) =>\n `\n ${foreach(values, (value) => `\n `)}\n `;\n\nfunction spreadsheetFilters(filter) {\n return SPREADSHEET_FILTERS({\n ref: filter.ref,\n columns: filter.columns,\n generators: {\n custom : SPREADSHEET_CUSTOM_FILTER,\n dynamic : SPREADSHEET_DYNAMIC_FILTER,\n top : SPREADSHEET_TOP_FILTER,\n value : SPREADSHEET_VALUE_FILTER\n }\n });\n}\n\nspreadsheetFilters.customOperator = function(f) {\n return {\n eq : \"equal\",\n gt : \"greaterThan\",\n gte : \"greaterThanOrEqual\",\n lt : \"lessThan\",\n lte : \"lessThanOrEqual\",\n ne : \"notEqual\",\n\n // These are not in the spec, but seems to be how Excel does\n // it (see customValue below). For the non-negated versions,\n // the operator attribute is missing completely.\n doesnotstartwith: \"notEqual\",\n doesnotendwith: \"notEqual\",\n doesnotcontain: \"notEqual\",\n doesnotmatch: \"notEqual\"\n }[f.operator.toLowerCase()];\n};\n\nfunction quoteSheet(name) {\n if (/^\\'/.test(name)) { // assume already quoted, the Spreadsheet does it.\n return name;\n }\n if (/^[a-z_][a-z0-9_]*$/i.test(name)) {\n return name; // no need to quote it\n }\n return \"'\" + name.replace(/\\x27/g, \"\\\\'\") + \"'\";\n}\n\nspreadsheetFilters.customValue = function(f) {\n function esc(str) {\n return str.replace(/([*?])/g, \"~$1\");\n }\n\n switch (f.operator.toLowerCase()) {\n case \"startswith\":\n case \"doesnotstartwith\":\n return esc(f.value) + \"*\";\n\n case \"endswith\":\n case \"doesnotendwith\":\n return \"*\" + esc(f.value);\n\n case \"contains\":\n case \"doesnotcontain\":\n return \"*\" + esc(f.value) + \"*\";\n\n default:\n return f.value;\n }\n};\n\nspreadsheetFilters.dynamicFilterType = function(type) {\n return {\n quarter1 : \"Q1\",\n quarter2 : \"Q2\",\n quarter3 : \"Q3\",\n quarter4 : \"Q4\",\n january : \"M1\",\n february : \"M2\",\n march : \"M3\",\n april : \"M4\",\n may : \"M5\",\n june : \"M6\",\n july : \"M7\",\n august : \"M8\",\n september : \"M9\",\n october : \"M10\",\n november : \"M11\",\n december : \"M12\"\n }[type.toLowerCase()] || type;\n};\n\nexport {\n Workbook,\n Worksheet\n};\n","import JSZip from '@progress/jszip-esm';\n\nexport default function createZip() {\n return new JSZip();\n}\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Input, ContentChildren, QueryList, Component, NgZone, Directive, TemplateRef, Optional, forwardRef, SkipSelf, Host, ContentChild, NgModule } from '@angular/core';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { IntlService, ExcelExporter, Workbook } from '@progress/kendo-ooxml';\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nexport * from '@progress/kendo-ooxml';\nimport { toString } from '@telerik/kendo-intl';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\n\n/* tslint:disable align */\n/* tslint:disable:no-use-before-declare */\nconst compileTemplate = (templateRef, context, updateContext) => {\n let embeddedView = templateRef.createEmbeddedView(context);\n const result = (data) => {\n updateContext(context, data);\n embeddedView.detectChanges();\n return embeddedView.rootNodes.reduce((content, rootNode) => {\n return content + rootNode.textContent;\n }, '').trim();\n };\n result.destroy = () => {\n embeddedView.destroy();\n embeddedView = null;\n };\n return result;\n};\nconst updateGroupHeaderContext = (context, data) => {\n context.$implicit = context.group = data;\n context.field = data.field;\n context.value = data.value;\n context.aggregates = data.aggregates;\n};\nconst updateGroupFooterContext = (context, data) => {\n context.group = data.group;\n context.$implicit = context.aggregates = data;\n};\nconst updateFooterContext = (context, data) => {\n context.aggregates = data.aggregates;\n};\n/**\n * @hidden\n */\nconst toExporterColumns = (sourceColumns) => {\n const exporterColumns = [];\n let columnIndex = 0;\n const addColumns = (columns, result, level) => {\n columns.forEach((column) => {\n if (column.level === level) {\n const exporterColumn = new ExporterColumn(column, columnIndex);\n result.push(exporterColumn);\n if (column.children && column.children.some(c => c !== column)) {\n const children = exporterColumn.columns = [];\n addColumns(column.children, children, level + 1);\n }\n else {\n columnIndex++;\n }\n }\n });\n };\n addColumns(sourceColumns, exporterColumns, 0);\n return exporterColumns;\n};\n/**\n * @hidden\n */\nconst destroyColumns = (columns) => {\n if (columns) {\n columns.forEach(column => {\n column.destroy();\n });\n }\n};\n/**\n * @hidden\n */\nclass ExporterColumn {\n constructor(column, columnIndex) {\n this.title = column.title;\n this.field = column.field;\n this.hidden = column.hidden;\n this.locked = column.locked;\n this.width = column.width;\n this.headerCellOptions = column.headerCellOptions;\n this.cellOptions = column.cellOptions;\n this.groupHeaderCellOptions = column.groupHeaderCellOptions;\n this.groupFooterCellOptions = column.groupFooterCellOptions;\n this.footerCellOptions = column.footerCellOptions;\n if (column.footerTemplate) {\n this.footerTemplate = compileTemplate(column.footerTemplate.templateRef, {\n $implicit: column,\n column: column,\n columnIndex: columnIndex\n }, updateFooterContext);\n }\n if (column.groupFooterTemplate) {\n this.groupFooterTemplate = compileTemplate(column.groupFooterTemplate.templateRef, {\n column: column,\n field: column.field\n }, updateGroupFooterContext);\n }\n if (column.groupHeaderTemplate) {\n this.groupHeaderTemplate = compileTemplate(column.groupHeaderTemplate.templateRef, {}, updateGroupHeaderContext);\n }\n if (column.groupHeaderColumnTemplate) {\n this.groupHeaderColumnTemplate = compileTemplate(column.groupHeaderColumnTemplate.templateRef, {}, updateGroupHeaderContext);\n }\n }\n destroy() {\n if (this.footerTemplate) {\n this.footerTemplate.destroy();\n }\n if (this.groupFooterTemplate) {\n this.groupFooterTemplate.destroy();\n }\n if (this.groupHeaderTemplate) {\n this.groupHeaderTemplate.destroy();\n }\n if (this.groupHeaderColumnTemplate) {\n this.groupHeaderColumnTemplate.destroy();\n }\n destroyColumns(this.columns);\n }\n}\n\nIntlService.register({ toString });\n/**\n *\n * @hidden\n */\nconst workbookOptions = (options) => {\n const columns = toExporterColumns(options.columns);\n const exporter = new ExcelExporter({\n columns: columns,\n data: options.data,\n filterable: options.filterable,\n groups: options.group,\n paddingCellOptions: options.paddingCellOptions,\n headerPaddingCellOptions: options.headerPaddingCellOptions,\n collapsible: options.collapsible,\n hierarchy: options.hierarchy,\n aggregates: options.aggregates\n });\n const result = exporter.workbook();\n result.creator = options.creator;\n result.date = options.date;\n result.rtl = options.rtl;\n destroyColumns(columns);\n return result;\n};\n/**\n * @hidden\n */\nconst toDataURL = (options) => {\n const workbook = new Workbook(options);\n return workbook.toDataURL();\n};\n/**\n * @hidden\n */\nconst isWorkbookOptions = (value) => {\n return value && value.sheets;\n};\n\n/**\n * @hidden\n */\nclass ColumnBase {\n constructor(parent) {\n this.parent = parent;\n }\n /**\n * @hidden\n */\n get level() {\n return this.parent ? this.parent.level + 1 : 0;\n }\n}\nColumnBase.ɵfac = function ColumnBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nColumnBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnBase, contentQueries: function ColumnBase_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, inputs: { title: \"title\", width: \"width\", locked: \"locked\", hidden: \"hidden\", headerCellOptions: \"headerCellOptions\" } });\nColumnBase.propDecorators = {\n title: [{ type: Input }],\n width: [{ type: Input }],\n locked: [{ type: Input }],\n hidden: [{ type: Input }],\n headerCellOptions: [{ type: Input }],\n children: [{ type: ContentChildren, args: [ColumnBase,] }]\n};\n\n\n// tslint:disable:max-line-length\n/**\n * Represents the [Kendo UI Excel Export component for Angular]({% slug overview_excelexport %}).\n * Configures the settings for the Excel export of the Kendo UI Grid.\n */\nclass ExcelExportComponent {\n constructor(localization, zone) {\n this.localization = localization;\n this.zone = zone;\n /**\n * Specifies the name of the file that is exported to Excel.\n * @default \"Export.xlsx\"\n */\n this.fileName = 'Export.xlsx';\n /**\n * @hidden\n */\n this.columns = new QueryList();\n this.saveFile = this.saveFile.bind(this);\n }\n /**\n * Saves the data to Excel.\n *\n * @param exportData - An optional parameter. Can be the data that will be exported or [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %}).\n */\n save(exportData) {\n this.toDataURL(exportData).then(this.saveFile);\n }\n /**\n * Based on the specified columns and data, returns\n * [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %})\n * ([see example]({% slug customrowsandcells_excelexport %})).\n *\n * @param exportData - The optional data to be exported.\n * @returns {WorkbookOptions} - The workbook options.\n */\n workbookOptions(exportData) {\n const currentData = this.getExportData(exportData);\n const options = workbookOptions({\n columns: this.columns,\n data: currentData.data,\n group: currentData.group,\n filterable: this.filterable,\n creator: this.creator,\n date: this.date,\n rtl: this.localization.rtl,\n paddingCellOptions: this.paddingCellOptions,\n headerPaddingCellOptions: this.headerPaddingCellOptions,\n collapsible: this.collapsible\n });\n return options;\n }\n /**\n * Returns a promise which will be resolved with the file data URI\n * ([see example]({% slug filesaving_excelexport %})).\n *\n * @param exportData - The optional data or [`WorkbookOptions`]({% slug api_excel-export_workbookoptions %}) that will be used to generate the data URI.\n * @returns {Promise} - The promise that will be resolved by the file data URI.\n */\n toDataURL(exportData) {\n const options = isWorkbookOptions(exportData) ?\n exportData :\n this.workbookOptions(exportData);\n return this.zone.runOutsideAngular(() => toDataURL(options));\n }\n getExportData(exportData) {\n let result;\n if (exportData) {\n if (Array.isArray(exportData)) {\n result = {\n data: exportData\n };\n }\n else {\n result = exportData;\n }\n }\n else {\n result = {\n data: this.data,\n group: this.group\n };\n }\n return result;\n }\n saveFile(dataURL) {\n saveAs(dataURL, this.fileName, {\n forceProxy: this.forceProxy,\n proxyURL: this.proxyURL\n });\n }\n}\nExcelExportComponent.ɵfac = function ExcelExportComponent_Factory(t) { return new (t || ExcelExportComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelExportComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ExcelExportComponent, selectors: [[\"kendo-excelexport\"]], contentQueries: function ExcelExportComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { fileName: \"fileName\", filterable: \"filterable\", collapsible: \"collapsible\", creator: \"creator\", date: \"date\", forceProxy: \"forceProxy\", proxyURL: \"proxyURL\", data: \"data\", group: \"group\", paddingCellOptions: \"paddingCellOptions\", headerPaddingCellOptions: \"headerPaddingCellOptions\" }, exportAs: [\"kendoExcelExport\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.excelexport'\n }\n ])], decls: 0, vars: 0, template: function ExcelExportComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nExcelExportComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelExportComponent.propDecorators = {\n fileName: [{ type: Input }],\n filterable: [{ type: Input }],\n collapsible: [{ type: Input }],\n creator: [{ type: Input }],\n date: [{ type: Input }],\n forceProxy: [{ type: Input }],\n proxyURL: [{ type: Input }],\n data: [{ type: Input }],\n group: [{ type: Input }],\n paddingCellOptions: [{ type: Input }],\n headerPaddingCellOptions: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase, { descendants: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelExportComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoExcelExport',\n selector: 'kendo-excelexport',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.excelexport'\n }\n ],\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { fileName: [{\n type: Input\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase, { descendants: true }]\n }], filterable: [{\n type: Input\n }], collapsible: [{\n type: Input\n }], creator: [{\n type: Input\n }], date: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], data: [{\n type: Input\n }], group: [{\n type: Input\n }], paddingCellOptions: [{\n type: Input\n }], headerPaddingCellOptions: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the group header cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-header-template)).\n * Enables you to customize the content of the group header item.\n */\nclass GroupHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderTemplateDirective.ɵfac = function GroupHeaderTemplateDirective_Factory(t) { return new (t || GroupHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group header column template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-header-column-template)).\n */\nclass GroupHeaderColumnTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderColumnTemplateDirective.ɵfac = function GroupHeaderColumnTemplateDirective_Factory(t) { return new (t || GroupHeaderColumnTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderColumnTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderColumnTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupHeaderColumnTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderColumnTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderColumnTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupHeaderColumnTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group footer cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-group-footer-template)).\n * Enables you to customize the group footer cell of the column.\n */\nclass GroupFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupFooterTemplateDirective.ɵfac = function GroupFooterTemplateDirective_Factory(t) { return new (t || GroupFooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupFooterTemplateDirective, selectors: [[\"\", \"kendoExcelExportGroupFooterTemplate\", \"\"]] });\n/** @nocollapse */\nGroupFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupFooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportGroupFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the footer cell template of the Excel Export column component\n * ([see example]({% slug columns_excel-export %}#toc-footer-template)).\n * Enables you to customize the footer cell of the column.\n */\nclass FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFooterTemplateDirective.ɵfac = function FooterTemplateDirective_Factory(t) { return new (t || FooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FooterTemplateDirective, selectors: [[\"\", \"kendoExcelExportFooterTemplate\", \"\"]] });\n/** @nocollapse */\nFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoExcelExportFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the columns of the Kendo UI Excel Export component for Angular.\n */\nclass ColumnComponent extends ColumnBase {\n constructor(parent) {\n super(parent);\n }\n}\nColumnComponent.ɵfac = function ColumnComponent_Factory(t) { return new (t || ColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase, 13)); };\nColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnComponent, selectors: [[\"kendo-excelexport-column\"]], contentQueries: function ColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderColumnTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupFooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderColumnTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupFooterTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n } }, inputs: { field: \"field\", cellOptions: \"cellOptions\", groupHeaderCellOptions: \"groupHeaderCellOptions\", groupFooterCellOptions: \"groupFooterCellOptions\", footerCellOptions: \"footerCellOptions\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnComponent.ctorParameters = () => [\n { type: ColumnBase, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnComponent.propDecorators = {\n field: [{ type: Input }],\n cellOptions: [{ type: Input }],\n groupHeaderCellOptions: [{ type: Input }],\n groupFooterCellOptions: [{ type: Input }],\n footerCellOptions: [{ type: Input }],\n groupHeaderTemplate: [{ type: ContentChild, args: [GroupHeaderTemplateDirective,] }],\n groupHeaderColumnTemplate: [{ type: ContentChild, args: [GroupHeaderColumnTemplateDirective,] }],\n groupFooterTemplate: [{ type: ContentChild, args: [GroupFooterTemplateDirective,] }],\n footerTemplate: [{ type: ContentChild, args: [FooterTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-excelexport-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { field: [{\n type: Input\n }], cellOptions: [{\n type: Input\n }], groupHeaderCellOptions: [{\n type: Input\n }], groupFooterCellOptions: [{\n type: Input\n }], footerCellOptions: [{\n type: Input\n }], groupHeaderTemplate: [{\n type: ContentChild,\n args: [GroupHeaderTemplateDirective]\n }], groupHeaderColumnTemplate: [{\n type: ContentChild,\n args: [GroupHeaderColumnTemplateDirective]\n }], groupFooterTemplate: [{\n type: ContentChild,\n args: [GroupFooterTemplateDirective]\n }], footerTemplate: [{\n type: ContentChild,\n args: [FooterTemplateDirective]\n }] }); })();\n\n/**\n * Represents the column group component of the Kendo UI Excel Export component.\n */\nclass ColumnGroupComponent extends ColumnBase {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n }\n}\nColumnGroupComponent.ɵfac = function ColumnGroupComponent_Factory(t) { return new (t || ColumnGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase, 13)); };\nColumnGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnGroupComponent, selectors: [[\"kendo-excelexport-column-group\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnGroupComponent) // tslint:disable-line:no-forward-ref\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnGroupComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnGroupComponent.ctorParameters = () => [\n { type: ColumnBase, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnGroupComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase,\n useExisting: forwardRef(() => ColumnGroupComponent) // tslint:disable-line:no-forward-ref\n }\n ],\n selector: 'kendo-excelexport-column-group',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, null); })();\n\nconst declarations = [\n ExcelExportComponent,\n ColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Excel Export component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the ExcelExportModule module\n * import { ExcelExportModule } from '@progress/kendo-angular-excel-export';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, ExcelExportModule], // import ExcelExportModule module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ExcelExportModule {\n}\nExcelExportModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ExcelExportModule });\nExcelExportModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ExcelExportModule_Factory(t) { return new (t || ExcelExportModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ExcelExportModule, { declarations: [ExcelExportComponent,\n ColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective], exports: [ExcelExportComponent,\n ColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelExportModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [declarations]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { GroupHeaderColumnTemplateDirective, ExcelExportComponent, ExcelExportModule, ColumnBase, ColumnComponent, ColumnGroupComponent, FooterTemplateDirective, GroupFooterTemplateDirective, GroupHeaderTemplateDirective, workbookOptions, toDataURL, isWorkbookOptions };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21JQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O21IQWNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzttS0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztxTEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21LQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7b0pBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztzSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBJbnB1dCwgQ29udGVudENoaWxkcmVuLCBRdWVyeUxpc3QsIENvbXBvbmVudCwgTmdab25lLCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBPcHRpb25hbCwgZm9yd2FyZFJlZiwgU2tpcFNlbGYsIEhvc3QsIENvbnRlbnRDaGlsZCwgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1maWxlLXNhdmVyJztcbmltcG9ydCB7IEludGxTZXJ2aWNlLCBFeGNlbEV4cG9ydGVyLCBXb3JrYm9vayB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1vb3htbCc7XG5leHBvcnQgKiBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tb294bWwnO1xuaW1wb3J0IHsgdG9TdHJpbmcgfSBmcm9tICdAdGVsZXJpay9rZW5kby1pbnRsJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIEwxME5fUFJFRklYIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5cbi8qIHRzbGludDpkaXNhYmxlIGFsaWduICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11c2UtYmVmb3JlLWRlY2xhcmUgKi9cbmNvbnN0IGNvbXBpbGVUZW1wbGF0ZSA9ICh0ZW1wbGF0ZVJlZiwgY29udGV4dCwgdXBkYXRlQ29udGV4dCkgPT4ge1xuICAgIGxldCBlbWJlZGRlZFZpZXcgPSB0ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dCk7XG4gICAgY29uc3QgcmVzdWx0ID0gKGRhdGEpID0+IHtcbiAgICAgICAgdXBkYXRlQ29udGV4dChjb250ZXh0LCBkYXRhKTtcbiAgICAgICAgZW1iZWRkZWRWaWV3LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgcmV0dXJuIGVtYmVkZGVkVmlldy5yb290Tm9kZXMucmVkdWNlKChjb250ZW50LCByb290Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRlbnQgKyByb290Tm9kZS50ZXh0Q29udGVudDtcbiAgICAgICAgfSwgJycpLnRyaW0oKTtcbiAgICB9O1xuICAgIHJlc3VsdC5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgICBlbWJlZGRlZFZpZXcuZGVzdHJveSgpO1xuICAgICAgICBlbWJlZGRlZFZpZXcgPSBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCB1cGRhdGVHcm91cEhlYWRlckNvbnRleHQgPSAoY29udGV4dCwgZGF0YSkgPT4ge1xuICAgIGNvbnRleHQuJGltcGxpY2l0ID0gY29udGV4dC5ncm91cCA9IGRhdGE7XG4gICAgY29udGV4dC5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgY29udGV4dC52YWx1ZSA9IGRhdGEudmFsdWU7XG4gICAgY29udGV4dC5hZ2dyZWdhdGVzID0gZGF0YS5hZ2dyZWdhdGVzO1xufTtcbmNvbnN0IHVwZGF0ZUdyb3VwRm9vdGVyQ29udGV4dCA9IChjb250ZXh0LCBkYXRhKSA9PiB7XG4gICAgY29udGV4dC5ncm91cCA9IGRhdGEuZ3JvdXA7XG4gICAgY29udGV4dC4kaW1wbGljaXQgPSBjb250ZXh0LmFnZ3JlZ2F0ZXMgPSBkYXRhO1xufTtcbmNvbnN0IHVwZGF0ZUZvb3RlckNvbnRleHQgPSAoY29udGV4dCwgZGF0YSkgPT4ge1xuICAgIGNvbnRleHQuYWdncmVnYXRlcyA9IGRhdGEuYWdncmVnYXRlcztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9FeHBvcnRlckNvbHVtbnMgPSAoc291cmNlQ29sdW1ucykgPT4ge1xuICAgIGNvbnN0IGV4cG9ydGVyQ29sdW1ucyA9IFtdO1xuICAgIGxldCBjb2x1bW5JbmRleCA9IDA7XG4gICAgY29uc3QgYWRkQ29sdW1ucyA9IChjb2x1bW5zLCByZXN1bHQsIGxldmVsKSA9PiB7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmxldmVsID09PSBsZXZlbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydGVyQ29sdW1uID0gbmV3IEV4cG9ydGVyQ29sdW1uKGNvbHVtbiwgY29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGV4cG9ydGVyQ29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmNoaWxkcmVuICYmIGNvbHVtbi5jaGlsZHJlbi5zb21lKGMgPT4gYyAhPT0gY29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IGV4cG9ydGVyQ29sdW1uLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgYWRkQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW4sIGNoaWxkcmVuLCBsZXZlbCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXgrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgYWRkQ29sdW1ucyhzb3VyY2VDb2x1bW5zLCBleHBvcnRlckNvbHVtbnMsIDApO1xuICAgIHJldHVybiBleHBvcnRlckNvbHVtbnM7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGRlc3Ryb3lDb2x1bW5zID0gKGNvbHVtbnMpID0+IHtcbiAgICBpZiAoY29sdW1ucykge1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5kZXN0cm95KCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRXhwb3J0ZXJDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbiwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IGNvbHVtbi50aXRsZTtcbiAgICAgICAgdGhpcy5maWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgdGhpcy5oaWRkZW4gPSBjb2x1bW4uaGlkZGVuO1xuICAgICAgICB0aGlzLmxvY2tlZCA9IGNvbHVtbi5sb2NrZWQ7XG4gICAgICAgIHRoaXMud2lkdGggPSBjb2x1bW4ud2lkdGg7XG4gICAgICAgIHRoaXMuaGVhZGVyQ2VsbE9wdGlvbnMgPSBjb2x1bW4uaGVhZGVyQ2VsbE9wdGlvbnM7XG4gICAgICAgIHRoaXMuY2VsbE9wdGlvbnMgPSBjb2x1bW4uY2VsbE9wdGlvbnM7XG4gICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJDZWxsT3B0aW9ucyA9IGNvbHVtbi5ncm91cEhlYWRlckNlbGxPcHRpb25zO1xuICAgICAgICB0aGlzLmdyb3VwRm9vdGVyQ2VsbE9wdGlvbnMgPSBjb2x1bW4uZ3JvdXBGb290ZXJDZWxsT3B0aW9ucztcbiAgICAgICAgdGhpcy5mb290ZXJDZWxsT3B0aW9ucyA9IGNvbHVtbi5mb290ZXJDZWxsT3B0aW9ucztcbiAgICAgICAgaWYgKGNvbHVtbi5mb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGNvbXBpbGVUZW1wbGF0ZShjb2x1bW4uZm9vdGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsIHtcbiAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXhcbiAgICAgICAgICAgIH0sIHVwZGF0ZUZvb3RlckNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2x1bW4uZ3JvdXBGb290ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEZvb3RlclRlbXBsYXRlID0gY29tcGlsZVRlbXBsYXRlKGNvbHVtbi5ncm91cEZvb3RlclRlbXBsYXRlLnRlbXBsYXRlUmVmLCB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZFxuICAgICAgICAgICAgfSwgdXBkYXRlR3JvdXBGb290ZXJDb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29sdW1uLmdyb3VwSGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZSA9IGNvbXBpbGVUZW1wbGF0ZShjb2x1bW4uZ3JvdXBIZWFkZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge30sIHVwZGF0ZUdyb3VwSGVhZGVyQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbHVtbi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUgPSBjb21waWxlVGVtcGxhdGUoY29sdW1uLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGUudGVtcGxhdGVSZWYsIHt9LCB1cGRhdGVHcm91cEhlYWRlckNvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZvb3RlclRlbXBsYXRlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEZvb3RlclRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRm9vdGVyVGVtcGxhdGUuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwSGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJUZW1wbGF0ZS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95Q29sdW1ucyh0aGlzLmNvbHVtbnMpO1xuICAgIH1cbn1cblxuSW50bFNlcnZpY2UucmVnaXN0ZXIoeyB0b1N0cmluZyB9KTtcbi8qKlxuICpcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgd29ya2Jvb2tPcHRpb25zID0gKG9wdGlvbnMpID0+IHtcbiAgICBjb25zdCBjb2x1bW5zID0gdG9FeHBvcnRlckNvbHVtbnMob3B0aW9ucy5jb2x1bW5zKTtcbiAgICBjb25zdCBleHBvcnRlciA9IG5ldyBFeGNlbEV4cG9ydGVyKHtcbiAgICAgICAgY29sdW1uczogY29sdW1ucyxcbiAgICAgICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgICAgICBmaWx0ZXJhYmxlOiBvcHRpb25zLmZpbHRlcmFibGUsXG4gICAgICAgIGdyb3Vwczogb3B0aW9ucy5ncm91cCxcbiAgICAgICAgcGFkZGluZ0NlbGxPcHRpb25zOiBvcHRpb25zLnBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zOiBvcHRpb25zLmhlYWRlclBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgY29sbGFwc2libGU6IG9wdGlvbnMuY29sbGFwc2libGUsXG4gICAgICAgIGhpZXJhcmNoeTogb3B0aW9ucy5oaWVyYXJjaHksXG4gICAgICAgIGFnZ3JlZ2F0ZXM6IG9wdGlvbnMuYWdncmVnYXRlc1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGV4cG9ydGVyLndvcmtib29rKCk7XG4gICAgcmVzdWx0LmNyZWF0b3IgPSBvcHRpb25zLmNyZWF0b3I7XG4gICAgcmVzdWx0LmRhdGUgPSBvcHRpb25zLmRhdGU7XG4gICAgcmVzdWx0LnJ0bCA9IG9wdGlvbnMucnRsO1xuICAgIGRlc3Ryb3lDb2x1bW5zKGNvbHVtbnMpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRvRGF0YVVSTCA9IChvcHRpb25zKSA9PiB7XG4gICAgY29uc3Qgd29ya2Jvb2sgPSBuZXcgV29ya2Jvb2sob3B0aW9ucyk7XG4gICAgcmV0dXJuIHdvcmtib29rLnRvRGF0YVVSTCgpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1dvcmtib29rT3B0aW9ucyA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZSAmJiB2YWx1ZS5zaGVldHM7XG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uQmFzZSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5sZXZlbCArIDEgOiAwO1xuICAgIH1cbn1cbkNvbHVtbkJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhpZGRlbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyQ2VsbE9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNoaWxkcmVuOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDb2x1bW5CYXNlLF0gfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgRXhjZWwgRXhwb3J0IGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19leGNlbGV4cG9ydCAlfSkuXG4gKiBDb25maWd1cmVzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIEV4Y2VsIGV4cG9ydCBvZiB0aGUgS2VuZG8gVUkgR3JpZC5cbiAqL1xuY2xhc3MgRXhjZWxFeHBvcnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgem9uZSkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSB0aGF0IGlzIGV4cG9ydGVkIHRvIEV4Y2VsLlxuICAgICAgICAgKiBAZGVmYXVsdCBcIkV4cG9ydC54bHN4XCJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsZU5hbWUgPSAnRXhwb3J0Lnhsc3gnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLnNhdmVGaWxlID0gdGhpcy5zYXZlRmlsZS5iaW5kKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYXZlcyB0aGUgZGF0YSB0byBFeGNlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBvcnREYXRhIC0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyLiBDYW4gYmUgdGhlIGRhdGEgdGhhdCB3aWxsIGJlIGV4cG9ydGVkIG9yIFtgV29ya2Jvb2tPcHRpb25zYF0oeyUgc2x1ZyBhcGlfZXhjZWwtZXhwb3J0X3dvcmtib29rb3B0aW9ucyAlfSkuXG4gICAgICovXG4gICAgc2F2ZShleHBvcnREYXRhKSB7XG4gICAgICAgIHRoaXMudG9EYXRhVVJMKGV4cG9ydERhdGEpLnRoZW4odGhpcy5zYXZlRmlsZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgY29sdW1ucyBhbmQgZGF0YSwgcmV0dXJuc1xuICAgICAqIFtgV29ya2Jvb2tPcHRpb25zYF0oeyUgc2x1ZyBhcGlfZXhjZWwtZXhwb3J0X3dvcmtib29rb3B0aW9ucyAlfSlcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGN1c3RvbXJvd3NhbmRjZWxsc19leGNlbGV4cG9ydCAlfSkpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGV4cG9ydERhdGEgLSBUaGUgb3B0aW9uYWwgZGF0YSB0byBiZSBleHBvcnRlZC5cbiAgICAgKiBAcmV0dXJucyB7V29ya2Jvb2tPcHRpb25zfSAtIFRoZSB3b3JrYm9vayBvcHRpb25zLlxuICAgICAqL1xuICAgIHdvcmtib29rT3B0aW9ucyhleHBvcnREYXRhKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5nZXRFeHBvcnREYXRhKGV4cG9ydERhdGEpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gd29ya2Jvb2tPcHRpb25zKHtcbiAgICAgICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucyxcbiAgICAgICAgICAgIGRhdGE6IGN1cnJlbnREYXRhLmRhdGEsXG4gICAgICAgICAgICBncm91cDogY3VycmVudERhdGEuZ3JvdXAsXG4gICAgICAgICAgICBmaWx0ZXJhYmxlOiB0aGlzLmZpbHRlcmFibGUsXG4gICAgICAgICAgICBjcmVhdG9yOiB0aGlzLmNyZWF0b3IsXG4gICAgICAgICAgICBkYXRlOiB0aGlzLmRhdGUsXG4gICAgICAgICAgICBydGw6IHRoaXMubG9jYWxpemF0aW9uLnJ0bCxcbiAgICAgICAgICAgIHBhZGRpbmdDZWxsT3B0aW9uczogdGhpcy5wYWRkaW5nQ2VsbE9wdGlvbnMsXG4gICAgICAgICAgICBoZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnM6IHRoaXMuaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zLFxuICAgICAgICAgICAgY29sbGFwc2libGU6IHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB3aGljaCB3aWxsIGJlIHJlc29sdmVkIHdpdGggdGhlIGZpbGUgZGF0YSBVUklcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGZpbGVzYXZpbmdfZXhjZWxleHBvcnQgJX0pKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBvcnREYXRhIC0gVGhlIG9wdGlvbmFsIGRhdGEgb3IgW2BXb3JrYm9va09wdGlvbnNgXSh7JSBzbHVnIGFwaV9leGNlbC1leHBvcnRfd29ya2Jvb2tvcHRpb25zICV9KSB0aGF0IHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSB0aGUgZGF0YSBVUkkuXG4gICAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gLSBUaGUgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIGZpbGUgZGF0YSBVUkkuXG4gICAgICovXG4gICAgdG9EYXRhVVJMKGV4cG9ydERhdGEpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGlzV29ya2Jvb2tPcHRpb25zKGV4cG9ydERhdGEpID9cbiAgICAgICAgICAgIGV4cG9ydERhdGEgOlxuICAgICAgICAgICAgdGhpcy53b3JrYm9va09wdGlvbnMoZXhwb3J0RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdG9EYXRhVVJMKG9wdGlvbnMpKTtcbiAgICB9XG4gICAgZ2V0RXhwb3J0RGF0YShleHBvcnREYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgIGlmIChleHBvcnREYXRhKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShleHBvcnREYXRhKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZXhwb3J0RGF0YVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBleHBvcnREYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICBncm91cDogdGhpcy5ncm91cFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBzYXZlRmlsZShkYXRhVVJMKSB7XG4gICAgICAgIHNhdmVBcyhkYXRhVVJMLCB0aGlzLmZpbGVOYW1lLCB7XG4gICAgICAgICAgICBmb3JjZVByb3h5OiB0aGlzLmZvcmNlUHJveHksXG4gICAgICAgICAgICBwcm94eVVSTDogdGhpcy5wcm94eVVSTFxuICAgICAgICB9KTtcbiAgICB9XG59XG5FeGNlbEV4cG9ydENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9FeGNlbEV4cG9ydCcsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1leGNlbGV4cG9ydCcsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5leGNlbGV4cG9ydCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkV4Y2VsRXhwb3J0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5FeGNlbEV4cG9ydENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWxlTmFtZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sbGFwc2libGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNyZWF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcmNlUHJveHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByb3h5VVJMOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFkZGluZ0NlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbkJhc2UsIHsgZGVzY2VuZGFudHM6IHRydWUgfSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGdyb3VwIGhlYWRlciBjZWxsIHRlbXBsYXRlIG9mIHRoZSBFeGNlbCBFeHBvcnQgY29sdW1uIGNvbXBvbmVudFxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBjb2x1bW5zX2V4Y2VsLWV4cG9ydCAlfSN0b2MtZ3JvdXAtaGVhZGVyLXRlbXBsYXRlKSkuXG4gKiBFbmFibGVzIHlvdSB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwIGhlYWRlciBpdGVtLlxuICovXG5jbGFzcyBHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRXhjZWxFeHBvcnRHcm91cEhlYWRlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGdyb3VwIGhlYWRlciBjb2x1bW4gdGVtcGxhdGUgb2YgdGhlIEV4Y2VsIEV4cG9ydCBjb2x1bW4gY29tcG9uZW50XG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGNvbHVtbnNfZXhjZWwtZXhwb3J0ICV9I3RvYy1ncm91cC1oZWFkZXItY29sdW1uLXRlbXBsYXRlKSkuXG4gKi9cbmNsYXNzIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Hcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9FeGNlbEV4cG9ydEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Hcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ3JvdXAgZm9vdGVyIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEV4Y2VsIEV4cG9ydCBjb2x1bW4gY29tcG9uZW50XG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGNvbHVtbnNfZXhjZWwtZXhwb3J0ICV9I3RvYy1ncm91cC1mb290ZXItdGVtcGxhdGUpKS5cbiAqIEVuYWJsZXMgeW91IHRvIGN1c3RvbWl6ZSB0aGUgZ3JvdXAgZm9vdGVyIGNlbGwgb2YgdGhlIGNvbHVtbi5cbiAqL1xuY2xhc3MgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0V4Y2VsRXhwb3J0R3JvdXBGb290ZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBmb290ZXIgY2VsbCB0ZW1wbGF0ZSBvZiB0aGUgRXhjZWwgRXhwb3J0IGNvbHVtbiBjb21wb25lbnRcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgY29sdW1uc19leGNlbC1leHBvcnQgJX0jdG9jLWZvb3Rlci10ZW1wbGF0ZSkpLlxuICogRW5hYmxlcyB5b3UgdG8gY3VzdG9taXplIHRoZSBmb290ZXIgY2VsbCBvZiB0aGUgY29sdW1uLlxuICovXG5jbGFzcyBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9FeGNlbEV4cG9ydEZvb3RlclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb2x1bW5zIG9mIHRoZSBLZW5kbyBVSSBFeGNlbCBFeHBvcnQgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICovXG5jbGFzcyBDb2x1bW5Db21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICB9XG59XG5Db2x1bW5Db21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29sdW1uQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkNvbXBvbmVudCkgLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1mb3J3YXJkLXJlZlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWV4Y2VsZXhwb3J0LWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IENvbHVtbkJhc2UsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Db2x1bW5Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmllbGQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEhlYWRlckNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEZvb3RlckNlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb290ZXJDZWxsT3B0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0dyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBncm91cEZvb3RlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtHcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZm9vdGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0Zvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGdyb3VwIGNvbXBvbmVudCBvZiB0aGUgS2VuZG8gVUkgRXhjZWwgRXhwb3J0IGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgQ29sdW1uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgfVxufVxuQ29sdW1uR3JvdXBDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ29sdW1uQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENvbHVtbkdyb3VwQ29tcG9uZW50KSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOm5vLWZvcndhcmQtcmVmXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZXhjZWxleHBvcnQtY29sdW1uLWdyb3VwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uR3JvdXBDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9LCB7IHR5cGU6IEhvc3QgfSwgeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG5jb25zdCBkZWNsYXJhdGlvbnMgPSBbXG4gICAgRXhjZWxFeHBvcnRDb21wb25lbnQsXG4gICAgQ29sdW1uQ29tcG9uZW50LFxuICAgIENvbHVtbkdyb3VwQ29tcG9uZW50LFxuICAgIEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRXhjZWwgRXhwb3J0IGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBFeGNlbEV4cG9ydE1vZHVsZSBtb2R1bGVcbiAqIGltcG9ydCB7IEV4Y2VsRXhwb3J0TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZXhjZWwtZXhwb3J0JztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgRXhjZWxFeHBvcnRNb2R1bGVdLCAvLyBpbXBvcnQgRXhjZWxFeHBvcnRNb2R1bGUgbW9kdWxlXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBFeGNlbEV4cG9ydE1vZHVsZSB7XG59XG5FeGNlbEV4cG9ydE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZGVjbGFyYXRpb25zXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsIEV4Y2VsRXhwb3J0Q29tcG9uZW50LCBFeGNlbEV4cG9ydE1vZHVsZSwgQ29sdW1uQmFzZSwgQ29sdW1uQ29tcG9uZW50LCBDb2x1bW5Hcm91cENvbXBvbmVudCwgRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIHdvcmtib29rT3B0aW9ucywgdG9EYXRhVVJMLCBpc1dvcmtib29rT3B0aW9ucyB9O1xuIl19","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { EventEmitter, Injectable, InjectionToken, Directive, Optional, Inject, SkipSelf, ElementRef, Renderer2, NgZone, ChangeDetectorRef, HostBinding, TemplateRef, QueryList, Input, ContentChildren, ContentChild, Component, forwardRef, Host, Output, isDevMode, SecurityContext, ViewEncapsulation, ViewChild, ViewChildren, Self, ViewContainerRef, Pipe, NgModule, ComponentFactoryResolver, ChangeDetectionStrategy, HostListener } from '@angular/core';\nimport { isDocumentAvailable, Keys, DraggableDirective, isChanged, anyChanged, hasObservers, ResizeSensorComponent, DraggableModule, EventsModule, guid, ResizeSensorModule } from '@progress/kendo-angular-common';\nimport { merge, of, Subject, Subscription, from, interval, fromEvent, zip, BehaviorSubject, Observable } from 'rxjs';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { switchMap, take, filter, takeUntil, map, switchMapTo, delay, auditTime, distinctUntilChanged, tap, throttleTime, debounceTime, bufferCount } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule, FormsModule } from '@angular/forms';\nimport { orderBy, process, isCompositeFilterDescriptor, filterBy } from '@progress/kendo-data-query';\nimport { PopupService, PopupModule } from '@progress/kendo-angular-popup';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { getter } from '@progress/kendo-common';\nimport { DropDownListModule, AutoCompleteModule } from '@progress/kendo-angular-dropdowns';\nimport { InputsModule, NumericTextBoxComponent, NumericTextBoxModule } from '@progress/kendo-angular-inputs';\nimport { DatePickerModule } from '@progress/kendo-angular-dateinputs';\nimport { IntlService } from '@progress/kendo-angular-intl';\nimport { trigger, state, style, transition, animate } from '@angular/animations';\nimport { Button } from '@progress/kendo-angular-buttons';\nimport { PDFMarginComponent, PDFTemplateDirective, PDFExportComponent } from '@progress/kendo-angular-pdf-export';\nimport { saveAs } from '@progress/kendo-file-saver';\nimport { workbookOptions, toDataURL, ColumnBase, ExcelExportModule } from '@progress/kendo-angular-excel-export';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@progress/kendo-angular-common';\nimport * as ɵngcc3 from '@progress/kendo-angular-popup';\nimport * as ɵngcc4 from '@angular/platform-browser';\nimport * as ɵngcc5 from '@angular/common';\nimport * as ɵngcc6 from '@progress/kendo-angular-inputs';\nimport * as ɵngcc7 from '@angular/forms';\nimport * as ɵngcc8 from '@progress/kendo-angular-dropdowns';\nimport * as ɵngcc9 from '@progress/kendo-angular-dateinputs';\nimport * as ɵngcc10 from '@progress/kendo-angular-intl';\n\nconst _c0 = [\"lockedHeader\"];\nconst _c1 = [\"header\"];\nconst _c2 = [\"ariaRoot\"];\nconst _c3 = [\"footer\"];\nvar I18N_4;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label visible in the Grid group panel when it is empty\n * @meaning kendo.grid.groupPanelEmpty\n */ \n const MSG_EXTERNAL_1430663748859427158$$DIST_FESM2015_INDEX_JS_5 = goog.getMsg(\"Drag a column header and drop it here to group by that column\");\n I18N_4 = MSG_EXTERNAL_1430663748859427158$$DIST_FESM2015_INDEX_JS_5;\n}\nelse {\n I18N_4 = $localize `:kendo.grid.groupPanelEmpty|The label visible in the Grid group panel when it is empty␟30bcb3a2fbc22fcab6ca805e74b90adb8ba1ae96␟1430663748859427158:Drag a column header and drop it here to group by that column`;\n}\nvar I18N_6;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label visible in the Grid when there are no records\n * @meaning kendo.grid.noRecords\n */ \n const MSG_EXTERNAL_1243399825085142134$$DIST_FESM2015_INDEX_JS_7 = goog.getMsg(\"No records available.\");\n I18N_6 = MSG_EXTERNAL_1243399825085142134$$DIST_FESM2015_INDEX_JS_7;\n}\nelse {\n I18N_6 = $localize `:kendo.grid.noRecords|The label visible in the Grid when there are no records␟ff9cfd4bf3e40305db251f2b6961796c0550b4b0␟1243399825085142134:No records available.`;\n}\nvar I18N_8;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the first page button in Grid pager\n * @meaning kendo.grid.pagerFirstPage\n */ \n const MSG_EXTERNAL_5647145449685906398$$DIST_FESM2015_INDEX_JS_9 = goog.getMsg(\"Go to the first page\");\n I18N_8 = MSG_EXTERNAL_5647145449685906398$$DIST_FESM2015_INDEX_JS_9;\n}\nelse {\n I18N_8 = $localize `:kendo.grid.pagerFirstPage|The label for the first page button in Grid pager␟b405dfc5ee42415daa08d54847d3010de1821111␟5647145449685906398:Go to the first page`;\n}\nvar I18N_10;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the previous page button in Grid pager\n * @meaning kendo.grid.pagerPreviousPage\n */ \n const MSG_EXTERNAL_6745088753482690847$$DIST_FESM2015_INDEX_JS_11 = goog.getMsg(\"Go to the previous page\");\n I18N_10 = MSG_EXTERNAL_6745088753482690847$$DIST_FESM2015_INDEX_JS_11;\n}\nelse {\n I18N_10 = $localize `:kendo.grid.pagerPreviousPage|The label for the previous page button in Grid pager␟47aa4fe05f5a2577d3336971d7c44ce48802b860␟6745088753482690847:Go to the previous page`;\n}\nvar I18N_12;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the next page button in Grid pager\n * @meaning kendo.grid.pagerNextPage\n */ \n const MSG_EXTERNAL_5510985262435270859$$DIST_FESM2015_INDEX_JS_13 = goog.getMsg(\"Go to the next page\");\n I18N_12 = MSG_EXTERNAL_5510985262435270859$$DIST_FESM2015_INDEX_JS_13;\n}\nelse {\n I18N_12 = $localize `:kendo.grid.pagerNextPage|The label for the next page button in Grid pager␟90031133fca899b4e491d9fc51128c1a184afb30␟5510985262435270859:Go to the next page`;\n}\nvar I18N_14;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the last page button in Grid pager\n * @meaning kendo.grid.pagerLastPage\n */ \n const MSG_EXTERNAL_4539768510520419313$$DIST_FESM2015_INDEX_JS_15 = goog.getMsg(\"Go to the last page\");\n I18N_14 = MSG_EXTERNAL_4539768510520419313$$DIST_FESM2015_INDEX_JS_15;\n}\nelse {\n I18N_14 = $localize `:kendo.grid.pagerLastPage|The label for the last page button in Grid pager␟fe84f2ea868286ce03e50b6e55558c16d675c753␟4539768510520419313:Go to the last page`;\n}\nvar I18N_16;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label before the current page number in the Grid pager\n * @meaning kendo.grid.pagerPage\n */ \n const MSG_EXTERNAL_5228228287003939680$$DIST_FESM2015_INDEX_JS_17 = goog.getMsg(\"Page\");\n I18N_16 = MSG_EXTERNAL_5228228287003939680$$DIST_FESM2015_INDEX_JS_17;\n}\nelse {\n I18N_16 = $localize `:kendo.grid.pagerPage|The label before the current page number in the Grid pager␟89c1f616c25bb610824cd8a26473a03921df48bd␟5228228287003939680:Page`;\n}\nvar I18N_18;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label before the total pages number in the Grid pager\n * @meaning kendo.grid.pagerOf\n */ \n const MSG_EXTERNAL_7004642096327889102$$DIST_FESM2015_INDEX_JS_19 = goog.getMsg(\"of\");\n I18N_18 = MSG_EXTERNAL_7004642096327889102$$DIST_FESM2015_INDEX_JS_19;\n}\nelse {\n I18N_18 = $localize `:kendo.grid.pagerOf|The label before the total pages number in the Grid pager␟0c9abe48f5d4bd2cb51846712e41864fc64aad6a␟7004642096327889102:of`;\n}\nvar I18N_20;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label after the total pages number in the Grid pager\n * @meaning kendo.grid.pagerItems\n */ \n const MSG_EXTERNAL_700193548223931835$$DIST_FESM2015_INDEX_JS_21 = goog.getMsg(\"items\");\n I18N_20 = MSG_EXTERNAL_700193548223931835$$DIST_FESM2015_INDEX_JS_21;\n}\nelse {\n I18N_20 = $localize `:kendo.grid.pagerItems|The label after the total pages number in the Grid pager␟7c1704d11bfb77340485acd891439c2b6c6616ca␟700193548223931835:items`;\n}\nvar I18N_22;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the pager input in the Grid pager\n * @meaning kendo.grid.pagerPageNumberInputTitle\n */ \n const MSG_EXTERNAL_2090461908134774363$$DIST_FESM2015_INDEX_JS_23 = goog.getMsg(\"Page Number\");\n I18N_22 = MSG_EXTERNAL_2090461908134774363$$DIST_FESM2015_INDEX_JS_23;\n}\nelse {\n I18N_22 = $localize `:kendo.grid.pagerPageNumberInputTitle|The label for the pager input in the Grid pager␟f8bad8f2c7345e4fe531480e3034f7d3e954d383␟2090461908134774363:Page Number`;\n}\nvar I18N_24;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label for the page size chooser in the Grid pager\n * @meaning kendo.grid.pagerItemsPerPage\n */ \n const MSG_EXTERNAL_8838594644885628398$$DIST_FESM2015_INDEX_JS_25 = goog.getMsg(\"items per page\");\n I18N_24 = MSG_EXTERNAL_8838594644885628398$$DIST_FESM2015_INDEX_JS_25;\n}\nelse {\n I18N_24 = $localize `:kendo.grid.pagerItemsPerPage|The label for the page size chooser in the Grid pager␟3331fe7ec45f299afaa4c1e08ea25c493eda9144␟8838594644885628398:items per page`;\n}\nvar I18N_26;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the filter cell or icon\n * @meaning kendo.grid.filter\n */ \n const MSG_EXTERNAL_7977992299945497789$$DIST_FESM2015_INDEX_JS_27 = goog.getMsg(\"Filter\");\n I18N_26 = MSG_EXTERNAL_7977992299945497789$$DIST_FESM2015_INDEX_JS_27;\n}\nelse {\n I18N_26 = $localize `:kendo.grid.filter|The label of the filter cell or icon␟21a04b7b090dac60e0449cb6e435b7e879173c75␟7977992299945497789:Filter`;\n}\nvar I18N_28;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the equal filter operator\n * @meaning kendo.grid.filterEqOperator\n */ \n const MSG_EXTERNAL_4328959145426393682$$DIST_FESM2015_INDEX_JS_29 = goog.getMsg(\"Is equal to\");\n I18N_28 = MSG_EXTERNAL_4328959145426393682$$DIST_FESM2015_INDEX_JS_29;\n}\nelse {\n I18N_28 = $localize `:kendo.grid.filterEqOperator|The text of the equal filter operator␟8b31e1604d10a2f8709dcb1ed5c237e33cffc135␟4328959145426393682:Is equal to`;\n}\nvar I18N_30;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the not equal filter operator\n * @meaning kendo.grid.filterNotEqOperator\n */ \n const MSG_EXTERNAL_8497658332767349737$$DIST_FESM2015_INDEX_JS_31 = goog.getMsg(\"Is not equal to\");\n I18N_30 = MSG_EXTERNAL_8497658332767349737$$DIST_FESM2015_INDEX_JS_31;\n}\nelse {\n I18N_30 = $localize `:kendo.grid.filterNotEqOperator|The text of the not equal filter operator␟d46e14d35d89d2fadf5c852abf5557643510a013␟8497658332767349737:Is not equal to`;\n}\nvar I18N_32;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is null filter operator\n * @meaning kendo.grid.filterIsNullOperator\n */ \n const MSG_EXTERNAL_1298299704757177797$$DIST_FESM2015_INDEX_JS_33 = goog.getMsg(\"Is null\");\n I18N_32 = MSG_EXTERNAL_1298299704757177797$$DIST_FESM2015_INDEX_JS_33;\n}\nelse {\n I18N_32 = $localize `:kendo.grid.filterIsNullOperator|The text of the is null filter operator␟078c50eb1fe8b2b43fcc40c5e7f4493152310c2f␟1298299704757177797:Is null`;\n}\nvar I18N_34;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is not null filter operator\n * @meaning kendo.grid.filterIsNotNullOperator\n */ \n const MSG_EXTERNAL_8362279767336741540$$DIST_FESM2015_INDEX_JS_35 = goog.getMsg(\"Is not null\");\n I18N_34 = MSG_EXTERNAL_8362279767336741540$$DIST_FESM2015_INDEX_JS_35;\n}\nelse {\n I18N_34 = $localize `:kendo.grid.filterIsNotNullOperator|The text of the is not null filter operator␟70b39eeaf2674907b2e59b414baf17e032b464dc␟8362279767336741540:Is not null`;\n}\nvar I18N_36;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is empty filter operator\n * @meaning kendo.grid.filterIsEmptyOperator\n */ \n const MSG_EXTERNAL_4762263229995523226$$DIST_FESM2015_INDEX_JS_37 = goog.getMsg(\"Is empty\");\n I18N_36 = MSG_EXTERNAL_4762263229995523226$$DIST_FESM2015_INDEX_JS_37;\n}\nelse {\n I18N_36 = $localize `:kendo.grid.filterIsEmptyOperator|The text of the is empty filter operator␟a4e77e444b4e9b63851ac818e20136212b06c750␟4762263229995523226:Is empty`;\n}\nvar I18N_38;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the is not empty filter operator\n * @meaning kendo.grid.filterIsNotEmptyOperator\n */ \n const MSG_EXTERNAL_8245213618709258015$$DIST_FESM2015_INDEX_JS_39 = goog.getMsg(\"Is not empty\");\n I18N_38 = MSG_EXTERNAL_8245213618709258015$$DIST_FESM2015_INDEX_JS_39;\n}\nelse {\n I18N_38 = $localize `:kendo.grid.filterIsNotEmptyOperator|The text of the is not empty filter operator␟dee7553c341248e90aef4a8e7438c52e667e68be␟8245213618709258015:Is not empty`;\n}\nvar I18N_40;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the starts with filter operator\n * @meaning kendo.grid.filterStartsWithOperator\n */ \n const MSG_EXTERNAL_6087783423599420507$$DIST_FESM2015_INDEX_JS_41 = goog.getMsg(\"Starts with\");\n I18N_40 = MSG_EXTERNAL_6087783423599420507$$DIST_FESM2015_INDEX_JS_41;\n}\nelse {\n I18N_40 = $localize `:kendo.grid.filterStartsWithOperator|The text of the starts with filter operator␟da43b363b636156e3ccdbb64a0788bdeab51e992␟6087783423599420507:Starts with`;\n}\nvar I18N_42;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the contains filter operator\n * @meaning kendo.grid.filterContainsOperator\n */ \n const MSG_EXTERNAL_3831180413287131758$$DIST_FESM2015_INDEX_JS_43 = goog.getMsg(\"Contains\");\n I18N_42 = MSG_EXTERNAL_3831180413287131758$$DIST_FESM2015_INDEX_JS_43;\n}\nelse {\n I18N_42 = $localize `:kendo.grid.filterContainsOperator|The text of the contains filter operator␟5b568a46d2e34ebde7dd53a7e599cbbb7dc6bae1␟3831180413287131758:Contains`;\n}\nvar I18N_44;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the does not contain filter operator\n * @meaning kendo.grid.filterNotContainsOperator\n */ \n const MSG_EXTERNAL_7331253838216904826$$DIST_FESM2015_INDEX_JS_45 = goog.getMsg(\"Does not contain\");\n I18N_44 = MSG_EXTERNAL_7331253838216904826$$DIST_FESM2015_INDEX_JS_45;\n}\nelse {\n I18N_44 = $localize `:kendo.grid.filterNotContainsOperator|The text of the does not contain filter operator␟be06aa4fde7fa722c9de5a45f241ff595071d718␟7331253838216904826:Does not contain`;\n}\nvar I18N_46;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the ends with filter operator\n * @meaning kendo.grid.filterEndsWithOperator\n */ \n const MSG_EXTERNAL_3662435311670509156$$DIST_FESM2015_INDEX_JS_47 = goog.getMsg(\"Ends with\");\n I18N_46 = MSG_EXTERNAL_3662435311670509156$$DIST_FESM2015_INDEX_JS_47;\n}\nelse {\n I18N_46 = $localize `:kendo.grid.filterEndsWithOperator|The text of the ends with filter operator␟a54b2ecffb41f0603ceedc7ea5a40b7d130e2fa1␟3662435311670509156:Ends with`;\n}\nvar I18N_48;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the greater than or equal filter operator\n * @meaning kendo.grid.filterGteOperator\n */ \n const MSG_EXTERNAL_4542824413455511831$$DIST_FESM2015_INDEX_JS_49 = goog.getMsg(\"Is greater than or equal to\");\n I18N_48 = MSG_EXTERNAL_4542824413455511831$$DIST_FESM2015_INDEX_JS_49;\n}\nelse {\n I18N_48 = $localize `:kendo.grid.filterGteOperator|The text of the greater than or equal filter operator␟68471603db771d0304d02fe086da9701c16911c3␟4542824413455511831:Is greater than or equal to`;\n}\nvar I18N_50;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the greater than filter operator\n * @meaning kendo.grid.filterGtOperator\n */ \n const MSG_EXTERNAL_1527483349261806183$$DIST_FESM2015_INDEX_JS_51 = goog.getMsg(\"Is greater than\");\n I18N_50 = MSG_EXTERNAL_1527483349261806183$$DIST_FESM2015_INDEX_JS_51;\n}\nelse {\n I18N_50 = $localize `:kendo.grid.filterGtOperator|The text of the greater than filter operator␟ae68acc0e18252a348bdfb32112996d81e5305de␟1527483349261806183:Is greater than`;\n}\nvar I18N_52;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the less than or equal filter operator\n * @meaning kendo.grid.filterLteOperator\n */ \n const MSG_EXTERNAL_4840714404733417604$$DIST_FESM2015_INDEX_JS_53 = goog.getMsg(\"Is less than or equal to\");\n I18N_52 = MSG_EXTERNAL_4840714404733417604$$DIST_FESM2015_INDEX_JS_53;\n}\nelse {\n I18N_52 = $localize `:kendo.grid.filterLteOperator|The text of the less than or equal filter operator␟e48d50a6422c616a00b95025adc5283aff4fa8cb␟4840714404733417604:Is less than or equal to`;\n}\nvar I18N_54;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the less than filter operator\n * @meaning kendo.grid.filterLtOperator\n */ \n const MSG_EXTERNAL_498627126459578706$$DIST_FESM2015_INDEX_JS_55 = goog.getMsg(\"Is less than\");\n I18N_54 = MSG_EXTERNAL_498627126459578706$$DIST_FESM2015_INDEX_JS_55;\n}\nelse {\n I18N_54 = $localize `:kendo.grid.filterLtOperator|The text of the less than filter operator␟c4d58f0e509cb7e37014715dd91546a724210d70␟498627126459578706:Is less than`;\n}\nvar I18N_56;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the IsTrue boolean filter option\n * @meaning kendo.grid.filterIsTrue\n */ \n const MSG_EXTERNAL_2361673238316312251$$DIST_FESM2015_INDEX_JS_57 = goog.getMsg(\"Is True\");\n I18N_56 = MSG_EXTERNAL_2361673238316312251$$DIST_FESM2015_INDEX_JS_57;\n}\nelse {\n I18N_56 = $localize `:kendo.grid.filterIsTrue|The text of the IsTrue boolean filter option␟d5f1e9028bc60c30e8f8e0f9cfeb872512446cea␟2361673238316312251:Is True`;\n}\nvar I18N_58;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the IsFalse boolean filter option\n * @meaning kendo.grid.filterIsFalse\n */ \n const MSG_EXTERNAL_7759366406135608407$$DIST_FESM2015_INDEX_JS_59 = goog.getMsg(\"Is False\");\n I18N_58 = MSG_EXTERNAL_7759366406135608407$$DIST_FESM2015_INDEX_JS_59;\n}\nelse {\n I18N_58 = $localize `:kendo.grid.filterIsFalse|The text of the IsFalse boolean filter option␟6d34731320e2536fd78f4a9e08f0b8dcd01edf3d␟7759366406135608407:Is False`;\n}\nvar I18N_60;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the (All) boolean filter option\n * @meaning kendo.grid.filterBooleanAll\n */ \n const MSG_EXTERNAL_9215343856736761875$$DIST_FESM2015_INDEX_JS_61 = goog.getMsg(\"(All)\");\n I18N_60 = MSG_EXTERNAL_9215343856736761875$$DIST_FESM2015_INDEX_JS_61;\n}\nelse {\n I18N_60 = $localize `:kendo.grid.filterBooleanAll|The text of the (All) boolean filter option␟4da1456a62bafe2614ed2bc05a2c790a64a4dd0b␟9215343856736761875:(All)`;\n}\nvar I18N_62;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the after or equal date filter operator\n * @meaning kendo.grid.filterAfterOrEqualOperator\n */ \n const MSG_EXTERNAL_1964413288176201979$$DIST_FESM2015_INDEX_JS_63 = goog.getMsg(\"Is after or equal to\");\n I18N_62 = MSG_EXTERNAL_1964413288176201979$$DIST_FESM2015_INDEX_JS_63;\n}\nelse {\n I18N_62 = $localize `:kendo.grid.filterAfterOrEqualOperator|The text of the after or equal date filter operator␟d7dac1bbc2372d578a9d2bca099de766043aed7e␟1964413288176201979:Is after or equal to`;\n}\nvar I18N_64;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the after date filter operator\n * @meaning kendo.grid.filterAfterOperator\n */ \n const MSG_EXTERNAL_3078502182807244703$$DIST_FESM2015_INDEX_JS_65 = goog.getMsg(\"Is after\");\n I18N_64 = MSG_EXTERNAL_3078502182807244703$$DIST_FESM2015_INDEX_JS_65;\n}\nelse {\n I18N_64 = $localize `:kendo.grid.filterAfterOperator|The text of the after date filter operator␟bff777df0d0831cc02679227422fab4ef2763fa9␟3078502182807244703:Is after`;\n}\nvar I18N_66;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the before date filter operator\n * @meaning kendo.grid.filterBeforeOperator\n */ \n const MSG_EXTERNAL_3348865631071358219$$DIST_FESM2015_INDEX_JS_67 = goog.getMsg(\"Is before\");\n I18N_66 = MSG_EXTERNAL_3348865631071358219$$DIST_FESM2015_INDEX_JS_67;\n}\nelse {\n I18N_66 = $localize `:kendo.grid.filterBeforeOperator|The text of the before date filter operator␟35ef5cf367670f15432c9f8761bc85fbdb2b1830␟3348865631071358219:Is before`;\n}\nvar I18N_68;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the before or equal date filter operator\n * @meaning kendo.grid.filterBeforeOrEqualOperator\n */ \n const MSG_EXTERNAL_6582064037090631388$$DIST_FESM2015_INDEX_JS_69 = goog.getMsg(\"Is before or equal to\");\n I18N_68 = MSG_EXTERNAL_6582064037090631388$$DIST_FESM2015_INDEX_JS_69;\n}\nelse {\n I18N_68 = $localize `:kendo.grid.filterBeforeOrEqualOperator|The text of the before or equal date filter operator␟27a6b29ffbc1eb498de8d7af20051461a2e842ec␟6582064037090631388:Is before or equal to`;\n}\nvar I18N_70;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the filter button\n * @meaning kendo.grid.filterFilterButton\n */ \n const MSG_EXTERNAL_5185263258022896121$$DIST_FESM2015_INDEX_JS_71 = goog.getMsg(\"Filter\");\n I18N_70 = MSG_EXTERNAL_5185263258022896121$$DIST_FESM2015_INDEX_JS_71;\n}\nelse {\n I18N_70 = $localize `:kendo.grid.filterFilterButton|The text of the filter button␟4f1c08d0b056646cdb668da669e2e15825adfe4d␟5185263258022896121:Filter`;\n}\nvar I18N_72;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the clear filter button\n * @meaning kendo.grid.filterClearButton\n */ \n const MSG_EXTERNAL_3031209415830321799$$DIST_FESM2015_INDEX_JS_73 = goog.getMsg(\"Clear\");\n I18N_72 = MSG_EXTERNAL_3031209415830321799$$DIST_FESM2015_INDEX_JS_73;\n}\nelse {\n I18N_72 = $localize `:kendo.grid.filterClearButton|The text of the clear filter button␟06e4e4dadede6f91f261cdbb7fb174246a135238␟3031209415830321799:Clear`;\n}\nvar I18N_74;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the And filter logic\n * @meaning kendo.grid.filterAndLogic\n */ \n const MSG_EXTERNAL_512662285155477884$$DIST_FESM2015_INDEX_JS_75 = goog.getMsg(\"And\");\n I18N_74 = MSG_EXTERNAL_512662285155477884$$DIST_FESM2015_INDEX_JS_75;\n}\nelse {\n I18N_74 = $localize `:kendo.grid.filterAndLogic|The text of the And filter logic␟f73fbcc2f813d469e4a34491950ca01ea1ac8f60␟512662285155477884:And`;\n}\nvar I18N_76;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the Or filter logic\n * @meaning kendo.grid.filterOrLogic\n */ \n const MSG_EXTERNAL_1964926727342405367$$DIST_FESM2015_INDEX_JS_77 = goog.getMsg(\"Or\");\n I18N_76 = MSG_EXTERNAL_1964926727342405367$$DIST_FESM2015_INDEX_JS_77;\n}\nelse {\n I18N_76 = $localize `:kendo.grid.filterOrLogic|The text of the Or filter logic␟04e64780de0fc1c3a9986997e0808ec53a5f2a63␟1964926727342405367:Or`;\n}\nvar I18N_78;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The loading text\n * @meaning kendo.grid.loading\n */ \n const MSG_EXTERNAL_5425510787229531767$$DIST_FESM2015_INDEX_JS_79 = goog.getMsg(\"Loading\");\n I18N_78 = MSG_EXTERNAL_5425510787229531767$$DIST_FESM2015_INDEX_JS_79;\n}\nelse {\n I18N_78 = $localize `:kendo.grid.loading|The loading text␟781c049cc69efc30bc8053af9ace3cb4b04bd438␟5425510787229531767:Loading`;\n}\nvar I18N_80;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the column menu icon\n * @meaning kendo.grid.columnMenu\n */ \n const MSG_EXTERNAL_2820335494528144626$$DIST_FESM2015_INDEX_JS_81 = goog.getMsg(\"Column Menu\");\n I18N_80 = MSG_EXTERNAL_2820335494528144626$$DIST_FESM2015_INDEX_JS_81;\n}\nelse {\n I18N_80 = $localize `:kendo.grid.columnMenu|The title of the column menu icon␟3596c6b21d39223adc5c352daec9938474a8cc0d␟2820335494528144626:Column Menu`;\n}\nvar I18N_82;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the columns item\n * @meaning kendo.grid.columns\n */ \n const MSG_EXTERNAL_5332162737795508854$$DIST_FESM2015_INDEX_JS_83 = goog.getMsg(\"Columns\");\n I18N_82 = MSG_EXTERNAL_5332162737795508854$$DIST_FESM2015_INDEX_JS_83;\n}\nelse {\n I18N_82 = $localize `:kendo.grid.columns|The text shown in the column menu for the columns item␟9b841399fbb3d81f2401f98b4f4763834b72a1e5␟5332162737795508854:Columns`;\n}\nvar I18N_84;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the lock item\n * @meaning kendo.grid.lock\n */ \n const MSG_EXTERNAL_5849203148124173556$$DIST_FESM2015_INDEX_JS_85 = goog.getMsg(\"Lock\");\n I18N_84 = MSG_EXTERNAL_5849203148124173556$$DIST_FESM2015_INDEX_JS_85;\n}\nelse {\n I18N_84 = $localize `:kendo.grid.lock|The text shown in the column menu for the lock item␟f356cae509dec3dc1b7156326b9a0328a79c62a8␟5849203148124173556:Lock`;\n}\nvar I18N_86;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the unlock item\n * @meaning kendo.grid.unlock\n */ \n const MSG_EXTERNAL_6968586378603932789$$DIST_FESM2015_INDEX_JS_87 = goog.getMsg(\"Unlock\");\n I18N_86 = MSG_EXTERNAL_6968586378603932789$$DIST_FESM2015_INDEX_JS_87;\n}\nelse {\n I18N_86 = $localize `:kendo.grid.unlock|The text shown in the column menu for the unlock item␟f33355540003068372e39ba7f3def794869ea9f8␟6968586378603932789:Unlock`;\n}\nvar I18N_88;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The label of the sort icon\n * @meaning kendo.grid.sortable\n */ \n const MSG_EXTERNAL_3824304972336788145$$DIST_FESM2015_INDEX_JS_89 = goog.getMsg(\"Sortable\");\n I18N_88 = MSG_EXTERNAL_3824304972336788145$$DIST_FESM2015_INDEX_JS_89;\n}\nelse {\n I18N_88 = $localize `:kendo.grid.sortable|The label of the sort icon␟a692ba271be066ce379f942ff67094e1ea989f4c␟3824304972336788145:Sortable`;\n}\nvar I18N_90;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the sort ascending item\n * @meaning kendo.grid.sortAscending\n */ \n const MSG_EXTERNAL_6297762560864270240$$DIST_FESM2015_INDEX_JS_91 = goog.getMsg(\"Sort Ascending\");\n I18N_90 = MSG_EXTERNAL_6297762560864270240$$DIST_FESM2015_INDEX_JS_91;\n}\nelse {\n I18N_90 = $localize `:kendo.grid.sortAscending|The text shown in the column menu for the sort ascending item␟96beffd8446c5455f3bbdc313c946db32df7dcc2␟6297762560864270240:Sort Ascending`;\n}\nvar I18N_92;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu for the sort descending item\n * @meaning kendo.grid.sortDescending\n */ \n const MSG_EXTERNAL_5605073536641230977$$DIST_FESM2015_INDEX_JS_93 = goog.getMsg(\"Sort Descending\");\n I18N_92 = MSG_EXTERNAL_5605073536641230977$$DIST_FESM2015_INDEX_JS_93;\n}\nelse {\n I18N_92 = $localize `:kendo.grid.sortDescending|The text shown in the column menu for the sort descending item␟208d0538d4c2537a1cbf456941e34a2884053d52␟5605073536641230977:Sort Descending`;\n}\nvar I18N_94;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is sorted ascending\n * @meaning kendo.grid.sortedAscending\n */ \n const MSG_EXTERNAL_6275944032047713540$$DIST_FESM2015_INDEX_JS_95 = goog.getMsg(\"Sorted Ascending\");\n I18N_94 = MSG_EXTERNAL_6275944032047713540$$DIST_FESM2015_INDEX_JS_95;\n}\nelse {\n I18N_94 = $localize `:kendo.grid.sortedAscending|The status announcement when a column is sorted ascending␟947c64329461efd9f8a9aa2c51acbbd099170aa5␟6275944032047713540:Sorted Ascending`;\n}\nvar I18N_96;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is sorted descending\n * @meaning kendo.grid.sortedDescending\n */ \n const MSG_EXTERNAL_8155280769473236383$$DIST_FESM2015_INDEX_JS_97 = goog.getMsg(\"Sorted Descending\");\n I18N_96 = MSG_EXTERNAL_8155280769473236383$$DIST_FESM2015_INDEX_JS_97;\n}\nelse {\n I18N_96 = $localize `:kendo.grid.sortedDescending|The status announcement when a column is sorted descending␟092a688d1b2b6d873bdc29beaaf43c3f45336581␟8155280769473236383:Sorted Descending`;\n}\nvar I18N_98;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The status announcement when a column is no longer sorted\n * @meaning kendo.grid.sortedDefault\n */ \n const MSG_EXTERNAL_5229177293891232538$$DIST_FESM2015_INDEX_JS_99 = goog.getMsg(\"Not Sorted\");\n I18N_98 = MSG_EXTERNAL_5229177293891232538$$DIST_FESM2015_INDEX_JS_99;\n}\nelse {\n I18N_98 = $localize `:kendo.grid.sortedDefault|The status announcement when a column is no longer sorted␟66e99ea340974022c07c52a6f668f5573e7edab0␟5229177293891232538:Not Sorted`;\n}\nvar I18N_100;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu or column chooser for the columns apply button\n * @meaning kendo.grid.columnsApply\n */ \n const MSG_EXTERNAL_34213208292862969$$DIST_FESM2015_INDEX_JS_101 = goog.getMsg(\"Apply\");\n I18N_100 = MSG_EXTERNAL_34213208292862969$$DIST_FESM2015_INDEX_JS_101;\n}\nelse {\n I18N_100 = $localize `:kendo.grid.columnsApply|The text shown in the column menu or column chooser for the columns apply button␟04600bd6e362cf9da9f7f9c4666eab2c88eb6a90␟34213208292862969:Apply`;\n}\nvar I18N_102;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text shown in the column menu or column chooser for the columns reset button\n * @meaning kendo.grid.columnsReset\n */ \n const MSG_EXTERNAL_4465838259914958827$$DIST_FESM2015_INDEX_JS_103 = goog.getMsg(\"Reset\");\n I18N_102 = MSG_EXTERNAL_4465838259914958827$$DIST_FESM2015_INDEX_JS_103;\n}\nelse {\n I18N_102 = $localize `:kendo.grid.columnsReset|The text shown in the column menu or column chooser for the columns reset button␟94d3b472d99994a5cca9930afd4cf0ac2774c382␟4465838259914958827:Reset`;\n}\nvar I18N_104;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the expand icon of detail rows.\n * @meaning kendo.grid.detailExpand\n */ \n const MSG_EXTERNAL_6952757249912226136$$DIST_FESM2015_INDEX_JS_105 = goog.getMsg(\"Expand Details\");\n I18N_104 = MSG_EXTERNAL_6952757249912226136$$DIST_FESM2015_INDEX_JS_105;\n}\nelse {\n I18N_104 = $localize `:kendo.grid.detailExpand|The title of the expand icon of detail rows.␟ad6629bb6e79235623cfce486ef48087dbe96fb5␟6952757249912226136:Expand Details`;\n}\nvar I18N_106;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the collapse icon of detail rows.\n * @meaning kendo.grid.detailCollapse\n */ \n const MSG_EXTERNAL_6065477639036399169$$DIST_FESM2015_INDEX_JS_107 = goog.getMsg(\"Collapse Details\");\n I18N_106 = MSG_EXTERNAL_6065477639036399169$$DIST_FESM2015_INDEX_JS_107;\n}\nelse {\n I18N_106 = $localize `:kendo.grid.detailCollapse|The title of the collapse icon of detail rows.␟ace0c0a58fbb211e8678efb3bd6ac9bb587144c3␟6065477639036399169:Collapse Details`;\n}\nvar I18N_108;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text of the Today button of the Date filter.\n * @meaning kendo.grid.filterDateToday\n */ \n const MSG_EXTERNAL_1656723147090613075$$DIST_FESM2015_INDEX_JS_109 = goog.getMsg(\"TODAY\");\n I18N_108 = MSG_EXTERNAL_1656723147090613075$$DIST_FESM2015_INDEX_JS_109;\n}\nelse {\n I18N_108 = $localize `:kendo.grid.filterDateToday|The text of the Today button of the Date filter.␟745058f85d92ee5228977277195262978828c4c8␟1656723147090613075:TODAY`;\n}\nvar I18N_110;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Toggle button of the Date filter.\n * @meaning kendo.grid.filterDateToggle\n */ \n const MSG_EXTERNAL_15438307630389352$$DIST_FESM2015_INDEX_JS_111 = goog.getMsg(\"Toggle Calendar\");\n I18N_110 = MSG_EXTERNAL_15438307630389352$$DIST_FESM2015_INDEX_JS_111;\n}\nelse {\n I18N_110 = $localize `:kendo.grid.filterDateToggle|The title of the Toggle button of the Date filter.␟2c916ea2cbd37665e512219650c37dc17b9ef0c0␟15438307630389352:Toggle Calendar`;\n}\nvar I18N_112;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Decrement button of the Numeric filter.\n * @meaning kendo.grid.filterNumericDecrement\n */ \n const MSG_EXTERNAL_534533728304192410$$DIST_FESM2015_INDEX_JS_113 = goog.getMsg(\"Decrement\");\n I18N_112 = MSG_EXTERNAL_534533728304192410$$DIST_FESM2015_INDEX_JS_113;\n}\nelse {\n I18N_112 = $localize `:kendo.grid.filterNumericDecrement|The title of the Decrement button of the Numeric filter.␟7f991d698abebb2e50570f9aef14126ae931c513␟534533728304192410:Decrement`;\n}\nvar I18N_114;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The title of the Increment button of the Numeric filter.\n * @meaning kendo.grid.filterNumericIncrement\n */ \n const MSG_EXTERNAL_5462143714591662391$$DIST_FESM2015_INDEX_JS_115 = goog.getMsg(\"Increment\");\n I18N_114 = MSG_EXTERNAL_5462143714591662391$$DIST_FESM2015_INDEX_JS_115;\n}\nelse {\n I18N_114 = $localize `:kendo.grid.filterNumericIncrement|The title of the Increment button of the Numeric filter.␟25bc8b86968819d3f687aa6dde652800bd4b6b2a␟5462143714591662391:Increment`;\n}\nconst _c116 = [\"groupPanelEmpty\", I18N_4, \"noRecords\", I18N_6, \"pagerFirstPage\", I18N_8, \"pagerPreviousPage\", I18N_10, \"pagerNextPage\", I18N_12, \"pagerLastPage\", I18N_14, \"pagerPage\", I18N_16, \"pagerOf\", I18N_18, \"pagerItems\", I18N_20, \"pagerPageNumberInputTitle\", I18N_22, \"pagerItemsPerPage\", I18N_24, \"filter\", I18N_26, \"filterEqOperator\", I18N_28, \"filterNotEqOperator\", I18N_30, \"filterIsNullOperator\", I18N_32, \"filterIsNotNullOperator\", I18N_34, \"filterIsEmptyOperator\", I18N_36, \"filterIsNotEmptyOperator\", I18N_38, \"filterStartsWithOperator\", I18N_40, \"filterContainsOperator\", I18N_42, \"filterNotContainsOperator\", I18N_44, \"filterEndsWithOperator\", I18N_46, \"filterGteOperator\", I18N_48, \"filterGtOperator\", I18N_50, \"filterLteOperator\", I18N_52, \"filterLtOperator\", I18N_54, \"filterIsTrue\", I18N_56, \"filterIsFalse\", I18N_58, \"filterBooleanAll\", I18N_60, \"filterAfterOrEqualOperator\", I18N_62, \"filterAfterOperator\", I18N_64, \"filterBeforeOperator\", I18N_66, \"filterBeforeOrEqualOperator\", I18N_68, \"filterFilterButton\", I18N_70, \"filterClearButton\", I18N_72, \"filterAndLogic\", I18N_74, \"filterOrLogic\", I18N_76, \"loading\", I18N_78, \"columnMenu\", I18N_80, \"columns\", I18N_82, \"lock\", I18N_84, \"unlock\", I18N_86, \"sortable\", I18N_88, \"sortAscending\", I18N_90, \"sortDescending\", I18N_92, \"sortedAscending\", I18N_94, \"sortedDescending\", I18N_96, \"sortedDefault\", I18N_98, \"columnsApply\", I18N_100, \"columnsReset\", I18N_102, \"detailExpand\", I18N_104, \"detailCollapse\", I18N_106, \"filterDateToday\", I18N_108, \"filterDateToggle\", I18N_110, \"filterNumericDecrement\", I18N_112, \"filterNumericIncrement\", I18N_114];\nfunction GridComponent_kendo_grid_toolbar_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-toolbar\", 8);\n} }\nfunction GridComponent_kendo_grid_group_panel_3_Template(rf, ctx) { if (rf & 1) {\n const _r151 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-group-panel\", 9);\n ɵngcc0.ɵɵlistener(\"change\", function GridComponent_kendo_grid_group_panel_3_Template_kendo_grid_group_panel_change_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r151); const ctx_r150 = ɵngcc0.ɵɵnextContext(); return ctx_r150.groupChange.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r144 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"text\", ctx_r144.groupableEmptyText)(\"groups\", ctx_r144.group);\n} }\nfunction GridComponent_ng_template_6_div_0_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 21, 22);\n ɵngcc0.ɵɵelementStart(2, \"table\", 23);\n ɵngcc0.ɵɵelement(3, \"colgroup\", 18);\n ɵngcc0.ɵɵelement(4, \"thead\", 24);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r154 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r154.lockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r154.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r154.lockedLeafColumns)(\"groups\", ctx_r154.group)(\"detailTemplate\", ctx_r154.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r154.resizable)(\"scrollable\", true)(\"columns\", ctx_r154.lockedColumns)(\"totalColumnLevels\", ctx_r154.totalColumnLevels)(\"sort\", ctx_r154.sort)(\"groups\", ctx_r154.group)(\"filter\", ctx_r154.filter)(\"filterable\", ctx_r154.filterable)(\"groupable\", ctx_r154.showGroupPanel)(\"reorderable\", ctx_r154.reorderable)(\"sortable\", ctx_r154.sortable)(\"columnMenu\", ctx_r154.columnMenuOptions)(\"columnMenuTemplate\", ctx_r154.columnMenuTemplate)(\"totalColumnsCount\", ctx_r154.leafColumns.length)(\"detailTemplate\", ctx_r154.detailTemplate);\n} }\nfunction GridComponent_ng_template_6_div_0_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 25);\n ɵngcc0.ɵɵelement(1, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r156 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r156.columnsContainer.unlockedWidth, \"px\");\n} }\nconst _c117 = function () { return []; };\nfunction GridComponent_ng_template_6_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵtemplate(1, GridComponent_ng_template_6_div_0_div_1_Template, 5, 23, \"div\", 14);\n ɵngcc0.ɵɵelementStart(2, \"div\", 15, 16);\n ɵngcc0.ɵɵelementStart(4, \"table\", 17);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 18);\n ɵngcc0.ɵɵelement(6, \"thead\", 19);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, GridComponent_ng_template_6_div_0_div_7_Template, 2, 2, \"div\", 20);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r152 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"padding\", ctx_r152.headerPadding);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r152.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx_r152.lockedLeafColumns.length)(\"lockedWidth\", ctx_r152.lockedWidth + ctx_r152.scrollbarWidth + 2);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r152.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"virtualColumns\", ctx_r152.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r152.headerLeafColumns)(\"groups\", ctx_r152.isLocked ? ɵngcc0.ɵɵpureFunction0(28, _c117) : ctx_r152.group)(\"detailTemplate\", ctx_r152.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r152.resizable)(\"scrollable\", true)(\"columns\", ctx_r152.headerColumns)(\"totalColumnLevels\", ctx_r152.totalColumnLevels)(\"sort\", ctx_r152.sort)(\"filter\", ctx_r152.filter)(\"filterable\", ctx_r152.filterable)(\"groupable\", ctx_r152.showGroupPanel)(\"reorderable\", ctx_r152.reorderable)(\"groups\", ctx_r152.isLocked ? ɵngcc0.ɵɵpureFunction0(29, _c117) : ctx_r152.group)(\"sortable\", ctx_r152.sortable)(\"columnMenu\", ctx_r152.columnMenuOptions)(\"columnMenuTemplate\", ctx_r152.columnMenuTemplate)(\"lockedColumnsCount\", ctx_r152.lockedLeafColumns.length)(\"totalColumnsCount\", ctx_r152.leafColumns.length)(\"detailTemplate\", ctx_r152.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r152.virtualColumns);\n} }\nfunction GridComponent_ng_template_6_div_2_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 33);\n ɵngcc0.ɵɵelementStart(1, \"table\", 23);\n ɵngcc0.ɵɵelement(2, \"colgroup\", 31);\n ɵngcc0.ɵɵelement(3, \"tfoot\", 34);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r158 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r158.lockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r158.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r158.lockedLeafColumns)(\"groups\", ctx_r158.group)(\"detailTemplate\", ctx_r158.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"scrollable\", true)(\"groups\", ctx_r158.group)(\"columns\", ctx_r158.lockedLeafColumns)(\"detailTemplate\", ctx_r158.detailTemplate)(\"logicalRowIndex\", ctx_r158.ariaRowCount);\n} }\nfunction GridComponent_ng_template_6_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 26);\n ɵngcc0.ɵɵtemplate(1, GridComponent_ng_template_6_div_2_div_1_Template, 4, 13, \"div\", 27);\n ɵngcc0.ɵɵelementStart(2, \"div\", 28, 29);\n ɵngcc0.ɵɵelementStart(4, \"table\", 30);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 31);\n ɵngcc0.ɵɵelement(6, \"tfoot\", 32);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r153 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"padding\", ctx_r153.headerPadding);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r153.lockedLeafColumns.length);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx_r153.lockedLeafColumns.length)(\"lockedWidth\", ctx_r153.lockedWidth + ctx_r153.scrollbarWidth + 3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r153.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r153.nonLockedLeafColumns)(\"groups\", ctx_r153.isLocked ? ɵngcc0.ɵɵpureFunction0(16, _c117) : ctx_r153.group)(\"detailTemplate\", ctx_r153.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r153.ariaRowCount)(\"scrollable\", true)(\"groups\", ctx_r153.isLocked ? ɵngcc0.ɵɵpureFunction0(17, _c117) : ctx_r153.group)(\"columns\", ctx_r153.nonLockedLeafColumns)(\"lockedColumnsCount\", ctx_r153.lockedLeafColumns.length)(\"detailTemplate\", ctx_r153.detailTemplate);\n} }\nfunction GridComponent_ng_template_6_Template(rf, ctx) { if (rf & 1) {\n const _r161 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵtemplate(0, GridComponent_ng_template_6_div_0_Template, 8, 30, \"div\", 10);\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-list\", 11);\n ɵngcc0.ɵɵlistener(\"pageChange\", function GridComponent_ng_template_6_Template_kendo_grid_list_pageChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r161); const ctx_r160 = ɵngcc0.ɵɵnextContext(); return ctx_r160.notifyPageChange(\"list\", $event); })(\"scrollBottom\", function GridComponent_ng_template_6_Template_kendo_grid_list_scrollBottom_1_listener() { ɵngcc0.ɵɵrestoreView(_r161); const ctx_r162 = ɵngcc0.ɵɵnextContext(); return ctx_r162.notifyScrollBottom(); })(\"contentScroll\", function GridComponent_ng_template_6_Template_kendo_grid_list_contentScroll_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r161); const ctx_r163 = ɵngcc0.ɵɵnextContext(); return ctx_r163.contentScroll.emit($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, GridComponent_ng_template_6_div_2_Template, 7, 18, \"div\", 12);\n} if (rf & 2) {\n const ctx_r146 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r146.hideHeader);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"data\", ctx_r146.view)(\"rowHeight\", ctx_r146.rowHeight)(\"detailRowHeight\", ctx_r146.detailRowHeight)(\"total\", ctx_r146.totalCount)(\"take\", ctx_r146.pageSize)(\"groups\", ctx_r146.group)(\"groupable\", ctx_r146.groupable)(\"skip\", ctx_r146.skip)(\"trackBy\", ctx_r146.trackBy)(\"columns\", ctx_r146.columnsContainer)(\"selectable\", ctx_r146.selectable)(\"filterable\", ctx_r146.filterable)(\"detailTemplate\", ctx_r146.detailTemplate)(\"noRecordsTemplate\", ctx_r146.noRecordsTemplate)(\"rowClass\", ctx_r146.rowClass)(\"loading\", ctx_r146.loading)(\"isVirtual\", ctx_r146.isVirtual)(\"virtualColumns\", ctx_r146.virtualColumns)(\"enableDrag\", ctx_r146.marqueeSelection);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r146.showFooter);\n} }\nfunction GridComponent_ng_template_7_thead_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"thead\", 39);\n} if (rf & 2) {\n const ctx_r164 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"resizable\", ctx_r164.resizable)(\"scrollable\", false)(\"columns\", ctx_r164.visibleColumns)(\"totalColumnLevels\", ctx_r164.totalColumnLevels)(\"groups\", ctx_r164.group)(\"groupable\", ctx_r164.showGroupPanel)(\"reorderable\", ctx_r164.reorderable)(\"sort\", ctx_r164.sort)(\"sortable\", ctx_r164.sortable)(\"filter\", ctx_r164.filter)(\"filterable\", ctx_r164.filterable)(\"columnMenu\", ctx_r164.columnMenuOptions)(\"columnMenuTemplate\", ctx_r164.columnMenuTemplate)(\"detailTemplate\", ctx_r164.detailTemplate);\n} }\nfunction GridComponent_ng_template_7_tfoot_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tfoot\", 40);\n} if (rf & 2) {\n const ctx_r165 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"scrollable\", false)(\"logicalRowIndex\", ctx_r165.ariaRowCount)(\"groups\", ctx_r165.group)(\"columns\", ctx_r165.leafColumns)(\"detailTemplate\", ctx_r165.detailTemplate);\n} }\nfunction GridComponent_ng_template_7_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 41);\n} }\nfunction GridComponent_ng_template_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"table\");\n ɵngcc0.ɵɵelement(1, \"colgroup\", 31);\n ɵngcc0.ɵɵtemplate(2, GridComponent_ng_template_7_thead_2_Template, 1, 14, \"thead\", 35);\n ɵngcc0.ɵɵelement(3, \"tbody\", 36);\n ɵngcc0.ɵɵtemplate(4, GridComponent_ng_template_7_tfoot_4_Template, 1, 5, \"tfoot\", 37);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(5, GridComponent_ng_template_7_div_5_Template, 1, 0, \"div\", 38);\n} if (rf & 2) {\n const ctx_r147 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"table-layout\", ctx_r147.resizable ? \"fixed\" : null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r147.leafColumns)(\"groups\", ctx_r147.group)(\"detailTemplate\", ctx_r147.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r147.hideHeader);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r147.group)(\"data\", ctx_r147.view)(\"skip\", ctx_r147.skip)(\"columns\", ctx_r147.leafColumns)(\"selectable\", ctx_r147.selectable)(\"filterable\", ctx_r147.filterable)(\"noRecordsTemplate\", ctx_r147.noRecordsTemplate)(\"detailTemplate\", ctx_r147.detailTemplate)(\"showGroupFooters\", ctx_r147.showGroupFooters)(\"trackBy\", ctx_r147.trackBy)(\"rowClass\", ctx_r147.rowClass)(\"enableDrag\", ctx_r147.marqueeSelection);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r147.showFooter);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r147.loading);\n} }\nfunction GridComponent_kendo_pager_8_Template(rf, ctx) { if (rf & 1) {\n const _r168 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-pager\", 42);\n ɵngcc0.ɵɵlistener(\"pageChange\", function GridComponent_kendo_pager_8_Template_kendo_pager_pageChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r168); const ctx_r167 = ɵngcc0.ɵɵnextContext(); return ctx_r167.notifyPageChange(\"pager\", $event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r148 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"template\", ctx_r148.pagerTemplate)(\"pageSize\", ctx_r148.pageSize)(\"total\", ctx_r148.view.total)(\"skip\", ctx_r148.skip)(\"options\", ctx_r148.pageable);\n} }\nfunction GridComponent_kendo_grid_toolbar_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-toolbar\", 43);\n} }\nconst _c118 = [\"container\"];\nconst _c119 = [\"lockedContainer\"];\nconst _c120 = [\"lockedTable\"];\nconst _c121 = [\"table\"];\nconst _c122 = function (a0, a1, a2, a3) { return { keydown: a0, scroll: a1, mousewheel: a2, DOMMouseScroll: a3 }; };\nfunction ListComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12, 13);\n ɵngcc0.ɵɵelementStart(2, \"div\", 3);\n ɵngcc0.ɵɵelementStart(3, \"table\", 14, 15);\n ɵngcc0.ɵɵelement(5, \"colgroup\", 6);\n ɵngcc0.ɵɵelement(6, \"tbody\", 16);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(7, \"kendo-resize-sensor\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"div\", 9);\n ɵngcc0.ɵɵelement(9, \"div\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r169 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r169.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction4(25, _c122, ctx_r169.lockedKeydown, ctx_r169.lockedScroll, ctx_r169.lockedMousewheel, ctx_r169.lockedMousewheel))(\"scope\", ctx_r169);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r169.lockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"locked\", true);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r169.groups)(\"columns\", ctx_r169.lockedLeafColumns)(\"detailTemplate\", ctx_r169.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"groups\", ctx_r169.groups)(\"isLocked\", true)(\"data\", ctx_r169.data)(\"noRecordsText\", \"\")(\"columns\", ctx_r169.lockedLeafColumns)(\"totalColumnsCount\", ctx_r169.leafColumns.length)(\"detailTemplate\", ctx_r169.detailTemplate)(\"showGroupFooters\", ctx_r169.showFooter)(\"skip\", ctx_r169.skip)(\"selectable\", ctx_r169.selectable)(\"trackBy\", ctx_r169.trackBy)(\"filterable\", ctx_r169.filterable)(\"rowClass\", ctx_r169.rowClass);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx_r169.totalHeight, \"px\");\n} }\nfunction ListComponent_kendo_resize_sensor_8_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-resize-sensor\");\n} }\nfunction ListComponent_kendo_resize_sensor_9_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-resize-sensor\");\n} }\nfunction ListComponent_div_12_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 17);\n ɵngcc0.ɵɵelement(1, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r174 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r174.totalWidth, \"px\");\n} }\nfunction ListComponent_div_13_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 18);\n} }\nconst _c123 = [\"kendoGridFilterRow\", \"\"];\nfunction FilterRowComponent_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 3);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-cell\", true);\n} }\nfunction FilterRowComponent_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 3);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-cell\", true);\n} }\nfunction FilterRowComponent_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 4);\n} if (rf & 2) {\n const column_r182 = ctx.$implicit;\n const columnIndex_r183 = ctx.index;\n const ctx_r180 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", column_r182)(\"filter\", ctx_r180.filter)(\"logicalRowIndex\", ctx_r180.logicalRowIndex)(\"logicalColIndex\", ctx_r180.lockedColumnsCount + columnIndex_r183);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r180.filterLabel);\n} }\nconst _c124 = [\"kendoGridFilterCell\", \"\"];\nfunction FilterCellComponent_ng_template_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementContainer(1, 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r185 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"column\", ctx_r185.column)(\"filter\", ctx_r185.filter);\n} }\nfunction FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template(rf, ctx) { }\nfunction FilterCellComponent_ng_template_0_ng_container_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellComponent_ng_template_0_ng_container_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 5);\n} if (rf & 2) {\n const ctx_r187 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r187.column.filterCellTemplateRef)(\"ngTemplateOutletContext\", ctx_r187.templateContext);\n} }\nfunction FilterCellComponent_ng_template_0_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, FilterCellComponent_ng_template_0_ng_container_2_1_Template, 1, 2, undefined, 4);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r186 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r186.column.filterCellTemplateRef);\n} }\nfunction FilterCellComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 1);\n ɵngcc0.ɵɵtemplate(1, FilterCellComponent_ng_template_0_ng_container_1_Template, 2, 2, \"ng-container\", 2);\n ɵngcc0.ɵɵtemplate(2, FilterCellComponent_ng_template_0_ng_container_2_Template, 2, 1, \"ng-container\", 2);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r184 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx_r184.hasTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n} }\nconst _c125 = [\"*\"];\nconst _c126 = [\"dropdown\"];\nconst _c127 = function () { return { width: \"auto\" }; };\nfunction FilterCellOperatorsComponent_kendo_dropdownlist_0_Template(rf, ctx) { if (rf & 1) {\n const _r192 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3, 4);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FilterCellOperatorsComponent_kendo_dropdownlist_0_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r192); const ctx_r191 = ɵngcc0.ɵɵnextContext(); return ctx_r191.onChange($event); })(\"keydown\", function FilterCellOperatorsComponent_kendo_dropdownlist_0_Template_kendo_dropdownlist_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r192); const ctx_r193 = ɵngcc0.ɵɵnextContext(); return ctx_r193.dropdownKeydown($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r189 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r189.operators)(\"value\", ctx_r189.value)(\"valuePrimitive\", true)(\"popupSettings\", ɵngcc0.ɵɵpureFunction0(4, _c127));\n} }\nconst _c128 = function (a0) { return { \"k-clear-button-visible\": a0 }; };\nconst _c129 = [\"kendoGridColGroup\", \"\"];\nfunction ColGroupComponent_ng_template_0_col_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-col\", true);\n} }\nfunction ColGroupComponent_ng_template_0_col_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-col\", true);\n} }\nfunction ColGroupComponent_ng_template_0_col_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"col\");\n} if (rf & 2) {\n const column_r199 = ctx.$implicit;\n ɵngcc0.ɵɵstyleProp(\"width\", column_r199.width, \"px\");\n} }\nfunction ColGroupComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColGroupComponent_ng_template_0_col_0_Template, 1, 2, \"col\", 1);\n ɵngcc0.ɵɵtemplate(1, ColGroupComponent_ng_template_0_col_1_Template, 1, 2, \"col\", 2);\n ɵngcc0.ɵɵtemplate(2, ColGroupComponent_ng_template_0_col_2_Template, 1, 2, \"col\", 3);\n} if (rf & 2) {\n const ctx_r194 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r194.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r194.detailTemplate == null ? null : ctx_r194.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r194.columnsToRender)(\"ngForTrackBy\", ctx_r194.trackBy);\n} }\nconst _c130 = [\"kendoGridLoading\", \"\"];\nfunction PagerComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 2);\n} if (rf & 2) {\n const ctx_r200 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r200.template.templateRef)(\"ngTemplateOutletContext\", ctx_r200.templateContext);\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-prev-buttons\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-numeric-buttons\", 5);\n} if (rf & 2) {\n const ctx_r203 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"buttonCount\", ctx_r203.settings.buttonCount);\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_input_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-input\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-next-buttons\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_info_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-info\");\n} }\nfunction PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-pager-page-sizes\", 6);\n} if (rf & 2) {\n const ctx_r207 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"pageSizes\", ctx_r207.settings.pageSizes);\n} }\nfunction PagerComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, PagerComponent_ng_container_1_kendo_pager_prev_buttons_1_Template, 1, 0, \"kendo-pager-prev-buttons\", 1);\n ɵngcc0.ɵɵtemplate(2, PagerComponent_ng_container_1_kendo_pager_numeric_buttons_2_Template, 1, 1, \"kendo-pager-numeric-buttons\", 3);\n ɵngcc0.ɵɵtemplate(3, PagerComponent_ng_container_1_kendo_pager_input_3_Template, 1, 0, \"kendo-pager-input\", 1);\n ɵngcc0.ɵɵtemplate(4, PagerComponent_ng_container_1_kendo_pager_next_buttons_4_Template, 1, 0, \"kendo-pager-next-buttons\", 1);\n ɵngcc0.ɵɵtemplate(5, PagerComponent_ng_container_1_kendo_pager_info_5_Template, 1, 0, \"kendo-pager-info\", 1);\n ɵngcc0.ɵɵtemplate(6, PagerComponent_ng_container_1_kendo_pager_page_sizes_6_Template, 1, 1, \"kendo-pager-page-sizes\", 4);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r201 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.previousNext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.type === \"numeric\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.type === \"input\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.previousNext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.info);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r201.settings.pageSizes);\n} }\nconst _c131 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"k-pager-first\": true }; };\nconst _c132 = function () { return { \"k-icon\": true, \"k-i-seek-w\": true }; };\nconst _c133 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"\": true }; };\nconst _c134 = function () { return { \"k-icon\": true, \"k-i-arrow-w\": true }; };\nconst _c135 = function () { return { \"k-icon\": true, \"k-i-arrow-e\": true }; };\nconst _c136 = function (a2) { return { \"k-link\": true, \"k-pager-nav\": true, \"k-state-disabled\": a2, \"k-pager-last\": true }; };\nconst _c137 = function () { return { \"k-icon\": true, \"k-i-seek-e\": true }; };\nfunction PagerNumericButtonsComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r212 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_1_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r212); const ctx_r211 = ɵngcc0.ɵɵnextContext(); return ctx_r211.changePage(ctx_r211.start - 2); });\n ɵngcc0.ɵɵtext(2, \"...\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r208 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r208.pageLabel(ctx_r208.start - 1));\n} }\nconst _c138 = function (a1) { return { \"k-link\": true, \"k-state-selected\": a1 }; };\nfunction PagerNumericButtonsComponent_li_2_Template(rf, ctx) { if (rf & 1) {\n const _r215 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 4);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_2_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r215); const num_r213 = ctx.$implicit; const ctx_r214 = ɵngcc0.ɵɵnextContext(); return ctx_r214.changePage(num_r213 - 1); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const num_r213 = ctx.$implicit;\n const ctx_r209 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c138, ctx_r209.currentPage == num_r213));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r209.pageLabel(num_r213));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", num_r213, \" \");\n} }\nfunction PagerNumericButtonsComponent_li_3_Template(rf, ctx) { if (rf & 1) {\n const _r217 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"a\", 3);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNumericButtonsComponent_li_3_Template_a_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r217); const ctx_r216 = ɵngcc0.ɵɵnextContext(); return ctx_r216.changePage(ctx_r216.end); });\n ɵngcc0.ɵɵtext(2, \"...\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r210 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r210.pageLabel(ctx_r210.end + 1));\n} }\nconst _c139 = function () { return { \"k-pager-numbers\": true, \"k-reset\": true }; };\nconst _c140 = function () { return { \"k-pager-input\": true, \"k-label\": true }; };\nconst _c141 = function (a0, a1) { return { keydown: a0, focusout: a1 }; };\nfunction PagerPageSizesComponent_option_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"option\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r219 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r219.pageSize);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r219.pageSize);\n} }\nfunction PagerPageSizesComponent_option_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"option\", 5);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const page_r221 = ctx.$implicit;\n const ctx_r220 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"value\", ctx_r220.getValue(page_r221))(\"selected\", ctx_r220.getSelectedState(page_r221));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", page_r221[\"text\"], \" \");\n} }\nconst _c142 = [\"kendoGridGroupHeader\", \"\"];\nfunction GroupHeaderComponent_ng_template_0_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 4);\n} }\nfunction GroupHeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupHeaderComponent_ng_template_0_td_0_Template, 1, 0, \"td\", 3);\n} if (rf & 2) {\n const ctx_r223 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r223.prefixGroupCell(ctx_r223.item));\n} }\nfunction GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const ctx_r229 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate2(\" \", ctx_r229.groupTitle(ctx_r229.item), \": \", ɵngcc0.ɵɵpipeBind3(1, 2, ctx_r229.item.data, \"value\", ctx_r229.formatForGroup(ctx_r229.item)), \" \");\n} }\nfunction GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template(rf, ctx) { }\nconst _c143 = function (a0, a1) { return { \"k-i-collapse\": a0, \"k-i-expand\": a1 }; };\nconst _c144 = function (a0, a1, a2, a3, a4, a5, a6, a7) { return { templateRef: a0, group: a1, aggregates: a2, value: a3, field: a4, index: a5, expanded: a6, $implicit: a7 }; };\nfunction GroupHeaderComponent_td_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r232 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function GroupHeaderComponent_td_1_ng_template_2_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r232); const ctx_r231 = ɵngcc0.ɵɵnextContext(2); return ctx_r231.toggleGroup(ctx_r231.item); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_td_1_ng_template_2_ng_template_1_Template, 2, 6, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_td_1_ng_template_2_ng_template_2_Template, 0, 0, \"ng-template\", 8);\n} if (rf & 2) {\n const ctx_r228 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction2(3, _c143, ctx_r228.isExpanded, !ctx_r228.isExpanded));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r228.groupHeaderTemplate(ctx_r228.item));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction8(6, _c144, ctx_r228.groupHeaderTemplate(ctx_r228.item), ctx_r228.item.data, ctx_r228.item.data == null ? null : ctx_r228.item.data.aggregates, ctx_r228.item.data == null ? null : ctx_r228.item.data.value, ctx_r228.item.data == null ? null : ctx_r228.item.data.field, ctx_r228.item.index, ctx_r228.isExpanded, ctx_r228.item.data));\n} }\nfunction GroupHeaderComponent_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 5);\n ɵngcc0.ɵɵelementStart(1, \"p\", 6);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_td_1_ng_template_2_Template, 3, 15, \"ng-template\", 0);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r224 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r224.logicalRowIndex)(\"logicalColIndex\", 0)(\"logicalSlaveCell\", ctx_r224.skipGroupDecoration)(\"groupItem\", ctx_r224.item)(\"colSpan\", ctx_r224.logicalColSpan());\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r224.groupSpan(ctx_r224.item))(\"role\", ctx_r224.ariaRole())(\"aria-expanded\", ctx_r224.isExpanded);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r224.skipGroupDecoration);\n} }\nconst _c145 = function (a0, a1, a2, a3, a4, a5) { return { group: a0, aggregates: a1, value: a2, field: a3, index: a4, $implicit: a5 }; };\nfunction GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 12);\n} if (rf & 2) {\n const column_r234 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r236 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", column_r234.groupHeaderColumnTemplateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction6(2, _c145, ctx_r236.item.data, ctx_r236.item.data == null ? null : ctx_r236.item.data.aggregates, ctx_r236.item.data == null ? null : ctx_r236.item.data.value, ctx_r236.item.data == null ? null : ctx_r236.item.data.field, ctx_r236.item.index, ctx_r236.item.data));\n} }\nfunction GroupHeaderComponent_ng_container_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 10);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_ng_container_2_td_1_ng_container_1_Template, 1, 9, \"ng-container\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r234 = ctx.$implicit;\n const index_r235 = ctx.index;\n const ctx_r233 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r233.logicalRowIndex)(\"logicalColIndex\", index_r235 + 1)(\"logicalSlaveCell\", false)(\"groupItem\", ctx_r233.item)(\"colSpan\", 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", column_r234.groupHeaderColumnTemplateRef);\n} }\nfunction GroupHeaderComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_ng_container_2_td_1_Template, 2, 6, \"td\", 9);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r225 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r225.groupHeaderColumns);\n} }\nconst _c146 = function () { return { lastTarget: true }; };\nfunction GroupPanelComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r238 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction0(2, _c146));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r238.text, \" \");\n} }\nconst _c147 = function (a0) { return { field: a0 }; };\nconst _c148 = function (a0, a2) { return { field: a0, type: \"groupIndicator\", hint: a2 }; };\nfunction GroupPanelComponent_div_1_Template(rf, ctx) { if (rf & 1) {\n const _r244 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵelementStart(1, \"div\", 4);\n ɵngcc0.ɵɵlistener(\"directionChange\", function GroupPanelComponent_div_1_Template_div_directionChange_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r244); const ctx_r243 = ɵngcc0.ɵɵnextContext(); return ctx_r243.directionChange($event); })(\"remove\", function GroupPanelComponent_div_1_Template_div_remove_1_listener($event) { ɵngcc0.ɵɵrestoreView(_r244); const ctx_r245 = ɵngcc0.ɵɵnextContext(); return ctx_r245.remove($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const group_r241 = ctx.$implicit;\n const index_r242 = ctx.index;\n const ctx_r239 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction1(5, _c147, group_r241.field));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"enableDrag\", true)(\"context\", ɵngcc0.ɵɵpureFunction2(7, _c148, group_r241.field, ctx_r239.groupTitles[index_r242]))(\"group\", group_r241)(\"groupTitle\", ctx_r239.groupTitles[index_r242]);\n} }\nfunction GroupPanelComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 3);\n ɵngcc0.ɵɵtext(1, \"\\u00A0\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"context\", ɵngcc0.ɵɵpureFunction0(1, _c146));\n} }\nconst _c149 = [\"kendoGroupIndicator\", \"\"];\nconst _c150 = [\"kendoGridHeader\", \"\"];\nfunction HeaderComponent_ng_template_0_tr_0_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"th\", 7);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_th_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"th\", 8);\n} if (rf & 2) {\n const levelIndex_r250 = ɵngcc0.ɵɵnextContext().index;\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r250)(\"logicalColIndex\", 0);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-filter-menu\", 15);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r261 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r256)(\"filter\", ctx_r261.filter);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-column-menu\", 16);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r262 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"standalone\", false)(\"settings\", ctx_r262.columnMenu)(\"column\", column_r256)(\"columnMenuTemplate\", ctx_r262.columnMenuTemplate)(\"sort\", ctx_r262.sort)(\"filter\", ctx_r262.filter)(\"sortable\", ctx_r262.sortable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(3).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r256.displayTitle);\n} }\nconst _c151 = function (a0, a1, a2, a3) { return { templateRef: a0, columnIndex: a1, column: a2, $implicit: a3 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_0_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(2, _c151, column_r256.headerTemplateRef, column_r256.leafIndex, column_r256, column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r256.headerTemplateRef);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(3).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r256.displayTitle);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 23);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r276 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r276.sortOrder(column_r256.field));\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n const _r281 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 18, 19);\n ɵngcc0.ɵɵlistener(\"click\", function HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template_span_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r281); const _r273 = ɵngcc0.ɵɵreference(1); const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit; const ctx_r279 = ɵngcc0.ɵɵnextContext(3); return ctx_r279.onSortClick(column_r256, $event, _r273); });\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_2_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_ng_template_3_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵelement(4, \"span\", 20);\n ɵngcc0.ɵɵtemplate(5, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_span_5_Template, 2, 1, \"span\", 21);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(6, \"span\", 22);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r264 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(6, _c151, column_r256.headerTemplateRef, column_r256.leafIndex, column_r256, column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r256.headerTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r264.sortIcon(column_r256.field));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx_r264.sortableLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r264.showSortNumbering(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"innerHtml\", ctx_r264.sortStatus(column_r256), ɵngcc0.ɵɵsanitizeHtml);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 24);\n ɵngcc0.ɵɵelement(1, \"label\", 25);\n} if (rf & 2) {\n const ctx_r265 = ɵngcc0.ɵɵnextContext(5);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r265.selectAllCheckboxId());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r265.selectAllCheckboxId());\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 26);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r266 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r256)(\"columns\", ctx_r266.columns);\n} }\nconst _c152 = function (a0, a2, a3, a4) { return { field: a0, type: \"column\", column: a2, hint: a3, lastColumn: a4 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template(rf, ctx) { if (rf & 1) {\n const _r286 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"th\", 11);\n ɵngcc0.ɵɵlistener(\"keydown\", function HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template_th_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r286); const column_r256 = ɵngcc0.ɵɵnextContext().$implicit; const ctx_r284 = ɵngcc0.ɵɵnextContext(3); return ctx_r284.onHeaderKeydown(column_r256, $event); });\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_filter_menu_1_Template, 1, 2, \"kendo-grid-filter-menu\", 12);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_kendo_grid_column_menu_2_Template, 1, 7, \"kendo-grid-column-menu\", 13);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_3_Template, 2, 7, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(4, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_4_Template, 7, 11, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(5, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_ng_template_5_Template, 2, 2, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(6, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_span_6_Template, 1, 2, \"span\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r287 = ɵngcc0.ɵɵnextContext();\n const column_r256 = ctx_r287.$implicit;\n const columnIndex_r257 = ctx_r287.index;\n const last_r258 = ctx_r287.last;\n const levelIndex_r250 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r259 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"k-filterable\", ctx_r259.showFilterMenu && ctx_r259.isFilterable(column_r256) || ctx_r259.showColumnMenu(column_r256))(\"k-first\", ctx_r259.isFirstOnRow(column_r256, columnIndex_r257));\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r250)(\"logicalColIndex\", ctx_r259.logicalColumnIndex(column_r256))(\"colSpan\", column_r256.colspan)(\"rowSpan\", column_r256.rowspan(ctx_r259.totalColumnLevels))(\"enableDrag\", ctx_r259.shouldActivate(column_r256))(\"context\", ɵngcc0.ɵɵpureFunction4(21, _c152, column_r256.field, column_r256, column_r256.title || column_r256.field, last_r258 && columnIndex_r257 === 0))(\"ngClass\", column_r256.headerClass)(\"ngStyle\", column_r256.headerStyle);\n ɵngcc0.ɵɵattribute(\"aria-sort\", ctx_r259.sortState(column_r256))(\"rowspan\", column_r256.rowspan(ctx_r259.totalColumnLevels))(\"colspan\", column_r256.colspan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r259.showFilterMenu && ctx_r259.isFilterable(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r259.showColumnMenu(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r259.isSortable(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r259.isSortable(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r259.isCheckboxColumn(column_r256) && !column_r256.headerTemplateRef && column_r256.showSelectAll);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r259.resizable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-column-menu\", 29);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r289 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"standalone\", false)(\"settings\", ctx_r289.columnMenu)(\"column\", column_r256)(\"columnMenuTemplate\", ctx_r289.columnMenuTemplate);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template(rf, ctx) { }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n ɵngcc0.ɵɵtextInterpolate(column_r256.displayTitle);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 26);\n} if (rf & 2) {\n const column_r256 = ɵngcc0.ɵɵnextContext(2).$implicit;\n const ctx_r292 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"column\", column_r256)(\"columns\", ctx_r292.columns);\n} }\nconst _c153 = function (a1, a2, a3) { return { type: \"columnGroup\", column: a1, hint: a2, lastColumn: a3 }; };\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"th\", 27);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_kendo_grid_column_menu_1_Template, 1, 4, \"kendo-grid-column-menu\", 28);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_2_Template, 0, 0, \"ng-template\", 17);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_ng_template_3_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(4, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_span_4_Template, 1, 2, \"span\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r296 = ɵngcc0.ɵɵnextContext();\n const column_r256 = ctx_r296.$implicit;\n const columnIndex_r257 = ctx_r296.index;\n const last_r258 = ctx_r296.last;\n const levelIndex_r250 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r260 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"k-first\", ctx_r260.isFirstOnRow(column_r256, columnIndex_r257))(\"k-filterable\", ctx_r260.showColumnMenu(column_r256));\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r250)(\"logicalColIndex\", ctx_r260.logicalColumnIndex(column_r256))(\"rowSpan\", column_r256.rowspan(ctx_r260.totalColumnLevels))(\"colSpan\", column_r256.colspan)(\"enableDrag\", ctx_r260.shouldActivate(column_r256))(\"context\", ɵngcc0.ɵɵpureFunction3(18, _c153, column_r256, column_r256.title, last_r258 && columnIndex_r257 === 0))(\"ngClass\", column_r256.headerClass)(\"ngStyle\", column_r256.headerStyle);\n ɵngcc0.ɵɵattribute(\"rowspan\", column_r256.rowspan(ctx_r260.totalColumnLevels))(\"colspan\", column_r256.colspan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r260.showColumnMenu(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(22, _c151, column_r256.headerTemplateRef, ctx_r260.lockedColumnsCount + columnIndex_r257, column_r256, column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !column_r256.headerTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r260.resizable);\n} }\nfunction HeaderComponent_ng_template_0_tr_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_0_Template, 7, 26, \"th\", 9);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_ng_template_3_th_1_Template, 5, 27, \"th\", 10);\n} if (rf & 2) {\n const column_r256 = ctx.$implicit;\n const ctx_r253 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r253.isColumnGroupComponent(column_r256));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r253.isColumnGroupComponent(column_r256));\n} }\nfunction HeaderComponent_ng_template_0_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 3);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_0_th_1_Template, 1, 0, \"th\", 4);\n ɵngcc0.ɵɵtemplate(2, HeaderComponent_ng_template_0_tr_0_th_2_Template, 1, 2, \"th\", 5);\n ɵngcc0.ɵɵtemplate(3, HeaderComponent_ng_template_0_tr_0_ng_template_3_Template, 2, 2, \"ng-template\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const levelIndex_r250 = ctx.index;\n const ctx_r247 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", levelIndex_r250)(\"logicalSlaveRow\", ctx_r247.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r247.columns.length)(\"logicalSlaveCellsCount\", ctx_r247.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r247.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r247.detailTemplate == null ? null : ctx_r247.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r247.columnsForLevel(levelIndex_r250))(\"ngForTrackBy\", ctx_r247.trackByIndex);\n} }\nfunction HeaderComponent_ng_template_0_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tr\", 30);\n} if (rf & 2) {\n const ctx_r248 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r248.leafColumns)(\"filter\", ctx_r248.filter)(\"groups\", ctx_r248.groups)(\"detailTemplate\", ctx_r248.detailTemplate)(\"lockedColumnsCount\", ctx_r248.lockedColumnsCount)(\"logicalRowIndex\", ctx_r248.totalColumnLevels + 1)(\"logicalSlaveRow\", ctx_r248.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r248.columns.length)(\"logicalSlaveCellsCount\", ctx_r248.unlockedColumnsCount);\n} }\nfunction HeaderComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_tr_0_Template, 4, 8, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(1, HeaderComponent_ng_template_0_tr_1_Template, 1, 9, \"tr\", 2);\n} if (rf & 2) {\n const ctx_r246 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r246.columnLevels);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r246.showFilterRow);\n} }\nfunction FilterMenuComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r302 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-container\", 4);\n ɵngcc0.ɵɵlistener(\"close\", function FilterMenuComponent_ng_template_3_Template_kendo_grid_filter_menu_container_close_0_listener() { ɵngcc0.ɵɵrestoreView(_r302); const ctx_r301 = ɵngcc0.ɵɵnextContext(); return ctx_r301.close(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r300 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", ctx_r300.column)(\"filter\", ctx_r300.filter);\n} }\nconst _c154 = function (a1) { return { \"k-grid-filter\": true, \"k-state-active\": a1 }; };\nfunction FilterMenuContainerComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementContainer(1, 7);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r304 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterService\", ctx_r304.childService)(\"column\", ctx_r304.column)(\"filter\", ctx_r304.childFilter);\n} }\nfunction FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template(rf, ctx) { }\nfunction FilterMenuContainerComponent_ng_container_4_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterMenuContainerComponent_ng_container_4_1_ng_template_0_Template, 0, 0, \"ng-template\", 9);\n} if (rf & 2) {\n const ctx_r306 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r306.column.filterMenuTemplateRef)(\"ngTemplateOutletContext\", ctx_r306.templateContext);\n} }\nfunction FilterMenuContainerComponent_ng_container_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, FilterMenuContainerComponent_ng_container_4_1_Template, 1, 2, undefined, 8);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r305 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r305.column.filterMenuTemplateRef);\n} }\nfunction StringFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r311 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function StringFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r311); const ctx_r310 = ɵngcc0.ɵɵnextContext(); return ctx_r310.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r308 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r308.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r308.filter == null ? null : ctx_r308.filter.logic);\n} }\nfunction StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-string-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r309 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r309.operators)(\"currentFilter\", ctx_r309.secondFilter)(\"filterService\", ctx_r309.filterService)(\"column\", ctx_r309.column)(\"filter\", ctx_r309.filter);\n} }\nfunction NumericFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r315 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function NumericFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r315); const ctx_r314 = ɵngcc0.ɵɵnextContext(); return ctx_r314.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r312 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r312.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r312.filter == null ? null : ctx_r312.filter.logic);\n} }\nfunction NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-numeric-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r313 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r313.operators)(\"currentFilter\", ctx_r313.secondFilter)(\"filterService\", ctx_r313.filterService)(\"column\", ctx_r313.column)(\"filter\", ctx_r313.filter)(\"format\", ctx_r313.format)(\"decimals\", ctx_r313.decimals)(\"spinners\", ctx_r313.spinners)(\"min\", ctx_r313.min)(\"max\", ctx_r313.max)(\"step\", ctx_r313.step);\n} }\nfunction DateFilterMenuComponent_kendo_dropdownlist_1_Template(rf, ctx) { if (rf & 1) {\n const _r319 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 3);\n ɵngcc0.ɵɵlistener(\"valueChange\", function DateFilterMenuComponent_kendo_dropdownlist_1_Template_kendo_dropdownlist_valueChange_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r319); const ctx_r318 = ɵngcc0.ɵɵnextContext(); return ctx_r318.logicChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r316 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"data\", ctx_r316.logicOperators)(\"valuePrimitive\", true)(\"value\", ctx_r316.filter == null ? null : ctx_r316.filter.logic);\n} }\nfunction DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-date-filter-menu-input\", 4);\n} if (rf & 2) {\n const ctx_r317 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"operators\", ctx_r317.operators)(\"currentFilter\", ctx_r317.secondFilter)(\"filterService\", ctx_r317.filterService)(\"column\", ctx_r317.column)(\"filter\", ctx_r317.filter)(\"activeView\", ctx_r317.activeView)(\"bottomView\", ctx_r317.bottomView)(\"topView\", ctx_r317.topView)(\"format\", ctx_r317.format)(\"formatPlaceholder\", ctx_r317.formatPlaceholder)(\"placeholder\", ctx_r317.placeholder)(\"min\", ctx_r317.min)(\"max\", ctx_r317.max)(\"weekNumber\", ctx_r317.weekNumber);\n} }\nfunction BooleanFilterMenuComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n const _r323 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\");\n ɵngcc0.ɵɵelementStart(1, \"input\", 2);\n ɵngcc0.ɵɵlistener(\"change\", function BooleanFilterMenuComponent_li_1_Template_input_change_1_listener() { ɵngcc0.ɵɵrestoreView(_r323); const item_r321 = ctx.$implicit; const ctx_r322 = ɵngcc0.ɵɵnextContext(); return ctx_r322.onChange(item_r321.value); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"label\", 3);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r321 = ctx.$implicit;\n const ctx_r320 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"name\", ctx_r320.idPrefix)(\"checked\", ctx_r320.isSelected(item_r321.value));\n ɵngcc0.ɵɵattribute(\"id\", ctx_r320.radioId(item_r321.value));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r320.radioId(item_r321.value));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(item_r321.text);\n} }\nfunction ColumnListComponent_label_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"label\", 3);\n ɵngcc0.ɵɵelement(1, \"input\", 4);\n ɵngcc0.ɵɵelementStart(2, \"span\", 5);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r328 = ctx.$implicit;\n const index_r329 = ctx.index;\n const ctx_r326 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"checked\", !column_r328.hidden)(\"disabled\", ctx_r326.isDisabled(column_r328));\n ɵngcc0.ɵɵattribute(\"data-index\", index_r329);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(column_r328.displayTitle);\n} }\nfunction ColumnListComponent_div_2_Template(rf, ctx) { if (rf & 1) {\n const _r331 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 6);\n ɵngcc0.ɵɵelementStart(1, \"button\", 7);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnListComponent_div_2_Template_button_click_1_listener() { ɵngcc0.ɵɵrestoreView(_r331); const ctx_r330 = ɵngcc0.ɵɵnextContext(); return ctx_r330.cancelChanges(); });\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"button\", 8);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnListComponent_div_2_Template_button_click_3_listener() { ɵngcc0.ɵɵrestoreView(_r331); const ctx_r332 = ɵngcc0.ɵɵnextContext(); return ctx_r332.applyChanges(); });\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r327 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r327.actionsClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r327.resetText);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r327.applyText);\n} }\nfunction ColumnChooserComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n const _r337 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"span\", 4);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"kendo-grid-columnlist\", 5);\n ɵngcc0.ɵɵlistener(\"apply\", function ColumnChooserComponent_ng_template_3_Template_kendo_grid_columnlist_apply_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r337); const ctx_r336 = ɵngcc0.ɵɵnextContext(); return ctx_r336.onApply($event); })(\"columnChange\", function ColumnChooserComponent_ng_template_3_Template_kendo_grid_columnlist_columnChange_2_listener($event) { ɵngcc0.ɵɵrestoreView(_r337); const ctx_r338 = ɵngcc0.ɵɵnextContext(); return ctx_r338.onChange($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r335 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r335.localization.get(\"columns\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r335.columns)(\"applyText\", ctx_r335.localization.get(\"columnsApply\"))(\"resetText\", ctx_r335.localization.get(\"columnsReset\"))(\"autoSync\", ctx_r335.autoSync)(\"allowHideAll\", ctx_r335.allowHideAll);\n} }\nfunction ColumnMenuChooserComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n const _r342 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnlist\", 2);\n ɵngcc0.ɵɵlistener(\"apply\", function ColumnMenuChooserComponent_ng_template_1_Template_kendo_grid_columnlist_apply_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r342); const ctx_r341 = ɵngcc0.ɵɵnextContext(); return ctx_r341.onApply($event); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r340 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"applyText\", ctx_r340.localization.get(\"columnsApply\"))(\"resetText\", ctx_r340.localization.get(\"columnsReset\"))(\"columns\", ctx_r340.columns)(\"autoSync\", false)(\"allowHideAll\", false)(\"actionsClass\", ctx_r340.actionsClass);\n} }\nfunction ColumnMenuFilterComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n const _r345 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-container\", 2);\n ɵngcc0.ɵɵlistener(\"close\", function ColumnMenuFilterComponent_ng_template_1_Template_kendo_grid_filter_menu_container_close_0_listener() { ɵngcc0.ɵɵrestoreView(_r345); const ctx_r344 = ɵngcc0.ɵɵnextContext(); return ctx_r344.close(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r343 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"column\", ctx_r343.service.column)(\"filter\", ctx_r343.service.filter)(\"actionsClass\", ctx_r343.actionsClass);\n} }\nfunction ColumnMenuItemComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 3);\n} if (rf & 2) {\n const ctx_r346 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r346.iconClass);\n} }\nfunction ColumnMenuItemComponent_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 4);\n ɵngcc0.ɵɵelementContainer(1, 5);\n ɵngcc0.ɵɵelement(2, \"div\");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r347 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@state\", ctx_r347.contentState);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r347.contentTemplate.templateRef);\n} }\nconst _c155 = function (a0, a1) { return { service: a0, column: a1 }; };\nfunction ColumnMenuComponent_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0, 5);\n} if (rf & 2) {\n const ctx_r350 = ɵngcc0.ɵɵnextContext();\n const _r351 = ɵngcc0.ɵɵreference(6);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r350.column.columnMenuTemplateRef || ctx_r350.columnMenuTemplate || _r351)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c155, ctx_r350.service, ctx_r350.column));\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-columnmenu-sort\", 8);\n} if (rf & 2) {\n const ctx_r353 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r353.service);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-columnmenu-lock\", 8);\n} if (rf & 2) {\n const ctx_r354 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r354.service);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template(rf, ctx) { if (rf & 1) {\n const _r358 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-chooser\", 9);\n ɵngcc0.ɵɵlistener(\"expand\", function ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template_kendo_grid_columnmenu_chooser_expand_0_listener() { ɵngcc0.ɵɵrestoreView(_r358); const ctx_r357 = ɵngcc0.ɵɵnextContext(2); return ctx_r357.onColumnsExpand(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r355 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r355.service)(\"expanded\", ctx_r355.expandedColumns);\n} }\nfunction ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template(rf, ctx) { if (rf & 1) {\n const _r360 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-filter\", 9);\n ɵngcc0.ɵɵlistener(\"expand\", function ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template_kendo_grid_columnmenu_filter_expand_0_listener() { ɵngcc0.ɵɵrestoreView(_r360); const ctx_r359 = ɵngcc0.ɵɵnextContext(2); return ctx_r359.onFilterExpand(); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r356 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"service\", ctx_r356.service)(\"expanded\", ctx_r356.expandedFilter);\n} }\nfunction ColumnMenuComponent_ng_template_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_sort_0_Template, 1, 1, \"kendo-grid-columnmenu-sort\", 6);\n ɵngcc0.ɵɵtemplate(1, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_lock_1_Template, 1, 1, \"kendo-grid-columnmenu-lock\", 6);\n ɵngcc0.ɵɵtemplate(2, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_chooser_2_Template, 1, 2, \"kendo-grid-columnmenu-chooser\", 7);\n ɵngcc0.ɵɵtemplate(3, ColumnMenuComponent_ng_template_5_kendo_grid_columnmenu_filter_3_Template, 1, 2, \"kendo-grid-columnmenu-filter\", 7);\n} if (rf & 2) {\n const ctx_r352 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r352.hasSort);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r352.hasLock);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r352.hasColumnChooser);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r352.hasFilter);\n} }\nconst _c156 = function (a0) { return { \"k-state-active\": a0 }; };\nconst _c157 = [\"kendoGridTableBody\", \"\"];\nfunction TableBodyComponent_ng_template_0_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 7);\n} }\nfunction TableBodyComponent_ng_template_0_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_0_ng_template_1_td_0_Template, 1, 0, \"td\", 6);\n} if (rf & 2) {\n const ctx_r365 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r365.groups);\n} }\nfunction TableBodyComponent_ng_template_0_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 8);\n} if (rf & 2) {\n const ctx_r366 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r366.addRowLogicalIndex())(\"logicalColIndex\", 0);\n} }\nfunction TableBodyComponent_ng_template_0_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 9);\n} if (rf & 2) {\n const column_r370 = ctx.$implicit;\n const columnIndex_r371 = ctx.index;\n const ctx_r367 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"rowIndex\", 0 - 1)(\"columnIndex\", ctx_r367.lockedColumnsCount + columnIndex_r371)(\"isNew\", true)(\"column\", column_r370)(\"dataItem\", ctx_r367.newDataItem)(\"ngClass\", column_r370.cssClass)(\"ngStyle\", column_r370.style)(\"logicalRowIndex\", ctx_r367.addRowLogicalIndex())(\"logicalColIndex\", ctx_r367.logicalColIndex(column_r370))(\"colSpan\", column_r370.colspan);\n ɵngcc0.ɵɵattribute(\"colspan\", column_r370.colspan);\n} }\nfunction TableBodyComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 3);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_0_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_0_td_2_Template, 1, 2, \"td\", 4);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_0_td_3_Template, 1, 11, \"td\", 5);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r362 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r362.addRowLogicalIndex())(\"logicalSlaveRow\", ctx_r362.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r362.columns.length)(\"logicalSlaveCellsCount\", ctx_r362.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r362.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r362.detailTemplate == null ? null : ctx_r362.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r362.columns)(\"ngForTrackBy\", ctx_r362.trackByColumns);\n} }\nfunction TableBodyComponent_tr_1_ng_template_2_Template(rf, ctx) { }\nfunction TableBodyComponent_tr_1_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r373 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx_r373.noRecordsText, \" \");\n} }\nconst _c158 = function (a0) { return { templateRef: a0 }; };\nfunction TableBodyComponent_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 10);\n ɵngcc0.ɵɵelementStart(1, \"td\");\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_tr_1_ng_template_2_Template, 0, 0, \"ng-template\", 11);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_tr_1_ng_container_3_Template, 2, 1, \"ng-container\", 12);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r363 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r363.colSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r363.noRecordsTemplate == null ? null : ctx_r363.noRecordsTemplate.templateRef)(\"templateContext\", ɵngcc0.ɵɵpureFunction1(4, _c158, ctx_r363.noRecordsTemplate == null ? null : ctx_r363.noRecordsTemplate.templateRef));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx_r363.noRecordsTemplate == null ? null : ctx_r363.noRecordsTemplate.templateRef));\n} }\nfunction TableBodyComponent_ng_template_2_tr_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"tr\", 17);\n} if (rf & 2) {\n const ctx_r380 = ɵngcc0.ɵɵnextContext();\n const item_r374 = ctx_r380.$implicit;\n const rowIndex_r375 = ctx_r380.index;\n const ctx_r376 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"columns\", ctx_r376.columns)(\"groups\", ctx_r376.groups)(\"item\", item_r374)(\"hasDetails\", ctx_r376.detailTemplate == null ? null : ctx_r376.detailTemplate.templateRef)(\"skipGroupDecoration\", ctx_r376.skipGroupDecoration)(\"hasGroupHeaderColumn\", ctx_r376.hasGroupHeaderColumn)(\"groupHeaderColumns\", ctx_r376.groupHeaderColumns)(\"rowIndex\", rowIndex_r375 + 1)(\"totalColumnsCount\", ctx_r376.totalColumnsCount)(\"logicalRowIndex\", ctx_r376.logicalRowIndex(rowIndex_r375))(\"logicalSlaveRow\", ctx_r376.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r376.columns.length)(\"logicalSlaveCellsCount\", ctx_r376.groupHeaderSlaveCellsCount);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 7);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_1_ng_template_1_td_0_Template, 1, 0, \"td\", 6);\n} if (rf & 2) {\n const ctx_r381 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r381.groups);\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template(rf, ctx) { if (rf & 1) {\n const _r389 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 23);\n ɵngcc0.ɵɵlistener(\"click\", function TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r389); const item_r374 = ɵngcc0.ɵɵnextContext(3).$implicit; const ctx_r387 = ɵngcc0.ɵɵnextContext(); return ctx_r387.toggleRow(item_r374.index, item_r374.data); });\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r374 = ɵngcc0.ɵɵnextContext(3).$implicit;\n const ctx_r386 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r386.detailButtonStyles(item_r374));\n ɵngcc0.ɵɵattribute(\"title\", ctx_r386.detailButtonTitle(item_r374));\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 21);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_td_2_a_1_Template, 1, 2, \"a\", 22);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r391 = ɵngcc0.ɵɵnextContext(2);\n const rowIndex_r375 = ctx_r391.index;\n const item_r374 = ctx_r391.$implicit;\n const ctx_r382 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r382.logicalRowIndex(rowIndex_r375))(\"logicalColIndex\", 0)(\"dataRowIndex\", item_r374.index)(\"dataItem\", item_r374.data)(\"detailExpandCell\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r382.detailTemplate.showIf(item_r374.data, item_r374.index));\n} }\nfunction TableBodyComponent_ng_template_2_tr_1_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 24);\n} if (rf & 2) {\n const column_r392 = ctx.$implicit;\n const columnIndex_r393 = ctx.index;\n const ctx_r394 = ɵngcc0.ɵɵnextContext(2);\n const item_r374 = ctx_r394.$implicit;\n const rowIndex_r375 = ctx_r394.index;\n const ctx_r383 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx_r383.isSelectable() && ctx_r383.selectable.drag ? \"none\" : \"auto\");\n ɵngcc0.ɵɵclassProp(\"k-grid-edit-cell\", ctx_r383.isEditingCell(item_r374.index, column_r392))(\"k-state-selected\", ctx_r383.isSelectable && ctx_r383.cellSelectionService.isCellSelected(item_r374, column_r392));\n ɵngcc0.ɵɵproperty(\"rowIndex\", item_r374.index)(\"columnIndex\", ctx_r383.lockedColumnsCount + columnIndex_r393)(\"column\", column_r392)(\"dataItem\", item_r374.data)(\"logicalRowIndex\", ctx_r383.logicalRowIndex(rowIndex_r375))(\"logicalColIndex\", ctx_r383.logicalColIndex(column_r392))(\"dataRowIndex\", item_r374.index)(\"dataItem\", item_r374.data)(\"colIndex\", columnIndex_r393)(\"colSpan\", column_r392.colspan)(\"ngClass\", column_r392.cssClass)(\"ngStyle\", column_r392.style);\n ɵngcc0.ɵɵattribute(\"data-kendo-grid-column-index\", ctx_r383.lockedColumnsCount + columnIndex_r393)(\"aria-selected\", ctx_r383.isSelectable() ? ctx_r383.isAriaSelected(item_r374, column_r392) : undefined)(\"colspan\", column_r392.colspan);\n} }\nconst _c159 = function (a0, a1) { return { dataItem: a0, index: a1 }; };\nfunction TableBodyComponent_ng_template_2_tr_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 18);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_1_td_2_Template, 2, 6, \"td\", 19);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_1_td_3_Template, 1, 21, \"td\", 20);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r395 = ɵngcc0.ɵɵnextContext();\n const item_r374 = ctx_r395.$implicit;\n const rowIndex_r375 = ctx_r395.index;\n const ctx_r377 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-alt\", ctx_r377.isOdd(item_r374))(\"k-master-row\", ctx_r377.detailTemplate == null ? null : ctx_r377.detailTemplate.templateRef)(\"k-grid-edit-row\", ctx_r377.isEditingRow(item_r374.index))(\"k-state-selected\", ctx_r377.isSelectable() && ctx_r377.isRowSelected(item_r374));\n ɵngcc0.ɵɵproperty(\"dataRowIndex\", item_r374.index)(\"dataItem\", item_r374.data)(\"logicalRowIndex\", ctx_r377.logicalRowIndex(rowIndex_r375))(\"logicalSlaveRow\", ctx_r377.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r377.columns.length)(\"logicalSlaveCellsCount\", ctx_r377.unlockedColumnsCount)(\"ngClass\", ctx_r377.rowClass(ɵngcc0.ɵɵpureFunction2(20, _c159, item_r374.data, item_r374.index)));\n ɵngcc0.ɵɵattribute(\"data-kendo-grid-item-index\", item_r374.index);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r377.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r377.detailTemplate == null ? null : ctx_r377.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r377.columns)(\"ngForTrackBy\", ctx_r377.trackByColumns);\n} }\nfunction TableBodyComponent_ng_template_2_tr_2_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 30);\n} }\nfunction TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template(rf, ctx) { }\nconst _c160 = function (a0, a1, a2) { return { dataItem: a0, rowIndex: a1, $implicit: a2 }; };\nfunction TableBodyComponent_ng_template_2_tr_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 25);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_2_td_1_Template, 1, 0, \"td\", 26);\n ɵngcc0.ɵɵelement(2, \"td\", 27);\n ɵngcc0.ɵɵelementStart(3, \"td\", 28);\n ɵngcc0.ɵɵtemplate(4, TableBodyComponent_ng_template_2_tr_2_ng_template_4_Template, 0, 0, \"ng-template\", 29);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r399 = ɵngcc0.ɵɵnextContext();\n const item_r374 = ctx_r399.$implicit;\n const rowIndex_r375 = ctx_r399.index;\n const ctx_r378 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-alt\", ctx_r378.isOdd(item_r374));\n ɵngcc0.ɵɵproperty(\"dataRowIndex\", item_r374.index)(\"dataItem\", item_r374.data)(\"logicalRowIndex\", ctx_r378.logicalRowIndex(rowIndex_r375) + 1)(\"logicalSlaveRow\", false)(\"logicalCellsCount\", 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r378.groups);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r378.logicalRowIndex(rowIndex_r375) + 1)(\"logicalColIndex\", 0)(\"dataRowIndex\", item_r374.index)(\"dataItem\", item_r374.data)(\"colIndex\", 0)(\"colSpan\", ctx_r378.allColumnsSpan + 1);\n ɵngcc0.ɵɵattribute(\"colspan\", ctx_r378.columnsSpan);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r378.detailTemplate.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction3(17, _c160, item_r374.data, item_r374.index, item_r374.data));\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 30);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_3_ng_template_1_td_0_Template, 1, 0, \"td\", 26);\n} if (rf & 2) {\n const ctx_r400 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r400.groups);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 8);\n} if (rf & 2) {\n const rowIndex_r375 = ɵngcc0.ɵɵnextContext(2).index;\n const ctx_r401 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r401.logicalRowIndex(rowIndex_r375))(\"logicalColIndex\", 0);\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template(rf, ctx) { }\nconst _c161 = function (a0, a1, a2, a3, a4, a5) { return { templateRef: a0, group: a1, field: a2, column: a3, aggregates: a4, $implicit: a5 }; };\nfunction TableBodyComponent_ng_template_2_tr_3_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 33);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_3_td_3_ng_template_1_Template, 0, 0, \"ng-template\", 34);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r406 = ctx.$implicit;\n const ctx_r409 = ɵngcc0.ɵɵnextContext(2);\n const rowIndex_r375 = ctx_r409.index;\n const item_r374 = ctx_r409.$implicit;\n const ctx_r402 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r402.logicalRowIndex(rowIndex_r375))(\"logicalColIndex\", ctx_r402.logicalColIndex(column_r406));\n ɵngcc0.ɵɵattribute(\"data-skip\", ctx_r402.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction6(4, _c161, column_r406.groupFooterTemplateRef, item_r374.data, column_r406.field, column_r406, item_r374.data == null ? null : item_r374.data.aggregates, item_r374.data == null ? null : item_r374.data.aggregates));\n} }\nfunction TableBodyComponent_ng_template_2_tr_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 31);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_3_ng_template_1_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_3_td_2_Template, 1, 2, \"td\", 4);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_3_td_3_Template, 2, 11, \"td\", 32);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const rowIndex_r375 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r379 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r379.logicalRowIndex(rowIndex_r375))(\"logicalSlaveRow\", ctx_r379.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r379.columns.length)(\"logicalSlaveCellsCount\", ctx_r379.unlockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r379.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r379.detailTemplate == null ? null : ctx_r379.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r379.footerColumns)(\"ngForTrackBy\", ctx_r379.trackByColumns);\n} }\nfunction TableBodyComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_2_tr_0_Template, 1, 13, \"tr\", 13);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_ng_template_2_tr_1_Template, 4, 23, \"tr\", 14);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_tr_2_Template, 5, 21, \"tr\", 15);\n ɵngcc0.ɵɵtemplate(3, TableBodyComponent_ng_template_2_tr_3_Template, 4, 8, \"tr\", 16);\n} if (rf & 2) {\n const item_r374 = ctx.$implicit;\n const ctx_r364 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r364.isGroup(item_r374) && ctx_r364.isParentGroupExpanded(item_r374) && ctx_r364.showGroupHeader(item_r374));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r364.isDataItem(item_r374) && ctx_r364.isInExpandedGroup(item_r374));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r364.isDataItem(item_r374) && ctx_r364.isInExpandedGroup(item_r374) && (ctx_r364.detailTemplate == null ? null : ctx_r364.detailTemplate.templateRef) && ctx_r364.detailTemplate.showIf(item_r374.data, item_r374.index) && ctx_r364.isExpanded(item_r374));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r364.isFooter(item_r374) && (ctx_r364.isInExpandedGroup(item_r374) || ctx_r364.showGroupFooters && ctx_r364.isParentGroupExpanded(item_r374)) && !item_r374.data.hideFooter);\n} }\nconst _c162 = [\"kendoGridCell\", \"\"];\nfunction CellComponent_ng_container_1_ng_template_1_Template(rf, ctx) { }\nfunction CellComponent_ng_container_1_ng_template_2_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const childColumn_r418 = ctx.$implicit;\n const ctx_r417 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ɵngcc0.ɵɵpipeBind3(1, 1, ctx_r417.dataItem, childColumn_r418.field, childColumn_r418.format), \" \");\n} }\nfunction CellComponent_ng_container_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CellComponent_ng_container_1_ng_template_2_ng_template_0_Template, 2, 5, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r414 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r414.childColumns);\n} }\nfunction CellComponent_ng_container_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n ɵngcc0.ɵɵpipe(1, \"valueOf\");\n} if (rf & 2) {\n const ctx_r415 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵtextInterpolate(ɵngcc0.ɵɵpipeBind3(1, 1, ctx_r415.dataItem, ctx_r415.column.field, ctx_r415.column.format));\n} }\nfunction CellComponent_ng_container_1_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 5);\n ɵngcc0.ɵɵelement(1, \"label\", 6);\n} if (rf & 2) {\n const ctx_r416 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"kendoGridSelectionCheckbox\", ctx_r416.rowIndex);\n ɵngcc0.ɵɵattribute(\"id\", ctx_r416.selectionCheckboxId);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"for\", ctx_r416.selectionCheckboxId);\n} }\nfunction CellComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_1_ng_template_1_Template, 0, 0, \"ng-template\", 2);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_1_ng_template_2_Template, 1, 1, \"ng-template\", 3);\n ɵngcc0.ɵɵtemplate(3, CellComponent_ng_container_1_ng_template_3_Template, 2, 5, \"ng-template\", 3);\n ɵngcc0.ɵɵtemplate(4, CellComponent_ng_container_1_ng_template_4_Template, 2, 3, \"ng-template\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r411 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r411.column.templateRef)(\"ngTemplateOutlet\", ctx_r411.column.templateRef)(\"ngTemplateOutletContext\", ctx_r411.templateContext);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r411.isSpanColumn);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r411.isBoundColumn);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r411.isCheckboxColumn && !ctx_r411.isNew);\n} }\nfunction CellComponent_ng_container_2_1_ng_template_0_Template(rf, ctx) { }\nfunction CellComponent_ng_container_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CellComponent_ng_container_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 9);\n} if (rf & 2) {\n const ctx_r419 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r419.column.editTemplateRef)(\"ngTemplateOutletContext\", ctx_r419.editTemplateContext);\n} }\nfunction CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-numerictextbox\", 13);\n} if (rf & 2) {\n const ctx_r422 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"format\", ctx_r422.format)(\"formControl\", ctx_r422.formGroup.get(ctx_r422.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-datepicker\", 13);\n} if (rf & 2) {\n const ctx_r423 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"format\", ctx_r423.format)(\"formControl\", ctx_r423.formGroup.get(ctx_r423.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_input_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 14);\n} if (rf & 2) {\n const ctx_r424 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"formControl\", ctx_r424.formGroup.get(ctx_r424.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_input_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"input\", 15);\n} if (rf & 2) {\n const ctx_r425 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"formControl\", ctx_r425.formGroup.get(ctx_r425.column.field));\n} }\nfunction CellComponent_ng_container_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_2_ng_container_2_kendo_numerictextbox_1_Template, 1, 2, \"kendo-numerictextbox\", 10);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_ng_container_2_kendo_datepicker_2_Template, 1, 2, \"kendo-datepicker\", 10);\n ɵngcc0.ɵɵtemplate(3, CellComponent_ng_container_2_ng_container_2_input_3_Template, 1, 1, \"input\", 11);\n ɵngcc0.ɵɵtemplate(4, CellComponent_ng_container_2_ng_container_2_input_4_Template, 1, 1, \"input\", 12);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r420 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx_r420.column.editor);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"numeric\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"date\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", \"boolean\");\n} }\nfunction CellComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_2_1_Template, 1, 2, undefined, 7);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_ng_container_2_Template, 5, 4, \"ng-container\", 8);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r412 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r412.column.editTemplateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r412.column.editTemplateRef);\n} }\nconst _c163 = [\"kendoGridFooter\", \"\"];\nfunction FooterComponent_ng_template_0_td_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 5);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-cell\", true);\n} }\nfunction FooterComponent_ng_template_0_td_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"td\", 5);\n} if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-hierarchy-cell\", true);\n} }\nfunction FooterComponent_ng_template_0_td_3_ng_template_1_Template(rf, ctx) { }\nfunction FooterComponent_ng_template_0_td_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"td\", 6);\n ɵngcc0.ɵɵtemplate(1, FooterComponent_ng_template_0_td_3_ng_template_1_Template, 0, 0, \"ng-template\", 7);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const column_r431 = ctx.$implicit;\n const columnIndex_r432 = ctx.index;\n const ctx_r429 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r429.logicalRowIndex)(\"logicalColIndex\", ctx_r429.logicalColumnIndex(column_r431))(\"ngClass\", column_r431.footerClass)(\"ngStyle\", column_r431.footerStyle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"templateContext\", ɵngcc0.ɵɵpureFunction4(5, _c151, column_r431.footerTemplateRef, ctx_r429.lockedColumnsCount + columnIndex_r432, column_r431, column_r431));\n} }\nfunction FooterComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(1, FooterComponent_ng_template_0_td_1_Template, 1, 2, \"td\", 2);\n ɵngcc0.ɵɵtemplate(2, FooterComponent_ng_template_0_td_2_Template, 1, 2, \"td\", 3);\n ɵngcc0.ɵɵtemplate(3, FooterComponent_ng_template_0_td_3_Template, 2, 10, \"td\", 4);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r426 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-footer-template\", true);\n ɵngcc0.ɵɵproperty(\"logicalRowIndex\", ctx_r426.logicalRowIndex)(\"logicalSlaveRow\", ctx_r426.lockedColumnsCount > 0)(\"logicalCellsCount\", ctx_r426.columns.length)(\"logicalSlaveCellsCount\", ctx_r426.columns.length - ctx_r426.lockedColumnsCount);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r426.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r426.detailTemplate == null ? null : ctx_r426.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r426.columnsToRender);\n} }\nfunction ToolbarComponent_0_ng_template_0_Template(rf, ctx) { }\nfunction ToolbarComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolbarComponent_0_ng_template_0_Template, 0, 0, \"ng-template\", 1);\n} if (rf & 2) {\n const ctx_r434 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r434.toolbarTemplateRef)(\"ngTemplateOutletContext\", ctx_r434.context);\n} }\nclass DomEventsService {\n constructor() {\n this.cellClick = new EventEmitter();\n this.cellMousedown = new EventEmitter();\n this.cellMouseup = new EventEmitter();\n this.click = new EventEmitter();\n this.keydown = new EventEmitter();\n this.focus = new EventEmitter();\n this.focusIn = new EventEmitter();\n this.focusOut = new EventEmitter();\n this.windowBlur = new EventEmitter();\n }\n}\nDomEventsService.ɵfac = function DomEventsService_Factory(t) { return new (t || DomEventsService)(); };\nDomEventsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DomEventsService, factory: DomEventsService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DomEventsService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst EMPTY_REGEX = /^\\s*$/;\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n/**\n * @hidden\n */\nconst isBlank = (value) => value === null || value === undefined;\n/**\n * @hidden\n */\nconst isArray = (value) => Array.isArray(value);\n/**\n * @hidden\n */\nconst isTruthy = (value) => !!value;\n/**\n * @hidden\n */\nconst isNullOrEmptyString = (value) => isBlank(value) || EMPTY_REGEX.test(value);\n/**\n * @hidden\n */\nconst observe = (list) => merge(of(list), list.changes);\n/**\n * @hidden\n */\nconst isUniversal = () => typeof document === 'undefined';\n/**\n * @hidden\n */\nconst isString = (value) => typeof value === 'string';\n/**\n * @hidden\n */\nconst isNumber = (value) => typeof value === \"number\" && !isNaN(value);\n/**\n * @hidden\n */\nconst extractFormat = (format) => {\n if (isString(format) && !isNullOrEmptyString(format) && format.startsWith('{0:')) {\n return format.slice(3, format.length - 1);\n }\n return format;\n};\n/**\n * @hidden\n */\nconst not = (fn) => (...args) => !fn.apply(null, args);\n/**\n * @hidden\n */\nconst or = (...conditions) => (value) => conditions.reduce((acc, x) => acc || x(value), false);\n/**\n * @hidden\n */\nconst and = (...conditions) => (value) => conditions.reduce((acc, x) => acc && x(value), true);\n/**\n * @hidden\n */\nconst Skip = new InjectionToken(\"Skip\"); // tslint:disable-line:variable-name\n/**\n * @hidden\n */\nconst createPromise = () => {\n let resolveFn, rejectFn;\n const promise = new Promise((resolve, reject) => {\n resolveFn = (data) => {\n resolve(data);\n return promise;\n };\n rejectFn = (data) => {\n reject(data);\n return promise;\n };\n });\n promise.resolve = resolveFn;\n promise.reject = rejectFn;\n return promise;\n};\n/** @hidden */\nconst iterator = getIterator();\n// TODO: Move to kendo-common\nfunction getIterator() {\n if (typeof Symbol === 'function' && Symbol.iterator) {\n return Symbol.iterator;\n }\n const keys = Object.getOwnPropertyNames(Map.prototype);\n const proto = Map.prototype;\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (key !== 'entries' && key !== 'size' && proto[key] === proto.entries) {\n return key;\n }\n }\n}\nconst FRAME_DURATION = 1000 / 60;\nconst wnd = typeof window !== 'undefined' ? window : {};\n/** @hidden */\nconst requestAnimationFrame = wnd.requestAnimationFrame || wnd.msRequestAnimationFrame || (callback => setTimeout(callback, FRAME_DURATION));\n/** @hidden */\nconst cancelAnimationFrame = wnd.cancelAnimationFrame || wnd.msCancelRequestAnimationFrame || clearTimeout;\n/**\n * @hidden\n */\nconst detectIE = () => {\n if (!isDocumentAvailable()) {\n return;\n }\n const ua = window.navigator.userAgent;\n const msie = ua.indexOf('MSIE ');\n const trident = ua.indexOf('Trident/');\n return msie > 0 || trident > 0;\n};\n\n/**\n * @hidden\n */\nclass LocalDataChangesService {\n constructor() {\n this.changes = new EventEmitter();\n }\n}\nLocalDataChangesService.ɵfac = function LocalDataChangesService_Factory(t) { return new (t || LocalDataChangesService)(); };\nLocalDataChangesService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: LocalDataChangesService, factory: LocalDataChangesService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalDataChangesService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass FocusRoot {\n constructor() {\n this.groups = new Set();\n }\n registerGroup(group) {\n if (this.alive) {\n this.groups.add(group);\n }\n }\n unregisterGroup(group) {\n if (this.alive) {\n this.groups.delete(group);\n }\n }\n activate() {\n if (this.alive) {\n this.groups.forEach(f => f.activate());\n }\n }\n deactivate() {\n if (this.alive) {\n this.groups.forEach(f => f.deactivate());\n }\n }\n}\nFocusRoot.ɵfac = function FocusRoot_Factory(t) { return new (t || FocusRoot)(); };\nFocusRoot.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusRoot, factory: FocusRoot.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusRoot, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst NODE_NAME_PREDICATES = {};\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst hasClasses = (element, classNames) => {\n const namesList = toClassList(classNames);\n return Boolean(toClassList(element.className).find((className) => namesList.indexOf(className) >= 0));\n};\n/**\n * @hidden\n */\nconst matchesClasses = (classNames) => (element) => hasClasses(element, classNames);\n/**\n * @hidden\n */\nconst matchesNodeName = (nodeName) => {\n if (!NODE_NAME_PREDICATES[nodeName]) {\n NODE_NAME_PREDICATES[nodeName] = (element) => String(element.nodeName).toLowerCase() === nodeName.toLowerCase();\n }\n return NODE_NAME_PREDICATES[nodeName];\n};\n/**\n * @hidden\n */\nconst closest = (node, predicate) => {\n while (node && !predicate(node)) {\n node = node.parentNode;\n }\n return node;\n};\n/**\n * @hidden\n */\nconst closestInScope = (node, predicate, scope) => {\n while (node && node !== scope && !predicate(node)) {\n node = node.parentNode;\n }\n if (node !== scope) {\n return node;\n }\n};\n/**\n * @hidden\n */\nconst contains = (parent, node, matchSelf = false) => {\n const outside = !closest(node, (child) => child === parent);\n if (outside) {\n return false;\n }\n const el = closest(node, (child) => child === node);\n return el && (matchSelf || el !== parent);\n};\n/**\n * @hidden\n */\nconst isVisible = (element) => {\n const rect = element.getBoundingClientRect();\n const hasSize = rect.width > 0 && rect.height > 0;\n const hasPosition = rect.x !== 0 && rect.y !== 0;\n // Elements can have zero size due to styling, but they will still count as visible.\n // For example, the selection checkbox has no size, but is made visible through styling.\n return (hasSize || hasPosition) && window.getComputedStyle(element).visibility !== 'hidden';\n};\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (!element.tagName) {\n return false;\n }\n const tagName = element.tagName.toLowerCase();\n const hasTabIndex = Boolean(element.getAttribute('tabIndex'));\n const focusable = !element.disabled && focusableRegex.test(tagName);\n return focusable || hasTabIndex;\n};\n/**\n * @hidden\n */\nconst isFocusableWithTabKey = (element, checkVisibility = true) => {\n if (!isFocusable(element)) {\n return false;\n }\n const tabIndex = element.getAttribute('tabIndex');\n const visible = !checkVisibility || isVisible(element);\n return visible && tabIndex !== '-1';\n};\n/**\n * @hidden\n */\nconst findElement = (node, predicate, matchSelf = true) => {\n if (!node) {\n return;\n }\n if (matchSelf && predicate(node)) {\n return node;\n }\n node = node.firstChild;\n while (node) {\n if (node.nodeType === 1) {\n const element = findElement(node, predicate);\n if (element) {\n return element;\n }\n }\n node = node.nextSibling;\n }\n};\n/**\n * @hidden\n */\nconst findFocusable = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility));\n};\n/**\n * @hidden\n */\nconst findFocusableChild = (element, checkVisibility = true) => {\n return findElement(element, (node) => isFocusableWithTabKey(node, checkVisibility), false);\n};\n/**\n * @hidden\n */\nfunction rtlScrollPosition(position, element, initial) {\n let result = position;\n if (initial < 0) {\n result = -position;\n }\n else if (initial > 0) {\n result = element.scrollWidth - element.offsetWidth - position;\n }\n return result;\n}\n\nconst isButton = matchesNodeName('button');\nconst isInputTag = matchesNodeName('input');\nconst navigableRegex = /(button|checkbox|color|file|radio|reset|submit)/i;\nconst isNavigableInput = element => isInputTag(element) && navigableRegex.test(element.type);\nconst isNavigable = element => !element.disabled && (isButton(element) || isNavigableInput(element));\n/**\n * @hidden\n */\nclass DefaultFocusableElement {\n constructor(host, renderer) {\n this.renderer = renderer;\n this.element = host.nativeElement;\n this.focusable = findFocusable(this.element, false) || this.element;\n }\n get enabled() {\n return this.focusable && !this.focusable.disabled;\n }\n get visible() {\n return this.focusable && isVisible(this.focusable);\n }\n isNavigable() {\n return this.canFocus() && isNavigable(this.element);\n }\n toggle(active) {\n this.renderer.setAttribute(this.focusable, 'tabIndex', active ? '0' : '-1');\n }\n focus() {\n if (this.focusable) {\n this.focusable.focus();\n }\n }\n canFocus() {\n return this.visible && this.enabled;\n }\n hasFocus() {\n return document.activeElement !== this.element && closest(document.activeElement, e => e === this.element);\n }\n}\n\n/**\n * @hidden\n */\nconst CELL_CONTEXT = new InjectionToken('grid-cell-context');\n/**\n * @hidden\n */\nconst EMPTY_CELL_CONTEXT = {};\n\n/**\n * A directive that controls the way focusable elements receive\n * [focus in a navigable Grid]({% slug keyboard_navigation_grid %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public readonly data: any = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }];\n * }\n * ```\n */\nclass FocusableDirective {\n constructor(cellContext, hostElement, renderer) {\n this.cellContext = cellContext;\n this.hostElement = hostElement;\n this.renderer = renderer;\n this.active = true;\n if (this.cellContext) {\n this.group = this.cellContext.focusGroup;\n }\n if (this.group) {\n this.group.registerElement(this);\n }\n }\n ngAfterViewInit() {\n if (!this.element) {\n this.element = new DefaultFocusableElement(this.hostElement, this.renderer);\n }\n if (this.group) {\n const isActive = this.group.isActive;\n this.toggle(isActive);\n }\n }\n ngOnDestroy() {\n if (this.group) {\n this.group.unregisterElement(this);\n }\n }\n /**\n * @hidden\n */\n toggle(active) {\n if (this.element && active !== this.active) {\n this.active = active;\n this.element.toggle(active);\n }\n }\n /**\n * @hidden\n */\n canFocus() {\n return this.element && this.element.canFocus();\n }\n /**\n * @hidden\n */\n isNavigable() {\n return this.element && this.element.isNavigable();\n }\n /**\n * @hidden\n */\n focus() {\n if (this.element) {\n this.element.focus();\n }\n }\n /**\n * @hidden\n */\n hasFocus() {\n return this.element && this.element.hasFocus();\n }\n /**\n * @hidden\n */\n registerElement(element) {\n this.element = element;\n }\n}\nFocusableDirective.ɵfac = function FocusableDirective_Factory(t) { return new (t || FocusableDirective)(ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 12), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nFocusableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FocusableDirective, selectors: [[\"\", \"kendoGridFocusable\", \"\"], [\"\", \"kendoGridEditCommand\", \"\"], [\"\", \"kendoGridRemoveCommand\", \"\"], [\"\", \"kendoGridSaveCommand\", \"\"], [\"\", \"kendoGridCancelCommand\", \"\"], [\"\", \"kendoGridSelectionCheckbox\", \"\"]] });\n/** @nocollapse */\nFocusableDirective.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }, { type: SkipSelf }] },\n { type: ElementRef },\n { type: Renderer2 }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusableDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFocusable]' + `,\n [kendoGridEditCommand],\n [kendoGridRemoveCommand],\n [kendoGridSaveCommand],\n [kendoGridCancelCommand],\n [kendoGridSelectionCheckbox]\n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }, {\n type: SkipSelf\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, null); })();\n\n/**\n * @hidden\n */\nclass GridFocusableElement {\n constructor(navigationService) {\n this.navigationService = navigationService;\n }\n focus() {\n this.navigationService.focusCell();\n }\n toggle(active) {\n this.navigationService.toggle(active);\n }\n canFocus() {\n return true;\n }\n hasFocus() {\n return this.navigationService.hasFocus();\n }\n isNavigable() {\n return false;\n }\n}\n\n/**\n * @hidden\n */\nclass NavigationCursor {\n constructor(model) {\n this.model = model;\n this.changes = new Subject();\n this.activeRow = 0;\n this.activeCol = 0;\n this.virtualCol = 0;\n this.virtualRow = 0;\n }\n get row() {\n return this.model.findRow(this.activeRow);\n }\n get cell() {\n const row = this.row;\n if (row) {\n return this.model.findCell(this.activeCol, row);\n }\n }\n get dataRowIndex() {\n const row = this.row;\n if (row) {\n return row.dataRowIndex;\n }\n return -1;\n }\n /**\n * Assumes and announces a new cursor position.\n */\n reset(rowIndex = this.activeRow, colIndex = this.activeCol, force = true) {\n if (this.activate(rowIndex, colIndex, force)) {\n this.virtualRow = rowIndex;\n this.virtualCol = colIndex;\n }\n }\n activate(rowIndex, colIndex, force) {\n if (!force && this.isActiveRange(rowIndex, colIndex)) {\n return false;\n }\n const prevColIndex = this.activeCol;\n const prevRowIndex = this.activeRow;\n this.activeCol = colIndex;\n this.activeRow = rowIndex;\n this.changes.next({\n colIndex,\n prevColIndex,\n prevRowIndex,\n rowIndex\n });\n return true;\n }\n isActiveRange(rowIndex, colIndex) {\n if (this.activeRow !== rowIndex) {\n return false;\n }\n const cell = this.cell;\n const { start, end } = this.model.cellRange(cell);\n return !Boolean(cell) || (start <= colIndex && colIndex <= end);\n }\n /**\n * Assumes a new cursor position without announcing it.\n */\n assume(rowIndex = this.activeRow, colIndex = this.activeCol) {\n this.virtualRow = rowIndex;\n this.virtualCol = colIndex;\n this.activeCol = colIndex;\n this.activeRow = rowIndex;\n }\n /**\n * Announces a current cursor position to subscribers.\n */\n announce() {\n this.changes.next({\n colIndex: this.activeCol,\n prevColIndex: this.activeCol,\n prevRowIndex: this.activeRow,\n rowIndex: this.activeRow\n });\n }\n activateVirtualCell(cell) {\n const rowRange = this.model.rowRange(cell);\n const cellRange = this.model.cellRange(cell);\n const activeCol = this.activeCol;\n const activeRow = this.activeRow;\n if (rowRange.start <= activeRow && activeRow <= rowRange.end &&\n cellRange.start <= activeCol && activeCol <= cellRange.end) {\n this.activeRow = cell.rowIndex;\n this.activeCol = cell.colIndex;\n return true;\n }\n }\n isActive(rowIndex, colIndex) {\n return this.activeCol === colIndex && this.activeRow === rowIndex;\n }\n moveUp(offset = 1) {\n return this.offsetRow(-offset);\n }\n moveDown(offset = 1) {\n return this.offsetRow(offset);\n }\n moveLeft(offset = 1) {\n return this.offsetCol(-offset);\n }\n moveRight(offset = 1) {\n return this.offsetCol(offset);\n }\n lastCellIndex(row) {\n return this.metadata.columns.leafColumnsToRender.length - 1 +\n (this.metadata.hasDetailTemplate && (!row || !row.groupItem) ? 1 : 0);\n }\n offsetCol(offset) {\n const prevRow = this.model.findRow(this.virtualRow);\n const lastIndex = this.lastCellIndex(prevRow);\n const virtualCol = this.virtualCol;\n this.virtualCol = Math.max(0, Math.min(virtualCol + offset, lastIndex));\n let nextColIndex = this.virtualCol;\n let nextRowIndex = this.virtualRow;\n let cell = this.model.findCell(this.virtualCol, prevRow);\n if (!cell && this.metadata.virtualColumns) {\n return this.activate(nextRowIndex, nextColIndex);\n }\n if (cell.colSpan > 1 && cell.colIndex <= virtualCol && virtualCol < cell.colIndex + cell.colSpan) {\n nextColIndex = offset > 0 ? Math.min(cell.colIndex + cell.colSpan, lastIndex) : Math.max(0, cell.colIndex + offset);\n const nextCell = this.model.findCell(nextColIndex, prevRow);\n if (cell !== nextCell) {\n cell = nextCell;\n this.virtualCol = cell.colIndex;\n }\n else {\n this.virtualCol = virtualCol;\n }\n }\n return this.activate(cell.rowIndex, cell.colIndex);\n }\n offsetRow(offset) {\n let nextColIndex = this.virtualCol;\n if (this.metadata && this.metadata.isVirtual) {\n const maxIndex = this.metadata.maxLogicalRowIndex;\n let nextIndex = Math.max(0, Math.min(this.activeRow + offset, maxIndex));\n if (this.metadata.hasDetailTemplate && !this.model.findRow(nextIndex)) {\n nextIndex = offset > 0 ? nextIndex + 1 : nextIndex - 1;\n nextIndex = Math.max(0, Math.min(nextIndex, maxIndex));\n }\n if (this.metadata.hasDetailTemplate && nextIndex === maxIndex) {\n if (this.model.lastRow.index !== maxIndex) {\n // Don't attempt to navigate past the last collapsed row.\n nextIndex--;\n }\n }\n const nextRow = this.model.findRow(nextIndex);\n if (nextRow) {\n // remove duplication\n let cell = this.model.findCell(this.virtualCol, nextRow);\n if (cell.rowIndex <= this.virtualRow && offset > 0 && cell.rowSpan > 1) {\n cell = this.model.findCell(this.virtualCol, this.model.findRow(cell.rowIndex + cell.rowSpan - 1 + offset));\n }\n nextIndex = cell.rowIndex;\n nextColIndex = cell.colIndex;\n }\n this.virtualRow = nextIndex;\n return this.activate(nextIndex, nextColIndex);\n }\n const nextRow = this.model.findRow(this.virtualRow + offset) || this.model.nextRow(this.virtualRow, offset);\n if (!nextRow) {\n return false;\n }\n let cell = this.model.findCell(this.virtualCol, nextRow);\n if (cell && cell.rowIndex <= this.virtualRow && offset > 0 && cell.rowSpan > 1) { // spanned cell go to next\n const nextPos = cell.rowIndex + cell.rowSpan - 1 + offset;\n cell = this.model.findCell(this.virtualCol, this.model.findRow(nextPos));\n }\n if (!cell && this.metadata.virtualColumns) {\n return this.activate(this.virtualRow + offset, this.virtualCol);\n }\n this.virtualRow = cell.rowIndex;\n return this.activate(this.virtualRow, cell.colIndex);\n }\n}\n\n/**\n * @hidden\n */\nclass ItemMap {\n constructor() {\n this.count = 0;\n this.items = {};\n }\n get first() {\n if (this.count > 0) {\n let result;\n this.forEach(item => {\n result = item;\n return true;\n });\n return result;\n }\n }\n get last() {\n if (this.count > 0) {\n const keys = Object.keys(this.items);\n return this.items[keys[keys.length - 1]];\n }\n }\n removeItem(key) {\n if (this.items[key]) {\n delete this.items[key];\n this.count--;\n }\n }\n setItem(key, item) {\n if (!this.items[key]) {\n this.count++;\n }\n this.items[key] = item;\n }\n getItem(key) {\n return this.items[key];\n }\n toArray() {\n const result = [];\n this.forEach(item => {\n result.push(item);\n });\n return result;\n }\n forEach(callback) {\n for (let key in this.items) {\n if (this.items.hasOwnProperty(key) && callback(this.items[key])) {\n return this.items[key];\n }\n }\n }\n find(callback) {\n return this.forEach(callback);\n }\n}\n\n/**\n * @hidden\n *\n * Contains information for the currently rendered rows and cells.\n */\nclass NavigationModel {\n constructor() {\n this.rows = new ItemMap();\n }\n get firstRow() {\n return this.rows.first;\n }\n get lastRow() {\n return this.rows.last;\n }\n registerCell(cell) {\n const row = this.rows.getItem(cell.logicalRowIndex);\n if (!row) {\n return;\n }\n const colIndex = cell.logicalColIndex;\n const modelCell = {\n uid: cell.uid,\n colIndex,\n rowIndex: row.index,\n colSpan: cell.colSpan,\n rowSpan: cell.rowSpan,\n detailExpandCell: cell.detailExpandCell,\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex,\n focusGroup: cell.focusGroup\n };\n row.cells.setItem(colIndex, modelCell);\n if (cell.groupItem) {\n row.groupItem = cell.groupItem;\n }\n return modelCell;\n }\n unregisterCell(index, rowIndex, cell) {\n const row = this.rows.getItem(rowIndex);\n if (row) {\n const match = row.cells.getItem(index);\n if (match && match.uid === cell.uid) {\n row.cells.removeItem(index);\n }\n }\n }\n registerRow(row) {\n const modelRow = {\n uid: row.uid,\n index: row.logicalRowIndex,\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex,\n cells: new ItemMap()\n };\n this.rows.setItem(row.logicalRowIndex, modelRow);\n }\n updateRow(row) {\n const current = this.rows.getItem(row.logicalRowIndex);\n if (current) {\n Object.assign(current, {\n dataItem: row.dataItem,\n dataRowIndex: row.dataRowIndex\n });\n }\n }\n unregisterRow(index, row) {\n const match = this.rows.getItem(index);\n if (match && match.uid === row.uid) {\n this.rows.removeItem(index);\n }\n }\n cellRange(cell) {\n if (cell) {\n const start = cell.colIndex;\n const end = cell.colIndex + (cell.colSpan || 1) - 1;\n return {\n start,\n end\n };\n }\n return {};\n }\n rowRange(cell) {\n if (cell) {\n const start = cell.rowIndex;\n const end = cell.rowIndex + (cell.rowSpan || 1) - 1;\n return {\n start,\n end\n };\n }\n return {};\n }\n nextRow(rowIndex, offset) {\n const rows = this.rows.toArray();\n const row = this.rows.getItem(rowIndex);\n const position = rows.indexOf(row);\n const next = rows[position + offset];\n return next;\n }\n findRow(index) {\n return this.rows.getItem(index);\n }\n findCell(index, row) {\n if (!row) {\n return;\n }\n const rowIndex = row.index;\n let cell = row.cells.getItem(index);\n let currentIndex = rowIndex;\n while (!cell && row) {\n row = this.rows.getItem(currentIndex);\n cell = this.rowCell(index, row);\n currentIndex--;\n }\n if (cell && rowIndex <= row.index + (cell.rowSpan || 1) - 1) {\n return cell;\n }\n }\n rowCell(index, row) {\n if (!row || !row.cells.count) {\n return;\n }\n const firstCell = row.cells.first;\n let cell, currentIndex = index;\n while (!cell && currentIndex >= firstCell.colIndex) {\n cell = row.cells.getItem(currentIndex);\n currentIndex--;\n }\n if (cell && index <= cell.colIndex + (cell.colSpan || 1) - 1) {\n return cell;\n }\n }\n}\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n constructor() {\n this.prevented = false;\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the `cellClose` event.\n */\nclass CellCloseEvent extends PreventableEvent {\n constructor(options) {\n super();\n /**\n * @hidden\n */\n this.action = 'cellClose';\n Object.assign(this, options);\n }\n}\n\n/**\n * @hidden\n */\nconst isEqual = (index) => (item) => item.index === index;\n/**\n * @hidden\n */\nconst isNotEqual = (index) => (item) => item.index !== index;\n/**\n * @hidden\n */\nconst isNewRow = (index) => index === -1 || index === undefined;\n/**\n * @hidden\n */\nclass EditService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new EventEmitter();\n this.editedIndices = [];\n this.keepEditCell = false;\n this.closingCell = false;\n this.changedSource = new Subject();\n this.changed = this.changedSource.asObservable().pipe(switchMap(() => this.ngZone.onStable.asObservable().pipe(take(1))));\n }\n editRow(index, group = undefined) {\n this.editedIndices.push({ index, group });\n this.onChanged();\n }\n addRow(group) {\n this.newItemGroup = { group };\n this.onChanged();\n }\n editCell(rowIndex, column, group) {\n if (isNewRow(rowIndex) || column.editable === false || !(column.editTemplate || column.field)) {\n return;\n }\n this.preventCellClose();\n if (!this.closeCell()) {\n this.editRow(rowIndex, group);\n this.column = column;\n this.onChanged();\n }\n }\n isEditing() {\n return this.editedIndices.length > 0;\n }\n isEditingCell() {\n return this.isEditing() && this.column !== undefined;\n }\n get hasNewItem() {\n return isPresent(this.newItemGroup);\n }\n get newDataItem() {\n if (this.hasNewItem) {\n return this.newItemGroup.group.value;\n }\n return {};\n }\n close(index) {\n if (isNewRow(index)) {\n this.newItemGroup = undefined;\n return;\n }\n this.editedIndices = this.editedIndices.filter(isNotEqual(index));\n delete this.column;\n this.onChanged();\n }\n closeCell(originalEvent) {\n if (this.column && !this.closingCell) {\n return this.ngZone.run(() => {\n const { index, group } = this.editedIndices[0];\n const args = new CellCloseEvent({\n column: this.column,\n formGroup: group,\n originalEvent: originalEvent,\n rowIndex: index\n });\n this.closingCell = true;\n this.changes.emit(args);\n this.closingCell = false;\n if (!args.isDefaultPrevented()) {\n this.cancelCell();\n }\n return args.isDefaultPrevented();\n });\n }\n }\n cancelCell() {\n if (this.column) {\n this.editedIndices = [];\n delete this.column;\n this.onChanged();\n }\n }\n shouldCloseCell() {\n return this.column && !this.keepEditCell;\n }\n preventCellClose() {\n this.ngZone.runOutsideAngular(() => {\n window.clearTimeout(this.keepCellTimeout);\n this.keepEditCell = true;\n this.keepCellTimeout = window.setTimeout(() => {\n this.keepEditCell = false;\n }, 0); // tslint:disable-line:align\n });\n }\n context(index) {\n if (isNewRow(index)) {\n return this.newItemGroup;\n }\n return this.findByIndex(index);\n }\n columnContext(index, column) {\n if (isNewRow(index)) {\n return this.newItemGroup;\n }\n if (!this.column || column === this.column) {\n return this.findByIndex(index);\n }\n }\n isEdited(index) {\n if (isNewRow(index) && isPresent(this.newItemGroup)) {\n return true;\n }\n return !this.column && isPresent(this.findByIndex(index));\n }\n hasEdited(index) {\n return isPresent(this.context(index));\n }\n isEditedColumn(index, column) {\n if (this.column && this.column === column) {\n return isPresent(this.findByIndex(index));\n }\n return false;\n }\n beginEdit(rowIndex) {\n this.changes.emit({ action: 'edit', rowIndex });\n }\n beginAdd() {\n this.changes.emit({ action: 'add' });\n }\n endEdit(rowIndex) {\n const { group: formGroup } = this.context(rowIndex);\n this.changes.emit({ action: 'cancel', rowIndex, formGroup, isNew: isNewRow(rowIndex) });\n }\n save(rowIndex) {\n const { group: formGroup } = this.context(rowIndex);\n this.changes.emit({ action: 'save', rowIndex, formGroup, isNew: isNewRow(rowIndex) });\n }\n remove(rowIndex) {\n this.changes.emit({ action: 'remove', rowIndex });\n }\n findByIndex(index) {\n return this.editedIndices.find(isEqual(index));\n }\n onChanged() {\n this.ngZone.runOutsideAngular(() => {\n this.changedSource.next();\n });\n }\n}\nEditService.ɵfac = function EditService_Factory(t) { return new (t || EditService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nEditService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: EditService, factory: EditService.ɵfac });\n/** @nocollapse */\nEditService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ExpandStateService {\n constructor(isInitiallyCollapsed) {\n this.isInitiallyCollapsed = isInitiallyCollapsed;\n this.changes = new Subject();\n this.rowState = new Set();\n }\n toggleRow(index, dataItem) {\n const found = this.rowState.has(index);\n const expand = !this.isInitiallyCollapsed ? found : !found;\n const prevented = this.emitEvent({ dataItem, expand, index });\n if (prevented) {\n return;\n }\n if (found) {\n this.rowState.delete(index);\n }\n else {\n this.rowState.add(index);\n }\n }\n isExpanded(index) {\n const found = this.rowState.has(index);\n return this.isInitiallyCollapsed ? found : !found;\n }\n reset() {\n this.rowState.clear();\n }\n emitEvent(args) {\n this.changes.next(args);\n return false;\n }\n}\n\nconst removeLast = groupIndex => groupIndex.lastIndexOf(\"_\") > -1\n ? groupIndex.slice(0, groupIndex.lastIndexOf(\"_\"))\n : \"\";\nconst isChildIndex = (targetIndex, parentIndex) => parentIndex !== targetIndex && targetIndex.startsWith(parentIndex);\n/**\n * @hidden\n */\nclass GroupsService extends ExpandStateService {\n constructor(isCollapsed = false) {\n super(isCollapsed);\n }\n isInExpandedGroup(groupIndex, skipSelf = true) {\n if (skipSelf) {\n groupIndex = removeLast(groupIndex);\n }\n let expanded = true;\n while (groupIndex && expanded) {\n expanded = this.isExpanded(groupIndex);\n groupIndex = removeLast(groupIndex);\n }\n return expanded;\n }\n expandChildren(parentIndex) {\n this.rowState.forEach(index => isChildIndex(index, parentIndex) && this.rowState.delete(index));\n }\n}\nGroupsService.ɵfac = function GroupsService_Factory(t) { return new (t || GroupsService)(ɵngcc0.ɵɵinject(Skip, 8)); };\nGroupsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: GroupsService, factory: GroupsService.ɵfac });\n/** @nocollapse */\nGroupsService.ctorParameters = () => [\n { type: Boolean, decorators: [{ type: Optional }, { type: Inject, args: [Skip,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupsService, [{\n type: Injectable\n }], function () { return [{ type: Boolean, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [Skip]\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PagerContextService {\n constructor() {\n this.changes = new Subject();\n this.pageChange = new Subject();\n }\n get currentPage() {\n return this.skip / this.pageSize;\n }\n notifyChanges(changes) {\n this.total = changes.total;\n this.pageSize = changes.pageSize;\n this.skip = changes.skip;\n this.changes.next(changes);\n }\n changePage(page) {\n this.pageChange.next({ skip: page * this.pageSize, take: this.pageSize });\n }\n changePageSize(value) {\n this.pageChange.next({ skip: 0, take: value });\n }\n nextPage() {\n const nextPage = this.currentPage + 1;\n if (nextPage * this.pageSize < this.total) {\n this.changePage(nextPage);\n }\n }\n prevPage() {\n const prevPage = this.currentPage - 1;\n if (prevPage * this.pageSize >= 0) {\n this.changePage(prevPage);\n }\n }\n}\nPagerContextService.ɵfac = function PagerContextService_Factory(t) { return new (t || PagerContextService)(); };\nPagerContextService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PagerContextService, factory: PagerContextService.ɵfac });\n\n\n/**\n * Arguments for the `detailCollapse` event.\n */\nclass DetailCollapseEvent extends PreventableEvent {\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * Arguments for the `detailExpand` event.\n */\nclass DetailExpandEvent extends PreventableEvent {\n constructor(args) {\n super();\n Object.assign(this, args);\n }\n}\n\n/**\n * @hidden\n */\nclass DetailsService {\n constructor() {\n this.changes = new Subject();\n this.rowState = new Set();\n }\n ngOnDestroy() {\n this.rowState.clear();\n }\n isExpanded(index, dataItem) {\n if (this.userCallback) {\n return this.userCallback({ index, dataItem });\n }\n return this.rowState.has(index);\n }\n toggleRow(index, dataItem) {\n if (this.isExpanded(index, dataItem)) {\n this.collapseRow(index, dataItem);\n }\n else {\n this.expandRow(index, dataItem);\n }\n }\n expandRow(index, dataItem) {\n const prevented = this.emitEvent({ dataItem, index, expand: true });\n if (!prevented && !this.userCallback) {\n this.rowState.add(index);\n }\n }\n collapseRow(index, dataItem) {\n const prevented = this.emitEvent({ dataItem, index, expand: false });\n if (!prevented && !this.userCallback) {\n this.rowState.delete(index);\n }\n }\n emitEvent(args) {\n const eventArg = new (args.expand ? DetailExpandEvent : DetailCollapseEvent)(args);\n this.changes.next(eventArg);\n return eventArg.isDefaultPrevented();\n }\n}\nDetailsService.ɵfac = function DetailsService_Factory(t) { return new (t || DetailsService)(); };\nDetailsService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DetailsService, factory: DetailsService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DetailsService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ScrollRequestService {\n constructor() {\n this.requests = new Subject();\n }\n scrollTo(request) {\n this.requests.next(request);\n }\n}\nScrollRequestService.ɵfac = function ScrollRequestService_Factory(t) { return new (t || ScrollRequestService)(); };\nScrollRequestService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollRequestService, factory: ScrollRequestService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollRequestService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst isInSameGrid = (element, gridElement) => closest(element, matchesNodeName('kendo-grid')) === gridElement;\nconst matchHeaderCell = matchesNodeName('th');\nconst matchDataCell = matchesNodeName('td');\nconst matchFooterCell = matchesNodeName('.k-grid-footer td');\nconst matchCell = (element) => matchDataCell(element) || matchHeaderCell(element) || matchFooterCell(element);\nconst gridCell = (element, gridElement) => {\n let target = closest(element, matchCell);\n while (target && !isInSameGrid(target, gridElement)) {\n target = closest(target.parentElement, matchCell);\n }\n return target;\n};\nconst targetCell = (target, gridElement) => {\n const cell = gridCell(target, gridElement);\n const row = closest(cell, matchesNodeName('tr'));\n if (cell && row) {\n let rowIndex = row.getAttribute('aria-rowindex');\n rowIndex = rowIndex ? parseInt(rowIndex, 10) - 1 : null;\n let colIndex = cell.getAttribute('aria-colindex');\n colIndex = colIndex ? parseInt(colIndex, 10) - 1 : null;\n if (rowIndex !== null && colIndex !== null) {\n return { colIndex, rowIndex, element: cell };\n }\n }\n};\nconst isArrowKey = keyCode => keyCode === Keys.ArrowLeft || keyCode === Keys.ArrowRight ||\n keyCode === Keys.ArrowUp || keyCode === Keys.ArrowDown;\nconst isNavigationKey = keyCode => isArrowKey(keyCode) ||\n keyCode === Keys.PageUp || keyCode === Keys.PageDown ||\n keyCode === Keys.Home || keyCode === Keys.End;\nconst isInput = matchesNodeName('input');\nconst isTextInput = element => element && isInput(element) && element.type.toLowerCase() === 'text';\nconst isPrintableCharacter = (str) => str.length === 1 && str.match(/\\S/);\n/**\n * @hidden\n */\nclass NavigationViewport {\n constructor(firstItemIndex, lastItemIndex) {\n this.firstItemIndex = firstItemIndex;\n this.lastItemIndex = lastItemIndex;\n }\n containsRow(dataRowIndex) {\n const headerRow = dataRowIndex < 0;\n return headerRow || (dataRowIndex >= this.firstItemIndex && dataRowIndex <= this.lastItemIndex);\n }\n intersects(start, end) {\n return (start <= this.firstItemIndex && this.lastItemIndex <= end) ||\n (this.firstItemIndex <= start && start <= this.lastItemIndex) ||\n (this.firstItemIndex <= end && end <= this.lastItemIndex);\n }\n}\n/**\n * @hidden\n */\nclass NavigationService {\n constructor(zone, domEvents, pagerContextService, scrollRequestService, groupsService, detailsService, focusRoot, editService, cd, localization, focusableParent) {\n this.zone = zone;\n this.domEvents = domEvents;\n this.pagerContextService = pagerContextService;\n this.scrollRequestService = scrollRequestService;\n this.groupsService = groupsService;\n this.detailsService = detailsService;\n this.focusRoot = focusRoot;\n this.editService = editService;\n this.cd = cd;\n this.localization = localization;\n this.focusableParent = focusableParent;\n this.cellKeydown = new EventEmitter();\n this.activeRowIndex = 0;\n this.alive = false;\n this.active = true;\n this.mode = 0 /* Standby */;\n this.model = new NavigationModel();\n this.cursor = new NavigationCursor(this.model);\n this.changes = this.cursor.changes;\n }\n set metadata(value) {\n this.meta = value;\n this.cursor.metadata = value;\n }\n get metadata() {\n return this.meta;\n }\n get enabled() {\n return this.alive;\n }\n get activeCell() {\n if (this.mode !== 0 /* Standby */) {\n return this.cursor.cell;\n }\n }\n get activeRow() {\n if (this.mode !== 0 /* Standby */) {\n return Object.assign({}, this.cursor.row, {\n cells: this.cursor.row.cells.toArray()\n });\n }\n }\n get activeDataRow() {\n return Math.max(0, this.activeRowIndex - this.meta.headerRows);\n }\n init(meta) {\n this.alive = true;\n this.focusRoot.alive = true;\n this.metadata = meta;\n const onStableSubscriber = (...operators) => (args) => this.zone.isStable ?\n from([true]).pipe(map(() => args)) :\n this.zone.onStable.pipe(take(1), map(() => args), ...operators);\n const onStable = onStableSubscriber();\n this.subs = new Subscription();\n this.subs.add(this.cursor.changes\n .subscribe(args => this.onCursorChanges(args)));\n this.subs.add(this.domEvents.focus.pipe(switchMap(onStable))\n .subscribe((args) => this.navigateTo(args.target)));\n this.subs.add(this.domEvents.focusOut.pipe(filter(() => this.mode !== 0 /* Standby */), switchMap(onStableSubscriber(takeUntil(this.domEvents.focus))))\n .subscribe(args => this.onFocusOut(args)));\n this.subs.add(this.domEvents.windowBlur.pipe(filter(() => this.mode !== 0 /* Standby */))\n .subscribe(() => this.onWindowBlur()));\n this.subs.add(\n // Closing the editor will not always trigger focusout in Firefox.\n // To get around this, we ensure that the cell is closed after editing.\n this.editService.changes.pipe(filter(e => e.action !== 'edit' && this.mode === 2 /* Content */), filter((e) => e.action === 'cellClose' && !e.prevented), switchMap(onStable))\n .subscribe(() => this.leaveCell()));\n this.subs.add(this.pagerContextService.pageChange\n .subscribe(() => this.cursor.reset(0, 0)));\n this.subs.add(this.domEvents.keydown\n .subscribe(args => this.onKeydown(args)));\n this.subs.add(this.domEvents.keydown.pipe(filter(args => args.keyCode === Keys.Tab && this.mode === 2 /* Content */), switchMapTo(this.domEvents.focusOut.pipe(takeUntil(\n // Timeout if focusOut doesn't fire very soon\n interval(0).pipe(take(1))))))\n .subscribe(() => this.onTabout()));\n if (this.focusableParent) {\n const element = new GridFocusableElement(this);\n this.focusableParent.registerElement(element);\n }\n this.deactivateElements();\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n this.alive = false;\n }\n registerCell(cell) {\n if (cell.logicalRowIndex !== this.pendingRowIndex) {\n const modelCell = this.model.registerCell(cell);\n if (this.virtualCell && this.cursor.activateVirtualCell(modelCell)) {\n this.virtualCell = false;\n }\n }\n }\n registerCellOnCurrentRow(cell) {\n if (cell.logicalRowIndex === this.pendingRowIndex) {\n this.model.registerCell(cell);\n }\n }\n unregisterCell(index, rowIndex, cell) {\n this.model.unregisterCell(index, rowIndex, cell);\n }\n registerRow(row) {\n this.model.registerRow(row);\n this.pendingRowIndex = row.logicalRowIndex;\n }\n updateRow(row) {\n this.model.updateRow(row);\n }\n unregisterRow(index, row) {\n this.model.unregisterRow(index, row);\n }\n isCellFocusable(cell) {\n return this.alive &&\n this.active &&\n this.mode !== 2 /* Content */ &&\n this.cursor.isActive(cell.logicalRowIndex, cell.logicalColIndex);\n }\n isCellFocused(cell) {\n return this.mode === 1 /* Cursor */ && this.isCellFocusable(cell);\n }\n navigateTo(el) {\n if (!this.alive) {\n return;\n }\n const cell = targetCell(el, this.meta.gridElement.nativeElement);\n if (!cell) {\n return;\n }\n const oldMode = this.mode;\n const focusInCell = contains(cell.element, document.activeElement);\n const focusInActiveRowContent = this.mode === 2 /* Content */ &&\n this.activeRowIndex === cell.rowIndex &&\n el !== cell.element;\n if (focusInCell) {\n this.mode = 2 /* Content */;\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n this.activateRow();\n }\n else if (!focusInActiveRowContent) {\n this.mode = 1 /* Cursor */;\n this.deactivateElements();\n const alreadyActive = this.cursor.isActive(cell.rowIndex, cell.colIndex);\n const isCursor = oldMode === 1 /* Cursor */ && alreadyActive;\n if (!isCursor) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n }\n }\n }\n tryFocus(el) {\n this.activateElements();\n const focusable = findFocusableChild(el);\n if (focusable) {\n const cell = targetCell(focusable, this.meta.gridElement.nativeElement);\n if (cell) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n this.deactivateElements();\n this.enterCell();\n }\n focusable.focus();\n }\n else {\n this.deactivateElements();\n }\n return !!focusable;\n }\n needsViewport() {\n return this.meta && this.meta.isVirtual;\n }\n setViewport(firstItemIndex, lastItemIndex) {\n this.viewport = new NavigationViewport(firstItemIndex, lastItemIndex);\n if (this.meta && this.meta.isVirtual && this.activeDataRow > -1) {\n const dataRowIndex = this.activeDataRow;\n const ahead = firstItemIndex - dataRowIndex;\n const behind = dataRowIndex - lastItemIndex;\n if (ahead > 0) {\n this.cursor.reset(firstItemIndex + this.meta.headerRows);\n }\n else if (behind > 0) {\n this.cursor.reset(lastItemIndex - this.meta.headerRows);\n }\n }\n }\n setColumnViewport(firstItemIndex, lastItemIndex) {\n this.columnViewport = new NavigationViewport(firstItemIndex, lastItemIndex);\n }\n focusCell(rowIndex = undefined, colIndex = undefined) {\n this.mode = 1 /* Cursor */;\n this.cursor.reset(rowIndex, colIndex);\n return this.activeCell;\n }\n focusCellByElement(el) {\n const cell = targetCell(el, this.meta.gridElement.nativeElement);\n if (cell) {\n return this.focusCell(cell.rowIndex, cell.colIndex);\n }\n }\n focusNextCell(wrap = true) {\n return this.focusAdjacentCell(true, wrap);\n }\n focusPrevCell(wrap = true) {\n return this.focusAdjacentCell(false, wrap);\n }\n toggle(active) {\n this.active = active;\n this.cursor.announce();\n }\n hasFocus() {\n return this.mode === 1 /* Cursor */ || this.mode === 2 /* Content */;\n }\n autoFocusCell(start, end) {\n return !this.meta.virtualColumns || end < this.meta.columns.lockedLeafColumns.length || this.columnViewport.intersects(start, end);\n }\n focusAdjacentCell(fwd, wrap) {\n this.focusCell();\n let success = fwd ? this.moveCursorFwd() : this.moveCursorBwd();\n if (wrap && !success) {\n success = fwd ? this.cursor.moveDown(1) : this.cursor.moveUp(1);\n if (success) {\n const row = this.cursor.row;\n const colIdx = fwd ? 0 : this.cursor.lastCellIndex(row);\n this.cursor.reset(row.index, colIdx);\n }\n }\n if (success) {\n return this.activeCell;\n }\n else {\n this.mode = 0 /* Standby */;\n this.cursor.announce();\n }\n return null;\n }\n enterCell() {\n const cell = this.cursor.cell;\n if (!cell) {\n return;\n }\n const group = cell.focusGroup;\n const focusable = group && group.canFocus();\n this.mode = focusable ? 2 /* Content */ : 1 /* Cursor */;\n this.cursor.announce();\n if (focusable) {\n this.activateRow();\n group.focus();\n }\n }\n leaveCell() {\n const cell = this.cursor.cell;\n if (!cell) {\n return;\n }\n const group = cell.focusGroup;\n const focusable = group && group.canFocus();\n if (!focusable) {\n this.deactivateElements();\n }\n this.mode = 1 /* Cursor */;\n this.cursor.announce();\n }\n activateElements() {\n this.focusRoot.activate();\n }\n deactivateElements() {\n this.focusRoot.deactivate();\n }\n activateRow() {\n this.cursor.row.cells\n .forEach(cell => cell.focusGroup && cell.focusGroup.activate());\n }\n moveCursorFwd() {\n return this.localization.rtl ? this.cursor.moveLeft() : this.cursor.moveRight();\n }\n moveCursorBwd() {\n return this.localization.rtl ? this.cursor.moveRight() : this.cursor.moveLeft();\n }\n onCursorKeydown(args) {\n let preventDefault = false;\n const modifier = args.ctrlKey || args.metaKey;\n const step = modifier ? 5 : 1;\n if (!this.onCellKeydown(args)) {\n return;\n }\n const row = this.cursor.row;\n switch (args.keyCode) {\n case Keys.ArrowDown:\n preventDefault = this.cursor.moveDown(step);\n break;\n case Keys.ArrowUp:\n preventDefault = this.cursor.moveUp(step);\n break;\n case Keys.ArrowRight:\n preventDefault = this.moveCursorFwd();\n break;\n case Keys.ArrowLeft:\n preventDefault = this.moveCursorBwd();\n break;\n case Keys.PageDown:\n if (this.metadata.isVirtual && this.viewport) {\n let nextItemIndex = this.meta.headerRows + this.viewport.lastItemIndex + 1;\n if (this.metadata.hasDetailTemplate) {\n nextItemIndex++;\n }\n nextItemIndex = Math.min(this.meta.maxLogicalRowIndex, nextItemIndex);\n this.cursor.reset(nextItemIndex);\n preventDefault = true;\n }\n else if (this.metadata.hasPager) {\n this.zone.run(() => this.pagerContextService.nextPage());\n preventDefault = true;\n }\n break;\n case Keys.PageUp:\n if (this.metadata.isVirtual && this.viewport) {\n let viewportSize = this.viewport.lastItemIndex - this.viewport.firstItemIndex;\n let firstItemIndex = this.viewport.firstItemIndex;\n let nextItemIndex = Math.max(this.meta.headerRows, firstItemIndex - viewportSize - 1);\n this.cursor.reset(nextItemIndex);\n preventDefault = true;\n }\n else if (this.metadata.hasPager) {\n this.zone.run(() => this.pagerContextService.prevPage());\n preventDefault = true;\n }\n break;\n case Keys.Home:\n if (modifier) {\n if (this.meta.isVirtual) {\n this.cursor.reset(this.meta.headerRows, 0, false);\n }\n else {\n this.cursor.reset(this.model.firstRow.index, 0, false);\n }\n }\n else {\n this.cursor.reset(row.index, 0, false);\n }\n preventDefault = true;\n break;\n case Keys.End:\n if (modifier) {\n if (this.meta.isVirtual) {\n let lastRowIndex = this.meta.maxLogicalRowIndex;\n if (this.meta.hasDetailTemplate) {\n lastRowIndex--;\n }\n this.cursor.reset(lastRowIndex, this.cursor.lastCellIndex(), false);\n }\n else {\n this.cursor.reset(this.model.lastRow.index, this.cursor.lastCellIndex(this.model.lastRow), false);\n }\n }\n else {\n const lastIndex = this.cursor.lastCellIndex(row);\n const cell = this.model.findCell(lastIndex, row);\n if (cell) {\n this.cursor.reset(cell.rowIndex, cell.colIndex);\n }\n else {\n this.cursor.reset(row.index, lastIndex);\n }\n }\n preventDefault = true;\n break;\n case Keys.Enter:\n case Keys.F2:\n const groupItem = row.groupItem;\n if (groupItem) {\n this.zone.run(() => this.groupsService.toggleRow(groupItem.index, groupItem.data));\n }\n else if (this.cursor.cell.detailExpandCell) {\n this.zone.run(() => this.detailsService.toggleRow(row.dataRowIndex, row.dataItem));\n }\n else {\n this.enterCell();\n if (!this.cursor.cell.focusGroup.isNavigable()) {\n preventDefault = true;\n }\n }\n break;\n default:\n if (!args.ctrlKey && !args.altKey && isPrintableCharacter(args.key)) {\n this.enterCell();\n }\n }\n if (preventDefault) {\n args.preventDefault();\n }\n }\n onContentKeydown(args) {\n if (!this.onCellKeydown(args)) {\n return;\n }\n const confirm = !args.defaultPrevented && args.keyCode === Keys.Enter && isTextInput(args.srcElement);\n if (args.keyCode === Keys.Escape || args.keyCode === Keys.F2 || confirm) {\n this.leaveCell();\n this.cursor.reset();\n args.stopPropagation();\n }\n else if (isNavigationKey(args.keyCode) && this.cursor.cell.focusGroup.isNavigable()) {\n this.onCursorKeydown(args);\n if (args.defaultPrevented) {\n this.leaveCell();\n }\n }\n }\n onCellKeydown(args) {\n if (this.editService.isEditingCell()) {\n const confirm = args.keyCode === Keys.Enter;\n const cancel = args.keyCode === Keys.Escape;\n const navigate = isNavigationKey(args.keyCode);\n if (confirm) {\n this.editService.closeCell(args);\n }\n else if (cancel) {\n this.editService.cancelCell();\n this.cd.detectChanges();\n }\n else if (navigate) {\n return false;\n }\n }\n this.cellKeydown.emit(args);\n return true;\n }\n onCursorChanges(args) {\n this.activeRowIndex = args.rowIndex;\n const dataRowIndex = this.activeDataRow;\n if (this.meta && (this.meta.isVirtual && this.viewport &&\n !this.viewport.containsRow(dataRowIndex) && dataRowIndex > -1)) {\n this.scrollRequestService.scrollTo({ row: dataRowIndex });\n }\n if (this.meta.virtualColumns && args.colIndex >= this.meta.columns.lockedLeafColumns.length) {\n const cell = this.activeCell;\n const { start, end } = this.model.cellRange(cell);\n if (!cell) {\n this.virtualCell = true;\n }\n if ((!cell && this.mode !== 0 /* Standby */) || (cell && !this.columnViewport.intersects(start, end))) {\n this.scrollRequestService.scrollTo({ column: args.colIndex - (this.metadata.hasDetailTemplate ? 1 : 0) });\n }\n }\n }\n onFocusOut(args) {\n if (isVisible(args.target)) {\n this.mode = 0 /* Standby */;\n }\n else {\n // Focused target is no longer visible,\n // reset to cursor mode and recapture focus.\n this.mode = 1 /* Cursor */;\n }\n this.deactivateElements();\n this.cursor.announce();\n }\n onWindowBlur() {\n this.mode = 0 /* Standby */;\n this.deactivateElements();\n this.cursor.announce();\n }\n onKeydown(args) {\n if (this.mode === 1 /* Cursor */) {\n this.onCursorKeydown(args);\n }\n else if (this.mode === 2 /* Content */) {\n this.onContentKeydown(args);\n }\n }\n onTabout() {\n // Tabbed out of the last focusable content element\n // reset to cursor mode and recapture focus.\n if (this.cursor.cell.focusGroup.isNavigable()) {\n // Unless the cell has a single focusable element,\n // otherwise we'd return to Content mode and enter an endless loop\n return;\n }\n this.leaveCell();\n this.cursor.reset();\n }\n}\nNavigationService.ɵfac = function NavigationService_Factory(t) { return new (t || NavigationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(PagerContextService), ɵngcc0.ɵɵinject(ScrollRequestService), ɵngcc0.ɵɵinject(GroupsService), ɵngcc0.ɵɵinject(DetailsService), ɵngcc0.ɵɵinject(FocusRoot), ɵngcc0.ɵɵinject(EditService), ɵngcc0.ɵɵinject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵinject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵinject(FocusableDirective, 8)); };\nNavigationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NavigationService, factory: NavigationService.ɵfac });\n/** @nocollapse */\nNavigationService.ctorParameters = () => [\n { type: NgZone },\n { type: DomEventsService },\n { type: PagerContextService },\n { type: ScrollRequestService },\n { type: GroupsService },\n { type: DetailsService },\n { type: FocusRoot },\n { type: EditService },\n { type: ChangeDetectorRef },\n { type: LocalizationService },\n { type: FocusableDirective, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NavigationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: DomEventsService }, { type: PagerContextService }, { type: ScrollRequestService }, { type: GroupsService }, { type: DetailsService }, { type: FocusRoot }, { type: EditService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }, { type: FocusableDirective, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass SelectionService {\n constructor(domEvents, localDataChangesService, navigationService) {\n this.domEvents = domEvents;\n this.localDataChangesService = localDataChangesService;\n this.navigationService = navigationService;\n this.changes = new EventEmitter();\n this.lastSelectionStartIndex = 0;\n this.currentSelection = [];\n this.selectAllChecked = false;\n this.active = false;\n this.dragging = false;\n this.addSubscriptions();\n }\n get enableMarquee() {\n const checkboxOnly = this.settings && typeof this.settings === 'object' && this.settings.checkboxOnly;\n if (!this.settings || checkboxOnly) {\n return false;\n }\n const selectableSettings = this.settings.selectable;\n const dragAndMultiple = typeof (selectableSettings) === 'object' &&\n isPresent(selectableSettings) &&\n selectableSettings.mode === 'multiple' &&\n selectableSettings.enabled !== false &&\n !selectableSettings.checkboxOnly &&\n selectableSettings.drag;\n return this.active && dragAndMultiple;\n }\n init(settings) {\n this.settings = settings;\n this.currentSelection = [];\n if (settings.selectable && settings.selectable.enabled !== false) {\n const iterator$$1 = this.getIterator();\n this._selectAllState = true;\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\") {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n if (settings.rowSelected(rowArgs)) {\n this.currentSelection[item.value.index] = rowArgs;\n }\n else {\n this._selectAllState = undefined;\n }\n }\n item = iterator$$1.next();\n }\n if (this.currentSelection.length === 0) {\n this._selectAllState = false;\n }\n }\n }\n isSelected(index) {\n if (this.settings && this.active) {\n return this.options.enabled && isPresent(this.currentSelection[index]);\n }\n }\n handleClick(item, event) {\n if (this.dragging) {\n this.dragging = false;\n return;\n }\n let ev;\n const ctrlKey = event.ctrlKey || event.metaKey;\n if (this.options.mode === \"single\" && ctrlKey && this.isSelected(item.index)) {\n ev = this.toggle(item);\n }\n else if (this.options.mode === \"multiple\") {\n if (ctrlKey && !event.shiftKey) {\n ev = this.toggle(item);\n }\n else if (event.shiftKey) {\n ev = this.addAllTo(item, ctrlKey);\n }\n }\n if (!isPresent(ev)) {\n ev = this.select(item);\n this.currentSelection[item.index] = {\n dataItem: item.data,\n index: item.index\n };\n }\n if (!ev.selectedRows.length && !ev.deselectedRows.length) {\n return;\n }\n ev.ctrlKey = ctrlKey;\n ev.shiftKey = event.shiftKey;\n this.changes.emit(ev);\n }\n toggle(item) {\n let selectedRows = [];\n let deselectedRows = [];\n this.lastSelectionStartIndex = item.index;\n const rowArgs = { dataItem: item.data, index: item.index };\n if (this.isSelected(item.index)) {\n deselectedRows.push(rowArgs);\n }\n else {\n selectedRows.push(rowArgs);\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n toggleByIndex(index) {\n const iterator$$1 = this.getIterator();\n if (this.selectAllChecked && this.isSelected(index)) {\n this.selectAllChecked = false;\n }\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.index === index) {\n const itemToToggle = {\n data: item.value.data,\n index: item.value.index\n };\n if (this.isSelected(index) || this.options.mode === \"multiple\") {\n return this.toggle(itemToToggle);\n }\n else {\n return this.select(itemToToggle);\n }\n }\n item = iterator$$1.next();\n }\n }\n select(item) {\n let deselectedRows = [];\n let selectedRows = [];\n this.lastSelectionStartIndex = item.index;\n if (!this.isSelected(item.index)) {\n selectedRows.push({ dataItem: item.data, index: item.index });\n }\n this.currentSelection.forEach((row) => {\n if (row.index !== item.index) {\n deselectedRows.push(row);\n }\n });\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n //Used to manually deselect removed items\n deselect(removedItem) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.data === removedItem) {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n if (this.isSelected(rowArgs.index)) {\n let ev = {\n ctrlKey: false,\n deselectedRows: [rowArgs],\n selectedRows: []\n };\n this.changes.emit(ev);\n }\n }\n item = iterator$$1.next();\n }\n }\n addAllTo(item, ctrlKey) {\n let selectedRows = [];\n let deselectedRows = [];\n const start = Math.min(this.lastSelectionStartIndex, item.index);\n const end = Math.max(this.lastSelectionStartIndex, item.index);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if ((idx < start || idx > end) && this.isSelected(idx) && !ctrlKey) {\n deselectedRows.push(rowArgs);\n }\n if ((idx >= start && idx <= end) && !this.isSelected(idx)) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n updateAll(selectAllChecked) {\n this.selectAllChecked = selectAllChecked;\n let selectedRows = [];\n let deselectedRows = [];\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if (this.isSelected(idx) && !selectAllChecked) {\n deselectedRows.push(rowArgs);\n }\n if (!this.isSelected(idx) && selectAllChecked) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n if (!selectedRows.length && !deselectedRows.length) {\n return;\n }\n let ev = {\n ctrlKey: true,\n deselectedRows: deselectedRows,\n selectedRows: selectedRows,\n shiftKey: true\n };\n this.changes.emit(ev);\n }\n selectRange(startIndex, endIndex) {\n let selectedRows = [];\n let deselectedRows = [];\n const start = Math.min(startIndex, endIndex);\n const end = Math.max(startIndex, endIndex);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const rowArgs = { dataItem: next.value.data, index: idx };\n if ((idx < start || idx > end) && this.isSelected(idx)) {\n deselectedRows.push(rowArgs);\n }\n if ((idx >= start && idx <= end) && !this.isSelected(idx)) {\n selectedRows.push(rowArgs);\n }\n }\n next = iterator$$1.next();\n }\n return {\n deselectedRows: deselectedRows,\n selectedRows: selectedRows\n };\n }\n get selectAllState() {\n return this._selectAllState;\n }\n get selected() {\n return this.currentSelection.map((item) => {\n return item.index;\n }).filter((n) => typeof n === \"number\");\n }\n get options() {\n const defaultOptions = {\n checkboxOnly: false,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.settings)) {\n return defaultOptions;\n }\n if (typeof this.settings.selectable === 'boolean') {\n return {\n checkboxOnly: false,\n enabled: this.settings.selectable,\n mode: \"multiple\"\n };\n }\n else {\n return Object.assign(defaultOptions, this.settings.selectable);\n }\n }\n ngOnDestroy() {\n this.removeSubscriptions();\n }\n targetArgs() {\n return {\n index: this.mouseDownEventArgs.rowIndex,\n dataItem: this.mouseDownEventArgs.dataItem\n };\n }\n addSubscriptions() {\n if (!this.cellClickSubscription) {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n if (this.options.enabled && !this.options.checkboxOnly && args.type !== 'contextmenu') {\n if (this.active) {\n this.handleClick({ index: args.rowIndex, data: args.dataItem }, args.originalEvent);\n }\n }\n });\n }\n if (!this.mousedownSubscription) {\n this.mousedownSubscription = this.domEvents.cellMousedown.subscribe((args) => {\n this.mouseDownEventArgs = args;\n if ((this.options.enabled && (!this.options.mode || this.options.mode === \"multiple\") &&\n !this.options.checkboxOnly && args.originalEvent.shiftKey)) {\n if (this.active) {\n args.originalEvent.preventDefault();\n this.navigationService.focusCellByElement(args.originalEvent.target);\n }\n }\n });\n }\n if (this.localDataChangesService && !this.dataChangedSubscription) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe((args) => {\n if (this.active) {\n if (isPresent(args.action) && args.action === 'remove') {\n this.deselect(args.item);\n }\n }\n });\n }\n }\n getIterator() {\n const accessor = this.settings.view.accessor();\n if (!accessor) {\n return;\n }\n return accessor[iterator]();\n }\n removeSubscriptions() {\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n this.cellClickSubscription = null;\n }\n if (this.mousedownSubscription) {\n this.mousedownSubscription.unsubscribe();\n this.mousedownSubscription = null;\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n this.dataChangedSubscription = null;\n }\n }\n}\nSelectionService.ɵfac = function SelectionService_Factory(t) { return new (t || SelectionService)(ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(LocalDataChangesService), ɵngcc0.ɵɵinject(NavigationService)); };\nSelectionService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SelectionService, factory: SelectionService.ɵfac });\n/** @nocollapse */\nSelectionService.ctorParameters = () => [\n { type: DomEventsService },\n { type: LocalDataChangesService },\n { type: NavigationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionService, [{\n type: Injectable\n }], function () { return [{ type: DomEventsService }, { type: LocalDataChangesService }, { type: NavigationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass CellSelectionService {\n constructor(domEvents, localDataChangesService, navigationService) {\n this.domEvents = domEvents;\n this.localDataChangesService = localDataChangesService;\n this.navigationService = navigationService;\n this.changes = new EventEmitter();\n this.mouseUpEvent = new EventEmitter();\n this.currentSelection = [];\n this.active = false;\n this.dragging = false;\n this.dragSelectDeselect = false;\n this.lastSelectionItem = { itemKey: 0, columnKey: 0 };\n this.lastSelectionItemRowIndex = 0;\n this.lastSelectionItemColIndex = 0;\n this.addSubscriptions();\n }\n get enableMarquee() {\n const checkboxOnly = this.settings && typeof this.settings === 'object' && this.settings.checkboxOnly;\n if (!this.settings || checkboxOnly) {\n return false;\n }\n const selectableSettings = this.settings.selectable;\n const dragAndMultiple = typeof (selectableSettings) === 'object' &&\n isPresent(selectableSettings) &&\n selectableSettings.mode === 'multiple' &&\n selectableSettings.cell &&\n selectableSettings.enabled !== false &&\n selectableSettings.drag;\n return this.active && dragAndMultiple;\n }\n init(settings) {\n this.settings = settings;\n this.currentSelection = [];\n if (settings.selectable && settings.selectable.enabled !== false) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n while (!item.done) {\n if (item.value && item.value.type === \"data\") {\n const rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n settings.columns.forEach(col => {\n const selectedCellArgs = settings.cellSelected(rowArgs, col, col.leafIndex);\n if (selectedCellArgs.selected) {\n this.currentSelection.push(selectedCellArgs.item);\n }\n });\n }\n item = iterator$$1.next();\n }\n }\n }\n isCellSelected(item, col) {\n if (this.settings && this.active) {\n const selectedCellArgs = this.settings.cellSelected({ dataItem: item.data, index: item.index }, col, col.leafIndex);\n return this.options.enabled && selectedCellArgs.selected;\n }\n return false;\n }\n handleClick(item, event) {\n if (this.dragging) {\n this.dragging = false;\n return;\n }\n let ev;\n const ctrlKey = event.ctrlKey || event.metaKey;\n if (this.options.mode === \"single\" && ctrlKey && this.isCellSelected(item, item.column)) {\n ev = this.toggle(item);\n }\n else if (this.options.mode === \"multiple\") {\n if (ctrlKey && !event.shiftKey) {\n ev = this.toggle(item);\n }\n else if (event.shiftKey) {\n const startRowIndex = Math.min(this.lastSelectionItemRowIndex, item.index);\n const startColIndex = Math.min(this.lastSelectionItemColIndex, item.column.leafIndex);\n const endRowIndex = Math.max(this.lastSelectionItemRowIndex, item.index);\n const endColIndex = Math.max(this.lastSelectionItemColIndex, item.column.leafIndex);\n ev = this.selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex);\n }\n }\n if (!isPresent(ev)) {\n ev = this.select(item);\n this.currentSelection = [this.lastSelectionItem];\n }\n if (!ev.selectedCells.length && !ev.deselectedCells.length) {\n return;\n }\n ev.ctrlKey = ctrlKey;\n ev.shiftKey = event.shiftKey;\n this.changes.emit(ev);\n }\n toggle(item) {\n let selectedCells = [];\n let deselectedCells = [];\n this.lastSelectionItem =\n this.settings.cellSelected({ dataItem: item.data, index: item.index }, item.column, item.column.leafIndex).item;\n this.lastSelectionItemRowIndex = item.index;\n this.lastSelectionItemColIndex = item.column.leafIndex;\n if (this.isCellSelected(item, item.column)) {\n deselectedCells.push(this.lastSelectionItem);\n }\n else {\n selectedCells.push(this.lastSelectionItem);\n }\n return {\n deselectedCells,\n selectedCells\n };\n }\n select(item) {\n const selectedCells = [];\n const deselectedCells = [];\n this.lastSelectionItem =\n this.settings.cellSelected({ dataItem: item.data, index: item.index }, item.column, item.column.leafIndex).item;\n this.lastSelectionItemRowIndex = item.index;\n this.lastSelectionItemColIndex = item.column.leafIndex;\n if (!this.isCellSelected(item, item.column)) {\n selectedCells.push(this.lastSelectionItem);\n }\n this.currentSelection.forEach((selectedItem) => {\n if (selectedItem.itemKey !== this.lastSelectionItem.itemKey || selectedItem.columnKey !== this.lastSelectionItem.columnKey) {\n deselectedCells.push(selectedItem);\n }\n });\n return {\n deselectedCells,\n selectedCells\n };\n }\n //Used to manually deselect removed items\n deselect(removedItem) {\n const iterator$$1 = this.getIterator();\n let item = iterator$$1.next();\n let rowArgs;\n while (!item.done) {\n if (item.value && item.value.type === \"data\" && item.value.data === removedItem) {\n rowArgs = {\n dataItem: item.value.data,\n index: item.value.index\n };\n break;\n }\n item = iterator$$1.next();\n }\n if (rowArgs) {\n const cellsToRemove = this.currentSelection.filter(selectedItem => {\n const contender = this.settings.cellSelected(rowArgs, null, null).item;\n return selectedItem.itemKey === contender.itemKey;\n });\n if (cellsToRemove.length) {\n let ev = {\n ctrlKey: false,\n deselectedCells: cellsToRemove,\n selectedCells: []\n };\n this.changes.emit(ev);\n }\n }\n }\n selectRange(startRowIndex, startColIndex, endRowIndex, endColIndex) {\n const selectedCells = [];\n const deselectedCells = [];\n const selectionStartRow = Math.min(startRowIndex, endRowIndex);\n const selectionStartCol = Math.min(startColIndex, endColIndex);\n const selectionEndRow = Math.max(startRowIndex, endRowIndex);\n const selectionEndCol = Math.max(startColIndex, endColIndex);\n const iterator$$1 = this.getIterator();\n let next = iterator$$1.next();\n while (!next.done) {\n if (next.value && next.value.type === \"data\") {\n const idx = next.value.index;\n const data = next.value.data;\n const rowArgs = {\n dataItem: data,\n index: idx\n };\n this.settings.columns.forEach(col => {\n const { item } = this.settings.cellSelected(rowArgs, col, col.leafIndex);\n const selected = this.isCellSelected(next.value, col);\n const isInRowRange = selectionStartRow <= idx && idx <= selectionEndRow;\n const isInColRange = selectionStartCol <= col.leafIndex && col.leafIndex <= selectionEndCol;\n const isInSelectionRect = isInRowRange && isInColRange;\n if (!isInSelectionRect && selected) {\n deselectedCells.push(item);\n }\n if (isInSelectionRect && !selected) {\n selectedCells.push(item);\n }\n });\n }\n next = iterator$$1.next();\n }\n return {\n deselectedCells,\n selectedCells\n };\n }\n get options() {\n const defaultOptions = {\n checkboxOnly: false,\n enabled: true,\n mode: \"multiple\"\n };\n if (!isPresent(this.settings)) {\n return defaultOptions;\n }\n if (typeof this.settings.selectable === 'boolean') {\n return {\n checkboxOnly: false,\n enabled: this.settings.selectable,\n mode: \"multiple\"\n };\n }\n else {\n return Object.assign(defaultOptions, this.settings.selectable);\n }\n }\n ngOnDestroy() {\n this.removeSubscriptions();\n }\n addSubscriptions() {\n if (!this.cellClickSubscription) {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n if (this.options.enabled && !this.options.checkboxOnly && args.type !== 'contextmenu') {\n if (this.active) {\n this.handleClick({ index: args.rowIndex, data: args.dataItem, column: args.column }, args.originalEvent);\n }\n }\n });\n }\n if (!this.mousedownSubscription) {\n this.mousedownSubscription = this.domEvents.cellMousedown.subscribe((args) => {\n this.mouseDownEventArgs = args;\n if (this.options.enabled && (!this.options.mode || this.options.mode === \"multiple\") &&\n !this.options.checkboxOnly && args.originalEvent.shiftKey) {\n if (this.active) {\n args.originalEvent.preventDefault();\n this.navigationService.focusCellByElement(args.originalEvent.target);\n }\n }\n });\n }\n if (this.localDataChangesService && !this.dataChangedSubscription) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe((args) => {\n if (this.active) {\n if (isPresent(args.action) && args.action === 'remove') {\n this.deselect(args.item);\n }\n }\n });\n }\n }\n getIterator() {\n const accessor = this.settings.view.accessor();\n if (!accessor) {\n return;\n }\n return accessor[iterator]();\n }\n removeSubscriptions() {\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n this.cellClickSubscription = null;\n }\n if (this.mousedownSubscription) {\n this.mousedownSubscription.unsubscribe();\n this.mousedownSubscription = null;\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n this.dataChangedSubscription = null;\n }\n }\n}\nCellSelectionService.ɵfac = function CellSelectionService_Factory(t) { return new (t || CellSelectionService)(ɵngcc0.ɵɵinject(DomEventsService), ɵngcc0.ɵɵinject(LocalDataChangesService), ɵngcc0.ɵɵinject(NavigationService)); };\nCellSelectionService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: CellSelectionService, factory: CellSelectionService.ɵfac });\n/** @nocollapse */\nCellSelectionService.ctorParameters = () => [\n { type: DomEventsService },\n { type: LocalDataChangesService },\n { type: NavigationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellSelectionService, [{\n type: Injectable\n }], function () { return [{ type: DomEventsService }, { type: LocalDataChangesService }, { type: NavigationService }]; }, null); })();\n\nconst createElement = () => {\n const marquee = document.createElement(\"div\");\n marquee.className = \"k-marquee\";\n const marqueeColor = document.createElement(\"div\");\n marqueeColor.className = \"k-marquee-color\";\n marquee.appendChild(marqueeColor);\n return marquee;\n};\nconst POINTER_OFFSET = 2;\nconst MINIMAL_DRAG_DISTANCE = 5;\nconst offsets = {\n topLeft: { x: POINTER_OFFSET, y: POINTER_OFFSET },\n topRight: { x: -POINTER_OFFSET, y: POINTER_OFFSET },\n bottomLeft: { x: POINTER_OFFSET, y: -POINTER_OFFSET },\n bottomRight: { x: -POINTER_OFFSET, y: -POINTER_OFFSET }\n};\n/**\n * @hidden\n */\nclass GridMarqueeDirective {\n constructor(draggable, selection, cellSelection, domEvents) {\n this.draggable = draggable;\n this.selection = selection;\n this.cellSelection = cellSelection;\n this.domEvents = domEvents;\n this.selectionStarted = false;\n }\n get userSelection() {\n return (this.cellSelection.enableMarquee || this.selection.enableMarquee) ? 'none' : null;\n }\n ngOnInit() {\n this.subscriptions = (this.draggable.kendoPress.subscribe(this.start.bind(this)));\n this.subscriptions.add(this.draggable.kendoDrag.subscribe(this.moveMarquee.bind(this)));\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n this.clean();\n }\n start(args) {\n if (args.originalEvent.target.classList.contains('k-checkbox')) {\n this.pressArgs = null;\n return;\n }\n this.pressArgs = args;\n this.pressTarget = null;\n }\n moveMarquee(args) {\n if (!this.pressTarget) {\n this.pressTarget = this.cellSelection.active ? this.cellSelection.mouseDownEventArgs : this.selection.mouseDownEventArgs;\n }\n const press = this.pressArgs;\n if (!press) {\n return;\n }\n if (!this.selectionStarted) {\n const distance = Math.sqrt(Math.pow((args.pageX - press.pageX), 2) + Math.pow((args.pageY - press.pageY), 2));\n if (distance > MINIMAL_DRAG_DISTANCE) {\n this.selectionStarted = true;\n this.dragEndSubscription = merge(this.domEvents.cellMouseup.pipe(take(1)), this.draggable.kendoRelease.pipe(delay(1), take(1)))\n .subscribe(this.endSelection.bind(this));\n }\n else {\n return;\n }\n }\n this.initMarquee();\n const element = this.marqueeElement;\n const marqueeQuadrant = this.getMarqueeQuadrant(args.pageX, args.pageY, press.pageX, press.pageY);\n let left = Math.min(args.pageX, press.pageX);\n let top = Math.min(args.pageY, press.pageY);\n const width = Math.abs(args.pageX - press.pageX);\n const height = Math.abs(args.pageY - press.pageY);\n if (marqueeQuadrant) {\n left += offsets[marqueeQuadrant].x;\n top += offsets[marqueeQuadrant].y;\n }\n element.style.left = `${left}px`;\n element.style.top = `${top}px`;\n element.style.width = `${width}px`;\n element.style.height = `${height}px`;\n }\n endSelection(args) {\n if (args.type === 'mouseup' || args.type === 'touchend') {\n if (this.cellSelection.active) {\n this.cellSelection.dragging = true;\n this.cellSelection.changes.emit(this.cellSelection.selectRange(this.pressTarget.rowIndex, this.pressTarget.column.leafIndex, args.rowIndex, args.column.leafIndex));\n }\n else if (this.selection.active) {\n this.selection.dragging = true;\n this.selection.changes.emit(this.selection.selectRange(this.pressTarget.rowIndex, args.rowIndex));\n }\n }\n this.clean();\n }\n clean() {\n if (this.marqueeElement) {\n document.body.removeChild(this.marqueeElement);\n this.marqueeElement = null;\n }\n if (this.dragEndSubscription) {\n this.dragEndSubscription.unsubscribe();\n }\n this.dragEndSubscription = null;\n this.pressTarget = null;\n this.pressArgs = null;\n this.selectionStarted = false;\n this.cellSelection.active ? this.cellSelection.dragging = false : this.selection.dragging = false;\n }\n initMarquee() {\n if (!this.marqueeElement) {\n this.marqueeElement = createElement();\n document.body.appendChild(this.marqueeElement);\n }\n }\n getMarqueeQuadrant(pointerX, pointerY, startX, startY) {\n const leftHalf = pointerX < startX;\n const rightHalf = pointerX > startX;\n const topHalf = pointerY < startY;\n const bottomHalf = pointerY > startY;\n if (leftHalf && topHalf) {\n return 'topLeft';\n }\n if (leftHalf && bottomHalf) {\n return 'bottomLeft';\n }\n if (rightHalf && topHalf) {\n return 'topRight';\n }\n if (rightHalf && bottomHalf) {\n return 'bottomRight';\n }\n return null;\n }\n}\nGridMarqueeDirective.ɵfac = function GridMarqueeDirective_Factory(t) { return new (t || GridMarqueeDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(DomEventsService)); };\nGridMarqueeDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GridMarqueeDirective, selectors: [[\"\", \"kendoGridSelectionMarquee\", \"\"]], hostVars: 4, hostBindings: function GridMarqueeDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"user-select\", ctx.userSelection)(\"-webkit-user-select\", ctx.userSelection);\n } } });\n/** @nocollapse */\nGridMarqueeDirective.ctorParameters = () => [\n { type: DraggableDirective },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: DomEventsService }\n];\nGridMarqueeDirective.propDecorators = {\n userSelection: [{ type: HostBinding, args: ['style.user-select',] }, { type: HostBinding, args: ['style.-webkit-user-select',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridMarqueeDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectionMarquee]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective }, { type: SelectionService }, { type: CellSelectionService }, { type: DomEventsService }]; }, { userSelection: [{\n type: HostBinding,\n args: ['style.user-select']\n }, {\n type: HostBinding,\n args: ['style.-webkit-user-select']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ZoneAwareEventEmitter extends EventEmitter {\n constructor(ngZone, isAsync = false) {\n super(isAsync);\n this.ngZone = ngZone;\n }\n subscribe(generatorOrNext, error, complete) {\n let schedulerFn;\n let errorFn = (_) => null;\n let completeFn = () => null;\n if (generatorOrNext && typeof generatorOrNext === 'object') {\n schedulerFn = (value) => { this.ngZone.run(() => generatorOrNext.next(value)); };\n if (generatorOrNext.error) {\n errorFn = (err) => { this.ngZone.run(() => generatorOrNext.error(err)); };\n }\n if (generatorOrNext.complete) {\n completeFn = () => { this.ngZone.run(() => generatorOrNext.complete()); };\n }\n }\n else {\n schedulerFn = (value) => { this.ngZone.run(() => generatorOrNext(value)); };\n if (error) {\n errorFn = (err) => { this.ngZone.run(() => error(err)); };\n }\n if (complete) {\n completeFn = () => { this.ngZone.run(() => complete()); };\n }\n }\n return super.subscribe(schedulerFn, errorFn, completeFn);\n }\n}\n\n/**\n * Represents the column cell template of the Grid ([more information and example]({% slug templates_columns_grid %}#toc-cell-template)).\n * Helps to customize the content of the cells. To define the cell template, nest an `` tag\n * with the `kendoGridCellTemplate` directive inside a `` tag.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `columnIndex`—The current column index. Use it as an alias for a template variable by utilizing the `let-columnIndex=\"columnIndex\"` syntax.\n * - `rowIndex`—The current data row index. Use it as an alias for a template variable by utilizing the `let-rowIndex=\"rowIndex\"` syntax.\n * - `dataItem`—The current data item. Represents the default context that will be assigned to any template variable which utilizes the `let-x` syntax—for example, `let-dataItem`.\n * - `column`—The current column instance. Use it as an alias for a template variable by utilizing the `let-column=\"column\"` syntax.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Data Row #: {{rowIndex}} /\n * {{dataItem.ProductName}}\n * ({{dataItem.Discontinued ? \"discontinued\" : \"active\"}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass CellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nCellTemplateDirective.ɵfac = function CellTemplateDirective_Factory(t) { return new (t || CellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CellTemplateDirective, selectors: [[\"\", \"kendoGridCellTemplate\", \"\"]] });\n/** @nocollapse */\nCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group-header cell template of the Grid which helps to customize the content of the group header item.\n * To define the group header template, nest an `` tag with the `kendoGridGroupHeaderTemplate`\n * directive inside ``.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `group`—The current group item.\n * - `field`—The name of the field by which data is grouped.\n * - `value`—The current group value.\n * - `aggregates`—All aggregate values for the current group.\n * - `index`—The index of the current group.\n * - `expanded`—A boolean value indicating if the group is currently expanded.\n * ([see example]({% slug groupable_grid_with_aggregates %})).\n *\n * @example\n * ```ts\n * import { process } from '@progress/kendo-data-query';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{field}}: {{value}}\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public groups = [{ field: \"ProductName\" }];\n *\n * public gridData = process([{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ], {\n * group: this.groups\n * });\n * }\n *\n * ```\n */\nclass GroupHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderTemplateDirective.ɵfac = function GroupHeaderTemplateDirective_Factory(t) { return new (t || GroupHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderTemplateDirective, selectors: [[\"\", \"kendoGridGroupHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the group-header column template of the Grid which helps to customize the content of the group headers.\n * To define the group header template, nest an `` tag with the `kendoGridGroupHeaderColumnTemplate`\n * directive inside ``. ([See example]({% slug groupable_grid_with_aggregates %})).\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `group`—The current group item.\n * - `field`—The name of the field by which data is grouped.\n * - `value`—The current group value.\n * - `aggregates`—All aggregate values for the current group.\n *\n * @example\n * ```ts\n * \n * \n * \n * Count: {{ aggregates.Discontinued.count }}\n * \n * \n * \n * ```\n */\nclass GroupHeaderColumnTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupHeaderColumnTemplateDirective.ɵfac = function GroupHeaderColumnTemplateDirective_Factory(t) { return new (t || GroupHeaderColumnTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupHeaderColumnTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupHeaderColumnTemplateDirective, selectors: [[\"\", \"kendoGridGroupHeaderColumnTemplate\", \"\"]] });\n/** @nocollapse */\nGroupHeaderColumnTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderColumnTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupHeaderColumnTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column edit-cell template of the Grid ([see example]({% slug editing_template_forms_grid %})).\n * Helps to customize the content of the edited cells. To define the cell template, nest an ``\n * tag with the `kendoGridEditTemplate` directive inside a `` tag.\n *\n * The template context contains the following fields:\n * - `formGroup`—The current [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }}).\n * If you use the Grid inside [Template-Driven Forms]({{ site.data.urls.angular['forms'] }}), it will be `undefined`.\n * - `rowIndex`—The current data row index. If inside a new item row, `rowIndex` is `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n */\nclass EditTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nEditTemplateDirective.ɵfac = function EditTemplateDirective_Factory(t) { return new (t || EditTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nEditTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditTemplateDirective, selectors: [[\"\", \"kendoGridEditTemplate\", \"\"]] });\n/** @nocollapse */\nEditTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridEditTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column group footer cell template of the Grid which helps to customize the group footer cell for the column.\n * To define the group footer template, nest an `` tag with the `kendoGridGroupFooterTemplate` directive\n * inside ``.\n *\n * The template context is set to the current aggregates and the following additional fields are passed:\n * - `column`—Defines an instance of the `ColumnComponent` option.\n * - `field`—The current column field name.\n * - `group`—The current group data item.\n * - `aggregates`—All aggregate values for the current group.\n *\n * @example\n * ```ts-preview\n * import { process } from '@progress/kendo-data-query';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Count: {{aggregates[field].count}}\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public groups = [{ field: \"ProductName\", aggregates: [{ field: \"ProductName\", aggregate: \"count\" }] }];\n *\n * public gridData = process([{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ], {\n * group: this.groups\n * });\n * }\n * ```\n */\nclass GroupFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nGroupFooterTemplateDirective.ɵfac = function GroupFooterTemplateDirective_Factory(t) { return new (t || GroupFooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nGroupFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupFooterTemplateDirective, selectors: [[\"\", \"kendoGridGroupFooterTemplate\", \"\"]] });\n/** @nocollapse */\nGroupFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupFooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridGroupFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column header cell template of the Grid\n * ([more information and example]({% slug templates_columns_grid %}#toc-header-template)).\n * Helps to customize the table header cell for the column.\n * To define a header template, nest an `` tag with the\n * [`kendoGridHeaderTemplate`]({% slug api_grid_headertemplatedirective %}) directive inside the `` tag.\n *\n * The template context is set to the current column and then the following additional fields are passed:\n * * `column`—Defines an instance of the [`ColumnComponent`]({% slug api_grid_columncomponent %}) option.\n * * `columnIndex`—Defines the current column index.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass HeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nHeaderTemplateDirective.ɵfac = function HeaderTemplateDirective_Factory(t) { return new (t || HeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: HeaderTemplateDirective, selectors: [[\"\", \"kendoGridHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the column footer cell template of the Grid\n * ([more information and example]({% slug templates_columns_grid %}#toc-footer-template)).\n * Helps to customize the table footer cell for the column.\n * To define a footer template, nest an `` tag with the\n * [`kendoGridFooterTemplate`]({% slug api_grid_footertemplatedirective %}) directive inside the `` tag.\n *\n * The template context is set to the current column and the following additional fields are passed:\n * * `column`—Defines an instance of the [`ColumnComponent`]({% slug api_grid_columncomponent %}) option.\n * * `columnIndex`—Defines the current column index.\n *\n * For more information on how to display aggregates in the footer of the Grid,\n * refer to the article on [aggregates]({% slug groupable_grid_with_aggregates %}).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * \n * {{column.field}}({{columnIndex}})\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass FooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFooterTemplateDirective.ɵfac = function FooterTemplateDirective_Factory(t) { return new (t || FooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FooterTemplateDirective, selectors: [[\"\", \"kendoGridFooterTemplate\", \"\"]] });\n/** @nocollapse */\nFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the template for the column menu in the Grid. Provides an option for\n * customizing the content of the column menu for all or for specific columns.\n * To define the content template, nest an `` tag with the\n * `kendoGridColumnMenuTemplate` directive inside the `kendo-grid` or the `` component.\n *\n * The template context is passes through the following fields:\n * - `service`—Represents the [ColumnMenuService]({% slug api_grid_columnmenuservice %}).\n * - `column`—Represents the Grid column.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }, { Field1: 'Foo1', Field2: 'Bar1' }];\n * }\n *\n * ```\n */\nclass ColumnMenuTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnMenuTemplateDirective.ɵfac = function ColumnMenuTemplateDirective_Factory(t) { return new (t || ColumnMenuTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nColumnMenuTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuTemplateDirective, selectors: [[\"\", \"kendoGridColumnMenuTemplate\", \"\"]] });\n/** @nocollapse */\nColumnMenuTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnMenuTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nconst isSpanColumn = column => column.isSpanColumn;\n/**\n * @hidden\n */\nconst isCheckboxColumn = column => column.isCheckboxColumn;\nconst isColumnContainer = column => column.isColumnGroup || isSpanColumn(column);\n/**\n * The base class for the column components of the Grid.\n */\nclass ColumnBase$1 {\n constructor(parent) {\n this.parent = parent;\n /**\n * @hidden\n */\n this.matchesMedia = true;\n /**\n * The column index after reordering.\n *\n * > `orderIndex` is a read-only property. Setting this field does not affect column order.\n */\n this.orderIndex = 0;\n /**\n * @hidden\n */\n this.isColumnGroup = false;\n /**\n * @hidden\n */\n this.isSpanColumn = false;\n /**\n * Indicates whether the column is resizable.\n * @default true\n */\n this.resizable = true;\n /**\n * Indicates whether the column is reorderable.\n * @default true\n */\n this.reorderable = true;\n /**\n * The width (in pixels) below which the user is not able to resize the column by using the UI.\n */\n this.minResizableWidth = 10;\n /**\n * Toggles the locked (frozen) state of the columns ([more information and example]({% slug locked_columns_grid %})).\n *\n * @default false\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\n this.locked = false;\n /**\n * Specifies if the column can be locked or unlocked from the column menu or by reordering the columns.\n */\n this.lockable = true;\n /**\n * Specifies if the column menu will be shown for the column.\n */\n this.columnMenu = true;\n /**\n * Specifies if the column will be included in the column-chooser list.\n */\n this.includeInChooser = true;\n /**\n * @hidden\n */\n this.headerTemplates = new QueryList();\n /**\n * @hidden\n */\n this.columnMenuTemplates = new QueryList();\n if (parent && !isColumnContainer(parent)) {\n throw new Error('Columns can be nested only inside ColumnGroupComponent');\n }\n }\n /**\n * The width of the column (in pixels).\n */\n set width(value) {\n this._width = parseInt(value, 10);\n }\n get width() { return this._width; }\n /**\n * @hidden\n */\n get level() {\n if (this.parent && isSpanColumn(this.parent)) {\n return this.parent.level;\n }\n return this.parent ? this.parent.level + 1 : 0;\n }\n /**\n * @hidden\n */\n get isLocked() {\n return this.parent ? this.parent.isLocked : this.locked;\n }\n /**\n * @hidden\n */\n get colspan() {\n return 1;\n }\n /**\n * @hidden\n */\n rowspan(totalColumnLevels) {\n return this.level < totalColumnLevels ? (totalColumnLevels - this.level) + 1 : 1;\n }\n /**\n * @hidden\n */\n get headerTemplateRef() {\n const template = this.headerTemplates.first;\n return template ? template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get footerTemplateRef() {\n return this.footerTemplate ? this.footerTemplate.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get columnMenuTemplateRef() {\n const template = this.columnMenuTemplates.first;\n return template ? template.templateRef : null;\n }\n /**\n * @hidden\n */\n get displayTitle() {\n return this.title;\n }\n /**\n * @hidden\n */\n get isVisible() {\n return !this.hidden && this.matchesMedia;\n }\n}\nColumnBase$1.ɵfac = function ColumnBase$1_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nColumnBase$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnBase$1, contentQueries: function ColumnBase$1_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, HeaderTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuTemplateDirective, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplates = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columnMenuTemplates = _t);\n } }, inputs: { resizable: \"resizable\", reorderable: \"reorderable\", minResizableWidth: \"minResizableWidth\", locked: \"locked\", lockable: \"lockable\", columnMenu: \"columnMenu\", includeInChooser: \"includeInChooser\", width: \"width\", title: \"title\", autoSize: \"autoSize\", hidden: \"hidden\", media: \"media\", style: \"style\", headerStyle: \"headerStyle\", footerStyle: \"footerStyle\", cssClass: [\"class\", \"cssClass\"], headerClass: \"headerClass\", footerClass: \"footerClass\" } });\nColumnBase$1.propDecorators = {\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n minResizableWidth: [{ type: Input }],\n title: [{ type: Input }],\n width: [{ type: Input }],\n autoSize: [{ type: Input }],\n locked: [{ type: Input }],\n hidden: [{ type: Input }],\n media: [{ type: Input }],\n lockable: [{ type: Input }],\n columnMenu: [{ type: Input }],\n includeInChooser: [{ type: Input }],\n style: [{ type: Input }],\n headerStyle: [{ type: Input }],\n footerStyle: [{ type: Input }],\n cssClass: [{ type: Input, args: ['class',] }],\n headerClass: [{ type: Input }],\n footerClass: [{ type: Input }],\n headerTemplates: [{ type: ContentChildren, args: [HeaderTemplateDirective, { descendants: false },] }],\n footerTemplate: [{ type: ContentChild, args: [FooterTemplateDirective,] }],\n columnMenuTemplates: [{ type: ContentChildren, args: [ColumnMenuTemplateDirective,] }]\n};\n\n\n/**\n * Represents the filter-cell template ([see example]({% slug builtinfiltertemplate_grid %}#toc-customizing-filter-rows)).\n */\nclass FilterCellTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterCellTemplateDirective.ɵfac = function FilterCellTemplateDirective_Factory(t) { return new (t || FilterCellTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFilterCellTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterCellTemplateDirective, selectors: [[\"\", \"kendoGridFilterCellTemplate\", \"\"]] });\n/** @nocollapse */\nFilterCellTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFilterCellTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the filter-menu template\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-customizing-filter-menus)).\n */\nclass FilterMenuTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nFilterMenuTemplateDirective.ɵfac = function FilterMenuTemplateDirective_Factory(t) { return new (t || FilterMenuTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nFilterMenuTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterMenuTemplateDirective, selectors: [[\"\", \"kendoGridFilterMenuTemplate\", \"\"]] });\n/** @nocollapse */\nFilterMenuTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridFilterMenuTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nfunction isColumnComponent(column) {\n return isPresent(column.field);\n}\n/**\n * Represents the columns of the [Angular Data Grid]({% slug overview_grid %}).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass ColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n /**\n * Allows the column headers to be clicked and the `sortChange` event emitted.\n * You have to handle the `sortChange` event yourself and sort the data.\n */\n this.sortable = true;\n /**\n * Determines if the column can be dragged to the group panel. The default value is `true`.\n * If set to `false`, you can group the columns by the column field by using the API of the Grid.\n */\n this.groupable = true;\n /**\n * Defines the editor type ([see example]({% slug editing_reactive_forms_grid %}#toc-setup)).\n * Used when the column enters the edit mode. The default value is `text`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.editor = 'text';\n /**\n * Defines the filter type that is displayed inside the filter row. The default value is `text`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.filter = 'text';\n /**\n * Defines if a filter UI will be displayed for this column. The default value is `true`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.filterable = true;\n /**\n * Defines whether the column is editable. The default value is `true`.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * ```\n */\n this.editable = true;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n get groupHeaderTemplateRef() {\n return this.groupHeaderTemplate ? this.groupHeaderTemplate.templateRef : undefined;\n }\n get groupHeaderColumnTemplateRef() {\n return this.groupHeaderColumnTemplate ? this.groupHeaderColumnTemplate.templateRef : undefined;\n }\n get groupFooterTemplateRef() {\n return this.groupFooterTemplate ? this.groupFooterTemplate.templateRef : undefined;\n }\n get editTemplateRef() {\n return this.editTemplate ? this.editTemplate.templateRef : undefined;\n }\n get filterCellTemplateRef() {\n return this.filterCellTemplate ? this.filterCellTemplate.templateRef : undefined;\n }\n get filterMenuTemplateRef() {\n return this.filterMenuTemplate ? this.filterMenuTemplate.templateRef : undefined;\n }\n get displayTitle() {\n return this.title === undefined ? this.field : this.title;\n }\n}\nColumnComponent.ɵfac = function ColumnComponent_Factory(t) { return new (t || ColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnComponent, selectors: [[\"kendo-grid-column\"]], contentQueries: function ColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupHeaderColumnTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, GroupFooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, EditTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterCellTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterMenuTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupHeaderColumnTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.groupFooterTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.editTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterCellTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.filterMenuTemplate = _t.first);\n } }, inputs: { sortable: \"sortable\", groupable: \"groupable\", editor: \"editor\", filter: \"filter\", filterable: \"filterable\", editable: \"editable\", field: \"field\", format: \"format\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnComponent.propDecorators = {\n field: [{ type: Input }],\n format: [{ type: Input }],\n sortable: [{ type: Input }],\n groupable: [{ type: Input }],\n editor: [{ type: Input }],\n filter: [{ type: Input }],\n filterable: [{ type: Input }],\n editable: [{ type: Input }],\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }],\n groupHeaderTemplate: [{ type: ContentChild, args: [GroupHeaderTemplateDirective,] }],\n groupHeaderColumnTemplate: [{ type: ContentChild, args: [GroupHeaderColumnTemplateDirective,] }],\n groupFooterTemplate: [{ type: ContentChild, args: [GroupFooterTemplateDirective,] }],\n editTemplate: [{ type: ContentChild, args: [EditTemplateDirective,] }],\n filterCellTemplate: [{ type: ContentChild, args: [FilterCellTemplateDirective,] }],\n filterMenuTemplate: [{ type: ContentChild, args: [FilterMenuTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnComponent)\n }\n ],\n selector: 'kendo-grid-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { sortable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], editor: [{\n type: Input\n }], filter: [{\n type: Input\n }], filterable: [{\n type: Input\n }], editable: [{\n type: Input\n }], field: [{\n type: Input\n }], format: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }], groupHeaderTemplate: [{\n type: ContentChild,\n args: [GroupHeaderTemplateDirective]\n }], groupHeaderColumnTemplate: [{\n type: ContentChild,\n args: [GroupHeaderColumnTemplateDirective]\n }], groupFooterTemplate: [{\n type: ContentChild,\n args: [GroupFooterTemplateDirective]\n }], editTemplate: [{\n type: ContentChild,\n args: [EditTemplateDirective]\n }], filterCellTemplate: [{\n type: ContentChild,\n args: [FilterCellTemplateDirective]\n }], filterMenuTemplate: [{\n type: ContentChild,\n args: [FilterMenuTemplateDirective]\n }] }); })();\n\n/**\n * @hidden\n */\nfunction isSpanColumnComponent(column) {\n return column.isSpanColumn;\n}\n/**\n * Represents a column which can be spanned over multiple data cells while the individual\n * header and footer cells are retained ([see example]({% slug spanned_columns_grid %})).\n * Enables you to achieve more flexible layout while keeping the built-in UI element for\n * [sorting]({% slug sorting_grid %}), [filtering]({% slug filtering_grid %}), and\n * [grouping]({% slug groupingbasics_grid %}). Wrap the columns that will be\n * merged inside the `` tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * }\n *\n * ```\n *\n * By default, the data cell displays the data for the specified fields. To further customize\n * the span-column functionality, use a [cell template]({% slug api_grid_celltemplatedirective %}).\n *\n * ```html-no-run\n * \n * \n * \n * \n *
{{ dataItem.field1 }}
\n *

{{ dataItem.field2 }}

\n *
\n *
\n * ```\n */\nclass SpanColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n /*\n * @hidden\n */\n this.isSpanColumn = true;\n this.template = new QueryList();\n this.editTemplate = new QueryList();\n /**\n * @hidden\n */\n this.childColumns = new QueryList();\n /**\n * @hidden\n */\n this.includeInChooser = false;\n this._editable = true;\n this._locked = false;\n if (parent && parent.isSpanColumn) {\n throw new Error('SpanColumn cannot be nested inside another SpanColumn');\n }\n }\n /**\n * Defines whether the edit template of the column will be rendered. The default value is `false`.\n *\n * > To enable the editing functionality for a spanned column, set an edit template for it.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * .....\n * \n * \n * \n * ```\n */\n set editable(value) {\n this._editable = value;\n }\n get editable() {\n return isPresent(this.editTemplateRef) && this._editable;\n }\n /**\n * @hidden\n * added for backwards compitability\n */\n set width(_value) {\n }\n get width() {\n return this.childColumns.reduce((total, column) => total + column.width, 0);\n }\n /**\n * @hidden\n */\n get leafIndex() {\n return this.childColumns.first.leafIndex;\n }\n /**\n * @hidden\n */\n get templateRef() {\n const template = this.template.first;\n return template ? template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get editTemplateRef() {\n const editTemplate = this.editTemplate.first;\n return editTemplate ? editTemplate.templateRef : undefined;\n }\n /**\n * @hidden\n */\n get colspan() {\n return this.childColumns.filter(c => c.isVisible).length;\n }\n /**\n * Toggles the locked (frozen) state of the columns. Locked columns are visible\n * at all times during the horizontal scrolling of the Grid.\n *\n * For the option to work properly, make sure that:\n * - Scrolling is enabled.\n * - The `height` option of the Grid is set.\n * - The widths of all Grid columns are explicitly set in pixels. In this way,\n * the Grid adjusts the layout of the locked and unlocked columns.\n *\n * @default false\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\n set locked(value) {\n this._locked = value;\n }\n get locked() {\n return this._locked || this.childColumns.some(c => c.locked);\n }\n get childrenArray() {\n return this.childColumns.toArray();\n }\n get hasChildren() {\n return this.childColumns.length > 0;\n }\n}\nSpanColumnComponent.ɵfac = function SpanColumnComponent_Factory(t) { return new (t || SpanColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nSpanColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SpanColumnComponent, selectors: [[\"kendo-grid-span-column\"]], contentQueries: function SpanColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, EditTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.editTemplate = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.childColumns = _t);\n } }, inputs: { editable: \"editable\", locked: \"locked\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => SpanColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function SpanColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nSpanColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nSpanColumnComponent.propDecorators = {\n template: [{ type: ContentChildren, args: [CellTemplateDirective, { descendants: false },] }],\n editTemplate: [{ type: ContentChildren, args: [EditTemplateDirective, { descendants: false },] }],\n childColumns: [{ type: ContentChildren, args: [ColumnComponent,] }],\n editable: [{ type: Input }],\n locked: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SpanColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => SpanColumnComponent)\n }\n ],\n selector: 'kendo-grid-span-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { template: [{\n type: ContentChildren,\n args: [CellTemplateDirective, { descendants: false }]\n }], editTemplate: [{\n type: ContentChildren,\n args: [EditTemplateDirective, { descendants: false }]\n }], childColumns: [{\n type: ContentChildren,\n args: [ColumnComponent]\n }], editable: [{\n type: Input\n }], locked: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst expandColumns = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ? column.childrenArray : [column]), []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst expandColumnsWithSpan = (columns) => (columns.reduce((acc, column) => acc.concat(isSpanColumnComponent(column) ?\n [column].concat(column.childrenArray) :\n [column]), []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst columnsToRender = (columns) => (expandColumns(columns).filter(x => x.isVisible));\nconst sumProp = (prop) => (array) => (array || []).reduce((prev, curr) => prev + (curr[prop] || 0), 0);\n/**\n * @hidden\n */\nconst sumColumnWidths = sumProp('width');\n/**\n * @hidden\n */\nconst columnsSpan = sumProp('colspan');\n// tslint:disable-next-line:max-line-length\nconst validField = new RegExp(`^[$A-Z\\_a-z][$A-Z\\_a-z0-9\\\\.]*$`);\n/**\n * @hidden\n */\nconst isValidFieldName = (fieldName) => !isNullOrEmptyString(fieldName) && validField.test(fieldName) &&\n fieldName[0] !== \".\" && fieldName[fieldName.length - 1] !== \".\";\n/**\n * @hidden\n */\nconst children = column => column.children.filter(child => child !== column);\n/**\n * @hidden\n */\nconst leafColumns = columns => {\n return columns.reduce((acc, column) => {\n if (column.isColumnGroup) {\n acc = acc.concat(leafColumns(children(column)));\n }\n else if (column.isSpanColumn) {\n acc = acc.concat(column.childrenArray);\n }\n else {\n acc.push(column);\n }\n return acc;\n }, []).filter(x => x.isVisible); // tslint:disable-line:align\n};\n/**\n * @hidden\n */\nconst someLeafColumn = (callback, ...columns) => leafColumns(columns).some(callback);\n/**\n * @hidden\n */\nconst resizableColumns = columns => columns.filter(column => isTruthy(column.resizable) && column.isVisible);\n/**\n * @hidden\n */\nconst sortColumns = (columns) => orderBy(columns, [{ field: 'orderIndex', dir: 'asc' }]);\n/**\n * @hidden\n */\nconst isInSpanColumn = (column) => isTruthy(column.parent) && isSpanColumnComponent(column.parent);\n\n/**\n * @hidden\n */\nfunction isColumnGroupComponent(column) {\n return column.isColumnGroup;\n}\n/**\n * Represents the column group header of the Grid\n * ([more information and examples]({% slug multicolumnheaders_columns_grid %})).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Column index: {{columnIndex}} / column title: {{column.title}}\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass ColumnGroupComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n /**\n * @hidden\n */\n this.includeInChooser = false;\n /**\n * @hidden\n */\n this.isColumnGroup = true;\n /**\n * @hidden\n */\n this.minResizableWidth = 10;\n if (parent && parent.isSpanColumn) {\n throw new Error('ColumnGroupComponent cannot be nested inside SpanColumnComponent');\n }\n }\n /**\n * @hidden\n */\n rowspan() {\n return 1;\n }\n /**\n * @hidden\n */\n get colspan() {\n if (!this.children || this.children.length === 1) {\n return 1;\n }\n return columnsSpan(this.children\n .filter(child => child !== this && child.isVisible));\n }\n /**\n * @hidden\n */\n get leafIndex() {\n return this.children ? (this.firstChild || {}).leafIndex : -1;\n }\n get childrenArray() {\n return this.children.filter(c => c !== this);\n }\n get hasChildren() {\n return Boolean(this.firstChild);\n }\n get firstChild() {\n return this.children.find(column => column !== this);\n }\n}\nColumnGroupComponent.ɵfac = function ColumnGroupComponent_Factory(t) { return new (t || ColumnGroupComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nColumnGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnGroupComponent, selectors: [[\"kendo-grid-column-group\"]], contentQueries: function ColumnGroupComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.children = _t);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnGroupComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ColumnGroupComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nColumnGroupComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nColumnGroupComponent.propDecorators = {\n children: [{ type: ContentChildren, args: [ColumnBase$1,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnGroupComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => ColumnGroupComponent)\n }\n ],\n selector: 'kendo-grid-column-group',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { children: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }] }); })();\n\n/**\n * Represents the detail template of the Grid ([more information and examples]({% slug detailrowtemplate_grid %})).\n * To define the detail template, nest an `` tag with the `kendoGridDetailTemplate` directive inside a `` tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n *
\n *
{{dataItem.Category?.CategoryName}}
\n * {{dataItem.Category?.Description}}\n *
\n *
\n *
\n * `\n * })\n *\n * class AppComponent {\n * public data = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 3,\n * \"ProductName\": \"Aniseed Syrup\",\n * \"UnitPrice\": 10.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 2,\n * \"CategoryName\": \"Condiments\",\n * \"Description\": \"Sweet and savory sauces, relishes, spreads, and seasonings\"\n * }\n * }];\n *\n * }\n *\n * ```\n *\n */\nclass DetailTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._condition = () => true;\n }\n /**\n * Defines the function that indicates if a given detail row and the associated **Expand** or **Collapse** button will be displayed.\n */\n set showIf(fn) {\n if (typeof fn !== 'function') {\n throw new Error(`showIf must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._condition = fn;\n }\n get showIf() {\n return this._condition;\n }\n}\nDetailTemplateDirective.ɵfac = function DetailTemplateDirective_Factory(t) { return new (t || DetailTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDetailTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DetailTemplateDirective, selectors: [[\"\", \"kendoGridDetailTemplate\", \"\"]], inputs: { showIf: [\"kendoGridDetailTemplateShowIf\", \"showIf\"] } });\n/** @nocollapse */\nDetailTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\nDetailTemplateDirective.propDecorators = {\n showIf: [{ type: Input, args: [\"kendoGridDetailTemplateShowIf\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DetailTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridDetailTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, { showIf: [{\n type: Input,\n args: [\"kendoGridDetailTemplateShowIf\"]\n }] }); })();\n\nconst canCreateElement = () => isDocumentAvailable() && document.createElement;\nlet cachedScrollbarWidth = null;\nlet cachedPixelRatio;\nlet cachedRtlScrollLeft = null;\nfunction scrollbarWidth() {\n if (cachedScrollbarWidth === null && canCreateElement()) {\n cachedPixelRatio = window.devicePixelRatio || 1;\n const div = document.createElement(\"div\");\n div.style.cssText = \"overflow:scroll;overflow-x:hidden;zoom:1;clear:both;display:block\";\n div.innerHTML = \" \";\n document.body.appendChild(div);\n cachedScrollbarWidth = div.offsetWidth - div.scrollWidth;\n document.body.removeChild(div);\n }\n return cachedScrollbarWidth;\n}\nfunction rtlScrollLeft() {\n if (cachedRtlScrollLeft === null && canCreateElement()) {\n const div = document.createElement(\"div\");\n div.style.cssText = \"overflow:scroll;zoom:1;clear:both;display:block;width:100px;visibility:hidden;position:absolute;left:-10000px;direction:rtl;\";\n div.innerHTML = \"
\";\n document.body.appendChild(div);\n const initial = div.scrollLeft;\n div.scrollLeft = -1;\n cachedRtlScrollLeft = div.scrollLeft < 0 ? div.scrollLeft : initial;\n document.body.removeChild(div);\n }\n return cachedRtlScrollLeft;\n}\n/**\n * @hidden\n * move to kendo-common\n */\nclass BrowserSupportService {\n constructor(zone, changeDetector) {\n this.zone = zone;\n this.changeDetector = changeDetector;\n this.changes = new EventEmitter();\n if (typeof window === 'undefined') {\n return;\n }\n this.zone.runOutsideAngular(() => {\n this.subscriptions = fromEvent(window, 'resize').pipe(auditTime(100)).subscribe(() => {\n if (cachedPixelRatio !== window.devicePixelRatio) {\n zone.run(() => {\n cachedScrollbarWidth = null;\n this.changes.emit();\n this.changeDetector.markForCheck();\n });\n }\n });\n });\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n this.subscriptions = null;\n }\n }\n get scrollbarWidth() {\n return scrollbarWidth();\n }\n get rtlScrollLeft() {\n return rtlScrollLeft();\n }\n}\nBrowserSupportService.ɵfac = function BrowserSupportService_Factory(t) { return new (t || BrowserSupportService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc0.ChangeDetectorRef)); };\nBrowserSupportService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BrowserSupportService, factory: BrowserSupportService.ɵfac });\n/** @nocollapse */\nBrowserSupportService.ctorParameters = () => [\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BrowserSupportService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/* tslint:disable:use-life-cycle-interface */\nconst isGroupItem = (source) => {\n return source.items !== undefined &&\n source.field !== undefined;\n};\nconst isVirtualGroupItem = (source) => {\n return source.offset !== undefined &&\n source.skipHeader !== undefined;\n};\nconst flattenGroups = (groups) => (groups.reduce((acc, curr) => {\n if (isGroupItem(curr)) {\n return acc.concat(flattenGroups(curr.items));\n }\n return acc.concat([curr]);\n}, []) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst itemAt = (data, index) => {\n const first = data[0];\n if (isPresent(first) && isGroupItem(first)) {\n return flattenGroups(data)[index];\n }\n return data[index];\n};\n/**\n * @hidden\n */\nconst getIterator$1 = (data, { footers, level, dataIndex, parentGroupIndex, groupIndex }) => {\n const first = data[0];\n if (isPresent(first) && isGroupItem(first)) {\n if (isVirtualGroupItem(first)) {\n groupIndex = isPresent(first.offset) ? first.offset : groupIndex;\n }\n //tslint:disable-next-line:no-use-before-declare\n return new GroupIterator(data, footers, level, dataIndex, parentGroupIndex, groupIndex);\n }\n //tslint:disable-next-line:no-use-before-declare\n return new ItemIterator(data, dataIndex, parentGroupIndex);\n};\nclass ArrayIterator {\n constructor(arr, idx = 0) {\n this.arr = arr;\n this.idx = idx;\n this.arr = arr || [];\n }\n [iterator]() {\n return this;\n }\n next() {\n return this.idx < this.arr.length ? {\n done: false,\n value: this.arr[this.idx++]\n } : { done: true, value: undefined };\n }\n}\n/**\n * @hidden\n */\nclass Iterator {\n constructor(arr, dataIndex = 0, resultMap = (x) => x) {\n this.dataIndex = dataIndex;\n this.resultMap = resultMap;\n const iter = arr[iterator];\n this._innerIterator = iter ? arr[iterator]() : new ArrayIterator(arr);\n }\n [iterator]() {\n return this;\n }\n next() {\n return this.resultMap(this._innerIterator.next(), this.dataIndex++);\n }\n}\n/**\n * @hidden\n */\nclass ItemIterator extends Iterator {\n constructor(arr, dataIndex, groupIndex) {\n super(arr, dataIndex, (x, idx) => ({\n done: x.done,\n value: {\n data: x.value,\n groupIndex: groupIndex,\n index: idx,\n type: 'data'\n }\n }));\n }\n /**\n * The index of the next record.\n * @readonly\n * @type {number}\n */\n get index() {\n return this.dataIndex;\n }\n}\nconst prefix = (s, n) => {\n const p = s ? s + \"_\" : s;\n return `${p}${n}`;\n};\n/**\n * @hidden\n */\nclass GroupIterator {\n constructor(arr, outputFooters = false, level = 0, dataIndex = 0, parentIndex = \"\", groupIndex = 0) {\n this.arr = arr;\n this.outputFooters = outputFooters;\n this.level = level;\n this.dataIndex = dataIndex;\n this.parentIndex = parentIndex;\n this.groupIndex = groupIndex;\n this.currentGroupIndex = \"\";\n this.arr = arr || [];\n this._iterator = new Iterator(this.arr, this.dataIndex);\n }\n [iterator]() {\n return this;\n }\n nextGroupItem() {\n this.current = this._iterator.next().value;\n this._innerIterator = null;\n if (this.current) {\n this.currentGroupIndex = prefix(this.parentIndex, this.groupIndex++);\n return {\n done: false,\n value: {\n data: this.current,\n index: this.currentGroupIndex,\n level: this.level,\n type: 'group'\n }\n };\n }\n else {\n this.current = null;\n return { done: true, value: undefined };\n }\n }\n footerItem() {\n if (this.current) {\n const group = this.current;\n this.current = null;\n return {\n done: false,\n value: {\n data: group,\n groupIndex: this.currentGroupIndex,\n level: this.level,\n type: 'footer'\n }\n };\n }\n else {\n this.current = null;\n return { done: true, value: undefined };\n }\n }\n innerIterator(group) {\n if (!this._innerIterator) {\n this._innerIterator = getIterator$1(group.items, {\n dataIndex: this.dataIndex,\n footers: this.outputFooters,\n level: this.level + 1,\n parentGroupIndex: this.currentGroupIndex\n });\n }\n return this._innerIterator;\n }\n nextDataItem(group) {\n const iterator$$1 = this.innerIterator(group);\n const result = iterator$$1.next();\n if (isPresent(result.value) && !result.done && result.value.type === \"data\") {\n this.dataIndex = result.value.index + 1;\n }\n return !result.done ? result : undefined;\n }\n next() {\n if (!isPresent(this.current)) {\n return this.nextGroupItem();\n }\n const item = this.nextDataItem(this.current);\n return item ? item : (this.outputFooters ? this.footerItem() : this.nextGroupItem());\n }\n /**\n * The index of the last iterated data record.\n * @readonly\n * @type {number}\n */\n get index() {\n return this.dataIndex + 1;\n }\n}\n\n/**\n * @hidden\n */\nclass DataResultIterator {\n constructor(source, skip = 0, groupFooters = false) {\n this.source = source;\n this.skip = skip;\n this.groupFooters = groupFooters;\n this.source = this.source ? this.source : [];\n this.isObject = this.isGridDataResult(this.source);\n }\n isGridDataResult(source) {\n return source.total !== undefined && source.data !== undefined;\n }\n get total() {\n return this.isObject ? this.source.total : this.source.length;\n }\n get data() {\n return this.isObject ? this.source.data : this.source;\n }\n map(fn) {\n return this.data.map(fn);\n }\n filter(fn) {\n return this.data.filter(fn);\n }\n reduce(fn, init) {\n return this.data.reduce(fn, init);\n }\n forEach(fn) {\n this.data.forEach(fn);\n }\n some(fn) {\n return this.data.some(fn);\n }\n [iterator]() {\n return getIterator$1(this.data, {\n dataIndex: this.skip,\n footers: this.groupFooters,\n groupIndex: this.skip\n });\n }\n toString() { return this.data.toString(); }\n}\n/**\n * @hidden\n */\nclass DataCollection {\n constructor(accessor) {\n this.accessor = accessor;\n }\n get total() { return this.accessor().total; }\n get length() { return this.accessor().data.length; }\n get first() { return this.accessor().data[0]; }\n get last() { return this.accessor().data[this.length - 1]; }\n at(index) {\n return itemAt(this.accessor().data, index);\n }\n map(fn) { return this.accessor().map(fn); }\n filter(fn) {\n return this.accessor().filter(fn);\n }\n reduce(fn, init) {\n return this.accessor().reduce(fn, init);\n }\n forEach(fn) {\n this.accessor().forEach(fn);\n }\n some(fn) {\n return this.accessor().some(fn);\n }\n [iterator]() {\n return this.accessor()[iterator]();\n }\n toString() { return this.accessor().toString(); }\n}\n\n/* tslint:disable:no-input-rename */\n/**\n * @hidden\n */\nclass Selection {\n constructor(grid, cd) {\n this.grid = grid;\n this.cd = cd;\n /**\n * Defines the collection that will store the selected item keys.\n */\n this.selectedKeys = [];\n /**\n * Fires when the `selectedKeys` collection has been updated.\n */\n this.selectedKeysChange = new EventEmitter();\n this.init();\n }\n init() {\n if (!isPresent(this.grid.rowSelected)) {\n this.grid.rowSelected = (row) => {\n return this.selectedKeys.indexOf(this.getItemKey(row)) >= 0;\n };\n }\n if (!isPresent(this.grid.cellSelected)) {\n this.grid.cellSelected = (row, column, colIndex) => {\n const contender = this.getSelectionItem(row, column, colIndex);\n return {\n selected: this.selectedKeys.some(item => item.columnKey === contender.columnKey && item.itemKey === contender.itemKey),\n item: contender\n };\n };\n }\n this.selectionChangeSubscription = this.grid\n .selectionChange\n .subscribe(this.onSelectionChange.bind(this));\n }\n /**\n * @hidden\n */\n destroy() {\n this.selectionChangeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n reset() {\n this.selectedKeys = [];\n }\n getItemKey(row) {\n if (this.selectionKey) {\n if (typeof this.selectionKey === \"string\") {\n return row.dataItem[this.selectionKey];\n }\n if (typeof this.selectionKey === \"function\") {\n return this.selectionKey(row);\n }\n }\n return row.index;\n }\n getSelectionItem(row, col, colIndex) {\n const itemIdentifiers = {};\n itemIdentifiers.itemKey = this.getItemKey(row);\n if (!isPresent(col) && !isPresent(colIndex)) {\n return itemIdentifiers;\n }\n if (this.columnKey) {\n if (typeof this.columnKey === \"string\") {\n itemIdentifiers.columnKey = row.dataItem[this.columnKey];\n }\n if (typeof this.columnKey === \"function\") {\n itemIdentifiers.columnKey = this.columnKey(col, colIndex);\n }\n }\n return {\n itemKey: itemIdentifiers.itemKey,\n columnKey: itemIdentifiers.columnKey ? itemIdentifiers.columnKey : colIndex\n };\n }\n onSelectionChange(selection) {\n if (selection.selectedRows) {\n selection.deselectedRows.forEach((item) => {\n const itemKey = this.getItemKey(item);\n const itemIndex = this.selectedKeys.indexOf(itemKey);\n if (itemIndex >= 0) {\n this.selectedKeys.splice(itemIndex, 1);\n }\n });\n if (this.grid.selectableSettings.mode === \"single\" && this.selectedKeys.length > 0) {\n this.reset();\n }\n selection.selectedRows.forEach((item) => {\n const itemKey = this.getItemKey(item);\n if (this.selectedKeys.indexOf(itemKey) < 0) {\n this.selectedKeys.push(itemKey);\n }\n });\n }\n else {\n selection.deselectedCells.forEach((item) => {\n const itemIndex = this.getCellSelectionItemIndex(item);\n if (itemIndex >= 0) {\n this.selectedKeys.splice(itemIndex, 1);\n }\n });\n if (this.grid.selectableSettings.mode === \"single\" && this.selectedKeys.length > 0) {\n this.reset();\n }\n selection.selectedCells.forEach((item) => {\n const itemIndex = this.getCellSelectionItemIndex(item);\n if (itemIndex < 0) {\n this.selectedKeys.push(item);\n }\n });\n }\n this.cd.markForCheck();\n this.selectedKeysChange.emit(this.selectedKeys);\n }\n getCellSelectionItemIndex(item) {\n return this.selectedKeys.findIndex(selectedItem => selectedItem.itemKey === item.itemKey && selectedItem.columnKey === item.columnKey);\n }\n}\nSelection.ɵfac = function Selection_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nSelection.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Selection, inputs: { selectedKeys: \"selectedKeys\", selectionKey: [\"kendoGridSelectBy\", \"selectionKey\"], columnKey: \"columnKey\" }, outputs: { selectedKeysChange: \"selectedKeysChange\" } });\nSelection.propDecorators = {\n selectedKeys: [{ type: Input }],\n selectionKey: [{ type: Input, args: [\"kendoGridSelectBy\",] }],\n columnKey: [{ type: Input }],\n selectedKeysChange: [{ type: Output }]\n};\n\n\nconst reset = (...lists) => {\n let diff = false;\n for (let idx = 0; idx < lists.length; idx++) {\n const [list, columns] = lists[idx];\n diff = diff || list.length !== columns.length;\n list.reset(columns);\n }\n return diff;\n};\n/**\n * @hidden\n */\nclass ColumnsContainer {\n constructor(columns) {\n this.columns = columns;\n this.allColumns = new QueryList();\n this.leafColumns = new QueryList();\n this.lockedColumns = new QueryList();\n this.nonLockedColumns = new QueryList();\n this.lockedLeafColumns = new QueryList();\n this.nonLockedLeafColumns = new QueryList();\n this.totalLevels = 0;\n this.changes = new EventEmitter();\n this.leafColumnsToRender = [];\n this.lockedColumnsToRender = [];\n this.nonLockedColumnsToRender = [];\n this.hasGroupHeaderColumn = false;\n this.hasGroupFooter = false;\n this.hasFooter = false;\n this.unlockedWidth = 0;\n }\n refresh() {\n const currentLevels = this.totalLevels;\n const leafColumns$$1 = new Array();\n const lockedLeafColumns = new Array();\n const nonLockedLeafColumns = new Array();\n const lockedColumns = new Array();\n const nonLockedColumns = new Array();\n const allColumns = new Array();\n const leafColumnsToRender = new Array();\n const lockedColumnsToRender = new Array();\n const nonLockedColumnsToRender = new Array();\n let hasGroupHeaderColumn = false;\n let hasGroupFooter = false;\n let hasFooter = false;\n let unlockedWidth = 0;\n let leafIndex = 0;\n this.totalLevels = 0;\n this.columns().forEach(column => {\n const containerLeafColumns = column.isLocked === true ? lockedLeafColumns : nonLockedLeafColumns;\n const containerColumns = column.isLocked === true ? lockedColumns : nonLockedColumns;\n const toRenderContainer = column.isLocked === true ? lockedColumnsToRender : nonLockedColumnsToRender;\n if (!isColumnGroupComponent(column)) {\n containerLeafColumns.push(column);\n leafColumns$$1.push(column);\n leafColumnsToRender.push.apply(leafColumnsToRender, columnsToRender([column]));\n toRenderContainer.push.apply(toRenderContainer, columnsToRender([column]));\n hasGroupHeaderColumn = hasGroupHeaderColumn || someLeafColumn(leaf => Boolean(leaf.groupHeaderColumnTemplateRef), column);\n hasGroupFooter = hasGroupFooter || someLeafColumn(leaf => Boolean(leaf.groupFooterTemplateRef), column);\n hasFooter = hasFooter || someLeafColumn(leaf => Boolean(leaf.footerTemplateRef), column);\n if (!column.isLocked) {\n unlockedWidth += column.width || 0;\n }\n if (column.isSpanColumn) {\n column.childColumns.forEach(c => {\n c.leafIndex = leafIndex++;\n });\n }\n else {\n column.leafIndex = leafIndex++;\n }\n }\n containerColumns.push(column);\n allColumns.push(column);\n this.totalLevels = column.level > this.totalLevels ? column.level : this.totalLevels;\n });\n this.hasGroupHeaderColumn = hasGroupHeaderColumn;\n this.hasGroupFooter = hasGroupFooter;\n this.hasFooter = hasFooter;\n this.leafColumnsToRender = leafColumnsToRender;\n this.lockedColumnsToRender = lockedColumnsToRender;\n this.nonLockedColumnsToRender = nonLockedColumnsToRender;\n this.unlockedWidth = unlockedWidth;\n const changes = reset([this.leafColumns, leafColumns$$1], [this.lockedLeafColumns, lockedLeafColumns], [this.nonLockedLeafColumns, nonLockedLeafColumns], [this.lockedColumns, lockedColumns], [this.allColumns, allColumns], [this.nonLockedColumns, nonLockedColumns]) || currentLevels !== this.totalLevels;\n if (changes) {\n this.changes.emit();\n }\n return changes;\n }\n}\n\nconst forEachColumn = (list, callback) => {\n list.forEach((column) => {\n callback(column);\n if (column.isColumnGroup && column.hasChildren) {\n forEachColumn(column.childrenArray, callback);\n }\n });\n};\nconst forEachLevel = (list, callback) => {\n sortColumns(list)\n .forEach((column) => {\n callback(column);\n if (column.isColumnGroup && column.hasChildren) {\n forEachLevel(column.childrenArray, callback);\n }\n });\n};\nconst filterHierarchy = (list, predicate) => {\n const result = [];\n sortColumns(list)\n .forEach((column) => {\n if (predicate(column)) {\n if (column.isColumnGroup) {\n const children$$1 = filterHierarchy(column.childrenArray, predicate);\n if (children$$1.length) {\n result.push(column, ...children$$1);\n }\n }\n else if (!column.isSpanColumn || filterHierarchy(column.childrenArray, predicate).length) {\n result.push(column);\n }\n }\n });\n return result;\n};\n/**\n * @hidden\n */\nclass ColumnList {\n constructor(columns) {\n this.columns = columns;\n }\n static empty() {\n return new ColumnList(new QueryList());\n }\n forEach(callback) {\n forEachColumn(this.columns, callback);\n }\n filter(callback) {\n const result = [];\n forEachColumn(this.columns, (column) => {\n if (callback(column)) {\n result.push(column);\n }\n });\n return result;\n }\n filterHierarchy(predicate) {\n return filterHierarchy(this.columns.toArray(), predicate);\n }\n filterSort(callback) {\n const result = [];\n forEachLevel(this.columns.toArray(), (column) => {\n if (callback(column)) {\n result.push(column);\n }\n });\n return result;\n }\n toArray() {\n const result = [];\n forEachColumn(this.columns, (column) => {\n result.push(column);\n });\n return result;\n }\n rootColumns() {\n return this.columns.toArray();\n }\n}\n\n/**\n * @hidden\n */\nclass GroupInfoService {\n constructor() {\n this._columnList = ColumnList.empty;\n }\n get columns() {\n return expandColumns(this._columnList().toArray()).filter(isColumnComponent);\n }\n registerColumnsContainer(columns) {\n this._columnList = columns;\n }\n formatForGroup(item) {\n const column = this.columnForGroup(item);\n return column ? column.format : \"\";\n }\n isGroupable(groupField) {\n const [column] = this.columns.filter(x => x.field === groupField);\n return column ? column.groupable : true;\n }\n groupTitle(item) {\n const column = this.columnForGroup(item);\n return column ? (column.title || column.field) : this.groupField(item);\n }\n groupHeaderTemplate(item) {\n const column = this.columnForGroup(item);\n return column ? column.groupHeaderTemplateRef || column.groupHeaderColumnTemplateRef : undefined;\n }\n groupField(group) {\n return group.data ? group.data.field : group.field;\n }\n columnForGroup(group) {\n const field = this.groupField(group);\n const [column] = this.columns.filter(x => x.field === field);\n return column;\n }\n}\nGroupInfoService.ɵfac = function GroupInfoService_Factory(t) { return new (t || GroupInfoService)(); };\nGroupInfoService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: GroupInfoService, factory: GroupInfoService.ɵfac });\n\n\n/**\n * @hidden\n */\nclass ChangeNotificationService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new EventEmitter();\n }\n notify() {\n if (!this.subscription || this.subscription.closed) {\n this.subscription = this.ngZone.onStable\n .asObservable().pipe(take(1))\n .subscribe(() => this.changes.emit());\n }\n }\n}\nChangeNotificationService.ɵfac = function ChangeNotificationService_Factory(t) { return new (t || ChangeNotificationService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nChangeNotificationService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ChangeNotificationService, factory: ChangeNotificationService.ɵfac });\n/** @nocollapse */\nChangeNotificationService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChangeNotificationService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * Represents the no-records template of the Grid. Provides an option to customize the\n * appearance of the item that is displayed when no data is present. To define the no-records template,\n * nest an `` tag with the `kendoGridNoRecordsTemplate` directive inside ``.\n *\n * > When the locked columns of the Grid are in use, the template is displayed in the non-locked part of the content.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * There are not products. Click here to refresh.\n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data = [];\n * public refresh() {\n * this.data = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 1,\n * \"CategoryName\": \"Beverages\",\n * \"Description\": \"Soft drinks, coffees, teas, beers, and ales\"\n * }\n * }, {\n * \"ProductID\": 3,\n * \"ProductName\": \"Aniseed Syrup\",\n * \"UnitPrice\": 10.0000,\n * \"Discontinued\": false,\n * \"Category\": {\n * \"CategoryID\": 2,\n * \"CategoryName\": \"Condiments\",\n * \"Description\": \"Sweet and savory sauces, relishes, spreads, and seasonings\"\n * }\n * }];\n *\n * }\n * }\n *\n * ```\n */\nclass NoRecordsTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nNoRecordsTemplateDirective.ɵfac = function NoRecordsTemplateDirective_Factory(t) { return new (t || NoRecordsTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nNoRecordsTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NoRecordsTemplateDirective, selectors: [[\"\", \"kendoGridNoRecordsTemplate\", \"\"]] });\n/** @nocollapse */\nNoRecordsTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NoRecordsTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridNoRecordsTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\nconst set = value => pair => pair.forEach(x => x.style.height = value);\nconst clearHeight = pairs => pairs\n .filter(([left, right]) => left.style.height || right.style.height)\n .forEach(set(\"\"));\nconst zip$1 = (arr1, arr2) => {\n const result = [];\n for (let idx = 0, len = arr1.length; idx < len; idx++) {\n if (!arr2[idx]) {\n break;\n }\n result.push([arr1[idx], arr2[idx]]);\n }\n return result;\n};\nconst setHeight = heights => (row, idx) => set(`${heights[idx] + 1}px`)(row);\nconst getHeights = rows => rows.map(([left, right]) => {\n const height = left.offsetHeight;\n const offsetHeight2 = right.offsetHeight;\n if (height < offsetHeight2) {\n return offsetHeight2;\n }\n return height;\n});\n/**\n * @hidden\n */\nconst syncRowsHeight = (table1, table2) => {\n const activeElement = document.activeElement;\n const rows = zip$1(table1.rows, table2.rows);\n clearHeight(rows);\n const heights = getHeights(rows);\n [table1, table2].forEach(x => x.style.display = 'none');\n rows.forEach(setHeight(heights));\n [table1, table2].forEach(x => x.style.display = '');\n if (document.activeElement !== activeElement &&\n (table1.contains(activeElement) || table2.contains(activeElement))) {\n activeElement.focus();\n }\n};\n\n/**\n * Represents a service to set the filter descriptor\n * ([see example]({% slug reusablecustomfilters_grid %})).\n */\nclass FilterService {\n constructor() {\n /**\n * Fires when the filter descriptors is set.\n */\n this.changes = new Subject();\n }\n /**\n * Sets the filter descriptor.\n *\n * @param {CompositeFilterDescriptor} value - The filter descriptor that will be set.\n */\n filter(value) {\n this.changes.next(value);\n }\n}\nFilterService.ɵfac = function FilterService_Factory(t) { return new (t || FilterService)(); };\nFilterService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FilterService, factory: FilterService.ɵfac });\n\n\n/**\n * Represents the pager template which helps to customize the pager appearance in the Grid. To define a pager\n * template, nest an `` tag with the `kendoPagerTemplate` directive inside ``.\n *\n * The template context provides the following fields:\n * * `currentPage`—The index of the displayed page.\n * * `pageSize`—The value of the current `pageSize`.\n * * `skip`—The current skip value.\n * * `total`—The total number of records.\n * * `totalPages`—The total number of available pages.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * Current page: {{currentPage}}\n * \n *\n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass PagerTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPagerTemplateDirective.ɵfac = function PagerTemplateDirective_Factory(t) { return new (t || PagerTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPagerTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PagerTemplateDirective, selectors: [[\"\", \"kendoPagerTemplate\", \"\"]] });\n/** @nocollapse */\nPagerTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPagerTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nclass PDFService {\n constructor() {\n this.savePDF = new EventEmitter();\n this.drawPDF = new EventEmitter();\n this.exportClick = new EventEmitter();\n this.dataChanged = new EventEmitter();\n }\n save(component) {\n this.emitEvent(this.savePDF, component);\n }\n draw(component, promise) {\n this.emitEvent(this.drawPDF, { component, promise });\n }\n emitEvent(emitter, args) {\n if (emitter.observers.length === 0) {\n if (isDevMode()) {\n throw new Error('Creating PDF requires including the PDFModule and adding the component.');\n }\n }\n else {\n emitter.emit(args);\n }\n }\n}\nPDFService.ɵfac = function PDFService_Factory(t) { return new (t || PDFService)(); };\nPDFService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PDFService, factory: PDFService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Arguments for the `pdfExport` event.\n */\nclass PDFExportEvent extends PreventableEvent {\n}\n\n/**\n * @hidden\n */\nclass SuspendService {\n constructor() {\n this.scroll = false;\n }\n}\nSuspendService.ɵfac = function SuspendService_Factory(t) { return new (t || SuspendService)(); };\nSuspendService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SuspendService, factory: SuspendService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SuspendService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/* tslint:disable: object-literal-sort-keys */\nconst bootstrapToMedia = (media) => (({\n \"xs\": \"(max-width: 576px)\",\n \"sm\": \"(min-width: 576px)\",\n \"md\": \"(min-width: 768px)\",\n \"lg\": \"(min-width: 992px)\",\n \"xl\": \"(min-width: 1200px)\"\n})[media] || media);\n/* tslint:enable: object-literal-sort-keys */\nconst browserMatchMedia = (media) => window.matchMedia(media).matches;\n/**\n * @hidden\n */\nclass ResponsiveService {\n constructor() {\n /**\n * @hidden\n */\n this.matchMedia = browserMatchMedia;\n }\n /**\n * @hidden\n */\n matchesMedia(media) {\n return !media || this.matchMedia(bootstrapToMedia(media));\n }\n}\nResponsiveService.ɵfac = function ResponsiveService_Factory(t) { return new (t || ResponsiveService)(); };\nResponsiveService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ResponsiveService, factory: ResponsiveService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResponsiveService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ExcelService {\n constructor() {\n this.saveToExcel = new EventEmitter();\n this.exportClick = new EventEmitter();\n }\n save(component) {\n if (this.saveToExcel.observers.length === 0) {\n if (isDevMode()) {\n throw new Error('Saving excel requires including the ExcelModule and adding the component.');\n }\n }\n else {\n this.saveToExcel.emit(component);\n }\n }\n}\nExcelService.ɵfac = function ExcelService_Factory(t) { return new (t || ExcelService)(); };\nExcelService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ExcelService, factory: ExcelService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Represents the toolbar template of the Grid.\n *\n * The template context has the following field:\n * - `position`—The position at which the toolbar template is rendered. The possible values are \"top\" and \"bottom\".\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n *
\n * \n *
\n * \n *
\n * \n *
\n *
\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public position: 'top' | 'bottom' | 'both' = 'top';\n *\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n *\n * public onClick(): void {\n * console.log(\"button was clicked\");\n * }\n *\n * public positionChange({ target }): void {\n * this.position = target.value;\n * }\n * }\n *\n * ```\n */\nclass ToolbarTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n this._position = \"top\";\n }\n /**\n * The position of the toolbar ([see example]({% slug toolbartemplate_grid %})).\n *\n * The possible values are:\n * - `top`—Positions the toolbar above the group panel or header.\n * - `bottom`—Positions the toolbar below the pager.\n * - `both`—Displays two toolbar instances. Positions the first one above\n * the group panel or header and the second one below the pager.\n */\n set position(position) {\n this._position = position;\n }\n get position() {\n return this._position;\n }\n}\nToolbarTemplateDirective.ɵfac = function ToolbarTemplateDirective_Factory(t) { return new (t || ToolbarTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nToolbarTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ToolbarTemplateDirective, selectors: [[\"\", \"kendoGridToolbarTemplate\", \"\"]], inputs: { position: \"position\" } });\n/** @nocollapse */\nToolbarTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\nToolbarTemplateDirective.propDecorators = {\n position: [{ type: Input, args: [\"position\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ToolbarTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridToolbarTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, { position: [{\n type: Input,\n args: [\"position\"]\n }] }); })();\n\n/**\n * @hidden\n */\nclass ScrollSyncService {\n constructor(ngZone) {\n this.ngZone = ngZone;\n this.changes = new Subject();\n this.elements = [];\n this.subscriptions = new Subscription();\n this.headerSubscription = new Subscription();\n this.bodySubscription = new Subscription();\n this.subscriptions.add(this.changes.subscribe(args => this.scrollLeft(args)));\n }\n registerEmitter(el, sourceType) {\n this.unregister(sourceType);\n this.elements.push({ element: el, sourceType });\n if (sourceType === \"body\" || sourceType === \"header\") {\n this.ngZone.runOutsideAngular(() => {\n const obs = fromEvent(el, \"scroll\").pipe(map(({ target: { scrollLeft } }) => ({\n scrollLeft,\n sourceType\n })));\n const subscription = obs.pipe(distinctUntilChanged((x, y) => (x.scrollLeft === y.scrollLeft)), filter(x => !this.source || this.source === x.sourceType), tap(x => this.source = x.sourceType))\n .subscribe((x) => this.changes.next(x));\n subscription.add(obs.pipe(filter(x => this.source && this.source !== x.sourceType))\n .subscribe(() => this.source = undefined));\n if (sourceType === \"body\") {\n this.bodySubscription.add(subscription);\n }\n else {\n this.headerSubscription.add(subscription);\n }\n });\n }\n }\n /**\n * destroy\n */\n destroy() {\n this.subscriptions.unsubscribe();\n this.headerSubscription.unsubscribe();\n this.bodySubscription.unsubscribe();\n }\n scrollLeft({ scrollLeft, sourceType }) {\n this.ngZone.runOutsideAngular(() => {\n this.elements\n .filter(x => sourceType !== x.sourceType)\n .forEach(({ element }) => element.scrollLeft = scrollLeft);\n });\n }\n unregister(sourceType) {\n const index = this.elements.findIndex(x => x.sourceType === sourceType);\n if (index > -1) {\n if (sourceType === \"header\") {\n this.headerSubscription.unsubscribe();\n this.headerSubscription = new Subscription();\n }\n else if (sourceType === \"body\") {\n this.bodySubscription.unsubscribe();\n this.bodySubscription = new Subscription();\n }\n this.elements.splice(index, 1);\n }\n }\n}\nScrollSyncService.ɵfac = function ScrollSyncService_Factory(t) { return new (t || ScrollSyncService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nScrollSyncService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ScrollSyncService, factory: ScrollSyncService.ɵfac });\n/** @nocollapse */\nScrollSyncService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ScrollSyncService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * @hidden\n */\nclass ResizeService {\n constructor() {\n this.resizeSubscription = new Subscription(() => { });\n this.dispatcher = new Subject();\n // tslint:disable-next-line:member-ordering\n this.changes = this.dispatcher.asObservable().pipe(throttleTime(100));\n }\n connect(resizes) {\n this.resizeSubscription.add(resizes.subscribe(this.dispatcher));\n }\n destroy() {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n}\nResizeService.ɵfac = function ResizeService_Factory(t) { return new (t || ResizeService)(); };\nResizeService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ResizeService, factory: ResizeService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResizeService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nconst isLocked = column => column.parent ? isLocked(column.parent) : !!column.locked;\n/**\n * @hidden\n */\nconst resizeArgs = (column, extra) => Object.assign({\n columns: leafColumns([column]),\n locked: isLocked(column)\n}, extra); // tslint:disable-line:align\n/**\n * @hidden\n */\nclass ColumnResizingService {\n constructor() {\n this.changes = new EventEmitter();\n this.tables = [];\n this.batch = null;\n }\n start(column) {\n this.trackColumns(column);\n const columns = (this.column.isColumnGroup ? [column] : [])\n .concat(leafColumns([column]));\n this.changes.emit({\n columns: columns,\n locked: isLocked(this.column),\n type: 'start'\n });\n }\n resizeColumns(deltaPercent) {\n const action = resizeArgs(this.column, {\n deltaPercent,\n type: 'resizeColumn'\n });\n this.changes.emit(action);\n }\n resizeTable(column, delta) {\n const action = resizeArgs(column, {\n delta,\n type: 'resizeTable'\n });\n this.changes.emit(action);\n }\n resizedColumn(state$$1) {\n this.resizedColumns.push(state$$1);\n }\n end() {\n this.changes.emit({\n columns: [],\n resizedColumns: this.resizedColumns,\n type: 'end'\n });\n }\n registerTable(tableMetadata) {\n this.tables.push(tableMetadata);\n const unregisterTable = () => {\n this.tables.splice(this.tables.indexOf(tableMetadata), 1);\n };\n return unregisterTable;\n }\n measureColumns(info) {\n if (this.batch !== null) {\n this.batch.push(...info);\n }\n else {\n this.autoFitBatch(info, () => this.end());\n }\n }\n autoFit(...columns) {\n const nonLockedColumns = columns.filter(column => !column.isLocked);\n this.autoFitStart(nonLockedColumns);\n this.autoFitBatch(this.batch, () => {\n if (nonLockedColumns.length < columns.length) {\n const lockedColumns = columns.filter(column => column.isLocked);\n this.autoFitStart(lockedColumns);\n this.autoFitBatch(this.batch, () => this.end());\n }\n else {\n this.end();\n }\n });\n }\n trackColumns(column) {\n this.resizedColumns = [];\n this.column = column;\n }\n autoFitStart(columns) {\n this.batch = [];\n this.resizedColumns = [];\n if (columns.length === 0) {\n return;\n }\n const locked = columns[0].isLocked;\n this.changes.emit({\n type: 'start',\n columns,\n locked\n });\n this.changes.emit({\n type: 'triggerAutoFit',\n columns,\n locked\n });\n }\n autoFitBatch(info, onComplete) {\n const locked = info.length > 0 ? info[0].column.isLocked : false;\n const observables = this.tables\n .filter(table => table.locked === locked)\n .map(table => table.autoFit(info));\n zip(...observables)\n .pipe(take(1))\n .subscribe(widths => {\n this.changes.emit({\n columns: info.map(i => i.column),\n type: 'autoFitComplete',\n widths,\n locked\n });\n if (onComplete) {\n onComplete();\n }\n });\n this.batch = null;\n }\n}\nColumnResizingService.ɵfac = function ColumnResizingService_Factory(t) { return new (t || ColumnResizingService)(); };\nColumnResizingService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnResizingService, factory: ColumnResizingService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnResizingService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\n/**\n * @hidden\n */\nconst hasFilterMenu = (settings) => typeof settings === 'string' && settings.indexOf('menu') > -1;\n/**\n * @hidden\n */\nconst hasFilterRow = (settings) => settings === true || (typeof settings === 'string' && settings.indexOf('row') > -1);\n\nconst contains$1 = (node, predicate) => {\n while (node) {\n if (predicate(node)) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n};\n/**\n * Arguments for the `close` event of the filter and column-menu popup.\n */\nclass PopupCloseEvent extends PreventableEvent {\n constructor(e) {\n super();\n this.originalEvent = e;\n }\n}\nconst DEFAULT_POPUP_CLASS = 'k-grid-filter-popup';\n/**\n * The service that is used for the popups of the filter and column menus\n * ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-menu-with-popup)).\n */\nclass SinglePopupService {\n constructor(popupService, renderer, ngZone, scrollSyncService, localization) {\n this.popupService = popupService;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.localization = localization;\n /**\n * Fires when the filter or column menus are about to close because the user clicked outside their popups.\n * Used to prevent the popup from closing.\n */\n this.onClose = new Subject();\n this.scrollSubscription = scrollSyncService.changes.subscribe(() => this.destroy());\n }\n /**\n * @hidden\n */\n open(anchor, template, popupRef, popupClass = DEFAULT_POPUP_CLASS) {\n const toggle = isPresent(popupRef) && this.popupRef === popupRef;\n this.destroy();\n if (!toggle) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction },\n anchor: anchor,\n popupClass: popupClass,\n content: template,\n positionMode: \"absolute\"\n });\n this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');\n this.attachClose(anchor);\n }\n return this.popupRef;\n }\n /**\n * @hidden\n */\n destroy() {\n if (this.popupRef) {\n this.detachClose();\n this.popupRef.close();\n this.popupRef = null;\n }\n }\n ngOnDestroy() {\n this.destroy();\n this.scrollSubscription.unsubscribe();\n }\n detachClose() {\n if (this.removeClick) {\n this.removeClick();\n }\n }\n attachClose(skipElement) {\n this.detachClose();\n this.ngZone.runOutsideAngular(() => this.removeClick = this.renderer.listen(\"document\", \"click\", (e) => {\n if (!contains$1(e.target, x => this.popupRef.popupElement === x || x === skipElement)) {\n const args = new PopupCloseEvent(e);\n this.onClose.next(args);\n if (!args.isDefaultPrevented()) {\n this.destroy();\n }\n }\n }));\n }\n}\nSinglePopupService.ɵfac = function SinglePopupService_Factory(t) { return new (t || SinglePopupService)(ɵngcc0.ɵɵinject(ɵngcc3.PopupService), ɵngcc0.ɵɵinject(ɵngcc0.Renderer2), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ScrollSyncService), ɵngcc0.ɵɵinject(ɵngcc1.LocalizationService)); };\nSinglePopupService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SinglePopupService, factory: SinglePopupService.ɵfac });\n/** @nocollapse */\nSinglePopupService.ctorParameters = () => [\n { type: PopupService },\n { type: Renderer2 },\n { type: NgZone },\n { type: ScrollSyncService },\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SinglePopupService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc3.PopupService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ScrollSyncService }, { type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/* tslint:disable: no-bitwise */\n/**\n * @hidden\n */\nconst append = (element) => {\n let appended = false;\n return () => {\n if (!appended) {\n document.body.appendChild(element);\n appended = true;\n }\n return element;\n };\n};\n/**\n * @hidden\n */\nconst getDocument = element => element.ownerDocument.documentElement;\n/**\n * @hidden\n */\nconst getWindow = element => element.ownerDocument.defaultView;\n/**\n * @hidden\n */\nconst offset = element => {\n const { clientTop, clientLeft } = getDocument(element);\n const { pageYOffset, pageXOffset } = getWindow(element);\n const { top, left } = element.getBoundingClientRect();\n return {\n top: top + pageYOffset - clientTop,\n left: left + pageXOffset - clientLeft\n };\n};\n/**\n * @hidden\n * If the target is before the draggable element, returns `true`.\n *\n * DOCUMENT_POSITION_FOLLOWING = 4\n */\nconst isTargetBefore = (draggable, target) => (target.compareDocumentPosition(draggable) & 4) !== 0;\n/**\n * @hidden\n * If the container and the element are the same\n * or if the container holds (contains) the element, returns `true`.\n *\n * DOCUMENT_POSITION_CONTAINED_BY = 16\n */\nconst contains$2 = (element, container) => element === container ||\n (container.compareDocumentPosition(element) & 16) !== 0;\n/**\n * @hidden\n */\nconst position = (target, before) => {\n const targetRect = offset(target);\n const { offsetWidth, offsetHeight } = target;\n const left = targetRect.left + (before ? 0 : offsetWidth);\n const top = targetRect.top;\n const height = offsetHeight;\n return { left, top, height };\n};\n\n/**\n * @hidden\n */\nclass DragAndDropService {\n constructor() {\n this.changes = new EventEmitter();\n this.register = [];\n this.lastTarget = null;\n }\n add(target) {\n this.register.push(target);\n }\n remove(target) {\n this.register = this.register.filter(current => current !== target);\n }\n notifyDrag(draggable, element, mouseEvent) {\n const target = this.targetFor(element);\n if (this.lastTarget === target) {\n return;\n }\n this.changes.next({\n draggable,\n mouseEvent,\n target: this.lastTarget,\n type: 'leave'\n });\n if (target) {\n this.changes.next({\n draggable,\n mouseEvent,\n target,\n type: 'enter'\n });\n }\n this.lastTarget = target;\n }\n notifyDrop(draggable, mouseEvent) {\n this.changes.next({\n draggable,\n mouseEvent,\n target: this.lastTarget,\n type: 'drop'\n });\n this.lastTarget = null;\n }\n targetFor(element) {\n const comparer = contains$2.bind(null, element);\n return this.register.find(({ element: { nativeElement } }) => comparer(nativeElement));\n }\n}\nDragAndDropService.ɵfac = function DragAndDropService_Factory(t) { return new (t || DragAndDropService)(); };\nDragAndDropService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DragAndDropService, factory: DragAndDropService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragAndDropService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst updateClass = (element, valid) => {\n const icon = element.querySelector('.k-icon');\n icon.className = icon.className\n .replace(/(plus|cancel)/, valid ? 'plus' : 'cancel');\n};\nconst updateLock = (element, locked = null) => {\n const icon = element.querySelectorAll('.k-icon')[1];\n const value = locked == null ? '' : (locked ? 'k-i-lock' : 'k-i-unlock');\n icon.className = icon.className\n .replace(/(k-i-unlock|k-i-lock)/, '') + ` ${value}`;\n};\nconst decorate = (element, target) => {\n const targetStyles = getComputedStyle(target);\n element.className = 'k-header k-drag-clue';\n element.style.position = 'absolute';\n element.style.zIndex = '20000';\n element.style.paddingLeft = targetStyles.paddingLeft;\n element.style.paddingTop = targetStyles.paddingTop;\n element.style.paddingBottom = targetStyles.paddingBottom;\n element.style.paddingRight = targetStyles.paddingRight;\n element.style.width = targetStyles.width;\n element.style.height = targetStyles.height;\n};\n/**\n * @hidden\n */\nclass DragHintService {\n constructor(santizer) {\n this.santizer = santizer;\n }\n create(down, target, title) {\n this.initCoords(down);\n this.dom = document.createElement(\"div\");\n decorate(this.dom, target);\n const safeTitle = this.santizer.sanitize(SecurityContext.HTML, title);\n this.dom.innerHTML = `\n \n \n \n ${safeTitle}\n `;\n }\n attach() {\n return append(this.dom);\n }\n remove() {\n if (this.dom && this.dom.parentNode) {\n (function (el) {\n setTimeout(() => document.body.removeChild(el));\n })(this.dom); // hack for IE + pointer events!\n this.dom = null;\n }\n }\n show() {\n this.dom.style.display = \"\";\n }\n hide() {\n this.dom.style.display = \"none\";\n }\n enable() {\n updateClass(this.dom, true);\n }\n disable() {\n updateClass(this.dom, false);\n }\n removeLock() {\n updateLock(this.dom);\n }\n toggleLock(locked) {\n updateLock(this.dom, locked);\n }\n move(move) {\n this.dom.style.top = this.initialTop + move.pageY + 'px';\n this.dom.style.left = this.initialLeft + move.pageX + 'px';\n }\n initCoords(down) {\n const { top, left } = offset(down.originalEvent.target);\n this.initialTop = top - down.pageY;\n this.initialLeft = left - down.pageX;\n }\n}\nDragHintService.ɵfac = function DragHintService_Factory(t) { return new (t || DragHintService)(ɵngcc0.ɵɵinject(ɵngcc4.DomSanitizer)); };\nDragHintService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DragHintService, factory: DragHintService.ɵfac });\n/** @nocollapse */\nDragHintService.ctorParameters = () => [\n { type: DomSanitizer }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragHintService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc4.DomSanitizer }]; }, null); })();\n\n/**\n * @hidden\n */\nclass DropCueService {\n create() {\n this.dom = document.createElement(\"div\");\n this.dom.className = 'k-grouping-dropclue';\n this.hide();\n }\n attach() {\n return append(this.dom);\n }\n remove() {\n if (this.dom && this.dom.parentElement) {\n document.body.removeChild(this.dom);\n this.dom = null;\n }\n }\n hide() {\n this.dom.style.display = \"none\";\n }\n position({ left, top, height }) {\n this.dom.style.display = 'block';\n this.dom.style.height = height + 'px';\n this.dom.style.top = top + 'px';\n const width = this.dom.offsetWidth / 2;\n this.dom.style.left = left - width + 'px';\n }\n}\nDropCueService.ɵfac = function DropCueService_Factory(t) { return new (t || DropCueService)(); };\nDropCueService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DropCueService, factory: DropCueService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropCueService, [{\n type: Injectable\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ColumnReorderService {\n constructor() {\n this.changes = new EventEmitter();\n }\n reorder(e) {\n this.changes.emit(e);\n }\n}\nColumnReorderService.ɵfac = function ColumnReorderService_Factory(t) { return new (t || ColumnReorderService)(); };\nColumnReorderService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnReorderService, factory: ColumnReorderService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnReorderService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Arguments for the `columnReorder` event.\n */\nclass ColumnReorderEvent extends PreventableEvent {\n /**\n * @hidden\n */\n constructor({ column, newIndex, oldIndex }) {\n super();\n this.column = column;\n this.newIndex = newIndex;\n this.oldIndex = oldIndex;\n }\n}\n\n/**\n * @hidden\n */\nclass NavigationMetadata {\n constructor(dataRows, headerRows, isVirtual, hasPager, hasDetailTemplate, gridElement, virtualColumns, columns) {\n this.dataRows = dataRows;\n this.headerRows = headerRows;\n this.isVirtual = isVirtual;\n this.hasPager = hasPager;\n this.hasDetailTemplate = hasDetailTemplate;\n this.gridElement = gridElement;\n this.virtualColumns = virtualColumns;\n this.columns = columns;\n }\n get maxLogicalRowIndex() {\n const dataRows = this.hasDetailTemplate ? this.dataRows * 2 : this.dataRows;\n return this.headerRows + dataRows - 1;\n }\n}\n\n// Incremented each time the service is instantiated.\nlet sequence = 0;\n/**\n * @hidden\n */\nclass IdService {\n constructor() {\n this.prefix = `k-grid${sequence++}`;\n }\n cellId(rowIndex, colIndex) {\n return `${this.prefix}-r${rowIndex}c${colIndex}`;\n }\n selectionCheckboxId(itemIndex) {\n return `${this.prefix}-checkbox${itemIndex}`;\n }\n selectAllCheckboxId() {\n return `${this.prefix}-select-all`;\n }\n}\nIdService.ɵfac = function IdService_Factory(t) { return new (t || IdService)(); };\nIdService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: IdService, factory: IdService.ɵfac });\n/** @nocollapse */\nIdService.ctorParameters = () => [];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IdService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ColumnInfoService {\n constructor() {\n this.visibilityChange = new EventEmitter();\n this.lockedChange = new EventEmitter();\n this.columnRangeChange = new EventEmitter();\n this.columnsContainer = new ColumnsContainer(() => []);\n }\n get lockedLeafColumns() {\n return this.columnsContainer.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columnsContainer.nonLockedLeafColumns;\n }\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n get totalLevels() {\n return this.columnsContainer.totalLevels;\n }\n get leafNamedColumns() {\n const columns = expandColumns(this.list().filterSort(column => !column.isColumnGroup))\n .filter(column => column.matchesMedia && column.displayTitle);\n return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);\n }\n get unlockedRootCount() {\n return this.list().rootColumns().filter(column => !column.locked && column.isVisible).length;\n }\n init(columns, list) {\n this.columnsContainer = columns;\n this.list = list;\n }\n changeVisibility(columns) {\n this.visibilityChange.emit(columns);\n }\n changeLocked(columns) {\n this.lockedChange.emit(columns);\n }\n}\nColumnInfoService.ɵfac = function ColumnInfoService_Factory(t) { return new (t || ColumnInfoService)(); };\nColumnInfoService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnInfoService, factory: ColumnInfoService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnInfoService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass SortService {\n constructor() {\n this.changes = new Subject();\n }\n sort(value) {\n this.changes.next(value);\n }\n}\nSortService.ɵfac = function SortService_Factory(t) { return new (t || SortService)(); };\nSortService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SortService, factory: SortService.ɵfac });\n\n\n/**\n * Arguments for the `columnVisibilityChange` event.\n */\nclass ColumnVisibilityChangeEvent {\n /**\n * @hidden\n */\n constructor(columns) {\n this.columns = columns;\n }\n}\n\n/**\n * Arguments for the `columnLockedChange` event.\n */\nclass ColumnLockedChangeEvent {\n /**\n * @hidden\n */\n constructor(columns) {\n this.columns = columns;\n }\n}\n\n/**\n * @hidden\n */\nconst GROUP_CELL_WIDTH = 32; // this should be the value of group-cell inside the theme!\n\n/**\n * @hidden\n */\nfunction defaultTrackBy(index, item) {\n if (item.type === 'data' && item.isEditing) {\n return item.data;\n }\n return index;\n}\n\nconst createControl = (source) => (acc, key) => {\n acc[key] = new FormControl(source[key]);\n return acc;\n};\nconst validateColumnsField = (columns) => expandColumns(columns.toArray())\n .filter(isColumnComponent)\n .filter(({ field }) => !isValidFieldName(field))\n .forEach(({ field }) => console.warn(`\n Grid column field name '${field}' does not look like a valid JavaScript identifier.\n Identifiers can contain only alphanumeric characters (including \"$\" or \"_\"), and may not start with a digit.\n Please use only valid identifier names to ensure error-free operation.\n `));\nconst handleExpandCollapseService = (service, expandEmitter, collapseEmitter, map$$1) => (service.changes.pipe(filter(({ dataItem }) => isPresent(dataItem)))\n .subscribe((x) => x.expand ? expandEmitter.emit(map$$1(x)) : collapseEmitter.emit(map$$1(x))));\nconst isInEditedCell = (element, gridElement) => closest(element, matchesClasses('k-grid-edit-cell')) &&\n closest(element, matchesNodeName('kendo-grid')) === gridElement;\nconst ɵ4$2 = EMPTY_CELL_CONTEXT;\n/**\n * Represents the Kendo UI Grid component for Angular.\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\nclass GridComponent {\n constructor(supportService, selectionService, cellSelectionService, wrapper, groupInfoService, groupsService, changeNotification, detailsService, editService, filterService, pdfService, responsiveService, renderer, excelService, ngZone, scrollSyncService, domEvents, columnResizingService, changeDetectorRef, columnReorderService, columnInfoService, navigationService, sortService, scrollRequestService, localization) {\n this.supportService = supportService;\n this.selectionService = selectionService;\n this.cellSelectionService = cellSelectionService;\n this.wrapper = wrapper;\n this.groupInfoService = groupInfoService;\n this.groupsService = groupsService;\n this.changeNotification = changeNotification;\n this.detailsService = detailsService;\n this.editService = editService;\n this.filterService = filterService;\n this.pdfService = pdfService;\n this.responsiveService = responsiveService;\n this.renderer = renderer;\n this.excelService = excelService;\n this.ngZone = ngZone;\n this.scrollSyncService = scrollSyncService;\n this.domEvents = domEvents;\n this.columnResizingService = columnResizingService;\n this.changeDetectorRef = changeDetectorRef;\n this.columnReorderService = columnReorderService;\n this.columnInfoService = columnInfoService;\n this.navigationService = navigationService;\n this.sortService = sortService;\n this.scrollRequestService = scrollRequestService;\n /**\n * Sets the data of the Grid. If an array is provided, the Grid automatically gets the total count\n * ([more information and example]({% slug databinding_grid %})).\n */\n this.data = [];\n /**\n * Defines the scroll mode used by the Grid.\n *\n * The available options are:\n * - `none`—Renders no scrollbar.\n * - `scrollable`—The default scroll mode. It requires the setting of the `height` option.\n * - `virtual`—Displays no pager and renders a portion of the data (optimized rendering) while the user is scrolling the content.\n */\n this.scrollable = 'scrollable';\n /**\n * Enables the single-row [selection]({% slug selection_grid %}) of the Grid.\n */\n this.selectable = false;\n /**\n * A function that defines how to track changes for the data rows.\n *\n * By default, the Grid tracks changes by the index of the data item.\n * Edited rows are tracked by reference.\n * In some cases, you might need to override the default behavior,\n * for example, when you implement editing with immutable data items.\n *\n * The following example demonstrates how to track items only by index.\n *\n * @example\n * ```ts\n * import { Component } from '@angular/core';\n * import { GridItem } from '@progress/kendo-angular-grid';\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n *\n * public trackBy(index: number, item: GridItem): any {\n * console.log(item);\n * return index;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n this.trackBy = defaultTrackBy;\n /**\n * If set to `true`, the grid will render only the columns in the current viewport.\n */\n this.virtualColumns = false;\n /**\n * Enables the [filtering]({% slug filtering_grid %}) of the Grid columns that have their `field` option set.\n */\n this.filterable = false;\n /**\n * Enables the [sorting]({% slug sorting_grid %}) of the Grid columns that have their `field` option set.\n */\n this.sortable = false;\n /**\n * Configures the pager of the Grid ([see example]({% slug paging_grid %})).\n *\n * The available options are:\n * - `buttonCount: Number`—Sets the maximum numeric buttons count before the buttons are collapsed.\n * - `info: Boolean`—Toggles the information about the current page and the total number of records.\n * - `type: PagerType`—Accepts the `numeric` (buttons with numbers) and `input` (input for typing the page number) values.\n * - `pageSizes: Boolean` or `Array`—Shows a menu for selecting the page size.\n * - `previousNext: Boolean`—Toggles the **Previous** and **Next** buttons.\n */\n this.pageable = false;\n /**\n * If set to `true`, the user can group the Grid by dragging the column header cells.\n * By default, grouping is disabled ([see example]({% slug groupingbasics_grid %})).\n */\n this.groupable = false;\n /**\n * If set to `true`, the user can use dedicated shortcuts to interact with the Grid.\n * By default, navigation is disabled and the Grid content is accessible in the normal tab sequence.\n */\n this.navigable = false;\n /**\n * Indicates whether the Grid columns will be resized during initialization so that\n * they fit their headers and row content. Defaults to `false`.\n * Columns with `autoSize` set to `false` are excluded.\n * To dynamically update the column width to match the new content,\n * refer to [this example]({% slug resizing_columns_grid %}).\n */\n this.autoSize = false;\n /**\n * If set to `true`, the user can resize columns by dragging the edges (resize handles) of their header cells\n * ([see example]({% slug resizing_columns_grid %})).\n *\n * @default false\n */\n this.resizable = false;\n /**\n * If set to `true`, the user can reorder columns by dragging their header cells\n * ([see example]({% slug reordering_columns_grid %})).\n *\n * @default false\n */\n this.reorderable = false;\n /**\n * Specifies if the loading indicator of the Grid will be displayed ([see example]({% slug databinding_grid %})).\n *\n * @default false\n */\n this.loading = false;\n /**\n * Specifies if the column menu of the columns will be displayed ([see example]({% slug columnmenu_grid %})).\n *\n * @default false\n */\n this.columnMenu = false;\n /**\n * Specifies if the header of the grid will be hidden. The header is visible by default.\n *\n * > The header includes column headers and the [filter row]({% slug filtering_grid %}#toc-filter-row).\n */\n this.hideHeader = false;\n /**\n * Fires when the Grid filter is modified through the UI.\n * You have to handle the event yourself and filter the data.\n */\n this.filterChange = new EventEmitter();\n /**\n * Fires when the page of the Grid is changed ([see example]({% slug paging_grid %})).\n * You have to handle the event yourself and page the data.\n */\n this.pageChange = new EventEmitter();\n /**\n * Fires when the grouping of the Grid is changed.\n * You have to handle the event yourself and group the data ([see example]({% slug groupingbasics_grid %})).\n */\n this.groupChange = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the sorting of the Grid is changed ([see example]({% slug sorting_grid %})).\n * You have to handle the event yourself and sort the data.\n */\n this.sortChange = new EventEmitter();\n /**\n * Fires when the user selects a Grid row.\n * Emits the [`SelectionEvent`]({% slug api_grid_selectionevent %}#toc-selectionchange).\n */\n this.selectionChange = new EventEmitter();\n /**\n * Fires when the data state of the Grid is changed.\n */\n this.dataStateChange = new EventEmitter();\n /**\n * Fires when the user expands a group header.\n */\n this.groupExpand = new EventEmitter();\n /**\n * Fires when the user collapses a group header.\n */\n this.groupCollapse = new EventEmitter();\n /**\n * Fires when the user expands a master row.\n */\n this.detailExpand = new EventEmitter();\n /**\n * Fires when the user collapses a master row.\n */\n this.detailCollapse = new EventEmitter();\n /**\n * Fires when the user clicks the **Edit** command button to edit a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-editing-records)).\n */\n this.edit = new EventEmitter();\n /**\n * Fires when the user clicks the **Cancel** command button to close a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-cancelling-editing)).\n */\n this.cancel = new EventEmitter();\n /**\n * Fires when the user clicks the **Save** command button to save changes in a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-saving-records)).\n */\n this.save = new EventEmitter();\n /**\n * Fires when the user clicks the **Remove** command button to remove a row\n * ([see example]({% slug editing_template_forms_grid %}#toc-removing-records)).\n */\n this.remove = new EventEmitter();\n /**\n * Fires when the user clicks the **Add** command button to add a new row\n * ([see example]({% slug editing_template_forms_grid %}#toc-adding-records)).\n */\n this.add = new EventEmitter();\n /**\n * Fires when the user leaves an edited cell ([see example]({% slug editing_incell_grid %}#toc-basic-concepts)).\n */\n this.cellClose = new EventEmitter();\n /**\n * Fires when the user clicks a cell ([see example]({% slug editing_incell_grid %}#toc-basic-concepts)).\n */\n this.cellClick = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the user clicks the **Export to PDF** command button.\n */\n this.pdfExport = new EventEmitter();\n /**\n * Fires when the user clicks the **Export to Excel** command button.\n */\n this.excelExport = new EventEmitter();\n /**\n * Fires when the user completes the resizing of the column.\n */\n this.columnResize = new ZoneAwareEventEmitter(this.ngZone);\n /**\n * Fires when the user completes the reordering of the column.\n */\n this.columnReorder = new EventEmitter();\n /**\n * Fires when the user changes the visibility of the columns from the column menu or column chooser.\n */\n this.columnVisibilityChange = new EventEmitter();\n /**\n * Fires when the user changes the locked state of the columns from the column menu or by reordering the columns.\n */\n this.columnLockedChange = new EventEmitter();\n /**\n * Fires when the user scrolls to the last record on the page and enables endless scrolling\n * ([see example]({% slug scrollmmodes_grid %}#toc-endless-scrolling)).\n * You have to handle the event yourself and page the data.\n */\n this.scrollBottom = new EventEmitter();\n /**\n * Fires when the grid content is scrolled.\n * For performance reasons, the event is triggered outside the Angular zone. Enter the Angular zone if you make any changes that require change detection.\n */\n this.contentScroll = new EventEmitter();\n /**\n * A query list of all declared columns.\n */\n this.columns = new QueryList();\n this.footer = new QueryList();\n this.selectionDirective = false;\n this.columnsContainer = new ColumnsContainer(() => this.columnList.filterHierarchy(column => {\n column.matchesMedia = this.matchesMedia(column);\n return column.isVisible;\n }));\n this.view = new DataCollection(() => new DataResultIterator(this.data, this.skip, this.hasGroupFooters));\n this.shouldGenerateColumns = true;\n this._sort = new Array();\n this._group = new Array();\n this._skip = 0;\n this.cachedWindowWidth = 0;\n this._rowSelected = null;\n this._cellSelected = null;\n this.rtl = false;\n this._rowClass = () => null;\n this.localizationSubscription = localization.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n this.groupInfoService.registerColumnsContainer(() => this.columnList);\n this.columnInfoService.init(this.columnsContainer, () => this.columnList);\n this.columnVisibilityChangeSubscription = this.columnInfoService.visibilityChange.subscribe((changed) => {\n this.columnVisibilityChange.emit(new ColumnVisibilityChangeEvent(changed));\n });\n this.columnLockedChangeSubscription = this.columnInfoService.lockedChange.subscribe((changed) => {\n this.columnLockedChange.emit(new ColumnLockedChangeEvent(changed));\n });\n this.groupExpandCollapseSubscription = handleExpandCollapseService(groupsService, this.groupExpand, this.groupCollapse, ({ dataItem: group, index }) => ({ group, groupIndex: index }));\n this.detailsServiceSubscription = handleExpandCollapseService(detailsService, this.detailExpand, this.detailCollapse, args => args);\n this.filterSubscription = this.filterService.changes.subscribe(x => {\n this.filterChange.emit(x);\n });\n this.sortSubscription = this.sortService.changes.subscribe(x => {\n this.sortChange.emit(x);\n });\n this.attachStateChangesEmitter();\n this.attachEditHandlers();\n this.attachDomEventHandlers();\n this.pdfSubscription = this.pdfService.exportClick.subscribe(this.emitPDFExportEvent.bind(this));\n this.excelSubscription = this.excelService.exportClick.subscribe(this.saveAsExcel.bind(this));\n this.columnsContainerChange();\n this.handleColumnResize();\n this.columnList = new ColumnList(this.columns);\n this.columnReorderSubscription = this.columnReorderService\n .changes.subscribe(this.reorder.bind(this));\n this.columnRangeChangeSubscription = this.columnInfoService.columnRangeChange.subscribe(this.onColumnRangeChange.bind(this));\n }\n /**\n * Defines the number of records to be skipped by the pager.\n * Required by the [paging]({% slug paging_grid %}) functionality.\n */\n get skip() {\n return this._skip;\n }\n set skip(value) {\n if (value >= 0) {\n this._skip = value;\n }\n }\n /**\n * The descriptors by which the data will be sorted ([see example]({% slug sorting_grid %})).\n */\n set sort(value) {\n if (isArray(value)) {\n this._sort = value;\n }\n }\n get sort() {\n return this._sort;\n }\n /**\n * The descriptors by which the data will be grouped ([see example]({% slug groupingbasics_grid %})).\n */\n set group(value) {\n if (isArray(value)) {\n this._group = value;\n }\n }\n /**\n */\n get group() {\n return this._group;\n }\n /**\n * @hidden\n */\n get showTopToolbar() {\n return this.toolbarTemplate && ['top', 'both'].indexOf(this.toolbarTemplate.position) > -1;\n }\n /**\n * @hidden\n */\n get showBottomToolbar() {\n return this.toolbarTemplate && ['bottom', 'both'].indexOf(this.toolbarTemplate.position) > -1;\n }\n /**\n * @hidden\n */\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n /**\n * @hidden\n */\n get showPager() {\n return !this.isVirtual && this.pageable !== false;\n }\n /**\n * @hidden\n */\n get showGroupPanel() {\n return this.groupable && this.groupable.enabled !== false;\n }\n /**\n * @hidden\n */\n get groupableEmptyText() {\n return this.groupable.emptyText;\n }\n /**\n * @hidden\n */\n get marqueeSelection() {\n return this.selectionService.enableMarquee || this.cellSelectionService.enableMarquee;\n }\n /**\n * @hidden\n *\n * An alias for `navigable` for users who migrate from Kendo UI for jQuery.\n */\n set navigatable(value) {\n this.navigable = value;\n }\n /**\n * @hidden\n */\n get navigatable() {\n return this.navigable;\n }\n /**\n * Defines a function that is executed for every data row in the component.\n *\n * @example\n * ```ts\n * import { Component, ViewEncapsulation } from '@angular/core';\n * import { RowClassArgs } from '@progress/kendo-angular-grid';\n *\n * _@Component({\n * selector: 'my-app',\n * encapsulation: ViewEncapsulation.None,\n * styles: [`\n * .k-grid tr.even { background-color: #f45c42; }\n * .k-grid tr.odd { background-color: #41f4df; }\n * `],\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n *\n * public rowCallback(context: RowClassArgs) {\n * const isEven = context.index % 2 == 0;\n * return {\n * even: isEven,\n * odd: !isEven\n * };\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n set rowClass(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`rowClass must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._rowClass = fn;\n }\n get rowClass() {\n return this._rowClass;\n }\n /**\n * Defines a Boolean function that is executed for each data row in the component\n * ([see example]({% slug selection_grid %}#toc-setting-the-selected-rows)).\n * Determines whether the row will be selected.\n */\n set rowSelected(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`rowSelected must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._rowSelected = fn;\n }\n get rowSelected() {\n return this._rowSelected;\n }\n /**\n * Defines a function that determines the selected state of a data cell.\n * Returns an object with `selected` and `item` properties.\n * The cell is marked as selected only if the `selected` property equals `true`.\n *\n * The function is executed for each data cell and may be called more than once\n * as part of a change detection cycle. ([see example]({% slug grid_selection_custom %}toc-setting-the-selected-cells))\n */\n set cellSelected(fn) {\n if (isDevMode && typeof fn !== 'function') {\n throw new Error(`cellSelected must be a function, but received ${JSON.stringify(fn)}.`);\n }\n this._cellSelected = fn;\n }\n get cellSelected() {\n return this._cellSelected;\n }\n /**\n * Returns the currently focused cell (if any).\n */\n get activeCell() {\n return this.navigationService.activeCell;\n }\n /**\n * Returns the currently focused row (if any).\n */\n get activeRow() {\n return this.navigationService.activeRow;\n }\n get dir() {\n return this.direction;\n }\n get hostClasses() {\n return true;\n }\n get lockedClasses() {\n return this.lockedLeafColumns.length > 0;\n }\n get virtualClasses() {\n return this.isVirtual;\n }\n get noScrollbarClass() {\n return this.scrollbarWidth === 0;\n }\n get detailTemplate() {\n if (this._customDetailTemplate) {\n return this._customDetailTemplate;\n }\n return this.detailTemplateChildren ? this.detailTemplateChildren.first : undefined;\n }\n set detailTemplate(detailTemplate) {\n this._customDetailTemplate = detailTemplate;\n }\n get noRecordsTemplate() {\n if (this._customNoRecordsTemplate) {\n return this._customNoRecordsTemplate;\n }\n return this.noRecordsTemplateChildren ? this.noRecordsTemplateChildren.first : undefined;\n }\n set noRecordsTemplate(customNoRecordsTemplate) {\n this._customNoRecordsTemplate = customNoRecordsTemplate;\n }\n get pagerTemplate() {\n if (this._customPagerTemplate) {\n return this._customPagerTemplate;\n }\n return this.pagerTemplateChildren ? this.pagerTemplateChildren.first : undefined;\n }\n set pagerTemplate(customPagerTemplate) {\n this._customPagerTemplate = customPagerTemplate;\n }\n get toolbarTemplate() {\n if (this._customToolbarTemplate) {\n return this._customToolbarTemplate;\n }\n return this.toolbarTemplateChildren ? this.toolbarTemplateChildren.first : undefined;\n }\n set toolbarTemplate(customToolbarTemplate) {\n this._customToolbarTemplate = customToolbarTemplate;\n }\n get scrollbarWidth() {\n return this.supportService.scrollbarWidth;\n }\n get headerPadding() {\n if (isUniversal()) {\n return \"\";\n }\n const padding = Math.max(0, this.scrollbarWidth - 1) + 'px';\n const right = this.rtl ? 0 : padding;\n const left = this.rtl ? padding : 0;\n return `0 ${right} 0 ${left}`;\n }\n get hasGroupFooters() {\n return this.columnsContainer.hasGroupFooter;\n }\n get showFooter() {\n return this.columnsContainer.hasFooter;\n }\n get showGroupFooters() {\n return this.groupable && this.groupable.showFooter;\n }\n get ariaRowCount() {\n return this.totalColumnLevels + 1 + this.view.total;\n }\n get ariaColCount() {\n return this.columnsContainer.leafColumnsToRender.length;\n }\n get isVirtual() {\n return this.scrollable === 'virtual';\n }\n get isScrollable() {\n return this.scrollable !== 'none';\n }\n get visibleColumns() {\n return this.columnsContainer.allColumns;\n }\n get lockedColumns() {\n return this.columnsContainer.lockedColumns;\n }\n get nonLockedColumns() {\n return this.columnsContainer.nonLockedColumns;\n }\n get lockedLeafColumns() {\n return this.columnsContainer.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columnsContainer.nonLockedLeafColumns;\n }\n get leafColumns() {\n return this.columnsContainer.leafColumns;\n }\n get totalColumnLevels() {\n return this.columnsContainer.totalLevels;\n }\n get headerColumns() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.viewportColumns;\n }\n return this.nonLockedColumns;\n }\n get headerLeafColumns() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.leafViewportColumns;\n }\n return this.nonLockedLeafColumns;\n }\n get lockedWidth() {\n const groupCellsWidth = this.group.length * GROUP_CELL_WIDTH;\n return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);\n }\n get nonLockedWidth() {\n if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {\n return !this.virtualColumns ? this.columnsContainer.unlockedWidth :\n this.leafViewportColumns.reduce((acc, column) => acc + (column.width || 0), 0);\n }\n return undefined;\n }\n get selectableSettings() {\n if (this.selectionService) {\n return this.selectionService.options;\n }\n return undefined;\n }\n get columnMenuTemplate() {\n const template = this.columnMenuTemplates.first;\n return template ? template.templateRef : null;\n }\n get totalCount() {\n if (this.isVirtual || !isPresent(this.pageSize)) {\n return this.view.total;\n }\n return this.pageSize;\n }\n /**\n * Expands the specified master row ([see example]({% slug hierarchy_grid %})).\n *\n * This method is provided only for backwards-compatibility with legacy versions.\n * These versions tracked the expanded state internally using the data row index.\n *\n * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})\n * or provide an isDetailExpanded callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %})\n * for examples on how to control the expanded state.\n *\n * @param index - The data row index of the master row.\n */\n expandRow(index) {\n this.toggleDetailRowLegacy(index, true);\n }\n /**\n * Collapses the specified master row ([see example]({% slug hierarchy_grid %})).\n *\n * This method is provided only for backwards-compatibility with legacy versions.\n * These versions tracked the expanded state internally using the data row index.\n *\n * For new development, use the [`kendoGridDetailsExpandBy` directive]({% slug api_grid_expanddetailsdirective %})\n * or provide an isDetailExpanded callback. See [Controlling the Expanded State]({% slug master_detail_expanded_state_grid %})\n * for examples on how to control the expanded state.\n *\n * @param index - The data row index of the master row.\n */\n collapseRow(index) {\n this.toggleDetailRowLegacy(index, false);\n }\n /**\n * Expands a group header item for the given index. For example,\n * `0_1` expands the second inner group of the first master group.\n *\n * > * When you use the [`kendoGridGroupBinding`]({% slug api_grid_groupbindingdirective %}) directive,\n * > the `expandGroup` method is not supported.\n * > * When a Grid is pageable, the indexes of the groups are offset by the current Grid [`skip`]({% slug api_grid_gridcomponent %}#toc-skip).\n *\n * @param {string} index - The underscore separated hierarchical index of the group.\n */\n expandGroup(index) {\n if (!this.groupsService.isExpanded(index)) {\n this.groupsService.toggleRow(index, null);\n }\n }\n /**\n * Collapses a group header item for the given index. For example,\n * `0_1` collapses the second inner group of the first master group.\n *\n * > * When you use the [`kendoGridGroupBinding`]({% slug api_grid_groupbindingdirective %}) directive,\n * > the `collapseGroup` method is not supported.\n * > * When a Grid is pageable, the indexes of the groups are offset by the current Grid [`skip`]({% slug api_grid_gridcomponent %}#toc-skip).\n *\n * @param {string} index - The underscore separated hierarchical index of the group.\n */\n collapseGroup(index) {\n if (this.groupsService.isExpanded(index)) {\n this.groupsService.toggleRow(index, null);\n }\n }\n /**\n * @hidden\n */\n resetGroupsState() {\n this.groupsService.reset();\n }\n /**\n * @hidden\n */\n expandGroupChildren(groupIndex) {\n this.groupsService.expandChildren(groupIndex);\n }\n /**\n * @hidden\n */\n onDataChange() {\n this.autoGenerateColumns();\n this.changeNotification.notify();\n this.pdfService.dataChanged.emit();\n if (isPresent(this.defaultSelection)) {\n this.defaultSelection.reset();\n }\n this.initSelectionService();\n this.updateNavigationMetadata();\n }\n ngOnChanges(changes) {\n if (isChanged(\"data\", changes)) {\n this.onDataChange();\n }\n if (this.lockedLeafColumns.length && anyChanged([\"pageSize\", \"skip\", \"sort\", \"group\"], changes)) {\n this.changeNotification.notify();\n }\n if (anyChanged([\"pageSize\", \"scrollable\", 'virtualColumns'], changes)) {\n this.updateNavigationMetadata();\n }\n if (isChanged(\"virtualColumns\", changes)) {\n this.viewportColumns = this.leafViewportColumns = null;\n }\n if (isChanged(\"height\", changes, false)) {\n this.renderer.setStyle(this.wrapper.nativeElement, 'height', `${this.height}px`);\n }\n if (isChanged(\"filterable\", changes) && this.lockedColumns.length) {\n this.syncHeaderHeight(this.ngZone.onStable.asObservable().pipe(take(1)));\n }\n if (anyChanged([\"columnMenu\", \"sortable\", \"filterable\"], changes, false)) {\n this.columnMenuOptions = this.columnMenu && Object.assign({\n filter: Boolean(this.filterable),\n sort: Boolean(this.sortable)\n }, this.columnMenu); // tslint:disable-line:align\n }\n if (isChanged(\"scrollable\", changes) && this.isScrollable) {\n this.ngZone.onStable.pipe(take(1)).subscribe(() => this.attachScrollSync());\n }\n if (isChanged(\"selectable\", changes) && this.shouldResetSelection(changes.selectable)) {\n if (this.defaultSelection) {\n this.defaultSelection.reset();\n }\n else if (this.selectionDirective) {\n this.selectionDirective.reset();\n }\n }\n }\n ngAfterViewInit() {\n this.attachScrollSync();\n this.attachElementEventHandlers();\n this.updateNavigationMetadata();\n this.applyAutoSize();\n }\n ngAfterContentChecked() {\n this.columnsContainer.refresh();\n this.verifySettings();\n this.initSelectionService();\n }\n ngAfterContentInit() {\n this.shouldGenerateColumns = !this.columns.length;\n this.autoGenerateColumns();\n this.columnList = new ColumnList(this.columns);\n this.columnsChangeSubscription = this.columns.changes.subscribe(() => this.verifySettings());\n }\n ngOnInit() {\n if (this.navigable) {\n this.navigationService.init(this.navigationMetadata());\n }\n }\n ngOnDestroy() {\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n if (this.stateChangeSubscription) {\n this.stateChangeSubscription.unsubscribe();\n }\n if (this.groupExpandCollapseSubscription) {\n this.groupExpandCollapseSubscription.unsubscribe();\n }\n if (this.detailsServiceSubscription) {\n this.detailsServiceSubscription.unsubscribe();\n }\n if (this.editServiceSubscription) {\n this.editServiceSubscription.unsubscribe();\n }\n if (this.pdfSubscription) {\n this.pdfSubscription.unsubscribe();\n }\n if (this.filterSubscription) {\n this.filterSubscription.unsubscribe();\n }\n if (this.sortSubscription) {\n this.sortSubscription.unsubscribe();\n }\n if (this.columnsChangeSubscription) {\n this.columnsChangeSubscription.unsubscribe();\n }\n if (this.excelSubscription) {\n this.excelSubscription.unsubscribe();\n }\n if (this.columnsContainerChangeSubscription) {\n this.columnsContainerChangeSubscription.unsubscribe();\n }\n if (this.scrollSyncService) {\n this.scrollSyncService.destroy();\n }\n if (this.detachElementEventHandlers) {\n this.detachElementEventHandlers();\n }\n if (this.defaultSelection) {\n this.defaultSelection.destroy();\n }\n if (this.cellClickSubscription) {\n this.cellClickSubscription.unsubscribe();\n }\n if (this.footerChangeSubscription) {\n this.footerChangeSubscription.unsubscribe();\n }\n this.ngZone = null;\n if (this.columnResizingSubscription) {\n this.columnResizingSubscription.unsubscribe();\n }\n if (this.columnReorderSubscription) {\n this.columnReorderSubscription.unsubscribe();\n }\n if (this.localizationSubscription) {\n this.localizationSubscription.unsubscribe();\n }\n if (this.columnVisibilityChangeSubscription) {\n this.columnVisibilityChangeSubscription.unsubscribe();\n }\n if (this.columnLockedChangeSubscription) {\n this.columnLockedChangeSubscription.unsubscribe();\n }\n if (this.focusElementSubscription) {\n this.focusElementSubscription.unsubscribe();\n }\n this.columnRangeChangeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n attachScrollSync() {\n if (isUniversal()) {\n return;\n }\n if (this.header) {\n this.scrollSyncService.registerEmitter(this.header.nativeElement, \"header\");\n }\n if (this.footer) {\n this.footerChangeSubscription = observe(this.footer)\n .subscribe(footers => footers\n .map(footer => footer.nativeElement)\n .filter(isPresent)\n .forEach(element => this.scrollSyncService.registerEmitter(element, \"footer\")));\n }\n }\n /**\n * Switches the specified table row in the edit mode ([see example]({% slug editing_template_forms_grid %}#toc-editing-records)).\n *\n * @param rowIndex - The data row index that will be switched in the edit mode.\n * @param group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }})\n * that describes the edit form.\n * @param options - Additional options configuring the focus target once the editor opens.\n */\n editRow(rowIndex, group, options) {\n this.editService.editRow(rowIndex, group);\n if (isPresent(options) && options.skipFocus) {\n return;\n }\n const row = `tr[data-kendo-grid-item-index=\"${rowIndex}\"]`;\n const columnIndex = options && options.columnIndex;\n const target = isNaN(columnIndex) ? row : `${row} td[data-kendo-grid-column-index=\"${columnIndex}\"]`;\n this.focusEditElement(target);\n }\n /**\n * Closes the editor for a given row ([see example]({% slug editing_template_forms_grid %}#toc-cancelling-editing)).\n *\n * @param {number} index - The row index that will be switched out of the edit mode. If no index is provided, it is assumed\n * that the new item editor will be closed.\n */\n closeRow(index) {\n this.editService.close(index);\n }\n /**\n * Creates a new row editor ([see example]({% slug editing_template_forms_grid %}#toc-adding-records)).\n *\n * @param {FormGroup} group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }}) that describes\n * the edit form. If called with a data item, it will build the `FormGroup` from the data item fields.\n */\n addRow(group) {\n const isFormGroup = group instanceof FormGroup;\n if (!isFormGroup) {\n const fields = Object.keys(group).reduce(createControl(group), {}); // FormBuilder?\n group = new FormGroup(fields);\n }\n this.editService.addRow(group);\n this.focusEditElement('.k-grid-add-row');\n }\n /**\n * Puts the cell that is specified by the table row and column in edit mode.\n *\n * @param {number} rowIndex - The data row index that will be switched in the edit mode.\n * @param {number|string|any} column - The leaf column index, or the field name or the column instance that should be edited.\n * @param {FormGroup} group - The [`FormGroup`]({{ site.data.urls.angular['formgroupapi'] }})\n * that describes the edit form.\n */\n editCell(rowIndex, column, group) {\n const instance = this.columnInstance(column);\n this.editService.editCell(rowIndex, instance, group);\n this.focusEditElement('.k-grid-edit-cell');\n }\n /**\n * Closes the current cell in edit mode and fires\n * the [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event.\n *\n * @return {boolean} Indicates whether the edited cell was closed.\n * A `false` value indicates that the\n * [`cellClose`]({% slug api_grid_gridcomponent %}#toc-cellclose) event was prevented.\n */\n closeCell() {\n return !this.editService.closeCell();\n }\n /**\n * Closes the current cell in edit mode.\n */\n cancelCell() {\n this.editService.cancelCell();\n }\n /**\n * Returns a flag which indicates if a row or a cell is currently edited.\n *\n * @return {boolean} A flag which indicates if a row or a cell is currently edited.\n */\n isEditing() {\n return this.editService.isEditing();\n }\n /**\n * Returns a flag which indicates if a cell is currently edited.\n *\n * @return {boolean} A flag which indicates if a cell is currently being edited.\n */\n isEditingCell() {\n return this.editService.isEditingCell();\n }\n /**\n * Initiates the PDF export ([see example]({% slug pdfexport_grid %})).\n */\n saveAsPDF() {\n this.pdfService.save(this);\n }\n /**\n * Exports the Grid element to a Drawing [`Group`]({% slug api_kendo-drawing_group %}) by using the `kendo-grid-pdf` component options.\n * ([see example]({% slug pdfexport_grid %}#toc-exporting-multiple-grids-to-the-same-pdf)).\n *\n * @return {Promise} - A promise that will be resolved with the Drawing `Group`.\n */\n drawPDF() {\n const promise = createPromise();\n this.pdfService.draw(this, promise);\n return promise;\n }\n /**\n * Initiates the Excel export ([see example]({% slug excelexport_grid %})).\n */\n saveAsExcel() {\n this.excelService.save(this);\n }\n /**\n * Applies the minimum possible width for the specified column,\n * so that the whole text fits without wrapping. This method expects the Grid\n * to be resizable (set `resizable` to `true`).\n * Makes sense to execute this method only\n * after the Grid is already populated with data.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n *
\n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n autoFitColumn(column) {\n this.columnResizingService.autoFit(column);\n }\n /**\n * Adjusts the width of the specified columns to fit the entire content, including headers, without wrapping.\n * If no columns are specified, `autoFitColumns` is applied to all columns.\n *\n * This method requires the Grid to be resizable (set `resizable` to `true`).\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n autoFitColumns(columns = this.columns) {\n let cols;\n if (columns instanceof QueryList) {\n cols = columns.toArray();\n }\n else {\n cols = columns;\n }\n this.columnResizingService.autoFit(...cols);\n }\n /**\n * @hidden\n */\n notifyPageChange(source, event) {\n if (source === \"list\" && !this.isVirtual) {\n return;\n }\n this.pageChange.emit(event);\n }\n /**\n * @hidden\n */\n notifyScrollBottom() {\n if (this.scrollable === 'none') {\n return;\n }\n if (hasObservers(this.scrollBottom)) {\n this.ngZone.run(() => this.scrollBottom.emit({ sender: this }));\n }\n }\n /**\n * @hidden\n */\n focusEditElement(containerSelector) {\n if (this.focusElementSubscription) {\n this.focusElementSubscription.unsubscribe();\n }\n this.ngZone.runOutsideAngular(() => {\n this.focusElementSubscription = this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(() => {\n const wrapper = this.wrapper.nativeElement;\n if (!this.setEditFocus(wrapper.querySelector(containerSelector)) && this.isLocked) {\n this.setEditFocus(wrapper.querySelector(`.k-grid-content ${containerSelector}`));\n }\n this.focusElementSubscription = null;\n });\n });\n }\n /**\n * Focuses the last active or the first cell of the Grid.\n *\n * @returns {NavigationCell} The focused cell.\n */\n focus() {\n this.assertNavigable();\n return this.navigationService.focusCell();\n }\n /**\n * Focuses the cell with the specified row and column index.\n *\n * The row index is based on the logical structure of the Grid and does not correspond to the data item index:\n * * Header rows are included, starting at index 0.\n * * Group headers and footers are included.\n * * The row indexing is absolute and does not change with paging.\n *\n * If the Grid is configured for scrolling, including virtual scrolling, the scroll position will be updated.\n * If the row is not present on the current page, the method will have no effect.\n *\n * @param rowIndex - The logical row index to focus. The top header row has an index 0.\n * @param colIndex - The column index to focus.\n * @returns {NavigationCell} The focused cell.\n *\n */\n focusCell(rowIndex, colIndex) {\n this.assertNavigable();\n return this.navigationService.focusCell(rowIndex, colIndex);\n }\n /**\n * Focuses the next cell, optionally wrapping to the next row.\n *\n * @param wrap - A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.\n * @returns {NavigationCell} The focused cell. If the focus is already on the last cell, returns `null`.\n */\n focusNextCell(wrap = true) {\n this.assertNavigable();\n return this.navigationService.focusNextCell(wrap);\n }\n /**\n * Focuses the previous cell. Optionally wraps to the previous row.\n *\n * @param wrap - A Boolean value which indicates if the focus will move to the next row. Defaults to `true`.\n * @returns {NavigationCell} The focused cell. If the focus is already on the first cell, returns `null`.\n */\n focusPrevCell(wrap = true) {\n this.assertNavigable();\n return this.navigationService.focusPrevCell(wrap);\n }\n /**\n * Scrolls to the specified row and column\n */\n scrollTo(request) {\n this.scrollRequestService.scrollTo(request);\n }\n /**\n * Changes the position of the specified column.\n * The reordering of columns operates only on the level\n * which is inferred by the source column.\n * For the `reorderColumn` method to work properly,\n * the `source` column has to be visible.\n *\n * @param {ColumnBase} source - The column whose position will be changed.\n * @param {number} destIndex - The new position of the column.\n * @param {ColumnReorderConfig} options - Additional options.\n *\n * @example\n * ```ts\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n *\n * \n * \n *\n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n * ```\n */\n reorderColumn(source, destIndex, options = { before: false }) {\n const columnsForLevel = this.columnsForLevel(source.level);\n let target = columnsForLevel[destIndex];\n if (!target) {\n return;\n }\n const lastNonLocked = target.isLocked &&\n !source.isLocked &&\n this.columnsContainer.nonLockedColumns.length === 1;\n if (lastNonLocked) {\n return;\n }\n if (isSpanColumnComponent(target) && !options.before) {\n target = target.childColumns.last;\n }\n this.reorder({\n before: options.before,\n source: source,\n target: target\n });\n }\n /**\n * A function which determines if a specific row is expanded.\n */\n set isDetailExpanded(callback) {\n this.detailsService.userCallback = callback;\n }\n get isDetailExpanded() {\n return this.detailsService.userCallback;\n }\n /**\n * @hidden\n */\n reorder({ target, source, before, changeContainer }) {\n this.ngZone.run(() => {\n const columnsForLevel = this.columnsForLevel(source.level);\n let newIndex = columnsForLevel.indexOf(target);\n if (target.parent && target.parent.isSpanColumn) {\n newIndex = columnsForLevel.indexOf(target.parent);\n if (before) {\n target = target.parent;\n }\n }\n let oldIndex = columnsForLevel.indexOf(source);\n if (changeContainer) {\n if (before && 0 < newIndex && oldIndex < newIndex) { // dropped before the first not locked column\n newIndex--;\n }\n else if (!before && oldIndex > newIndex) { // dropped after the last locked column\n newIndex++;\n }\n }\n const args = new ColumnReorderEvent({\n column: source,\n oldIndex: oldIndex,\n newIndex: newIndex\n });\n this.columnReorder.emit(args);\n if (args.isDefaultPrevented()) {\n return;\n }\n if (changeContainer) {\n this.columnLockedChange.emit(new ColumnLockedChangeEvent([source]));\n }\n this.updateColumnIndices({ source, target, before });\n if (source.locked !== target.locked) {\n source.locked = target.locked;\n }\n this.columnsContainer.refresh();\n this.changeDetectorRef.markForCheck();\n });\n }\n updateColumnIndices({ source, target, before }) {\n const expandedColumns = expandColumnsWithSpan(this.columnsForLevel(source.level));\n const sourceColumnIndex = expandedColumns.indexOf(source);\n let nextSourceIndex = 0;\n let nextIndex = 0;\n let toSkip = 1;\n // Possible only when called from the API.\n if (source.isSpanColumn) {\n toSkip += source.childColumns.length;\n }\n let i = 0;\n while (i < expandedColumns.length) {\n let column = expandedColumns[i];\n if (column === target) {\n nextSourceIndex = before ? nextIndex : nextIndex + 1;\n nextIndex = before ? nextIndex + toSkip : nextIndex;\n column.orderIndex = nextIndex;\n if (nextSourceIndex === nextIndex + 1) {\n nextIndex += toSkip;\n }\n }\n else if (column === source) {\n i += toSkip;\n continue;\n }\n else {\n column.orderIndex = nextIndex;\n }\n nextIndex++;\n i++;\n }\n for (i = sourceColumnIndex; i < sourceColumnIndex + toSkip; i++) {\n expandedColumns[i].orderIndex = nextSourceIndex++;\n }\n this.updateIndicesForLevel(source.level + 1);\n }\n updateIndicesForLevel(level) {\n const colsForParentLevel = this.columnsForLevel(level - 1);\n const colsForLevel = [];\n sortColumns(colsForParentLevel).forEach((c) => {\n if (c.isColumnGroup) {\n colsForLevel.push(...c.childrenArray.sort((a, b) => a.orderIndex - b.orderIndex));\n }\n });\n expandColumnsWithSpan(colsForLevel).map((c, i) => c.orderIndex = i);\n if (level < this.columnsContainer.totalLevels) {\n this.updateIndicesForLevel(level + 1);\n }\n }\n columnsForLevel(level) {\n return this.columnsContainer\n .allColumns.filter(column => column.level === level);\n }\n initSelectionService() {\n if (!this.selectable) {\n this.selectionService.ngOnDestroy();\n this.cellSelectionService.ngOnDestroy();\n return;\n }\n if (!this.selectionDirective && !isPresent(this.defaultSelection)) {\n this.defaultSelection = new Selection(this, this.changeDetectorRef);\n }\n const cellSelectionMode = this.selectable['cell'];\n const activeService = cellSelectionMode ? this.cellSelectionService : this.selectionService;\n const inactiveService = cellSelectionMode ? this.selectionService : this.cellSelectionService;\n if (inactiveService.active) {\n inactiveService.ngOnDestroy();\n activeService.addSubscriptions();\n inactiveService.active = false;\n }\n activeService.active = true;\n activeService.init({\n cellSelected: cellSelectionMode ? this.cellSelected : undefined,\n rowSelected: cellSelectionMode ? undefined : this.rowSelected,\n selectable: this.selectable,\n view: this.view,\n columns: cellSelectionMode ? this.columnList.toArray() : undefined\n });\n if (!this.selectionDirective && !this.selectableSettings.enabled) {\n this.defaultSelection.reset();\n }\n if (this.selectionSubscription) {\n this.selectionSubscription.unsubscribe();\n }\n if (cellSelectionMode) {\n this.selectionSubscription = this.cellSelectionService.changes.subscribe((event) => {\n this.ngZone.run(() => this.selectionChange.emit(event));\n });\n }\n else {\n this.selectionSubscription = this.selectionService.changes.subscribe((event) => {\n this.ngZone.run(() => this.selectionChange.emit(event));\n });\n }\n }\n setEditFocus(element) {\n if (element) {\n return this.navigationService.tryFocus(element);\n }\n }\n columnInstance(column) {\n let instance;\n if (typeof column === 'number') {\n instance = this.columnsContainer.lockedLeafColumns.toArray()\n .concat(this.columnsContainer.nonLockedLeafColumns.toArray())[column];\n }\n else if (typeof column === 'string') {\n instance = this.columnList.filter((item) => item.field === column)[0];\n }\n else {\n instance = column;\n }\n if (!instance && isDevMode()) {\n throw new Error(`Invalid column ${column}`);\n }\n return instance;\n }\n verifySettings() {\n if (isDevMode()) {\n const locked = this.lockedLeafColumns.length || (this.columnMenu && this.columnMenu.lock);\n if (locked && this.detailTemplate) {\n throw new Error('Having both detail template and locked columns is not supported.');\n }\n if (this.lockedLeafColumns.length && !this.nonLockedLeafColumns.length) {\n throw new Error('There should be at least one non-locked column');\n }\n if ((locked || this.virtualColumns) && expandColumns(this.columnList.toArray()).filter(column => !column.width && !isColumnGroupComponent(column)).length) {\n throw new Error((locked ? 'Locked' : 'Virtual') + ' columns feature requires all columns to have set width.');\n }\n if (locked && !this.isScrollable) {\n throw new Error('Locked columns are only supported when scrolling is enabled.');\n }\n if (this.columnList.filter(isColumnGroupComponent).filter((x) => !x.hasChildren).length) {\n throw new Error('ColumnGroupComponent should contain ColumnComponent or CommandColumnComponent.');\n }\n if (this.columnList.filter(x => x.locked && x.parent && !x.parent.isLocked).length) {\n throw new Error('Locked child columns require their parent columns to be locked.');\n }\n if ((this.rowHeight || this.detailRowHeight) && !this.isVirtual) {\n throw new Error('Row height and detail row height settings require virtual scrolling mode to be enabled.');\n }\n validateColumnsField(this.columnList);\n }\n }\n autoGenerateColumns() {\n if (this.shouldGenerateColumns && !this.columns.length && this.view.length) {\n this.columns.reset(Object.keys(this.view.at(0)).map(field => {\n let column = new ColumnComponent();\n column.field = field;\n return column;\n }));\n }\n }\n attachStateChangesEmitter() {\n this.stateChangeSubscription =\n merge(this.pageChange.pipe(map(x => ({\n filter: this.filter, group: this.group, skip: x.skip, sort: this.sort, take: x.take\n }))), this.sortChange.pipe(map(sort => ({ filter: this.filter, group: this.group, skip: this.skip, sort: sort, take: this.pageSize }))), this.groupChange.pipe(map(group => ({\n filter: this.filter, group: group, skip: this.skip, sort: this.sort, take: this.pageSize\n }))), this.filterChange.pipe(map(filter$$1 => ({\n filter: filter$$1, group: this.group, skip: 0, sort: this.sort, take: this.pageSize\n }))))\n .subscribe(x => {\n this.closeCell();\n this.cancelCell();\n this.dataStateChange.emit(x);\n });\n }\n attachEditHandlers() {\n if (!this.editService) {\n return;\n }\n this.editServiceSubscription = this.editService\n .changes.subscribe(this.emitCRUDEvent.bind(this));\n }\n emitCRUDEvent(args) {\n const { action, rowIndex, formGroup } = args;\n let dataItem = this.view.at(rowIndex - this.skip);\n if (action !== 'add' && !dataItem) {\n dataItem = formGroup.value;\n }\n this.closeCell();\n Object.assign(args, {\n dataItem: dataItem,\n sender: this\n });\n switch (action) {\n case 'add':\n this.add.emit(args);\n break;\n case 'cancel':\n this.cancel.emit(args);\n break;\n case 'edit':\n this.edit.emit(args);\n break;\n case 'remove':\n this.remove.emit(args);\n break;\n case 'save':\n this.save.emit(args);\n break;\n case 'cellClose':\n this.cellClose.emit(args);\n break;\n default: break;\n }\n }\n attachDomEventHandlers() {\n this.cellClickSubscription = this.domEvents.cellClick.subscribe((args) => {\n this.cellClick.emit(Object.assign({ sender: this }, args));\n });\n }\n attachElementEventHandlers() {\n if (isUniversal()) {\n return;\n }\n const wrapper = this.wrapper.nativeElement;\n const ariaRoot = this.ariaRoot.nativeElement;\n this.ngZone.runOutsideAngular(() => {\n const resizeCheck = this.resizeCheck.bind(this);\n const resizeSubscription = this.renderer.listen('window', 'resize', resizeCheck);\n const orientationSubscription = this.renderer.listen('window', 'orientationchange', resizeCheck);\n const documentClickSubscription = this.renderer.listen('document', 'click', (args) => {\n const activeElement = document.activeElement;\n if (this.editService.shouldCloseCell() &&\n !closest(args.target, matchesClasses('k-animation-container k-grid-ignore-click')) &&\n !(activeElement &&\n (closest(activeElement, matchesClasses('k-animation-container')) ||\n isInEditedCell(activeElement, this.wrapper.nativeElement)))) {\n this.editService.closeCell(args);\n }\n });\n const windowBlurSubscription = this.renderer.listen('window', 'blur', (args) => {\n const activeElement = document.activeElement;\n if (activeElement && !(matchesNodeName('input')(activeElement) && activeElement.type === 'file' &&\n isInEditedCell(activeElement, this.wrapper.nativeElement))) {\n this.editService.closeCell(args);\n }\n this.domEvents.windowBlur.emit(args);\n });\n const clickSubscription = this.renderer.listen(wrapper, 'click', (args) => {\n this.domEvents.click.emit(args);\n });\n const keydownSubscription = this.renderer.listen(wrapper, 'keydown', (args) => {\n this.domEvents.keydown.emit(args);\n });\n // focusIn and focusOut are relative to the element with ARIA role \"grid\"\n let focused = false;\n const focusInSubscription = this.renderer.listen(ariaRoot, 'focusin', (args) => {\n this.domEvents.focus.emit(args);\n if (!focused) {\n this.domEvents.focusIn.emit(args);\n focused = true;\n }\n });\n const focusOutSubscription = this.renderer.listen(ariaRoot, 'focusout', (args) => {\n const next = args.relatedTarget || document.activeElement;\n const outside = !closest(next, (node) => node === ariaRoot);\n if (outside) {\n this.domEvents.focusOut.emit(args);\n focused = false;\n }\n });\n this.detachElementEventHandlers = () => {\n resizeSubscription();\n orientationSubscription();\n documentClickSubscription();\n windowBlurSubscription();\n clickSubscription();\n keydownSubscription();\n focusInSubscription();\n focusOutSubscription();\n };\n });\n }\n matchesMedia(c) {\n return this.responsiveService.matchesMedia(c.media);\n }\n resizeCheck() {\n if (window.innerWidth !== this.cachedWindowWidth) {\n this.cachedWindowWidth = window.innerWidth;\n let hasChanges = false;\n this.columnList.filterHierarchy(column => {\n const matchesMedia = this.matchesMedia(column);\n if (column.matchesMedia !== matchesMedia) {\n hasChanges = true;\n column.matchesMedia = matchesMedia;\n }\n return column.isVisible;\n });\n if (hasChanges) {\n this.ngZone.run(() => {\n this.changeDetectorRef.markForCheck();\n });\n }\n }\n }\n emitPDFExportEvent() {\n const args = new PDFExportEvent();\n this.pdfExport.emit(args);\n if (!args.isDefaultPrevented()) {\n this.saveAsPDF();\n }\n }\n syncHeaderHeight(observable) {\n return observable\n .pipe(filter(() => isPresent(this.lockedHeader)))\n .subscribe(() => syncRowsHeight(this.lockedHeader.nativeElement.children[0], this.header.nativeElement.children[0]));\n }\n columnsContainerChange() {\n this.columnsContainerChangeSubscription =\n this.syncHeaderHeight(this.columnsContainer.changes.pipe(filter(() => this.lockedColumns.length > 0), switchMap(() => this.ngZone.onStable.asObservable().pipe(take(1)))));\n }\n handleColumnResize() {\n const resizes = this.columnResizingService.changes;\n this.columnResizingSubscription = resizes.pipe(tap(e => {\n if (e.type === 'start') {\n this.renderer.addClass(this.wrapper.nativeElement, 'k-grid-column-resizing');\n }\n else if (e.type === 'end') {\n this.renderer.removeClass(this.wrapper.nativeElement, 'k-grid-column-resizing');\n }\n }), filter(e => e.type === 'start'), switchMap(() => resizes.pipe(\n // tslint:disable-next-line: rxjs-no-unsafe-takeuntil\n takeUntil(resizes.pipe(filter(e => e.type === 'triggerAutoFit'))), filter(e => e.type === 'end'))))\n .subscribe(this.notifyResize.bind(this));\n }\n notifyResize(e) {\n const args = e.resizedColumns\n .filter(item => isTruthy(item.column.resizable) && !item.column.isColumnGroup)\n .map(item => ({\n column: item.column,\n newWidth: item.column.width,\n oldWidth: item.oldWidth\n }));\n this.columnResize.emit(args);\n }\n assertNavigable() {\n if (isDevMode() && !this.navigable) {\n throw new Error('The Grid should be configured as [navigable]=\"true\" to control focus');\n }\n }\n navigationMetadata() {\n const isVirtual = this.isVirtual;\n const pageSize = this.pageSize;\n const dataRows = isVirtual ? this.view.total : pageSize;\n const addRowOffset = this.editService.hasNewItem ? 1 : 0;\n const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;\n const headerRows = this.totalColumnLevels + 1 + filterRowOffset + addRowOffset;\n return new NavigationMetadata(dataRows, headerRows, isVirtual, this.showPager, isPresent(this.detailTemplate), this.wrapper, this.virtualColumns, this.columnsContainer);\n }\n updateNavigationMetadata() {\n this.navigationService.metadata = this.navigationMetadata();\n }\n applyAutoSize() {\n const cols = this.columns.filter((c) => this.autoSize ? c.autoSize !== false : c.autoSize);\n if (cols.length > 0) {\n this.ngZone.onStable.pipe(take(1)).subscribe(_ => this.autoFitColumns(cols));\n }\n }\n onColumnRangeChange(range) {\n const viewportColumns = this.viewportColumns = [];\n const leafViewportColumns = this.columnsContainer\n .nonLockedLeafColumns.toArray().slice(range.start, range.end + 1);\n for (let idx = 0; idx < leafViewportColumns.length; idx++) {\n let column = leafViewportColumns[idx];\n while (column.parent) {\n column = column.parent;\n }\n const toAdd = [column];\n while (toAdd.length) {\n column = toAdd.shift();\n viewportColumns.push(column);\n if (column.isColumnGroup) {\n toAdd.unshift.apply(toAdd, column.childrenArray);\n }\n }\n const lastFromGroup = viewportColumns[viewportColumns.length - 1];\n column = leafViewportColumns[idx];\n while (column !== lastFromGroup && idx < leafViewportColumns.length) {\n idx++;\n column = leafViewportColumns[idx];\n }\n }\n if (range.start > 0) {\n const first = leafViewportColumns[0];\n let offset = range.offset;\n let current = viewportColumns[0];\n let index = 0;\n while (current !== first) {\n offset -= current.isColumnGroup ? 0 : current.width;\n index++;\n current = viewportColumns[index];\n }\n if (offset > 0) {\n const totalLevels = this.columnsContainer.totalLevels;\n let previous;\n for (let idx = 0; idx <= totalLevels; idx++) {\n const offsetColumn = idx < totalLevels ? new ColumnGroupComponent(previous) : new ColumnBase$1(previous);\n previous = offsetColumn;\n offsetColumn.title = \"\\u00A0\";\n offsetColumn.width = offset;\n viewportColumns.unshift(offsetColumn);\n }\n }\n }\n this.leafViewportColumns = viewportColumns.filter(c => !c.isColumnGroup);\n }\n toggleDetailRowLegacy(index, expand) {\n const hasCallback = typeof this.isDetailExpanded === 'function';\n if (isDevMode() && hasCallback) {\n throw new Error('The expandRow and collapseRow methods should not be called when using the ' +\n 'kendoGridDetailsExpandBy directive or the isDetailExpanded callback. ' +\n 'These methods are provided only for backwards compatibility with legacy versions.');\n }\n if (!isDevMode() && hasCallback) {\n return;\n }\n if (this.detailsService.isExpanded(index, null) !== expand) {\n this.detailsService.toggleRow(index, null);\n }\n }\n shouldResetSelection(selectableChanges) {\n const previousValue = selectableChanges.previousValue;\n if (!previousValue) {\n // Selection was disabled, no need to reset.\n return false;\n }\n const currentValue = selectableChanges.currentValue;\n if (!currentValue || currentValue.enabled === false) {\n // Selection disabled, reset.\n return true;\n }\n return previousValue.cell !== currentValue.cell;\n }\n}\nGridComponent.ɵfac = function GridComponent_Factory(t) { return new (t || GridComponent)(ɵngcc0.ɵɵdirectiveInject(BrowserSupportService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(GroupInfoService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ResponsiveService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(DomEventsService), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ColumnReorderService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(SortService), ɵngcc0.ɵɵdirectiveInject(ScrollRequestService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGridComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GridComponent, selectors: [[\"kendo-grid\"]], contentQueries: function GridComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DetailTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, NoRecordsTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PagerTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ToolbarTemplateDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuTemplateDirective, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.detailTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.noRecordsTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pagerTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.toolbarTemplateChildren = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columnMenuTemplates = _t);\n } }, viewQuery: function GridComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(_c1, true);\n ɵngcc0.ɵɵviewQuery(_c2, true);\n ɵngcc0.ɵɵviewQuery(_c3, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedHeader = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.header = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.ariaRoot = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footer = _t);\n } }, hostVars: 11, hostBindings: function GridComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-grid\", ctx.hostClasses)(\"k-grid-lockedcolumns\", ctx.lockedClasses)(\"k-grid-virtual\", ctx.virtualClasses)(\"k-grid-no-scrollbar\", ctx.noScrollbarClass);\n } }, inputs: { data: \"data\", scrollable: \"scrollable\", selectable: \"selectable\", trackBy: \"trackBy\", virtualColumns: \"virtualColumns\", filterable: \"filterable\", sortable: \"sortable\", pageable: \"pageable\", groupable: \"groupable\", navigable: \"navigable\", autoSize: \"autoSize\", resizable: \"resizable\", reorderable: \"reorderable\", loading: \"loading\", columnMenu: \"columnMenu\", hideHeader: \"hideHeader\", skip: \"skip\", sort: \"sort\", group: \"group\", navigatable: \"navigatable\", rowClass: \"rowClass\", rowSelected: \"rowSelected\", cellSelected: \"cellSelected\", isDetailExpanded: \"isDetailExpanded\", pageSize: \"pageSize\", height: \"height\", rowHeight: \"rowHeight\", detailRowHeight: \"detailRowHeight\", filter: \"filter\" }, outputs: { filterChange: \"filterChange\", pageChange: \"pageChange\", groupChange: \"groupChange\", sortChange: \"sortChange\", selectionChange: \"selectionChange\", dataStateChange: \"dataStateChange\", groupExpand: \"groupExpand\", groupCollapse: \"groupCollapse\", detailExpand: \"detailExpand\", detailCollapse: \"detailCollapse\", edit: \"edit\", cancel: \"cancel\", save: \"save\", remove: \"remove\", add: \"add\", cellClose: \"cellClose\", cellClick: \"cellClick\", pdfExport: \"pdfExport\", excelExport: \"excelExport\", columnResize: \"columnResize\", columnReorder: \"columnReorder\", columnVisibilityChange: \"columnVisibilityChange\", columnLockedChange: \"columnLockedChange\", scrollBottom: \"scrollBottom\", contentScroll: \"contentScroll\" }, exportAs: [\"kendoGrid\"], features: [ɵngcc0.ɵɵProvidersFeature([\n BrowserSupportService,\n LocalizationService,\n ColumnInfoService,\n SelectionService,\n CellSelectionService,\n DetailsService,\n GroupsService,\n GroupInfoService,\n ChangeNotificationService,\n EditService,\n PDFService,\n SuspendService,\n {\n provide: CELL_CONTEXT,\n useValue: ɵ4$2\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.grid'\n },\n FilterService,\n ResponsiveService,\n PagerContextService,\n ExcelService,\n ScrollSyncService,\n ResizeService,\n LocalDataChangesService,\n DomEventsService,\n ColumnResizingService,\n SinglePopupService,\n DragAndDropService,\n DragHintService,\n DropCueService,\n ColumnReorderService,\n NavigationService,\n FocusRoot,\n IdService,\n ScrollRequestService,\n SortService\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 10, vars: 8, consts: [[\"kendoGridLocalizedMessages\", \"\", 6, \"groupPanelEmpty\", \"noRecords\", \"pagerFirstPage\", \"pagerPreviousPage\", \"pagerNextPage\", \"pagerLastPage\", \"pagerPage\", \"pagerOf\", \"pagerItems\", \"pagerPageNumberInputTitle\", \"pagerItemsPerPage\", \"filter\", \"filterEqOperator\", \"filterNotEqOperator\", \"filterIsNullOperator\", \"filterIsNotNullOperator\", \"filterIsEmptyOperator\", \"filterIsNotEmptyOperator\", \"filterStartsWithOperator\", \"filterContainsOperator\", \"filterNotContainsOperator\", \"filterEndsWithOperator\", \"filterGteOperator\", \"filterGtOperator\", \"filterLteOperator\", \"filterLtOperator\", \"filterIsTrue\", \"filterIsFalse\", \"filterBooleanAll\", \"filterAfterOrEqualOperator\", \"filterAfterOperator\", \"filterBeforeOperator\", \"filterBeforeOrEqualOperator\", \"filterFilterButton\", \"filterClearButton\", \"filterAndLogic\", \"filterOrLogic\", \"loading\", \"columnMenu\", \"columns\", \"lock\", \"unlock\", \"sortable\", \"sortAscending\", \"sortDescending\", \"sortedAscending\", \"sortedDescending\", \"sortedDefault\", \"columnsApply\", \"columnsReset\", \"detailExpand\", \"detailCollapse\", \"filterDateToday\", \"filterDateToggle\", \"filterNumericDecrement\", \"filterNumericIncrement\"], [\"position\", \"top\", 4, \"ngIf\"], [3, \"text\", \"groups\", \"change\", 4, \"ngIf\"], [\"role\", \"grid\", 1, \"k-grid-aria-root\"], [\"ariaRoot\", \"\"], [3, \"ngIf\"], [3, \"template\", \"pageSize\", \"total\", \"skip\", \"options\", \"pageChange\", 4, \"ngIf\"], [\"position\", \"bottom\", 4, \"ngIf\"], [\"position\", \"top\"], [3, \"text\", \"groups\", \"change\"], [\"class\", \"k-grid-header\", \"role\", \"presentation\", 3, \"padding\", 4, \"ngIf\"], [\"kendoDraggable\", \"\", \"kendoGridSelectionMarquee\", \"\", 3, \"data\", \"rowHeight\", \"detailRowHeight\", \"total\", \"take\", \"groups\", \"groupable\", \"skip\", \"trackBy\", \"columns\", \"selectable\", \"filterable\", \"detailTemplate\", \"noRecordsTemplate\", \"rowClass\", \"loading\", \"isVirtual\", \"virtualColumns\", \"enableDrag\", \"pageChange\", \"scrollBottom\", \"contentScroll\"], [\"class\", \"k-grid-footer\", 3, \"padding\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-header\"], [\"role\", \"presentation\", \"class\", \"k-grid-header-locked\", 3, \"width\", 4, \"ngIf\"], [\"role\", \"presentation\", \"data-scrollable\", \"\", 1, \"k-grid-header-wrap\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"header\", \"\"], [\"role\", \"presentation\", 3, \"virtualColumns\"], [\"kendoGridColGroup\", \"\", \"role\", \"presentation\", 3, \"columns\", \"groups\", \"detailTemplate\"], [\"kendoGridHeader\", \"\", \"role\", \"presentation\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"sort\", \"filter\", \"filterable\", \"groupable\", \"reorderable\", \"groups\", \"sortable\", \"columnMenu\", \"columnMenuTemplate\", \"lockedColumnsCount\", \"totalColumnsCount\", \"detailTemplate\"], [\"class\", \"k-width-container\", \"role\", \"presentation\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-header-locked\"], [\"lockedHeader\", \"\"], [\"role\", \"presentation\", 3, \"locked\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"sort\", \"groups\", \"filter\", \"filterable\", \"groupable\", \"reorderable\", \"sortable\", \"columnMenu\", \"columnMenuTemplate\", \"totalColumnsCount\", \"detailTemplate\"], [\"role\", \"presentation\", 1, \"k-width-container\"], [1, \"k-grid-footer\"], [\"class\", \"k-grid-footer-locked\", 3, \"width\", 4, \"ngIf\"], [\"data-scrollable\", \"\", 1, \"k-grid-footer-wrap\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"footer\", \"\"], [\"role\", \"presentation\"], [\"kendoGridColGroup\", \"\", 3, \"columns\", \"groups\", \"detailTemplate\"], [\"kendoGridFooter\", \"\", 3, \"logicalRowIndex\", \"scrollable\", \"groups\", \"columns\", \"lockedColumnsCount\", \"detailTemplate\"], [1, \"k-grid-footer-locked\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"groups\", \"columns\", \"detailTemplate\", \"logicalRowIndex\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"groups\", \"groupable\", \"reorderable\", \"sort\", \"sortable\", \"filter\", \"filterable\", \"columnMenu\", \"columnMenuTemplate\", \"detailTemplate\", 4, \"ngIf\"], [\"kendoGridTableBody\", \"\", \"kendoDraggable\", \"\", \"kendoGridSelectionMarquee\", \"\", 3, \"groups\", \"data\", \"skip\", \"columns\", \"selectable\", \"filterable\", \"noRecordsTemplate\", \"detailTemplate\", \"showGroupFooters\", \"trackBy\", \"rowClass\", \"enableDrag\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"logicalRowIndex\", \"groups\", \"columns\", \"detailTemplate\", 4, \"ngIf\"], [\"kendoGridLoading\", \"\", 4, \"ngIf\"], [\"kendoGridHeader\", \"\", 3, \"resizable\", \"scrollable\", \"columns\", \"totalColumnLevels\", \"groups\", \"groupable\", \"reorderable\", \"sort\", \"sortable\", \"filter\", \"filterable\", \"columnMenu\", \"columnMenuTemplate\", \"detailTemplate\"], [\"kendoGridFooter\", \"\", 3, \"scrollable\", \"logicalRowIndex\", \"groups\", \"columns\", \"detailTemplate\"], [\"kendoGridLoading\", \"\"], [3, \"template\", \"pageSize\", \"total\", \"skip\", \"options\", \"pageChange\"], [\"position\", \"bottom\"]], template: function GridComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c116);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵtemplate(2, GridComponent_kendo_grid_toolbar_2_Template, 1, 0, \"kendo-grid-toolbar\", 1);\n ɵngcc0.ɵɵtemplate(3, GridComponent_kendo_grid_group_panel_3_Template, 1, 2, \"kendo-grid-group-panel\", 2);\n ɵngcc0.ɵɵelementStart(4, \"div\", 3, 4);\n ɵngcc0.ɵɵtemplate(6, GridComponent_ng_template_6_Template, 3, 21, \"ng-template\", 5);\n ɵngcc0.ɵɵtemplate(7, GridComponent_ng_template_7_Template, 6, 20, \"ng-template\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, GridComponent_kendo_pager_8_Template, 1, 5, \"kendo-pager\", 6);\n ɵngcc0.ɵɵtemplate(9, GridComponent_kendo_grid_toolbar_9_Template, 1, 0, \"kendo-grid-toolbar\", 7);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showTopToolbar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showGroupPanel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵattribute(\"aria-rowcount\", ctx.ariaRowCount)(\"aria-colcount\", ctx.ariaColCount);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isScrollable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.isScrollable);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showPager);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showBottomToolbar);\n } }, directives: function () { return [LocalizedMessagesDirective, ɵngcc5.NgIf, ToolbarComponent,\n GroupPanelComponent,\n ListComponent, ɵngcc2.DraggableDirective, GridMarqueeDirective,\n ResizableContainerDirective,\n TableDirective,\n ColGroupComponent,\n HeaderComponent,\n FooterComponent,\n TableBodyComponent,\n LoadingComponent,\n PagerComponent]; }, styles: [\" .k-grid .k-grid-aria-root {\\n display: flex;\\n flex-direction: column;\\n flex: 1 1 auto;\\n overflow: hidden;\\n }\\n\\n .k-grid .k-filter-row td {\\n white-space: nowrap;\\n }\"], encapsulation: 2 });\n/** @nocollapse */\nGridComponent.ctorParameters = () => [\n { type: BrowserSupportService },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: ElementRef },\n { type: GroupInfoService },\n { type: GroupsService },\n { type: ChangeNotificationService },\n { type: DetailsService },\n { type: EditService },\n { type: FilterService },\n { type: PDFService },\n { type: ResponsiveService },\n { type: Renderer2 },\n { type: ExcelService },\n { type: NgZone },\n { type: ScrollSyncService },\n { type: DomEventsService },\n { type: ColumnResizingService },\n { type: ChangeDetectorRef },\n { type: ColumnReorderService },\n { type: ColumnInfoService },\n { type: NavigationService },\n { type: SortService },\n { type: ScrollRequestService },\n { type: LocalizationService }\n];\nGridComponent.propDecorators = {\n data: [{ type: Input }],\n pageSize: [{ type: Input }],\n height: [{ type: Input }],\n rowHeight: [{ type: Input }],\n detailRowHeight: [{ type: Input }],\n skip: [{ type: Input }],\n scrollable: [{ type: Input }],\n selectable: [{ type: Input }],\n sort: [{ type: Input }],\n trackBy: [{ type: Input }],\n filter: [{ type: Input }],\n group: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n filterable: [{ type: Input }],\n sortable: [{ type: Input }],\n pageable: [{ type: Input }],\n groupable: [{ type: Input }],\n navigable: [{ type: Input }],\n navigatable: [{ type: Input }],\n autoSize: [{ type: Input }],\n rowClass: [{ type: Input }],\n rowSelected: [{ type: Input }],\n cellSelected: [{ type: Input }],\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n loading: [{ type: Input }],\n columnMenu: [{ type: Input }],\n hideHeader: [{ type: Input }],\n filterChange: [{ type: Output }],\n pageChange: [{ type: Output }],\n groupChange: [{ type: Output }],\n sortChange: [{ type: Output }],\n selectionChange: [{ type: Output }],\n dataStateChange: [{ type: Output }],\n groupExpand: [{ type: Output }],\n groupCollapse: [{ type: Output }],\n detailExpand: [{ type: Output }],\n detailCollapse: [{ type: Output }],\n edit: [{ type: Output }],\n cancel: [{ type: Output }],\n save: [{ type: Output }],\n remove: [{ type: Output }],\n add: [{ type: Output }],\n cellClose: [{ type: Output }],\n cellClick: [{ type: Output }],\n pdfExport: [{ type: Output }],\n excelExport: [{ type: Output }],\n columnResize: [{ type: Output }],\n columnReorder: [{ type: Output }],\n columnVisibilityChange: [{ type: Output }],\n columnLockedChange: [{ type: Output }],\n scrollBottom: [{ type: Output }],\n contentScroll: [{ type: Output }],\n columns: [{ type: ContentChildren, args: [ColumnBase$1,] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-grid',] }],\n lockedClasses: [{ type: HostBinding, args: ['class.k-grid-lockedcolumns',] }],\n virtualClasses: [{ type: HostBinding, args: ['class.k-grid-virtual',] }],\n noScrollbarClass: [{ type: HostBinding, args: ['class.k-grid-no-scrollbar',] }],\n detailTemplateChildren: [{ type: ContentChildren, args: [DetailTemplateDirective,] }],\n noRecordsTemplateChildren: [{ type: ContentChildren, args: [NoRecordsTemplateDirective,] }],\n pagerTemplateChildren: [{ type: ContentChildren, args: [PagerTemplateDirective,] }],\n toolbarTemplateChildren: [{ type: ContentChildren, args: [ToolbarTemplateDirective,] }],\n columnMenuTemplates: [{ type: ContentChildren, args: [ColumnMenuTemplateDirective,] }],\n lockedHeader: [{ type: ViewChild, args: [\"lockedHeader\",] }],\n header: [{ type: ViewChild, args: [\"header\",] }],\n footer: [{ type: ViewChildren, args: [\"footer\",] }],\n ariaRoot: [{ type: ViewChild, args: ['ariaRoot',] }],\n isDetailExpanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridComponent, [{\n type: Component,\n args: [{\n encapsulation: ViewEncapsulation.None,\n exportAs: 'kendoGrid',\n providers: [\n BrowserSupportService,\n LocalizationService,\n ColumnInfoService,\n SelectionService,\n CellSelectionService,\n DetailsService,\n GroupsService,\n GroupInfoService,\n ChangeNotificationService,\n EditService,\n PDFService,\n SuspendService,\n {\n provide: CELL_CONTEXT,\n useValue: ɵ4$2\n },\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.grid'\n },\n FilterService,\n ResponsiveService,\n PagerContextService,\n ExcelService,\n ScrollSyncService,\n ResizeService,\n LocalDataChangesService,\n DomEventsService,\n ColumnResizingService,\n SinglePopupService,\n DragAndDropService,\n DragHintService,\n DropCueService,\n ColumnReorderService,\n NavigationService,\n FocusRoot,\n IdService,\n ScrollRequestService,\n SortService\n ],\n selector: 'kendo-grid',\n styles: [\n // Styles for backwards compatibility with kendo-theme-default@v2.46.0 and earlier.\n ` .k-grid .k-grid-aria-root {\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .k-grid .k-filter-row td {\n white-space: nowrap;\n }`\n ],\n template: `\n \n \n \n \n \n
\n \n
\n
\n \n \n \n \n \n
\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n `\n }]\n }], function () { return [{ type: BrowserSupportService }, { type: SelectionService }, { type: CellSelectionService }, { type: ɵngcc0.ElementRef }, { type: GroupInfoService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: DetailsService }, { type: EditService }, { type: FilterService }, { type: PDFService }, { type: ResponsiveService }, { type: ɵngcc0.Renderer2 }, { type: ExcelService }, { type: ɵngcc0.NgZone }, { type: ScrollSyncService }, { type: DomEventsService }, { type: ColumnResizingService }, { type: ɵngcc0.ChangeDetectorRef }, { type: ColumnReorderService }, { type: ColumnInfoService }, { type: NavigationService }, { type: SortService }, { type: ScrollRequestService }, { type: ɵngcc1.LocalizationService }]; }, { data: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], selectable: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }], filterable: [{\n type: Input\n }], sortable: [{\n type: Input\n }], pageable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], navigable: [{\n type: Input\n }], autoSize: [{\n type: Input\n }], resizable: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], loading: [{\n type: Input\n }], columnMenu: [{\n type: Input\n }], hideHeader: [{\n type: Input\n }], filterChange: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], groupChange: [{\n type: Output\n }], sortChange: [{\n type: Output\n }], selectionChange: [{\n type: Output\n }], dataStateChange: [{\n type: Output\n }], groupExpand: [{\n type: Output\n }], groupCollapse: [{\n type: Output\n }], detailExpand: [{\n type: Output\n }], detailCollapse: [{\n type: Output\n }], edit: [{\n type: Output\n }], cancel: [{\n type: Output\n }], save: [{\n type: Output\n }], remove: [{\n type: Output\n }], add: [{\n type: Output\n }], cellClose: [{\n type: Output\n }], cellClick: [{\n type: Output\n }], pdfExport: [{\n type: Output\n }], excelExport: [{\n type: Output\n }], columnResize: [{\n type: Output\n }], columnReorder: [{\n type: Output\n }], columnVisibilityChange: [{\n type: Output\n }], columnLockedChange: [{\n type: Output\n }], scrollBottom: [{\n type: Output\n }], contentScroll: [{\n type: Output\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }], footer: [{\n type: ViewChildren,\n args: [\"footer\"]\n }], skip: [{\n type: Input\n }], sort: [{\n type: Input\n }], group: [{\n type: Input\n }], navigatable: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], rowSelected: [{\n type: Input\n }], cellSelected: [{\n type: Input\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-grid']\n }], lockedClasses: [{\n type: HostBinding,\n args: ['class.k-grid-lockedcolumns']\n }], virtualClasses: [{\n type: HostBinding,\n args: ['class.k-grid-virtual']\n }], noScrollbarClass: [{\n type: HostBinding,\n args: ['class.k-grid-no-scrollbar']\n }], isDetailExpanded: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], height: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }], detailRowHeight: [{\n type: Input\n }], filter: [{\n type: Input\n }], detailTemplateChildren: [{\n type: ContentChildren,\n args: [DetailTemplateDirective]\n }], noRecordsTemplateChildren: [{\n type: ContentChildren,\n args: [NoRecordsTemplateDirective]\n }], pagerTemplateChildren: [{\n type: ContentChildren,\n args: [PagerTemplateDirective]\n }], toolbarTemplateChildren: [{\n type: ContentChildren,\n args: [ToolbarTemplateDirective]\n }], columnMenuTemplates: [{\n type: ContentChildren,\n args: [ColumnMenuTemplateDirective]\n }], lockedHeader: [{\n type: ViewChild,\n args: [\"lockedHeader\"]\n }], header: [{\n type: ViewChild,\n args: [\"header\"]\n }], ariaRoot: [{\n type: ViewChild,\n args: ['ariaRoot']\n }] }); })();\n\n/**\n * @hidden\n */\nconst update = (arr, idx, value) => ([\n ...arr.slice(0, idx + 1),\n ...(arr.slice(idx + 1).map(x => x + value))\n]);\n/**\n * @hidden\n */\nclass RowHeightService {\n constructor(total = 0, rowHeight, detailRowHeight) {\n this.total = total;\n this.rowHeight = rowHeight;\n this.detailRowHeight = detailRowHeight;\n this.offsets = [];\n this.heights = [];\n let agg = 0;\n for (let idx = 0; idx < total; idx++) {\n this.offsets.push(agg);\n agg += rowHeight;\n this.heights.push(rowHeight);\n }\n }\n height(rowIndex) {\n return this.heights[rowIndex];\n }\n expandDetail(rowIndex) {\n if (this.height(rowIndex) === this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight);\n }\n }\n collapseDetail(rowIndex) {\n if (this.height(rowIndex) > this.rowHeight) {\n this.updateRowHeight(rowIndex, this.detailRowHeight * -1);\n }\n }\n isExpanded(rowIndex) {\n return this.height(rowIndex) > this.rowHeight;\n }\n index(position) {\n if (position < 0) {\n return undefined;\n }\n const result = this.offsets.reduce((prev, current, idx) => {\n if (prev !== undefined) {\n return prev;\n }\n else if (current === position) {\n return idx;\n }\n else if (current > position) {\n return idx - 1;\n }\n return undefined;\n }, undefined); // tslint:disable-line:align\n return result === undefined ? this.total - 1 : result;\n }\n offset(rowIndex) {\n return this.offsets[rowIndex];\n }\n totalHeight() {\n return this.heights.reduce((prev, curr) => prev + curr, 0);\n }\n updateRowHeight(rowIndex, value) {\n if (this.total > 0) {\n this.heights[rowIndex] += value;\n this.offsets = update(this.offsets, rowIndex, value);\n }\n }\n}\n\n/**\n * @hidden\n */\nclass ScrollAction {\n constructor(offset) {\n this.offset = offset;\n }\n}\n/**\n * @hidden\n */\nclass PageAction {\n constructor(skip, take$$1) {\n this.skip = skip;\n this.take = take$$1;\n }\n}\n/**\n * @hidden\n */\nclass ScrollBottomAction {\n}\nconst SCROLL_BOTTOM_THRESHOLD = 2;\n/**\n * @hidden\n */\nclass ScrollerService {\n constructor(scrollObservable) {\n this.scrollObservable = scrollObservable;\n this.firstLoaded = 0;\n }\n create(rowHeightService, skip, take$$1, total) {\n this.rowHeightService = rowHeightService;\n this.firstLoaded = skip;\n this.lastLoaded = skip + take$$1;\n this.take = take$$1;\n this.total = total;\n this.lastScrollTop = 0;\n const subject = new BehaviorSubject(new ScrollAction(this.rowHeightService.offset(skip)));\n this.subscription = Observable.create(observer => {\n this.unsubscribe();\n this.scrollSubscription = this.scrollObservable.subscribe(x => this.onScroll(x, observer));\n }).subscribe(x => subject.next(x));\n return subject;\n }\n destroy() {\n this.unsubscribe();\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n onScroll({ scrollTop, offsetHeight, scrollHeight, clientHeight }, observer) {\n if (this.lastScrollTop === scrollTop) {\n return;\n }\n const up = this.lastScrollTop >= scrollTop;\n this.lastScrollTop = scrollTop;\n let firstItemIndex = this.rowHeightService.index(scrollTop);\n let firstItemOffset = this.rowHeightService.offset(firstItemIndex);\n const lastItemIndex = this.rowHeightService.index(scrollTop + offsetHeight);\n if (!up) {\n if (lastItemIndex >= this.lastLoaded && this.lastLoaded < this.total) {\n const overflow = (firstItemIndex + this.take) - this.total;\n if (overflow > 0) {\n firstItemIndex = firstItemIndex - overflow;\n firstItemOffset = this.rowHeightService.offset(firstItemIndex);\n }\n this.firstLoaded = firstItemIndex;\n observer.next(new ScrollAction(firstItemOffset));\n let nextTake = this.firstLoaded + this.take;\n this.lastLoaded = Math.min(nextTake, this.total);\n nextTake = nextTake > this.total ? this.total - this.firstLoaded : this.take;\n observer.next(new PageAction(this.firstLoaded, this.take));\n }\n else {\n const atBottom = scrollHeight - clientHeight - scrollTop < SCROLL_BOTTOM_THRESHOLD;\n if (atBottom) {\n observer.next(new ScrollBottomAction());\n }\n }\n }\n if (up && firstItemIndex < this.firstLoaded) {\n const nonVisibleBuffer = Math.floor(this.take * 0.3);\n this.firstLoaded = Math.max(firstItemIndex - nonVisibleBuffer, 0);\n observer.next(new ScrollAction(this.rowHeightService.offset(this.firstLoaded)));\n this.lastLoaded = Math.min(this.firstLoaded + this.take, this.total);\n observer.next(new PageAction(this.firstLoaded, this.take));\n }\n }\n unsubscribe() {\n if (this.scrollSubscription) {\n this.scrollSubscription.unsubscribe();\n this.scrollSubscription = undefined;\n }\n }\n}\n\n/**\n * @hidden\n */\nconst NON_DATA_CELL_CLASSES = 'k-hierarchy-cell k-detail-cell k-group-cell';\n/**\n * @hidden\n */\nconst NON_DATA_ROW_CLASSES = 'k-grouping-row k-group-footer k-detail-row k-grid-norecords';\n/**\n * @hidden\n */\nconst IGNORE_TARGET_CLASSSES = 'k-icon';\n/**\n * @hidden\n */\nconst IGNORE_CONTAINER_CLASSES = 'k-widget k-grid-ignore-click';\n\nconst elementAt = (index, elements, elementOffset) => {\n for (let idx = 0, elementIdx = 0; idx < elements.length; idx++) {\n const offset = elementOffset(elements[idx]);\n if (elementIdx <= index && index <= elementIdx + offset - 1) {\n return elements[idx];\n }\n elementIdx += offset;\n }\n};\nconst rowAt = (index, rows) => elementAt(index, rows, row => row.hasAttribute('data-kendo-grid-item-index') ? 1 : 0);\nconst cellAt = (index, cells) => elementAt(index, cells, cell => !hasClasses(cell, NON_DATA_CELL_CLASSES) ? parseInt(cell.getAttribute('colSpan'), 10) || 1 : 0);\nconst EMPTY_OBJECT = {};\n/**\n * @hidden\n */\nconst SCROLLER_FACTORY_TOKEN = new InjectionToken('grid-scroll-service-factory');\n/**\n * @hidden\n */\nfunction DEFAULT_SCROLLER_FACTORY(observable) {\n return new ScrollerService(observable);\n}\nconst wheelDeltaY = (e) => {\n const deltaY = e.wheelDeltaY;\n if (e.wheelDelta && (deltaY === undefined || deltaY)) {\n return e.wheelDelta;\n }\n else if (e.detail && e.axis === e.VERTICAL_AXIS) {\n return (-e.detail) * 10;\n }\n return 0;\n};\nconst preventLockedScroll = (args, element) => {\n const delta = wheelDeltaY(args);\n const scrollTop = element.scrollTop;\n const allowScroll = (scrollTop === 0 && 0 < delta) || (element.scrollHeight <= element.offsetHeight + scrollTop && delta < 0);\n if (!allowScroll) {\n event.preventDefault();\n }\n};\nconst translateY = (renderer, value) => el => renderer.setStyle(el, \"transform\", `translateY(${value}px)`);\nconst maybeNativeElement = el => el ? el.nativeElement : null;\nconst hasScrollbar = (el, parent) => el.nativeElement.offsetWidth > parent.nativeElement.clientWidth;\nconst setHeight$1 = renderer => ({ el, height }) => renderer.setStyle(el, \"height\", `${height}px`);\nconst bufferSize = 1;\n/**\n * @hidden\n */\nclass ListComponent {\n constructor(scrollerFactory, detailsService, changeNotification, suspendService, groupsService, ngZone, renderer, scrollSyncService, resizeService, editService, supportService, navigationService, scrollRequestService, localization, columnResizingService, changeDetector, pdfService, columnInfo) {\n this.changeNotification = changeNotification;\n this.suspendService = suspendService;\n this.groupsService = groupsService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.scrollSyncService = scrollSyncService;\n this.resizeService = resizeService;\n this.editService = editService;\n this.supportService = supportService;\n this.navigationService = navigationService;\n this.localization = localization;\n this.columnResizingService = columnResizingService;\n this.changeDetector = changeDetector;\n this.pdfService = pdfService;\n this.columnInfo = columnInfo;\n this.groups = [];\n this.skip = 0;\n this.columns = new ColumnsContainer(() => []);\n this.selectable = false;\n this.groupable = false;\n this.trackBy = defaultTrackBy;\n this.contentScroll = new EventEmitter();\n this.pageChange = new EventEmitter();\n this.scrollBottom = new EventEmitter();\n this.columnsStartIdx = 0;\n this.resizeSensors = new QueryList();\n this.dispatcher = new Subject();\n this.containerScrollTop = 0;\n this.scrollLeft = 0;\n this.rtl = false;\n this.scroller = scrollerFactory(this.dispatcher);\n this.subscriptions =\n detailsService.changes.subscribe(x => this.detailExpand(x)).add(scrollRequestService.requests.subscribe(x => this.scrollTo(x)));\n }\n get hostClass() {\n return true;\n }\n get hostRole() {\n return 'presentation';\n }\n get showFooter() {\n return this.groupable && this.groupable.showFooter;\n }\n get totalWidth() {\n if (this.virtualColumns && this.columns.unlockedWidth) {\n return this.columns.unlockedWidth;\n }\n }\n get lockedLeafColumns() {\n return this.columns.lockedLeafColumns;\n }\n get nonLockedLeafColumns() {\n return this.columns.nonLockedLeafColumns;\n }\n get nonLockedColumnsToRender() {\n if (this.virtualColumns && !this.pdfService.exporting) {\n return this.viewportColumns;\n }\n return this.nonLockedLeafColumns;\n }\n get leafColumns() {\n return this.columns.leafColumnsToRender;\n }\n get lockedWidth() {\n const groupCellsWidth = this.groups.length * GROUP_CELL_WIDTH;\n return expandColumns(this.lockedLeafColumns.toArray()).reduce((prev, curr) => prev + (curr.width || 0), groupCellsWidth);\n }\n get nonLockedWidth() {\n if ((!this.rtl && this.lockedLeafColumns.length) || this.virtualColumns) {\n return sumColumnWidths(expandColumns(this.nonLockedColumnsToRender.toArray()));\n }\n return undefined;\n }\n get isLocked() {\n return this.lockedLeafColumns.length > 0;\n }\n ngOnInit() {\n this.init();\n this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowSync.bind(this)));\n this.subscriptions.add(this.ngZone.runOutsideAngular(this.handleRowNavigationLocked.bind(this)));\n this.subscriptions.add(merge(this.columns.changes, this.resizeService.changes).subscribe(() => {\n if (this.virtualColumns) {\n this.ngZone.run(() => {\n this.updateViewportColumns();\n this.changeDetector.markForCheck();\n });\n }\n }));\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl));\n }\n ngOnChanges(changes) {\n const hasInitialSkip = changes.skip && changes.skip.firstChange && changes.skip.currentValue > 0;\n if (hasInitialSkip) {\n this.handleInitialScrollToSkip();\n }\n if (isChanged(\"skip\", changes) && !this.rebind) {\n this.skipScroll = true;\n this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);\n }\n if (anyChanged([\"total\", \"take\"], changes)) {\n this.init();\n }\n this.rebind = false;\n }\n ngDoCheck() {\n if (this.virtualColumns && (!this.viewportColumns || this.viewportWidthChange())) {\n this.updateViewportColumns();\n }\n }\n ngAfterViewInit() {\n if (this.skip && this.isVirtual) {\n this.container.nativeElement.scrollTop = this.rowHeightService.offset(this.skip);\n }\n this.resetNavigationViewport();\n this.attachContainerScroll();\n this.initResizeService();\n }\n ngAfterViewChecked() {\n const isLocked = this.isLocked;\n if (isLocked && !this.hasLockedContainer) {\n this.syncRowsHeight();\n }\n this.hasLockedContainer = isLocked;\n }\n syncRowsHeight() {\n if (this.lockedContainer) {\n syncRowsHeight(this.lockedTable.nativeElement, this.table.nativeElement);\n }\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n if (this.resizeService) {\n this.resizeService.destroy();\n }\n this.cleanupScroller();\n }\n init() {\n if (this.suspendService.scroll) {\n return;\n }\n this.rowHeightService = new RowHeightService(this.total, this.rowHeight, this.detailRowHeight);\n this.totalHeight = this.rowHeightService.totalHeight();\n if (!isUniversal()) {\n this.ngZone.runOutsideAngular(this.createScroller.bind(this));\n }\n }\n lockedScroll() {\n if (!this.suspendService.scroll) {\n const lockedScrollTop = this.lockedContainer.nativeElement.scrollTop;\n if (lockedScrollTop !== this.containerScrollTop) {\n this.container.nativeElement.scrollTop = this.containerScrollTop = lockedScrollTop;\n }\n }\n }\n lockedMousewheel(args) {\n if (!args.ctrlKey) {\n preventLockedScroll(args, this.container.nativeElement);\n const scrollDelta = wheelDeltaY(args);\n this.container.nativeElement.scrollTop -= scrollDelta;\n }\n }\n lockedKeydown(args) {\n if (args.keyCode === Keys.PageDown || args.keyCode === Keys.PageUp) {\n const dir = args.keyCode === Keys.PageDown ? 1 : -1;\n const element = this.container.nativeElement;\n element.scrollTop += element.offsetHeight * dir * 0.8;\n args.preventDefault();\n }\n }\n detailExpand({ index, expand }) {\n if (expand) {\n this.rowHeightService.expandDetail(index);\n }\n else {\n this.rowHeightService.collapseDetail(index);\n }\n this.totalHeight = this.rowHeightService.totalHeight();\n this.resetNavigationViewport();\n }\n attachContainerScroll() {\n if (isUniversal()) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.subscriptions.add(fromEvent(this.container.nativeElement, 'scroll').pipe(map((event) => event.target), filter(() => !this.suspendService.scroll), tap((target) => {\n this.onContainerScroll(target);\n this.resetNavigationViewport();\n if (this.virtualColumns) {\n this.handleColumnScroll();\n }\n const rowViewport = this.navigationService.viewport || EMPTY_OBJECT;\n const columnViewport = this.navigationService.columnViewport || EMPTY_OBJECT;\n this.contentScroll.emit({\n scrollLeft: target.scrollLeft,\n scrollTop: target.scrollTop,\n startRow: rowViewport.firstItemIndex,\n endRow: rowViewport.lastItemIndex,\n startColumn: columnViewport.firstItemIndex,\n endColumn: columnViewport.lastItemIndex\n });\n })).subscribe(this.dispatcher));\n });\n this.scrollSyncService.registerEmitter(this.container.nativeElement, \"body\");\n }\n createScroller() {\n this.cleanupScroller();\n const observable = this.scroller\n .create(this.rowHeightService, this.skip, this.take, this.total);\n this.skipScroll = false;\n this.scrollerSubscription = observable.pipe(filter((x) => x instanceof PageAction), filter(() => {\n const temp = this.skipScroll;\n this.skipScroll = false;\n return !temp;\n }), tap(() => this.rebind = true))\n .subscribe((x) => this.ngZone.run(() => this.pageChange.emit(x)));\n this.scrollerSubscription.add(observable.pipe(filter((x) => x instanceof ScrollAction))\n .subscribe(this.scroll.bind(this)));\n this.scrollerSubscription.add(observable.pipe(filter((x) => x instanceof ScrollBottomAction))\n .subscribe(() => this.scrollBottom.emit()));\n }\n scroll({ offset = 0 }) {\n if (this.isVirtual) {\n [\n maybeNativeElement(this.table),\n maybeNativeElement(this.lockedTable)\n ].filter(isPresent).forEach(translateY(this.renderer, offset));\n }\n this.resetNavigationViewport();\n }\n onContainerScroll({ scrollTop }) {\n this.containerScrollTop = scrollTop;\n if (this.lockedContainer) {\n this.lockedContainer.nativeElement.scrollTop = scrollTop;\n }\n }\n handleInitialScrollToSkip() {\n const shouldScroll = () => this.isVirtual && this.skip > 0 && this.total > 0;\n const sub = this.changeNotification.changes\n .pipe(filter(shouldScroll))\n .subscribe(_ => {\n this.scrollTo({ row: this.skip });\n sub.unsubscribe();\n });\n }\n handleRowSync() {\n const isLocked = () => isPresent(this.lockedContainer);\n const onStable = () => this.ngZone.onStable.asObservable().pipe(take(1));\n return merge(this.changeNotification.changes, this.groupsService.changes\n .pipe(filter(isLocked), switchMapTo(onStable())), this.editService.changed, this.resizeService.changes, this.columnResizingService.changes\n .pipe(filter(change => change.type === 'end')), this.supportService.changes)\n .pipe(tap(() => this.resetNavigationViewport()), filter(isLocked))\n .subscribe(() => {\n const scrollTop = this.container.nativeElement.scrollTop;\n const scrollLeft = this.container.nativeElement.scrollLeft;\n this.syncRowsHeight();\n this.syncContainerHeight();\n this.lockedContainer.nativeElement.scrollTop = this.container.nativeElement.scrollTop = scrollTop;\n // fixes scroll left position in IE when editing\n this.container.nativeElement.scrollLeft = scrollLeft;\n this.resizeSensors.forEach(sensor => sensor.acceptSize());\n });\n }\n handleRowNavigationLocked() {\n return this.navigationService.changes.pipe(filter(() => isPresent(this.lockedContainer)), delay(10)).subscribe((args) => {\n if (this.lockedLeafColumns.length <= args.prevColIndex && args.colIndex < this.lockedLeafColumns.length) {\n const cell = this.navigationService.activeCell;\n if (cell && cell.colIndex + cell.colSpan < args.prevColIndex) {\n this.container.nativeElement.scrollLeft = 0;\n }\n }\n });\n }\n scrollToVirtualRow(itemIndex) {\n if (isPresent(this.detailTemplate)) {\n itemIndex = Math.floor(itemIndex / 2);\n }\n const offset = this.rowHeightService.offset(itemIndex);\n this.container.nativeElement.scrollTop = offset;\n this.resetNavigationViewport();\n }\n scrollTo({ row, column }) {\n if (isNumber(row)) {\n if (this.isVirtual) {\n this.scrollToVirtualRow(row);\n }\n else {\n const element = rowAt(row, this.table.nativeElement.rows);\n if (element) {\n this.container.nativeElement.scrollTop = element.offsetTop;\n }\n }\n }\n if (isNumber(column)) {\n column -= this.lockedLeafColumns.length;\n if (this.virtualColumns) {\n const columns = this.columns.leafColumnsToRender;\n let offset = 0;\n for (let idx = 0; idx < column; idx++) {\n offset += columns[idx].width || 0;\n }\n const startOffset = this.lockedLeafColumns.length ? 0 : this.groups.length * GROUP_CELL_WIDTH + (this.detailTemplate && column > 0 ? GROUP_CELL_WIDTH : 0);\n this.container.nativeElement.scrollLeft = this.normalizeScrollLeft(offset + startOffset);\n }\n else if (column === 0 && this.detailTemplate) {\n this.container.nativeElement.scrollLeft = this.normalizeScrollLeft(0);\n }\n else {\n const firstRow = rowAt(0, this.table.nativeElement.rows);\n if (firstRow) {\n const element = cellAt(column, firstRow.cells);\n if (element) {\n this.container.nativeElement.scrollLeft = this.elementScrollLeft(element);\n }\n }\n }\n }\n }\n resetNavigationViewport() {\n if (!this.container || !this.navigationService.enabled ||\n !this.navigationService.needsViewport() || this.data.length === 0) {\n return;\n }\n const { scrollTop, offsetHeight } = this.container.nativeElement;\n const scrollBottom = scrollTop + offsetHeight;\n const firstItemIndex = this.rowHeightService.index(scrollTop);\n let lastItemIndex = this.rowHeightService.index(scrollBottom);\n const lastItemOffset = this.rowHeightService.offset(lastItemIndex);\n const lastItemOverflows = lastItemOffset + this.rowHeight > scrollBottom;\n if (lastItemIndex > 0 && lastItemOverflows) {\n lastItemIndex--;\n }\n let viewportStart = firstItemIndex;\n let viewportEnd = lastItemIndex;\n if (isPresent(this.detailTemplate)) {\n viewportStart *= 2;\n viewportEnd *= 2;\n const firstItemHeight = this.rowHeightService.offset(firstItemIndex);\n if (firstItemHeight + this.rowHeight < scrollTop) {\n viewportStart++;\n }\n const lastItemHeight = this.rowHeightService.height(lastItemIndex);\n const lastItemExpanded = this.rowHeightService.isExpanded(lastItemIndex);\n const lastItemDetailOverflows = lastItemOffset + lastItemHeight > scrollBottom;\n if (lastItemExpanded && !lastItemDetailOverflows) {\n viewportEnd++;\n }\n }\n this.navigationService.setViewport(viewportStart, viewportEnd);\n }\n cleanupScroller() {\n if (this.scrollerSubscription) {\n this.scrollerSubscription.unsubscribe();\n }\n if (this.scroller) {\n this.scroller.destroy();\n }\n }\n initResizeService() {\n this.resizeService.connect(merge(...this.resizeSensors.map(sensor => sensor.resize)));\n }\n syncContainerHeight() {\n [maybeNativeElement(this.lockedContainer)]\n .filter(isPresent)\n .map(el => {\n el.style.height = '';\n let height = this.container.nativeElement.offsetHeight;\n if (hasScrollbar(this.table, this.container)) {\n height -= this.supportService.scrollbarWidth;\n }\n return { el, height };\n })\n .forEach(setHeight$1(this.renderer));\n }\n updateViewportColumns(range) {\n const columns = this.columns.nonLockedLeafColumns.toArray();\n let { startIdx, endIdx, offset } = range || this.calculateViewportColumns();\n const start = Math.max(0, startIdx - bufferSize);\n const end = Math.min(endIdx + bufferSize, columns.length - 1);\n if (start < startIdx) {\n for (let idx = startIdx - 1; idx >= start; idx--) {\n offset -= columns[idx].width;\n }\n }\n let currentColumns = columns.slice(start, end + 1);\n this.viewportColumnsWidth = currentColumns.reduce((total, column) => total + column.width, 0);\n if (start > 0) {\n const offsetColumn = new ColumnBase$1();\n offsetColumn.width = offset;\n currentColumns.unshift(offsetColumn);\n }\n this.viewportColumns = new QueryList();\n this.viewportColumns.reset(currentColumns);\n this.columnsStartIdx = start;\n this.columnsEndIdx = end;\n this.columnInfo.columnRangeChange.emit({ start, end, offset });\n if (!range) {\n this.updateColumnViewport(startIdx, endIdx);\n }\n }\n handleColumnScroll() {\n const container = this.container.nativeElement;\n const scrollLeft = container.scrollLeft;\n if (this.scrollLeft !== scrollLeft) {\n this.scrollLeft = scrollLeft;\n const range = this.calculateViewportColumns();\n this.updateColumnViewport(range.startIdx, range.endIdx);\n if (range.startIdx < this.columnsStartIdx || this.columnsEndIdx < range.endIdx) {\n cancelAnimationFrame(this.columnUpdateFrame);\n this.columnUpdateFrame = requestAnimationFrame(() => {\n this.ngZone.run(() => {\n this.updateViewportColumns(range);\n this.changeDetector.markForCheck();\n });\n });\n }\n }\n }\n updateColumnViewport(startIdx, endIdx) {\n const lockedCount = this.lockedLeafColumns.length;\n const leafColumns$$1 = this.nonLockedLeafColumns.toArray();\n const viewportStart = lockedCount + startIdx + (this.detailTemplate && startIdx > 0 ? 1 : 0);\n let viewportEnd = lockedCount + endIdx + (this.detailTemplate ? 1 : 0);\n for (let idx = 0; idx < leafColumns$$1.length; idx++) {\n const column = leafColumns$$1[idx];\n if (column.isSpanColumn) {\n viewportEnd += column.childColumns.length;\n }\n }\n this.navigationService.setColumnViewport(viewportStart, viewportEnd);\n }\n calculateViewportColumns() {\n const { scrollLeft, clientWidth } = this.container.nativeElement;\n const columns = this.columns.nonLockedLeafColumns.toArray();\n const normalizedScrollLeft = this.normalizeScrollLeft(scrollLeft);\n const viewportEnd = normalizedScrollLeft + clientWidth;\n let startIdx;\n let endIdx = 0;\n let current = 0;\n let offset = 0;\n let idx;\n for (idx = 0; idx < columns.length; idx++) {\n const column = columns[idx];\n current += column.width || 0;\n if (startIdx === undefined && current > normalizedScrollLeft) {\n startIdx = idx;\n offset = current - (column.width || 0);\n }\n if (current >= viewportEnd) {\n endIdx = idx;\n break;\n }\n }\n if (!endIdx && idx > 0) {\n endIdx = columns.length - 1;\n }\n return { startIdx, endIdx, offset };\n }\n viewportWidthChange() {\n const currentWidth = this.viewportColumns.toArray().reduce((total, column) => total + column.width, 0);\n return currentWidth !== this.viewportColumnsWidth;\n }\n normalizeScrollLeft(position) {\n return this.rtl ? rtlScrollPosition(position, this.container.nativeElement, this.supportService.rtlScrollLeft) : position;\n }\n elementScrollLeft(element) {\n if (this.rtl) {\n return this.normalizeScrollLeft(this.container.nativeElement.scrollWidth - element.offsetLeft - element.offsetWidth);\n }\n return element.offsetLeft;\n }\n}\nListComponent.ɵfac = function ListComponent_Factory(t) { return new (t || ListComponent)(ɵngcc0.ɵɵdirectiveInject(SCROLLER_FACTORY_TOKEN), ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(SuspendService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ScrollSyncService), ɵngcc0.ɵɵdirectiveInject(ResizeService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(BrowserSupportService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ScrollRequestService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService)); };\nListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ListComponent, selectors: [[\"kendo-grid-list\"]], viewQuery: function ListComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c118, true);\n ɵngcc0.ɵɵviewQuery(_c119, true);\n ɵngcc0.ɵɵviewQuery(_c120, true);\n ɵngcc0.ɵɵviewQuery(_c121, true);\n ɵngcc0.ɵɵviewQuery(ResizeSensorComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.container = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedContainer = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.lockedTable = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.table = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.resizeSensors = _t);\n } }, hostVars: 3, hostBindings: function ListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.hostRole);\n ɵngcc0.ɵɵclassProp(\"k-grid-container\", ctx.hostClass);\n } }, inputs: { groups: \"groups\", skip: \"skip\", columns: \"columns\", selectable: \"selectable\", groupable: \"groupable\", trackBy: \"trackBy\", data: \"data\", total: \"total\", rowHeight: \"rowHeight\", detailRowHeight: \"detailRowHeight\", take: \"take\", detailTemplate: \"detailTemplate\", noRecordsTemplate: \"noRecordsTemplate\", filterable: \"filterable\", rowClass: \"rowClass\", loading: \"loading\", virtualColumns: \"virtualColumns\", isVirtual: \"isVirtual\" }, outputs: { contentScroll: \"contentScroll\", pageChange: \"pageChange\", scrollBottom: \"scrollBottom\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 14, vars: 32, consts: [[\"class\", \"k-grid-content-locked\", \"role\", \"presentation\", 3, \"width\", \"kendoEventsOutsideAngular\", \"scope\", 4, \"ngIf\"], [\"role\", \"presentation\", \"tabindex\", \"-1\", 1, \"k-grid-content\", \"k-virtual-content\", 3, \"kendoGridResizableContainer\", \"lockedWidth\"], [\"container\", \"\"], [\"role\", \"presentation\", 1, \"k-grid-table-wrap\"], [\"role\", \"presentation\", 1, \"k-grid-table\", 3, \"virtualColumns\"], [\"table\", \"\"], [\"kendoGridColGroup\", \"\", \"role\", \"presentation\", 3, \"groups\", \"columns\", \"detailTemplate\"], [\"kendoGridTableBody\", \"\", \"role\", \"presentation\", 3, \"skipGroupDecoration\", \"data\", \"groups\", \"showGroupFooters\", \"columns\", \"allColumns\", \"detailTemplate\", \"noRecordsTemplate\", \"lockedColumnsCount\", \"totalColumnsCount\", \"skip\", \"selectable\", \"trackBy\", \"filterable\", \"rowClass\", \"virtualColumns\"], [4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-height-container\"], [\"class\", \"k-width-container\", \"role\", \"presentation\", 4, \"ngIf\"], [\"kendoGridLoading\", \"\", 4, \"ngIf\"], [\"role\", \"presentation\", 1, \"k-grid-content-locked\", 3, \"kendoEventsOutsideAngular\", \"scope\"], [\"lockedContainer\", \"\"], [\"role\", \"presentation\", 1, \"k-grid-table\", 3, \"locked\"], [\"lockedTable\", \"\"], [\"kendoGridTableBody\", \"\", \"role\", \"presentation\", 3, \"groups\", \"isLocked\", \"data\", \"noRecordsText\", \"columns\", \"totalColumnsCount\", \"detailTemplate\", \"showGroupFooters\", \"skip\", \"selectable\", \"trackBy\", \"filterable\", \"rowClass\"], [\"role\", \"presentation\", 1, \"k-width-container\"], [\"kendoGridLoading\", \"\"]], template: function ListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ListComponent_div_0_Template, 10, 30, \"div\", 0);\n ɵngcc0.ɵɵelementStart(1, \"div\", 1, 2);\n ɵngcc0.ɵɵelementStart(3, \"div\", 3);\n ɵngcc0.ɵɵelementStart(4, \"table\", 4, 5);\n ɵngcc0.ɵɵelement(6, \"colgroup\", 6);\n ɵngcc0.ɵɵelement(7, \"tbody\", 7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(8, ListComponent_kendo_resize_sensor_8_Template, 1, 0, \"kendo-resize-sensor\", 8);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(9, ListComponent_kendo_resize_sensor_9_Template, 1, 0, \"kendo-resize-sensor\", 8);\n ɵngcc0.ɵɵelementStart(10, \"div\", 9);\n ɵngcc0.ɵɵelement(11, \"div\");\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(12, ListComponent_div_12_Template, 2, 2, \"div\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(13, ListComponent_div_13_Template, 1, 0, \"div\", 11);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"kendoGridResizableContainer\", ctx.lockedLeafColumns.length)(\"lockedWidth\", ctx.lockedWidth + 1);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.nonLockedWidth, \"px\");\n ɵngcc0.ɵɵproperty(\"virtualColumns\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"groups\", ctx.isLocked ? ɵngcc0.ɵɵpureFunction0(31, _c117) : ctx.groups)(\"columns\", ctx.nonLockedColumnsToRender)(\"detailTemplate\", ctx.detailTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"skipGroupDecoration\", ctx.isLocked)(\"data\", ctx.data)(\"groups\", ctx.groups)(\"showGroupFooters\", ctx.showFooter)(\"columns\", ctx.nonLockedColumnsToRender)(\"allColumns\", ctx.nonLockedLeafColumns)(\"detailTemplate\", ctx.detailTemplate)(\"noRecordsTemplate\", ctx.noRecordsTemplate)(\"lockedColumnsCount\", ctx.lockedLeafColumns.length)(\"totalColumnsCount\", ctx.leafColumns.length)(\"skip\", ctx.skip)(\"selectable\", ctx.selectable)(\"trackBy\", ctx.trackBy)(\"filterable\", ctx.filterable)(\"rowClass\", ctx.rowClass)(\"virtualColumns\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isLocked || ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx.totalHeight, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.virtualColumns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.loading);\n } }, directives: function () { return [ɵngcc5.NgIf, ResizableContainerDirective,\n TableDirective,\n ColGroupComponent,\n TableBodyComponent, ɵngcc2.EventsOutsideAngularDirective, ɵngcc2.ResizeSensorComponent, LoadingComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nListComponent.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [SCROLLER_FACTORY_TOKEN,] }] },\n { type: DetailsService },\n { type: ChangeNotificationService },\n { type: SuspendService },\n { type: GroupsService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ScrollSyncService },\n { type: ResizeService },\n { type: EditService },\n { type: BrowserSupportService },\n { type: NavigationService },\n { type: ScrollRequestService },\n { type: LocalizationService },\n { type: ColumnResizingService },\n { type: ChangeDetectorRef },\n { type: PDFService },\n { type: ColumnInfoService }\n];\nListComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: [\"class.k-grid-container\",] }],\n hostRole: [{ type: HostBinding, args: [\"attr.role\",] }],\n data: [{ type: Input }],\n groups: [{ type: Input }],\n total: [{ type: Input }],\n rowHeight: [{ type: Input }],\n detailRowHeight: [{ type: Input }],\n take: [{ type: Input }],\n skip: [{ type: Input }],\n columns: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n noRecordsTemplate: [{ type: Input }],\n selectable: [{ type: Input }],\n groupable: [{ type: Input }],\n filterable: [{ type: Input }],\n rowClass: [{ type: Input }],\n loading: [{ type: Input }],\n trackBy: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n isVirtual: [{ type: Input }],\n contentScroll: [{ type: Output }],\n pageChange: [{ type: Output }],\n scrollBottom: [{ type: Output }],\n container: [{ type: ViewChild, args: [\"container\", { static: true },] }],\n lockedContainer: [{ type: ViewChild, args: [\"lockedContainer\",] }],\n lockedTable: [{ type: ViewChild, args: [\"lockedTable\",] }],\n table: [{ type: ViewChild, args: [\"table\",] }],\n resizeSensors: [{ type: ViewChildren, args: [ResizeSensorComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ListComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: SCROLLER_FACTORY_TOKEN,\n useValue: DEFAULT_SCROLLER_FACTORY\n }\n ],\n selector: 'kendo-grid-list',\n template: `\n
\n
\n \n \n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n \n \n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n `\n }]\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [SCROLLER_FACTORY_TOKEN]\n }] }, { type: DetailsService }, { type: ChangeNotificationService }, { type: SuspendService }, { type: GroupsService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ScrollSyncService }, { type: ResizeService }, { type: EditService }, { type: BrowserSupportService }, { type: NavigationService }, { type: ScrollRequestService }, { type: ɵngcc1.LocalizationService }, { type: ColumnResizingService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PDFService }, { type: ColumnInfoService }]; }, { groups: [{\n type: Input\n }], skip: [{\n type: Input\n }], columns: [{\n type: Input\n }], selectable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], contentScroll: [{\n type: Output\n }], pageChange: [{\n type: Output\n }], scrollBottom: [{\n type: Output\n }], resizeSensors: [{\n type: ViewChildren,\n args: [ResizeSensorComponent]\n }], hostClass: [{\n type: HostBinding,\n args: [\"class.k-grid-container\"]\n }], hostRole: [{\n type: HostBinding,\n args: [\"attr.role\"]\n }], data: [{\n type: Input\n }], total: [{\n type: Input\n }], rowHeight: [{\n type: Input\n }], detailRowHeight: [{\n type: Input\n }], take: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], noRecordsTemplate: [{\n type: Input\n }], filterable: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], loading: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }], isVirtual: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: [\"container\", { static: true }]\n }], lockedContainer: [{\n type: ViewChild,\n args: [\"lockedContainer\"]\n }], lockedTable: [{\n type: ViewChild,\n args: [\"lockedTable\"]\n }], table: [{\n type: ViewChild,\n args: [\"table\"]\n }] }); })();\n\n/**\n * A directive which encapsulates the in-memory handling of data operations such as [paging]({% slug paging_grid %}),\n * [sorting]({% slug sorting_grid %}), and [grouping]({% slug groupingbasics_grid %})\n * ([more information and examples]({% slug automaticoperations_grid %})).\n */\nclass DataBindingDirective {\n constructor(grid, changeDetector, localDataChangesService) {\n this.grid = grid;\n this.changeDetector = changeDetector;\n this.localDataChangesService = localDataChangesService;\n this.state = {\n skip: 0\n };\n this.originalData = [];\n if (localDataChangesService) {\n this.dataChangedSubscription = this.localDataChangesService.changes.subscribe(this.rebind.bind(this));\n }\n }\n /**\n * Defines the number of records that will be skipped by the pager.\n */\n set skip(value) {\n if (!isPresent(value)) {\n value = 0;\n }\n this.grid.skip = this.state.skip = value;\n }\n /**\n * Defines the descriptors by which the data will be sorted.\n */\n set sort(value) {\n this.grid.sort = this.state.sort = value;\n }\n /**\n * Defines the descriptor by which the data will be filtered.\n */\n set filter(value) {\n this.grid.filter = this.state.filter = value;\n }\n /**\n * Defines the page size used by the Grid pager.\n */\n set pageSize(value) {\n this.grid.pageSize = this.state.take = value;\n }\n /**\n * The descriptors by which the data will be grouped.\n */\n set group(value) {\n this.grid.group = this.state.group = value;\n }\n /**\n * The array of data which will be used to populate the Grid.\n */\n set data(value) {\n this.originalData = value || [];\n if (this.localDataChangesService) {\n this.localDataChangesService.data = value;\n }\n this.dataChanged = true;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.applyState(this.state);\n this.stateChangeSubscription = this.grid\n .dataStateChange\n .subscribe(this.onStateChange.bind(this));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.stateChangeSubscription) {\n this.stateChangeSubscription.unsubscribe();\n }\n if (this.dataChangedSubscription) {\n this.dataChangedSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n if (anyChanged([\"pageSize\", \"skip\", \"sort\", \"group\", \"filter\"], changes)) {\n this.rebind();\n }\n }\n ngDoCheck() {\n if (this.dataChanged) {\n this.updateGridData();\n }\n }\n /**\n * @hidden\n */\n onStateChange(state$$1) {\n this.applyState(state$$1);\n this.rebind();\n }\n /**\n * @hidden\n */\n rebind() {\n this.data = this.originalData;\n this.updateGridData();\n this.notifyDataChange();\n }\n /**\n * Notifies the Grid that its data has changed.\n */\n notifyDataChange() {\n this.grid.onDataChange();\n if (this.changeDetector) {\n this.changeDetector.markForCheck();\n }\n }\n process(state$$1) {\n return process(this.originalData, state$$1);\n }\n applyState({ skip, take: take$$1, sort, group, filter: filter$$1 }) {\n this.skip = skip;\n this.pageSize = take$$1;\n this.sort = sort;\n this.group = group;\n this.filter = filter$$1;\n }\n updateGridData() {\n this.grid.data = this.process(this.state);\n this.dataChanged = false;\n }\n}\nDataBindingDirective.ɵfac = function DataBindingDirective_Factory(t) { return new (t || DataBindingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nDataBindingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DataBindingDirective, selectors: [[\"\", \"kendoGridBinding\", \"\"]], inputs: { skip: \"skip\", sort: \"sort\", filter: \"filter\", pageSize: \"pageSize\", group: \"group\", data: [\"kendoGridBinding\", \"data\"] }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nDataBindingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef },\n { type: LocalDataChangesService }\n];\nDataBindingDirective.propDecorators = {\n skip: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n pageSize: [{ type: Input }],\n group: [{ type: Input }],\n data: [{ type: Input, args: [\"kendoGridBinding\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DataBindingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridBinding]'\n }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: LocalDataChangesService }]; }, { skip: [{\n type: Input\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], pageSize: [{\n type: Input\n }], group: [{\n type: Input\n }], data: [{\n type: Input,\n args: [\"kendoGridBinding\"]\n }] }); })();\n\n/**\n * A directive which stores the row selection state of the Grid in memory\n * ([see example]({% slug selection_grid %}#toc-during-data-operations)).\n */\nclass SelectionDirective extends Selection {\n constructor(grid, cd) {\n super(grid, cd);\n this.grid = grid;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n if (this.grid.selectable === false) {\n this.grid.selectable = true;\n }\n this.grid.selectionDirective = this;\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n super.destroy();\n }\n}\nSelectionDirective.ɵfac = function SelectionDirective_Factory(t) { return new (t || SelectionDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSelectionDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectionDirective, selectors: [[\"\", \"kendoGridSelectBy\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nSelectionDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectBy]'\n }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/**\n * A directive which controls the expanded state of the master detail rows.\n */\nclass ExpandDetailsDirective {\n constructor(grid) {\n this.grid = grid;\n /**\n * Fires when the expandedDetailKeys are changed.\n */\n this.expandedDetailKeysChange = new EventEmitter();\n /**\n * Defines the collection that will store the expanded keys.\n */\n this.expandedDetailKeys = [];\n /**\n * Specifies if the items should be initially expanded.\n * @default false\n */\n this.initiallyExpanded = false;\n this.subscriptions = new Subscription();\n this.grid.isDetailExpanded = this.isExpanded.bind(this);\n this.subscriptions.add(merge(this.grid.detailExpand.pipe(map(e => (Object.assign({ expand: true }, e)))), this.grid.detailCollapse.pipe(map(e => (Object.assign({ expand: false }, e))))).subscribe(this.toggleState.bind(this)));\n }\n /**\n * Defines the item key that will be stored in the `expandedDetailKeys` collection ([see example]({% slug master_detail_expanded_state_grid %}#toc-built-in-directive)).\n */\n get expandDetailsKey() {\n return this._expandBy;\n }\n set expandDetailsKey(key) {\n if (isString(key)) {\n this._expandBy = getter(key);\n }\n else {\n this._expandBy = key;\n }\n }\n /**\n *\n * @hidden\n * A deprecated alias for setting the `expandDetailsKey` property.\n */\n get expandDetailBy() {\n return this.expandDetailsKey;\n }\n set expandDetailBy(key) {\n this.expandDetailsKey = key;\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n get keyGetter() {\n return this._expandBy || getter(undefined);\n }\n /**\n * @hidden\n */\n isExpanded(args) {\n const key = this.keyGetter(args.dataItem);\n return this.expandedDetailKeys.indexOf(key) > -1 ? !this.initiallyExpanded : this.initiallyExpanded;\n }\n toggleState(args) {\n const key = this.keyGetter(args.dataItem);\n if (Boolean(this.initiallyExpanded) !== args.expand) {\n this.expandedDetailKeys.push(key);\n }\n else {\n const index = this.expandedDetailKeys.indexOf(key);\n this.expandedDetailKeys.splice(index, 1);\n }\n this.expandedDetailKeysChange.emit(this.expandedDetailKeys);\n }\n}\nExpandDetailsDirective.ɵfac = function ExpandDetailsDirective_Factory(t) { return new (t || ExpandDetailsDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent)); };\nExpandDetailsDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ExpandDetailsDirective, selectors: [[\"\", \"kendoGridExpandDetailsBy\", \"\"]], inputs: { expandedDetailKeys: \"expandedDetailKeys\", initiallyExpanded: \"initiallyExpanded\", expandDetailsKey: [\"kendoGridExpandDetailsBy\", \"expandDetailsKey\"], expandDetailBy: \"expandDetailBy\" }, outputs: { expandedDetailKeysChange: \"expandedDetailKeysChange\" }, exportAs: [\"kendoGridExpandDetailsBy\"] });\n/** @nocollapse */\nExpandDetailsDirective.ctorParameters = () => [\n { type: GridComponent }\n];\nExpandDetailsDirective.propDecorators = {\n expandedDetailKeysChange: [{ type: Output }],\n expandDetailsKey: [{ type: Input, args: ['kendoGridExpandDetailsBy',] }],\n expandDetailBy: [{ type: Input }],\n expandedDetailKeys: [{ type: Input }],\n initiallyExpanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExpandDetailsDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridExpandDetailsBy]',\n exportAs: 'kendoGridExpandDetailsBy'\n }]\n }], function () { return [{ type: GridComponent }]; }, { expandedDetailKeysChange: [{\n type: Output\n }], expandedDetailKeys: [{\n type: Input\n }], initiallyExpanded: [{\n type: Input\n }], expandDetailsKey: [{\n type: Input,\n args: ['kendoGridExpandDetailsBy']\n }], expandDetailBy: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { groupPanelEmpty: \"groupPanelEmpty\", noRecords: \"noRecords\", pagerFirstPage: \"pagerFirstPage\", pagerLastPage: \"pagerLastPage\", pagerPreviousPage: \"pagerPreviousPage\", pagerNextPage: \"pagerNextPage\", pagerPage: \"pagerPage\", pagerItemsPerPage: \"pagerItemsPerPage\", pagerOf: \"pagerOf\", pagerItems: \"pagerItems\", pagerPageNumberInputTitle: \"pagerPageNumberInputTitle\", filter: \"filter\", filterEqOperator: \"filterEqOperator\", filterNotEqOperator: \"filterNotEqOperator\", filterIsNullOperator: \"filterIsNullOperator\", filterIsNotNullOperator: \"filterIsNotNullOperator\", filterIsEmptyOperator: \"filterIsEmptyOperator\", filterIsNotEmptyOperator: \"filterIsNotEmptyOperator\", filterStartsWithOperator: \"filterStartsWithOperator\", filterContainsOperator: \"filterContainsOperator\", filterNotContainsOperator: \"filterNotContainsOperator\", filterEndsWithOperator: \"filterEndsWithOperator\", filterGteOperator: \"filterGteOperator\", filterGtOperator: \"filterGtOperator\", filterLteOperator: \"filterLteOperator\", filterLtOperator: \"filterLtOperator\", filterIsTrue: \"filterIsTrue\", filterIsFalse: \"filterIsFalse\", filterBooleanAll: \"filterBooleanAll\", filterAfterOrEqualOperator: \"filterAfterOrEqualOperator\", filterAfterOperator: \"filterAfterOperator\", filterBeforeOperator: \"filterBeforeOperator\", filterBeforeOrEqualOperator: \"filterBeforeOrEqualOperator\", filterFilterButton: \"filterFilterButton\", filterClearButton: \"filterClearButton\", filterAndLogic: \"filterAndLogic\", filterOrLogic: \"filterOrLogic\", loading: \"loading\", columnMenu: \"columnMenu\", columns: \"columns\", lock: \"lock\", unlock: \"unlock\", sortable: \"sortable\", sortAscending: \"sortAscending\", sortDescending: \"sortDescending\", sortedAscending: \"sortedAscending\", sortedDescending: \"sortedDescending\", sortedDefault: \"sortedDefault\", columnsApply: \"columnsApply\", columnsReset: \"columnsReset\", detailExpand: \"detailExpand\", detailCollapse: \"detailCollapse\", filterDateToday: \"filterDateToday\", filterDateToggle: \"filterDateToggle\", filterNumericDecrement: \"filterNumericDecrement\", filterNumericIncrement: \"filterNumericIncrement\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n groupPanelEmpty: [{ type: Input }],\n noRecords: [{ type: Input }],\n pagerFirstPage: [{ type: Input }],\n pagerLastPage: [{ type: Input }],\n pagerPreviousPage: [{ type: Input }],\n pagerNextPage: [{ type: Input }],\n pagerPage: [{ type: Input }],\n pagerItemsPerPage: [{ type: Input }],\n pagerOf: [{ type: Input }],\n pagerItems: [{ type: Input }],\n pagerPageNumberInputTitle: [{ type: Input }],\n filter: [{ type: Input }],\n filterEqOperator: [{ type: Input }],\n filterNotEqOperator: [{ type: Input }],\n filterIsNullOperator: [{ type: Input }],\n filterIsNotNullOperator: [{ type: Input }],\n filterIsEmptyOperator: [{ type: Input }],\n filterIsNotEmptyOperator: [{ type: Input }],\n filterStartsWithOperator: [{ type: Input }],\n filterContainsOperator: [{ type: Input }],\n filterNotContainsOperator: [{ type: Input }],\n filterEndsWithOperator: [{ type: Input }],\n filterGteOperator: [{ type: Input }],\n filterGtOperator: [{ type: Input }],\n filterLteOperator: [{ type: Input }],\n filterLtOperator: [{ type: Input }],\n filterIsTrue: [{ type: Input }],\n filterIsFalse: [{ type: Input }],\n filterBooleanAll: [{ type: Input }],\n filterAfterOrEqualOperator: [{ type: Input }],\n filterAfterOperator: [{ type: Input }],\n filterBeforeOperator: [{ type: Input }],\n filterBeforeOrEqualOperator: [{ type: Input }],\n filterFilterButton: [{ type: Input }],\n filterClearButton: [{ type: Input }],\n filterAndLogic: [{ type: Input }],\n filterOrLogic: [{ type: Input }],\n loading: [{ type: Input }],\n columnMenu: [{ type: Input }],\n columns: [{ type: Input }],\n lock: [{ type: Input }],\n unlock: [{ type: Input }],\n sortable: [{ type: Input }],\n sortAscending: [{ type: Input }],\n sortDescending: [{ type: Input }],\n sortedAscending: [{ type: Input }],\n sortedDescending: [{ type: Input }],\n sortedDefault: [{ type: Input }],\n columnsApply: [{ type: Input }],\n columnsReset: [{ type: Input }],\n detailExpand: [{ type: Input }],\n detailCollapse: [{ type: Input }],\n filterDateToday: [{ type: Input }],\n filterDateToggle: [{ type: Input }],\n filterNumericDecrement: [{ type: Input }],\n filterNumericIncrement: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoGridLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: '[kendoGridLocalizedMessages]'\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug globalization_grid %}#toc-localization)).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-grid-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-grid-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * @hidden\n */\nclass FilterRowComponent {\n constructor(localization) {\n this.localization = localization;\n this.columns = [];\n this.groups = [];\n this.filterRowClass = true;\n this.filterLabel = this.localization.get('filter');\n }\n}\nFilterRowComponent.ɵfac = function FilterRowComponent_Factory(t) { return new (t || FilterRowComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterRowComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterRowComponent, selectors: [[\"\", \"kendoGridFilterRow\", \"\"]], hostVars: 2, hostBindings: function FilterRowComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filter-row\", ctx.filterRowClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", filter: \"filter\", detailTemplate: \"detailTemplate\", logicalRowIndex: \"logicalRowIndex\", lockedColumnsCount: \"lockedColumnsCount\" }, attrs: _c123, decls: 3, vars: 3, consts: [[\"role\", \"presentation\", 3, \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 3, \"k-hierarchy-cell\", 4, \"ngIf\"], [\"kendoGridFilterCell\", \"\", \"kendoGridLogicalCell\", \"\", 3, \"column\", \"filter\", \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\"], [\"kendoGridFilterCell\", \"\", \"kendoGridLogicalCell\", \"\", 3, \"column\", \"filter\", \"logicalRowIndex\", \"logicalColIndex\"]], template: function FilterRowComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterRowComponent_td_0_Template, 1, 2, \"td\", 0);\n ɵngcc0.ɵɵtemplate(1, FilterRowComponent_td_1_Template, 1, 2, \"td\", 1);\n ɵngcc0.ɵɵtemplate(2, FilterRowComponent_td_2_Template, 1, 5, \"td\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.detailTemplate == null ? null : ctx.detailTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.columns);\n } }, directives: function () { return [ɵngcc5.NgForOf, ɵngcc5.NgIf, FilterCellComponent,\n LogicalCellDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterRowComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nFilterRowComponent.propDecorators = {\n columns: [{ type: Input }],\n filter: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n filterRowClass: [{ type: HostBinding, args: ['class.k-filter-row',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterRowComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFilterRow]',\n template: `\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], filterRowClass: [{\n type: HostBinding,\n args: ['class.k-filter-row']\n }], filter: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }] }); })();\n\nconst areDifferent = (a, b) => a.field !== b.field || a.operator !== b.operator || a.value !== b.value;\nconst isChanged$1 = (a, b) => {\n if (a.length !== b.length) {\n return true;\n }\n for (let idx = 0, len = a.length; idx < len; idx++) {\n const prev = a[idx];\n const curr = b[idx];\n if (isCompositeFilterDescriptor(prev)) {\n // tslint:disable-next-line:no-use-before-declare\n if (diffFilters(prev, curr[idx])) {\n return true;\n }\n }\n else if (areDifferent(prev, curr)) {\n return true;\n }\n }\n return false;\n};\nconst copyObject = (obj) => {\n const result = {};\n Object.assign(result, obj);\n if (obj.constructor !== Object) {\n const proto = obj.constructor.prototype;\n Object.getOwnPropertyNames(proto).forEach((property) => {\n if (property !== 'constructor' && proto.hasOwnProperty(property)) {\n result[property] = obj[property];\n }\n });\n }\n return result;\n};\nconst cloneFilter = (filter$$1) => copyObject(filter$$1);\n/**\n * @hidden\n */\nconst cloneFilters = (filter$$1) => {\n if (!filter$$1) {\n return;\n }\n if (isCompositeFilterDescriptor(filter$$1)) {\n return {\n filters: cloneFilters(filter$$1.filters),\n logic: filter$$1.logic\n };\n }\n else if (Array.isArray(filter$$1)) {\n return filter$$1.map(cloneFilters);\n }\n return cloneFilter(filter$$1);\n};\n/**\n * @hidden\n */\nconst diffFilters = (a, b) => {\n if (isPresent(a) && !isPresent(b)) {\n return true;\n }\n if (!isPresent(a) && isPresent(b)) {\n return true;\n }\n return isPresent(a) && isPresent(b) && isChanged$1(a.filters, b.filters);\n};\n\n/**\n * @hidden\n */\nclass FilterCellComponent {\n constructor() {\n this._templateContext = {};\n }\n get filter() {\n return this._filter;\n }\n set filter(value) {\n this._filter = cloneFilters(value);\n }\n get templateContext() {\n this._templateContext.column = this.column;\n this._templateContext.filter = this.filter;\n // tslint:disable-next-line:no-string-literal\n this._templateContext[\"$implicit\"] = this.filter;\n return this._templateContext;\n }\n get hasTemplate() {\n return isPresent(this.column.filterCellTemplateRef);\n }\n get isFilterable() {\n return isPresent(this.column) && !isNullOrEmptyString(this.column.field) && this.column.filterable;\n }\n}\nFilterCellComponent.ɵfac = function FilterCellComponent_Factory(t) { return new (t || FilterCellComponent)(); };\nFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellComponent, selectors: [[\"\", \"kendoGridFilterCell\", \"\"]], inputs: { filter: \"filter\", column: \"column\" }, attrs: _c124, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [\"kendoFilterCellHost\", \"\", 3, \"column\", \"filter\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function FilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellComponent_ng_template_0_Template, 3, 3, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.isFilterable);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, FilterCellHostDirective, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\nFilterCellComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFilterCell]',\n template: `\n \n \n \n \n \n \n \n \n
\n \n \n `\n }]\n }], function () { return []; }, { filter: [{\n type: Input\n }], column: [{\n type: Input\n }] }); })();\n\nconst localizeOperators = operators => localization => Object.keys(operators).reduce((acc, key) => {\n acc[operators[key]] = localization.get(key);\n return acc;\n}, {}); // tslint:disable-line:align\nconst operatorTexts = localizeOperators({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterGteOperator\": \"gte\",\n \"filterGtOperator\": \"gt\",\n \"filterLteOperator\": \"lte\",\n \"filterLtOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\",\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterAfterOrEqualOperator\": \"after-eq\",\n \"filterAfterOperator\": \"after\",\n \"filterBeforeOrEqualOperator\": \"before-eq\",\n \"filterBeforeOperator\": \"before\"\n});\n/**\n * @hidden\n */\nconst toJSON = (xs) => xs.map(x => x.toJSON());\n/**\n * @hidden\n */\nclass FilterOperatorBase {\n constructor(operator, localization) {\n this.operator = operator;\n this.localization = localization;\n this.messages = operatorTexts(this.localization);\n this._text = this.messages[this.operator];\n this.localization.changes.subscribe(this.refreshText.bind(this));\n }\n /**\n * The text that will be displayed in the drop-down list.\n * @readonly\n * @type {string}\n * @memberOf FilterOperatorBase\n */\n get text() {\n return this._text;\n }\n /**\n *\n */\n set text(value) {\n this._text = isNullOrEmptyString(value) ? this.messages[this.operator] : value;\n }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: this.operator\n };\n }\n refreshText() {\n const update = this._text === this.messages[this.operator];\n this.messages = operatorTexts(this.localization);\n if (update) {\n this._text = this.messages[this.operator];\n }\n }\n}\nFilterOperatorBase.ɵfac = function FilterOperatorBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterOperatorBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterOperatorBase, inputs: { text: \"text\" } });\nFilterOperatorBase.propDecorators = {\n text: [{ type: Input }]\n};\n\n\nconst insertDefaultFilter = (index, rootFilter, filter$$1) => {\n rootFilter = (rootFilter || { filters: [], logic: \"and\" });\n rootFilter.filters[index] = filter$$1;\n return filter$$1;\n};\n/**\n * @hidden\n */\nconst setFilter = (index, filter$$1, field, defaultOperator) => {\n if (isPresent(filter$$1) && isPresent(filter$$1.filters) && filter$$1.filters.length > index) {\n return filter$$1.filters[index];\n }\n else {\n return insertDefaultFilter(index, filter$$1, {\n field,\n operator: defaultOperator\n });\n }\n};\n/**\n * @hidden\n */\nconst logicOperators = (localization) => [\n { text: localization.get(\"filterAndLogic\"), value: \"and\" },\n { text: localization.get(\"filterOrLogic\"), value: \"or\" }\n];\n/**\n * @hidden\n */\nconst flatten = (filter$$1) => {\n if (isPresent(filter$$1.filters)) {\n return filter$$1.filters.reduce((acc, curr) => acc.concat(isCompositeFilterDescriptor(curr) ? flatten(curr) : [curr]), []);\n }\n return [];\n};\nconst trimFilterByField = (filter$$1, field) => {\n if (isPresent(filter$$1) && isPresent(filter$$1.filters)) {\n filter$$1.filters = filter$$1.filters.filter(x => {\n if (isCompositeFilterDescriptor(x)) {\n trimFilterByField(x, field);\n return x.filters.length;\n }\n else {\n return x.field !== field;\n }\n });\n }\n};\n/**\n * @hidden\n */\nconst filtersByField = (filter$$1, field) => flatten(filter$$1 || {}).filter(x => x.field === field);\n/**\n * @hidden\n */\nconst filterByField = (filter$$1, field) => {\n let [currentFilter] = filtersByField(filter$$1, field);\n return currentFilter;\n};\n/**\n * @hidden\n */\nconst removeFilter = (filter$$1, field) => {\n trimFilterByField(filter$$1, field);\n return filter$$1;\n};\n/**\n * @hidden\n */\nconst localizeOperators$1 = operators => localization => Object.keys(operators).map(key => ({\n text: localization.get(key),\n value: operators[key]\n}));\n/**\n * An abstract base class for the filter-cell component ([see example]({% slug reusablecustomfilters_grid %}#toc-filter-row)).\n */\nclass BaseFilterCellComponent {\n constructor(filterService) {\n this.filterService = filterService;\n this.operatorList = new QueryList();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n get operators() {\n return this._operators.length ? this._operators : this.defaultOperators;\n }\n set operators(values) {\n this._operators = values;\n }\n /**\n * @hidden\n */\n ngAfterContentInit() {\n this.operationListSubscription = observe(this.operatorList)\n .pipe(map(q => q.toArray()), map(toJSON))\n .subscribe(x => {\n this.operators = x;\n });\n }\n ngOnDestroy() {\n if (this.operationListSubscription) {\n this.operationListSubscription.unsubscribe();\n }\n }\n filterByField(field) {\n return filterByField(this.filter, field);\n }\n filtersByField(field) {\n return filtersByField(this.filter, field);\n }\n removeFilter(field) {\n return removeFilter(this.filter, field);\n }\n updateFilter(filter$$1) {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n let [currentFilter] = flatten(root).filter(x => x.field === filter$$1.field);\n if (!isPresent(currentFilter)) {\n root.filters.push(filter$$1);\n }\n else {\n Object.assign(currentFilter, filter$$1);\n }\n return root;\n }\n applyFilter(filter$$1) {\n this.filterService.filter(filter$$1);\n }\n}\nBaseFilterCellComponent.ɵfac = function BaseFilterCellComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nBaseFilterCellComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: BaseFilterCellComponent, contentQueries: function BaseFilterCellComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterOperatorBase, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.operatorList = _t);\n } }, hostVars: 2, hostBindings: function BaseFilterCellComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } } });\nBaseFilterCellComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n operatorList: [{ type: ContentChildren, args: [FilterOperatorBase,] }]\n};\n\n\n// tslint:disable:no-access-missing-member\nconst numericOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterGteOperator\": \"gte\",\n \"filterGtOperator\": \"gt\",\n \"filterLteOperator\": \"lte\",\n \"filterLtOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\"\n});\n/**\n * Represents a base numeric filter component.\n */\nclass NumericFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `eq`.\n * @type {string}\n */\n this.operator = \"eq\";\n /**\n * Specifies the value that is used to increment or decrement the component value.\n * @type {numeric}\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * @type {boolean}\n */\n this.spinners = true;\n this.defaultOperators = numericOperators(this.localization);\n }\n /**\n * Specifies the number format used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n */\n set format(value) {\n this._format = value;\n }\n /**\n * Specifies the number format used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n *\n * @readonly\n * @type {string}\n */\n get format() {\n return !isNullOrEmptyString(this._format) ? this._format : this.columnFormat;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n get columnFormat() {\n return this.column && !isNullOrEmptyString(this.column.format) ?\n extractFormat(this.column.format) : \"n2\";\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = numericOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nNumericFilterComponent.ɵfac = function NumericFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nNumericFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: NumericFilterComponent, inputs: { operator: \"operator\", step: \"step\", spinners: \"spinners\", format: \"format\", column: \"column\", filter: \"filter\", min: \"min\", max: \"max\", decimals: \"decimals\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nNumericFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n step: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n spinners: [{ type: Input }],\n decimals: [{ type: Input }],\n format: [{ type: Input }]\n};\n\n\n/**\n * Represents a numeric filter cell.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass NumericFilterCellComponent extends NumericFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n this.localization = localization;\n /**\n * Determines the delay time (in milliseconds) before the filter value is submitted.\n * A value of `0` indicates no delay. The default value is `500`.\n * @type {boolean}\n */\n this.filterDelay = 500;\n /**\n * Determines if the drop-down filter operators will be displayed.\n * The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nNumericFilterCellComponent.ɵfac = function NumericFilterCellComponent_Factory(t) { return new (t || NumericFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterCellComponent, selectors: [[\"kendo-grid-numeric-filter-cell\"]], inputs: { filterDelay: \"filterDelay\", showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 16, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoGridFocusable\", \"\", \"kendoFilterInput\", \"\", 3, \"filterDelay\", \"autoCorrect\", \"value\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [3, \"increment\", \"decrement\"]], template: function NumericFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", ctx.filterDelay)(\"autoCorrect\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"increment\", ctx.messageFor(\"filterNumericIncrement\"))(\"decrement\", ctx.messageFor(\"filterNumericDecrement\"));\n } }, directives: function () { return [FilterCellWrapperComponent, ɵngcc6.NumericTextBoxComponent, FocusableDirective,\n FilterInputDirective, ɵngcc6.NumericTextBoxCustomMessagesComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nNumericFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nNumericFilterCellComponent.propDecorators = {\n filterDelay: [{ type: Input }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-cell',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { filterDelay: [{\n type: Input\n }], showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterInputDirective {\n constructor(valueAccessors, ngZone, element, renderer) {\n this.change = new EventEmitter();\n this.composing = false;\n this.filterDelay = 500;\n this.changeRequests = new Subject();\n this.accessor = valueAccessors[0];\n ngZone.runOutsideAngular(() => {\n const unsubscribeStart = renderer.listen(element.nativeElement, 'compositionstart', () => this.composing = true);\n const unsubscribeEnd = renderer.listen(element.nativeElement, 'compositionend', () => this.composing = false);\n this.unsubscribeEvents = () => {\n unsubscribeStart();\n unsubscribeEnd();\n };\n });\n }\n set value(value) {\n this.accessor.writeValue(value);\n }\n set disabled(value) {\n this.accessor.setDisabledState(value);\n }\n ngAfterViewInit() {\n this.accessor.registerOnChange(x => this.filterDelay > 0 ?\n this.changeRequests.next(x) :\n this.change.emit(x));\n this.subscribeChanges();\n }\n ngOnChanges(changes) {\n if (isChanged('filterDelay', changes)) {\n this.unsubscribeChanges();\n this.subscribeChanges();\n }\n }\n ngOnDestroy() {\n this.unsubscribeChanges();\n this.unsubscribeEvents();\n }\n subscribeChanges() {\n this.changeRequestsSubscription = this.changeRequests\n .pipe(debounceTime(this.filterDelay), filter(() => !this.composing))\n .subscribe(x => this.change.emit(x));\n }\n unsubscribeChanges() {\n if (this.changeRequestsSubscription) {\n this.changeRequestsSubscription.unsubscribe();\n }\n }\n}\nFilterInputDirective.ɵfac = function FilterInputDirective_Factory(t) { return new (t || FilterInputDirective)(ɵngcc0.ɵɵdirectiveInject(NG_VALUE_ACCESSOR, 2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nFilterInputDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterInputDirective, selectors: [[\"\", \"kendoFilterInput\", \"\"]], inputs: { filterDelay: \"filterDelay\", value: \"value\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nFilterInputDirective.ctorParameters = () => [\n { type: Array, decorators: [{ type: Self }, { type: Inject, args: [NG_VALUE_ACCESSOR,] }] },\n { type: NgZone },\n { type: ElementRef },\n { type: Renderer2 }\n];\nFilterInputDirective.propDecorators = {\n filterDelay: [{ type: Input }],\n value: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterInputDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterInput]'\n }]\n }], function () { return [{ type: Array, decorators: [{\n type: Self\n }, {\n type: Inject,\n args: [NG_VALUE_ACCESSOR]\n }] }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { filterDelay: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\nconst EMPTY_VALUE_OPERATORS = new Set(['isnull', 'isnotnull', 'isempty', 'isnotempty']);\nconst isEmptyValueOperator = (operator) => EMPTY_VALUE_OPERATORS.has(operator);\n/**\n * @hidden\n */\nclass FilterInputWrapperComponent extends BaseFilterCellComponent {\n constructor(filterService) {\n super(filterService);\n this.operators = [];\n }\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n get currentOperator() {\n const filter$$1 = this.currentFilter;\n if (!this._operator) {\n this._operator = filter$$1 ? filter$$1.operator : this.defaultOperator;\n }\n return this._operator;\n }\n set currentOperator(value) {\n this._operator = value;\n const emptyValueOperator = isEmptyValueOperator(value);\n this.filterInputDisabled = emptyValueOperator;\n if (emptyValueOperator) {\n this.applyNoValueFilter(value);\n }\n else if (!isBlank(value) && isPresent(this.currentFilter)) {\n this.onChange(this.currentFilter.value);\n }\n }\n get defaultOperator() {\n if (!isNullOrEmptyString(this._defaultOperator)) {\n return this._defaultOperator;\n }\n else if (this.operators && this.operators.length) {\n return this.operators[0].value;\n }\n return \"eq\";\n }\n set defaultOperator(value) {\n this._defaultOperator = value;\n }\n set filterInputDisabled(disabled) {\n if (!this.input) {\n return;\n }\n this.input.disabled = disabled;\n }\n ngAfterContentInit() {\n if (isPresent(this.input)) {\n this.changeSubscription = this.input.change.subscribe(this.onChange.bind(this));\n this.filterInputDisabled = isEmptyValueOperator(this.currentOperator);\n }\n }\n ngOnDestroy() {\n super.ngOnDestroy();\n if (this.changeSubscription) {\n this.changeSubscription.unsubscribe();\n }\n }\n onChange(value) {\n if (!isNullOrEmptyString(value) || this.filterByField(this.column.field)) {\n this.filterChange(isNullOrEmptyString(value) ?\n this.removeFilter(this.column.field) :\n this.updateFilter({\n field: this.column.field,\n operator: this.currentOperator,\n value: value\n }));\n }\n }\n onClear() {\n this.onChange(null);\n this.filterInputDisabled = isEmptyValueOperator(this.defaultOperator);\n }\n applyNoValueFilter(operator) {\n this.filterChange(this.updateFilter({\n field: this.column.field,\n operator: operator,\n value: null\n }));\n }\n ngOnChanges(changes) {\n if (isChanged(\"filter\", changes, false)) {\n this._operator = null;\n this.filterInputDisabled = isEmptyValueOperator(this.currentOperator);\n }\n }\n}\nFilterInputWrapperComponent.ɵfac = function FilterInputWrapperComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterInputWrapperComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterInputWrapperComponent, contentQueries: function FilterInputWrapperComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, FilterInputDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.input = _t.first);\n } }, inputs: { operators: \"operators\", defaultOperator: \"defaultOperator\", column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature] });\nFilterInputWrapperComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n input: [{ type: ContentChild, args: [FilterInputDirective,] }],\n defaultOperator: [{ type: Input }]\n};\n\n\nconst EMPTY_FILTER_OPERATORS = ['isnull', 'isnotnull', 'isempty', 'isnotempty'];\n/**\n * @hidden\n */\nclass FilterCellWrapperComponent extends FilterInputWrapperComponent {\n constructor(filterService) {\n super(filterService);\n this.showOperators = true;\n }\n get hostClasses() {\n return true;\n }\n get overrideBaseClasses() {\n return false;\n }\n get showButton() {\n const filter$$1 = this.currentFilter;\n return isPresent(filter$$1) && (!isNullOrEmptyString(filter$$1.value) ||\n EMPTY_FILTER_OPERATORS.indexOf(String(filter$$1.operator)) >= 0);\n }\n filterChange(filter$$1) {\n this.applyFilter(filter$$1);\n }\n}\nFilterCellWrapperComponent.ɵfac = function FilterCellWrapperComponent_Factory(t) { return new (t || FilterCellWrapperComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService)); };\nFilterCellWrapperComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellWrapperComponent, selectors: [[\"kendo-grid-filter-wrapper-cell\"]], hostVars: 4, hostBindings: function FilterCellWrapperComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-wrapper\", ctx.hostClasses)(\"k-filtercell\", ctx.overrideBaseClasses);\n } }, inputs: { showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c125, decls: 2, vars: 4, consts: [[3, \"showOperators\", \"operators\", \"showButton\", \"value\", \"clear\", \"valueChange\"]], template: function FilterCellWrapperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-filter-cell-operators\", 0);\n ɵngcc0.ɵɵlistener(\"clear\", function FilterCellWrapperComponent_Template_kendo_grid_filter_cell_operators_clear_1_listener() { return ctx.onClear(); })(\"valueChange\", function FilterCellWrapperComponent_Template_kendo_grid_filter_cell_operators_valueChange_1_listener($event) { return ctx.currentOperator = $event; });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"showOperators\", ctx.showOperators)(\"operators\", ctx.operators)(\"showButton\", ctx.showButton)(\"value\", ctx.currentOperator);\n } }, directives: function () { return [FilterCellOperatorsComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterCellWrapperComponent.ctorParameters = () => [\n { type: FilterService }\n];\nFilterCellWrapperComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-wrapper',] }],\n overrideBaseClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellWrapperComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-wrapper-cell',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }]; }, { showOperators: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell-wrapper']\n }], overrideBaseClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }] }); })();\n\n// tslint:disable:no-access-missing-member\nconst stringOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\"\n});\n/**\n * Represents a base string filter component.\n */\nclass StringFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `contains`.\n * @type {string}\n */\n this.operator = \"contains\";\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField((this.column || {}).field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = stringOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nStringFilterComponent.ɵfac = function StringFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nStringFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: StringFilterComponent, inputs: { operator: \"operator\", column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nStringFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }]\n};\n\n\n/**\n * Represents a string-filter cell component\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-configuration-components-for-filter-templates)).\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass StringFilterCellComponent extends StringFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n /**\n * Determines the delay time (in milliseconds) before the filter value is submitted.\n * A value of `0` indicates no delay. The default value is `500`.\n * @type {boolean}\n */\n this.filterDelay = 500;\n /**\n * Determines if the drop-down filter operators will be displayed.\n * The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n}\nStringFilterCellComponent.ɵfac = function StringFilterCellComponent_Factory(t) { return new (t || StringFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStringFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterCellComponent, selectors: [[\"kendo-grid-string-filter-cell\"]], inputs: { filterDelay: \"filterDelay\", showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoGridFocusable\", \"\", \"kendoFilterInput\", \"\", 1, \"k-textbox\", 3, \"filterDelay\", \"ngModel\"]], template: function StringFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"input\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", ctx.filterDelay)(\"ngModel\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc7.DefaultValueAccessor, FocusableDirective,\n FilterInputDirective, ɵngcc7.NgControlStatus, ɵngcc7.NgModel], encapsulation: 2 });\n/** @nocollapse */\nStringFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nStringFilterCellComponent.propDecorators = {\n filterDelay: [{ type: Input }],\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-cell',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { filterDelay: [{\n type: Input\n }], showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a component which accommodates the filter operators.\n */\nclass FilterCellOperatorsComponent {\n constructor(localization) {\n this.localization = localization;\n this.clearText = 'Clear';\n /**\n * The filter operators that will be displayed.\n */\n this.operators = [];\n /**\n * Determines if the list of operators will be displayed.\n * @type {boolean}\n */\n this.showOperators = true;\n /**\n * Fires when the operator is selected.\n * @type {EventEmitter}\n */\n this.valueChange = new EventEmitter();\n /**\n * Fires when the **Clear** button is clicked.\n * @type {EventEmitter<{}>}\n */\n this.clear = new EventEmitter();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n /**\n * @hidden\n */\n onChange(dataItem) {\n this.valueChange.emit(dataItem);\n }\n /**\n * @hidden\n */\n clearClick() {\n this.clear.emit();\n return false;\n }\n /**\n * @hidden\n */\n clearKeydown(args) {\n if (args.keyCode === Keys.Enter || args.keyCode === Keys.Space) {\n this.clear.emit();\n }\n }\n /**\n * @hidden\n */\n dropdownKeydown(args) {\n if (args.defaultPrevented) {\n return;\n }\n if (args.keyCode === Keys.Enter && !this.dropdown.isOpen) {\n this.dropdown.toggle(true);\n args.preventDefault();\n }\n }\n ngOnInit() {\n this.localization.changes.subscribe(() => this.clearText = this.localization.get(\"filterClearButton\"));\n }\n}\nFilterCellOperatorsComponent.ɵfac = function FilterCellOperatorsComponent_Factory(t) { return new (t || FilterCellOperatorsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterCellOperatorsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterCellOperatorsComponent, selectors: [[\"kendo-grid-filter-cell-operators\"]], viewQuery: function FilterCellOperatorsComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c126, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropdown = _t.first);\n } }, hostVars: 2, hostBindings: function FilterCellOperatorsComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-operator\", ctx.hostClasses);\n } }, inputs: { operators: \"operators\", showOperators: \"showOperators\", showButton: \"showButton\", value: \"value\" }, outputs: { valueChange: \"valueChange\", clear: \"clear\" }, decls: 3, vars: 5, consts: [[\"kendoGridFocusable\", \"\", \"class\", \"k-dropdown-operator\", \"iconClass\", \"k-i-filter\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"value\", \"valuePrimitive\", \"popupSettings\", \"valueChange\", \"keydown\", 4, \"ngIf\"], [\"type\", \"button\", \"kendoGridFocusable\", \"\", 1, \"k-button\", \"k-button-icon\", 3, \"ngClass\", \"title\", \"click\", \"keydown\"], [1, \"k-icon\", \"k-i-filter-clear\"], [\"kendoGridFocusable\", \"\", \"iconClass\", \"k-i-filter\", \"textField\", \"text\", \"valueField\", \"value\", 1, \"k-dropdown-operator\", 3, \"data\", \"value\", \"valuePrimitive\", \"popupSettings\", \"valueChange\", \"keydown\"], [\"dropdown\", \"\"]], template: function FilterCellOperatorsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FilterCellOperatorsComponent_kendo_dropdownlist_0_Template, 2, 5, \"kendo-dropdownlist\", 0);\n ɵngcc0.ɵɵelementStart(1, \"button\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function FilterCellOperatorsComponent_Template_button_click_1_listener() { return ctx.clearClick(); })(\"keydown\", function FilterCellOperatorsComponent_Template_button_keydown_1_listener($event) { return ctx.clearKeydown($event); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(3, _c128, ctx.showButton))(\"title\", ctx.clearText);\n } }, directives: [ɵngcc5.NgIf, FocusableDirective, ɵngcc5.NgClass, ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nFilterCellOperatorsComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nFilterCellOperatorsComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-operator',] }],\n dropdown: [{ type: ViewChild, args: ['dropdown',] }],\n operators: [{ type: Input }],\n showButton: [{ type: Input }],\n showOperators: [{ type: Input }],\n value: [{ type: Input }],\n valueChange: [{ type: Output }],\n clear: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellOperatorsComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-cell-operators',\n template: `\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], showOperators: [{\n type: Input\n }], valueChange: [{\n type: Output\n }], clear: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell-operator']\n }], dropdown: [{\n type: ViewChild,\n args: ['dropdown']\n }], showButton: [{\n type: Input\n }], value: [{\n type: Input\n }] }); })();\n\n// tslint:disable:no-access-missing-member\nconst stringOperators$1 = localizeOperators$1({\n \"filterContainsOperator\": \"contains\",\n \"filterNotContainsOperator\": \"doesnotcontain\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n \"filterStartsWithOperator\": \"startswith\",\n \"filterEndsWithOperator\": \"endswith\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\",\n \"filterIsEmptyOperator\": \"isempty\",\n \"filterIsNotEmptyOperator\": \"isnotempty\"\n});\n/**\n * @hidden\n */\nclass AutoCompleteFilterCellComponent extends BaseFilterCellComponent {\n constructor(filterService, column, localization) {\n super(filterService);\n this.localization = localization;\n this.showOperators = true;\n this.defaultOperators = stringOperators$1(this.localization);\n this.column = column;\n }\n set valueField(value) {\n this._valueField = value;\n }\n get valueField() {\n return this._valueField ? this._valueField : this.column.field;\n }\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : \"contains\";\n }\n}\nAutoCompleteFilterCellComponent.ɵfac = function AutoCompleteFilterCellComponent_Factory(t) { return new (t || AutoCompleteFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ColumnComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAutoCompleteFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AutoCompleteFilterCellComponent, selectors: [[\"kendo-grid-autocomplete-filter-cell\"]], inputs: { showOperators: \"showOperators\", column: \"column\", valueField: \"valueField\", filter: \"filter\", data: \"data\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 7, consts: [[3, \"column\", \"filter\", \"operators\", \"showOperators\"], [\"kendoFilterInput\", \"\", 3, \"data\", \"valueField\", \"value\"]], template: function AutoCompleteFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"kendo-autocomplete\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"data\", ctx.data)(\"valueField\", ctx.valueField)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc8.AutoCompleteComponent, FilterInputDirective], encapsulation: 2 });\n/** @nocollapse */\nAutoCompleteFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: ColumnComponent },\n { type: LocalizationService }\n];\nAutoCompleteFilterCellComponent.propDecorators = {\n showOperators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n data: [{ type: Input }],\n valueField: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AutoCompleteFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-autocomplete-filter-cell',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ColumnComponent }, { type: ɵngcc1.LocalizationService }]; }, { showOperators: [{\n type: Input\n }], column: [{\n type: Input\n }], valueField: [{\n type: Input\n }], filter: [{\n type: Input\n }], data: [{\n type: Input\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * @hidden\n */\nclass BooleanFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * @hidden\n */\n this.operator = \"eq\";\n /**\n * @hidden\n */\n this.items = [\n { text: this.localization.get(\"filterIsTrue\"), value: true },\n { text: this.localization.get(\"filterIsFalse\"), value: false }\n ];\n /**\n * @hidden\n */\n this.defaultItem = { text: this.localization.get(\"filterBooleanAll\"), value: null };\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return true;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.items = [\n { text: this.localization.get(\"filterIsTrue\"), value: true },\n { text: this.localization.get(\"filterIsFalse\"), value: false }\n ];\n this.defaultItem = { text: this.localization.get(\"filterBooleanAll\"), value: null };\n }\n}\nBooleanFilterComponent.ɵfac = function BooleanFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nBooleanFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: BooleanFilterComponent, hostVars: 2, hostBindings: function BooleanFilterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell-boolean\", ctx.hostClasses);\n } }, inputs: { column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nBooleanFilterComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell-boolean',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n\n\n/**\n * Represents a Boolean filter-cell component.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass BooleanFilterCellComponent extends BooleanFilterComponent {\n constructor(filterService, localization, cd) {\n super(filterService, localization);\n this.cd = cd;\n }\n localizationChange() {\n super.localizationChange();\n this.cd.markForCheck();\n }\n}\nBooleanFilterCellComponent.ɵfac = function BooleanFilterCellComponent_Factory(t) { return new (t || BooleanFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nBooleanFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BooleanFilterCellComponent, selectors: [[\"kendo-grid-boolean-filter-cell\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 10, consts: [[3, \"column\", \"filter\", \"showOperators\", \"defaultOperator\"], [\"kendoFilterInput\", \"\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"defaultItem\", \"data\", \"popupSettings\", \"valuePrimitive\", \"value\"]], template: function BooleanFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelement(1, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"showOperators\", false)(\"defaultOperator\", ctx.operator);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"defaultItem\", ctx.defaultItem)(\"data\", ctx.items)(\"popupSettings\", ɵngcc0.ɵɵpureFunction0(9, _c127))(\"valuePrimitive\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterCellWrapperComponent, ɵngcc8.DropDownListComponent, FilterInputDirective], encapsulation: 2 });\n/** @nocollapse */\nBooleanFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BooleanFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-boolean-filter-cell',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n// tslint:disable:no-access-missing-member\nconst dateOperators = localizeOperators$1({\n \"filterEqOperator\": \"eq\",\n \"filterNotEqOperator\": \"neq\",\n // tslint:disable-next-line:object-literal-sort-keys\n \"filterAfterOrEqualOperator\": \"gte\",\n \"filterAfterOperator\": \"gt\",\n \"filterBeforeOrEqualOperator\": \"lte\",\n \"filterBeforeOperator\": \"lt\",\n \"filterIsNullOperator\": \"isnull\",\n \"filterIsNotNullOperator\": \"isnotnull\"\n});\n/**\n * @hidden\n */\nclass DateFilterComponent extends BaseFilterCellComponent {\n constructor(filterService, localization) {\n super(filterService);\n this.localization = localization;\n /**\n * The default filter operator. Defaults to `contains`.\n * @type {string}\n */\n this.operator = \"gte\";\n /**\n * Defines the active view that the calendar initially renders.\n * By default, the active view is `month`.\n *\n * > You have to set `activeView` within the `topView`-`bottomView` range.\n */\n this.activeView = \"month\";\n /**\n * Defines the bottommost calendar view, to which the user can navigate.\n */\n this.bottomView = \"month\";\n /**\n * Defines the topmost calendar view, to which the user can navigate.\n */\n this.topView = \"century\";\n /**\n * Determines whether to display a week number column in the `month` view of the Calendar.\n */\n this.weekNumber = false;\n this.defaultOperators = dateOperators(this.localization);\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this.filterByField(this.column.field);\n }\n /**\n * Specifies the date format that is used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n */\n set format(value) {\n this._format = value;\n }\n /**\n * Specifies the date format that is used when the component is not focused.\n * By default, the `column.format` value is used (if set).\n *\n * @readonly\n * @type {string}\n */\n get format() {\n return !isNullOrEmptyString(this._format) ? this._format : this.columnFormat;\n }\n get columnFormat() {\n return this.column && !isNullOrEmptyString(this.column.format) ?\n extractFormat(this.column.format) : \"d\";\n }\n /**\n * The current filter operator for the associated column field.\n * @readonly\n * @type {string}\n */\n get currentOperator() {\n return this.currentFilter ? this.currentFilter.operator : this.operator;\n }\n ngOnInit() {\n this.subscription = this.localization.changes.subscribe(this.localizationChange.bind(this));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n super.ngOnDestroy();\n }\n localizationChange() {\n this.defaultOperators = dateOperators(this.localization);\n if (this.operatorList.length) {\n this.operators = toJSON(this.operatorList.toArray());\n }\n }\n}\nDateFilterComponent.ɵfac = function DateFilterComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nDateFilterComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DateFilterComponent, inputs: { operator: \"operator\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\", format: \"format\", column: \"column\", filter: \"filter\", min: \"min\", max: \"max\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nDateFilterComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n format: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }]\n};\n\n\n/**\n * Represents a date-filter cell component.\n *\n * @example\n *\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass DateFilterCellComponent extends DateFilterComponent {\n constructor(filterService, localization) {\n super(filterService, localization);\n this.localization = localization;\n /**\n * Determines if the drop-down filter operators will be displayed. The default value is `true`.\n * @type {boolean}\n */\n this.showOperators = true;\n }\n /**\n * @hidden\n */\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nDateFilterCellComponent.ɵfac = function DateFilterCellComponent_Factory(t) { return new (t || DateFilterCellComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterCellComponent, selectors: [[\"kendo-grid-date-filter-cell\"]], inputs: { showOperators: \"showOperators\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 17, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"showOperators\"], [\"kendoFilterInput\", \"\", 3, \"value\", \"format\", \"formatPlaceholder\", \"placeholder\", \"activeView\", \"bottomView\", \"topView\", \"min\", \"max\", \"weekNumber\"], [3, \"toggle\", \"today\"]], template: function DateFilterCellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-wrapper-cell\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-datepicker\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-datepicker-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"showOperators\", ctx.showOperators);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"min\", ctx.min)(\"max\", ctx.max)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"toggle\", ctx.messageFor(\"filterDateToggle\"))(\"today\", ctx.messageFor(\"filterDateToday\"));\n } }, directives: [FilterCellWrapperComponent, ɵngcc9.DatePickerComponent, FilterInputDirective, ɵngcc9.DatePickerCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nDateFilterCellComponent.ctorParameters = () => [\n { type: FilterService },\n { type: LocalizationService }\n];\nDateFilterCellComponent.propDecorators = {\n showOperators: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterCellComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-cell',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: ɵngcc1.LocalizationService }]; }, { showOperators: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass ColGroupComponent {\n constructor() {\n this.columns = [];\n this.groups = [];\n }\n get columnsToRender() {\n return columnsToRender(this.columns);\n }\n trackBy(index, _item) {\n return index;\n }\n}\nColGroupComponent.ɵfac = function ColGroupComponent_Factory(t) { return new (t || ColGroupComponent)(); };\nColGroupComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColGroupComponent, selectors: [[\"\", \"kendoGridColGroup\", \"\"]], inputs: { columns: \"columns\", groups: \"groups\", detailTemplate: \"detailTemplate\" }, attrs: _c129, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [3, \"k-group-col\", 4, \"ngFor\", \"ngForOf\"], [3, \"k-hierarchy-col\", 4, \"ngIf\"], [3, \"width\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"]], template: function ColGroupComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ColGroupComponent_ng_template_0_Template, 3, 4, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2 });\nColGroupComponent.propDecorators = {\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColGroupComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridColGroup]',\n template: `\n \n \n \n \n \n `\n }]\n }], function () { return []; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass LoadingComponent {\n constructor(localization) {\n this.localization = localization;\n this.hostClass = true;\n }\n get loadingText() {\n return this.localization.get('loading');\n }\n}\nLoadingComponent.ɵfac = function LoadingComponent_Factory(t) { return new (t || LoadingComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLoadingComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LoadingComponent, selectors: [[\"\", \"kendoGridLoading\", \"\"]], hostVars: 2, hostBindings: function LoadingComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-loading-mask\", ctx.hostClass);\n } }, attrs: _c130, decls: 4, vars: 1, consts: [[1, \"k-loading-text\"], [1, \"k-loading-image\"], [1, \"k-loading-color\"]], template: function LoadingComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(2, \"div\", 1);\n ɵngcc0.ɵɵelement(3, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.loadingText);\n } }, encapsulation: 2 });\n/** @nocollapse */\nLoadingComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nLoadingComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-loading-mask',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LoadingComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridLoading]',\n template: `\n {{ loadingText }}\n
\n
\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-loading-mask']\n }] }); })();\n\n/**\n * @hidden\n */\nclass ResizableContainerDirective {\n constructor(el, renderer, resizeService, grid) {\n this.el = el;\n this.renderer = renderer;\n this.resizeService = resizeService;\n this.grid = grid;\n this.enabled = false;\n }\n set lockedWidth(value) {\n this._lockedWidth = value;\n if (this.enabled) {\n this.attachResize();\n this.resize();\n }\n }\n set kendoGridResizableContainer(enabled) {\n const refresh = enabled !== this.enabled;\n this.enabled = enabled;\n if (refresh) {\n this.attachResize();\n this.resize();\n }\n }\n ngOnDestroy() {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n attachResize() {\n if (this.resizeSubscription && !this.enabled) {\n this.resizeSubscription.unsubscribe();\n this.resizeSubscription = null;\n }\n if (!this.resizeSubscription && this.enabled) {\n this.resizeSubscription = this.resizeService.changes.subscribe(this.resize.bind(this));\n }\n }\n resize() {\n if (this.grid && this.grid.wrapper) {\n const containerElement = this.grid.wrapper.nativeElement;\n const width = Math.max(containerElement.clientWidth - this._lockedWidth, 0);\n if (this.enabled && width > 0) {\n this.renderer.setStyle(this.el.nativeElement, \"width\", width + \"px\");\n }\n else {\n this.renderer.setStyle(this.el.nativeElement, \"width\", \"\");\n }\n }\n }\n}\nResizableContainerDirective.ɵfac = function ResizableContainerDirective_Factory(t) { return new (t || ResizableContainerDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ResizeService), ɵngcc0.ɵɵdirectiveInject(GridComponent, 8)); };\nResizableContainerDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ResizableContainerDirective, selectors: [[\"\", \"kendoGridResizableContainer\", \"\"]], inputs: { lockedWidth: \"lockedWidth\", kendoGridResizableContainer: \"kendoGridResizableContainer\" } });\n/** @nocollapse */\nResizableContainerDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ResizeService },\n { type: GridComponent, decorators: [{ type: Optional }] }\n];\nResizableContainerDirective.propDecorators = {\n lockedWidth: [{ type: Input, args: ['lockedWidth',] }],\n kendoGridResizableContainer: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ResizableContainerDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridResizableContainer]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ResizeService }, { type: GridComponent, decorators: [{\n type: Optional\n }] }]; }, { lockedWidth: [{\n type: Input,\n args: ['lockedWidth']\n }], kendoGridResizableContainer: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass TemplateContextDirective {\n constructor(viewContainerRef) {\n this.viewContainerRef = viewContainerRef;\n }\n set templateContext(context) {\n this.removeView();\n if (context.templateRef) {\n this.insertedViewRef = this.viewContainerRef.createEmbeddedView(context.templateRef, context);\n }\n }\n ngOnDestroy() {\n this.removeView();\n }\n removeView() {\n if (this.insertedViewRef) {\n this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.insertedViewRef));\n this.insertedViewRef = undefined;\n }\n }\n}\nTemplateContextDirective.ɵfac = function TemplateContextDirective_Factory(t) { return new (t || TemplateContextDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef)); };\nTemplateContextDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateContextDirective, selectors: [[\"\", \"templateContext\", \"\"]], inputs: { templateContext: \"templateContext\" } });\n/** @nocollapse */\nTemplateContextDirective.ctorParameters = () => [\n { type: ViewContainerRef }\n];\nTemplateContextDirective.propDecorators = {\n templateContext: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateContextDirective, [{\n type: Directive,\n args: [{\n selector: '[templateContext]' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }]; }, { templateContext: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FocusGroup {\n constructor(root) {\n this.root = root;\n this.active = true;\n this.children = [];\n this.root.registerGroup(this);\n }\n get focusableChildren() {\n return this.children.filter(el => el.canFocus());\n }\n get isActive() {\n return this.active;\n }\n ngOnDestroy() {\n this.root.unregisterGroup(this);\n }\n registerElement(element) {\n this.unregisterElement(element);\n this.children.push(element);\n }\n unregisterElement(element) {\n this.children = this.children.filter(f => f !== element);\n }\n /**\n * Returns a Boolean value which indicates if the group will receive focus when the cell is focused.\n * Requires a single \"simple\" focusable element such as a button or a checkbox.\n */\n isNavigable() {\n const focusable = this.focusableChildren;\n return focusable.length === 1 && focusable[0].isNavigable();\n }\n canFocus() {\n return this.focusableChildren.length > 0;\n }\n focus() {\n if (this.canFocus() && !this.hasFocus()) {\n this.focusableChildren[0].focus();\n }\n }\n activate() {\n this.toggleState(true);\n }\n deactivate() {\n this.toggleState(false);\n }\n hasFocus() {\n return this.children.reduce((focused, element) => focused || element.hasFocus(), false);\n }\n toggleState(active) {\n if (this.active !== active) {\n this.active = active;\n this.children.forEach(f => f.toggle(active));\n }\n }\n}\nFocusGroup.ɵfac = function FocusGroup_Factory(t) { return new (t || FocusGroup)(ɵngcc0.ɵɵinject(FocusRoot)); };\nFocusGroup.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: FocusGroup, factory: FocusGroup.ɵfac });\n/** @nocollapse */\nFocusGroup.ctorParameters = () => [\n { type: FocusRoot }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FocusGroup, [{\n type: Injectable\n }], function () { return [{ type: FocusRoot }]; }, null); })();\n\nlet id = 0;\nfunction nextId() {\n return id++;\n}\n/**\n * @hidden\n */\nclass LogicalCellDirective {\n constructor(focusGroup, element, columnInfoService, idService, navigationService, renderer, zone, cellContext) {\n this.focusGroup = focusGroup;\n this.element = element;\n this.columnInfoService = columnInfoService;\n this.idService = idService;\n this.navigationService = navigationService;\n this.renderer = renderer;\n this.zone = zone;\n this.cellContext = cellContext;\n this.logicalSlaveCell = false;\n this.colSpan = 1;\n this.rowSpan = 1;\n this.dataRowIndex = -1;\n this.detailExpandCell = false;\n this.uid = nextId();\n }\n get id() {\n if (!this.logicalSlaveCell && this.columnInfoService.isLocked) {\n return this.idService.cellId(this.logicalRowIndex, this.logicalColIndex);\n }\n }\n get ariaColIndex() {\n if (this.logicalSlaveCell || this.logicalColIndex === -1) {\n return undefined;\n }\n return this.logicalColIndex + 1;\n }\n ngOnInit() {\n if (!this.navigationService.enabled) {\n return;\n }\n this.navigationChange = this.navigationService.changes.subscribe((e) => this.onNavigationChange(e));\n }\n ngDoCheck() {\n if (!this.navigationService.enabled || this.logicalColIndex === -1) {\n return;\n }\n if (this.cellContext) {\n this.cellContext.focusGroup = this.focusGroup;\n }\n this.registerNoChanges();\n }\n ngOnChanges(changes) {\n if (!this.navigationService.enabled) {\n return;\n }\n const keys = Object.keys(changes);\n if ((keys.length === 1 && keys[0] === 'groupItem') || this.logicalColIndex === -1) {\n // Ignore groupItem changes as the reference is not stable\n return;\n }\n const indexChange = changes.logicalColIndex;\n const rowIndexChange = changes.logicalRowIndex;\n const index = indexChange && !indexChange.isFirstChange() ? indexChange.previousValue : this.logicalColIndex;\n const rowIndex = rowIndexChange && !rowIndexChange.isFirstChange() ? rowIndexChange.previousValue : this.logicalRowIndex;\n this.navigationService.unregisterCell(index, rowIndex, this);\n this.registerChanges();\n this.updateElement();\n }\n ngOnDestroy() {\n if (this.navigationChange) {\n this.navigationChange.unsubscribe();\n }\n this.navigationService.unregisterCell(this.logicalColIndex, this.logicalRowIndex, this);\n }\n onNavigationChange(e) {\n const active = this.logicalColIndex === e.colIndex && this.logicalRowIndex === e.rowIndex;\n const wasActive = this.logicalColIndex === e.prevColIndex && this.logicalRowIndex === e.prevRowIndex;\n if (active || wasActive) {\n this.updateElement();\n }\n }\n updateElement() {\n const el = this.element.nativeElement;\n this.renderer.setAttribute(el, 'tabIndex', this.isFocusable() && !this.logicalSlaveCell ? '0' : '-1');\n if (this.isFocused()) {\n if (this.focusGroup.isNavigable()) {\n this.focusGroup.focus();\n }\n else {\n if (!this.logicalSlaveCell && this.navigationService.autoFocusCell(this.logicalColIndex, this.logicalColIndex + this.colSpan - 1)) {\n this.microtask(() => this.isFocused() && el.focus());\n }\n this.renderer.addClass(el, 'k-state-focused');\n }\n }\n else {\n this.renderer.removeClass(el, 'k-state-focused');\n }\n }\n microtask(callback) {\n this.zone.runOutsideAngular(() => Promise.resolve(null).then(callback));\n }\n registerChanges() {\n if (!this.logicalSlaveCell) {\n this.navigationService.registerCell(this);\n }\n }\n registerNoChanges() {\n if (!this.logicalSlaveCell) {\n this.navigationService.registerCellOnCurrentRow(this);\n }\n }\n isFocusable() {\n return this.navigationService.isCellFocusable(this);\n }\n isFocused() {\n return this.navigationService.isCellFocused(this);\n }\n}\nLogicalCellDirective.ɵfac = function LogicalCellDirective_Factory(t) { return new (t || LogicalCellDirective)(ɵngcc0.ɵɵdirectiveInject(FocusGroup), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 8)); };\nLogicalCellDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LogicalCellDirective, selectors: [[\"\", \"kendoGridLogicalCell\", \"\"]], hostVars: 2, hostBindings: function LogicalCellDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"id\", ctx.id)(\"aria-colindex\", ctx.ariaColIndex);\n } }, inputs: { logicalSlaveCell: \"logicalSlaveCell\", colSpan: \"colSpan\", rowSpan: \"rowSpan\", dataRowIndex: \"dataRowIndex\", detailExpandCell: \"detailExpandCell\", logicalColIndex: \"logicalColIndex\", logicalRowIndex: \"logicalRowIndex\", colIndex: \"colIndex\", groupItem: \"groupItem\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵProvidersFeature([{\n provide: FocusGroup,\n deps: [FocusRoot],\n useClass: FocusGroup\n }]), ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nLogicalCellDirective.ctorParameters = () => [\n { type: FocusGroup },\n { type: ElementRef },\n { type: ColumnInfoService },\n { type: IdService },\n { type: NavigationService },\n { type: Renderer2 },\n { type: NgZone },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }] }\n];\nLogicalCellDirective.propDecorators = {\n logicalColIndex: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n logicalSlaveCell: [{ type: Input }],\n colIndex: [{ type: Input }],\n colSpan: [{ type: Input }],\n rowSpan: [{ type: Input }],\n groupItem: [{ type: Input }],\n dataRowIndex: [{ type: Input }],\n dataItem: [{ type: Input }],\n detailExpandCell: [{ type: Input }],\n id: [{ type: HostBinding, args: ['attr.id',] }],\n ariaColIndex: [{ type: HostBinding, args: ['attr.aria-colindex',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LogicalCellDirective, [{\n type: Directive,\n args: [{\n providers: [{\n provide: FocusGroup,\n deps: [FocusRoot],\n useClass: FocusGroup\n }],\n selector: '[kendoGridLogicalCell]'\n }]\n }], function () { return [{ type: FocusGroup }, { type: ɵngcc0.ElementRef }, { type: ColumnInfoService }, { type: IdService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }] }]; }, { logicalSlaveCell: [{\n type: Input\n }], colSpan: [{\n type: Input\n }], rowSpan: [{\n type: Input\n }], dataRowIndex: [{\n type: Input\n }], detailExpandCell: [{\n type: Input\n }], id: [{\n type: HostBinding,\n args: ['attr.id']\n }], ariaColIndex: [{\n type: HostBinding,\n args: ['attr.aria-colindex']\n }], logicalColIndex: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], colIndex: [{\n type: Input\n }], groupItem: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\nlet id$1 = 0;\nfunction nextId$1() {\n return id$1++;\n}\n/**\n * @hidden\n */\nclass LogicalRowDirective {\n constructor(idService, navigation) {\n this.idService = idService;\n this.navigation = navigation;\n this.logicalSlaveRow = false;\n this.logicalSlaveCellsCount = 0;\n this.dataRowIndex = -1;\n this.uid = nextId$1();\n }\n get hostRole() {\n return this.logicalSlaveRow ? 'presentation' : 'row';\n }\n get ariaRowIndex() {\n if (this.navigation.enabled) {\n return this.logicalRowIndex + 1;\n }\n }\n get ariaOwns() {\n if (!this.navigation.enabled || this.logicalSlaveRow || this.logicalSlaveCellsCount === 0) {\n return undefined;\n }\n const ids = [];\n const total = this.logicalCellsCount + this.logicalSlaveCellsCount;\n for (let cellIndex = this.logicalCellsCount; cellIndex < total; cellIndex++) {\n ids.push(this.idService.cellId(this.logicalRowIndex, cellIndex));\n }\n return ids.join(' ');\n }\n ngOnChanges(changes) {\n if (!this.navigation.enabled || this.logicalSlaveRow) {\n return;\n }\n const indexChange = changes.logicalRowIndex;\n const logicalSlaveRowChange = changes.logicalSlaveRow;\n if (indexChange || logicalSlaveRowChange) {\n const index = indexChange && !indexChange.isFirstChange() ? indexChange.previousValue : this.logicalRowIndex;\n this.navigation.unregisterRow(index, this);\n this.navigation.registerRow(this);\n }\n else if (anyChanged(['dataRowIndex', 'dataItem'], changes)) {\n this.navigation.updateRow(this);\n }\n }\n ngOnDestroy() {\n this.navigation.unregisterRow(this.logicalRowIndex, this);\n }\n}\nLogicalRowDirective.ɵfac = function LogicalRowDirective_Factory(t) { return new (t || LogicalRowDirective)(ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(NavigationService)); };\nLogicalRowDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LogicalRowDirective, selectors: [[\"\", \"kendoGridLogicalRow\", \"\"]], hostVars: 3, hostBindings: function LogicalRowDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.hostRole)(\"aria-rowindex\", ctx.ariaRowIndex)(\"aria-owns\", ctx.ariaOwns);\n } }, inputs: { logicalSlaveRow: \"logicalSlaveRow\", logicalSlaveCellsCount: \"logicalSlaveCellsCount\", dataRowIndex: \"dataRowIndex\", logicalRowIndex: \"logicalRowIndex\", logicalCellsCount: \"logicalCellsCount\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nLogicalRowDirective.ctorParameters = () => [\n { type: IdService },\n { type: NavigationService }\n];\nLogicalRowDirective.propDecorators = {\n logicalRowIndex: [{ type: Input }],\n logicalSlaveRow: [{ type: Input }],\n logicalCellsCount: [{ type: Input }],\n logicalSlaveCellsCount: [{ type: Input }],\n dataRowIndex: [{ type: Input }],\n dataItem: [{ type: Input }],\n hostRole: [{ type: HostBinding, args: ['attr.role',] }],\n ariaRowIndex: [{ type: HostBinding, args: ['attr.aria-rowindex',] }],\n ariaOwns: [{ type: HostBinding, args: ['attr.aria-owns',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LogicalRowDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridLogicalRow]'\n }]\n }], function () { return [{ type: IdService }, { type: NavigationService }]; }, { logicalSlaveRow: [{\n type: Input\n }], logicalSlaveCellsCount: [{\n type: Input\n }], dataRowIndex: [{\n type: Input\n }], hostRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], ariaRowIndex: [{\n type: HostBinding,\n args: ['attr.aria-rowindex']\n }], ariaOwns: [{\n type: HostBinding,\n args: ['attr.aria-owns']\n }], logicalRowIndex: [{\n type: Input\n }], logicalCellsCount: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:pipe-naming */\nconst FORMAT_REGEX = /\\{\\d+:?/;\n/**\n * @hidden\n */\nclass FieldAccessorPipe {\n constructor(intlService) {\n this.intlService = intlService;\n }\n transform(dataItem, fieldName, format) {\n if (!isNullOrEmptyString(fieldName)) {\n const value = getter(fieldName)(dataItem);\n if (!isNullOrEmptyString(format)) {\n return this.formatValue(format, value);\n }\n return value;\n }\n return dataItem;\n }\n formatValue(format, value) {\n const intl = this.intlService;\n if (isString(format) && format.match(FORMAT_REGEX)) {\n return intl.format(format, value);\n }\n return intl.toString(value, format);\n }\n}\nFieldAccessorPipe.ɵfac = function FieldAccessorPipe_Factory(t) { return new (t || FieldAccessorPipe)(ɵngcc0.ɵɵdirectiveInject(ɵngcc10.IntlService)); };\nFieldAccessorPipe.ɵpipe = ɵngcc0.ɵɵdefinePipe({ name: \"valueOf\", type: FieldAccessorPipe, pure: false });\n/** @nocollapse */\nFieldAccessorPipe.ctorParameters = () => [\n { type: IntlService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FieldAccessorPipe, [{\n type: Pipe,\n args: [{\n name: 'valueOf',\n pure: false\n }]\n }], function () { return [{ type: ɵngcc10.IntlService }]; }, null); })();\n\n/**\n * @hidden\n */\nconst columnsToResize = ({ columns }) => Math.max(1, resizableColumns(columns).length);\n/**\n * @hidden\n */\nconst row = selector => element => element.querySelector(selector);\n/**\n * @hidden\n */\nconst headerRow = index => element => element.querySelectorAll('thead>tr')[index];\n/**\n * @hidden\n */\nconst cell = (index, selector = 'td') => element => element.querySelectorAll(`${selector}:not(.k-group-cell):not(.k-hierarchy-cell)`)[index];\n/**\n * @hidden\n */\nconst offsetWidth = element => element.offsetWidth;\n/**\n * @hidden\n */\nconst pipe = (...fns) => data => fns.reduce((state$$1, fn) => state$$1 ? fn(state$$1) : 0, data);\n/**\n * @hidden\n */\nclass TableDirective {\n constructor(element, renderer, service, zone, cdr) {\n this.element = element;\n this.renderer = renderer;\n this.service = service;\n this.zone = zone;\n this.cdr = cdr;\n this.locked = false;\n this.firstResize = false;\n }\n get minWidth() {\n return this.firstResize ? 0 : null;\n }\n ngOnInit() {\n const obs = this.service\n .changes.pipe(filter(e => this.locked === e.locked));\n this.subscription = obs.pipe(filter(e => e.type === 'start'), tap(this.initState.bind(this)), map(columnsToResize), switchMap((take$$1) => obs.pipe(filter(e => e.type === 'resizeTable'), map(e => e.delta), bufferCount(take$$1)))).subscribe(this.resize.bind(this));\n this.autoFitSubscription = this.service\n .registerTable({\n autoFit: this.autoFitObservable.bind(this),\n locked: this.locked\n });\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.autoFitSubscription) {\n this.autoFitSubscription();\n this.autoFitSubscription = null;\n }\n }\n initState() {\n this.firstResize = true;\n if (!this.virtualColumns || this.locked) {\n this.originalWidth = offsetWidth(this.element.nativeElement);\n }\n }\n resize(deltas) {\n if (!this.virtualColumns || this.locked) {\n const delta = deltas.reduce((sum, item) => sum + item, 0);\n const width = this.originalWidth + delta;\n this.renderer.setStyle(this.element.nativeElement, 'width', width + 'px');\n }\n this.cdr.detectChanges();\n }\n autoFitObservable(columnInfo) {\n return Observable.create(observer => {\n this.zone.runOutsideAngular(() => {\n this.renderer.addClass(this.element.nativeElement, 'k-autofitting');\n this.cdr.detectChanges();\n const widths = columnInfo.map(this.measureColumn.bind(this));\n this.renderer.removeClass(this.element.nativeElement, 'k-autofitting');\n observer.next(widths);\n });\n });\n }\n measureColumn(info) {\n const dom = this.element.nativeElement;\n const header = pipe(headerRow(info.level), cell(info.headerIndex, 'th'), offsetWidth)(dom);\n let data = 0;\n if (!info.isParentSpan || (info.isParentSpan && info.isLastInSpan)) {\n data = pipe(row('tbody>tr:not(.k-grouping-row):not(.k-grid-norecords)'), cell(info.index), offsetWidth)(dom);\n }\n const footer = pipe(row('tfoot>tr'), cell(info.index), offsetWidth)(dom);\n return Math.max(header, data, footer);\n }\n}\nTableDirective.ɵfac = function TableDirective_Factory(t) { return new (t || TableDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nTableDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TableDirective, selectors: [[\"table\"]], hostVars: 2, hostBindings: function TableDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"min-width\", ctx.minWidth);\n } }, inputs: { locked: \"locked\", virtualColumns: \"virtualColumns\" } });\n/** @nocollapse */\nTableDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ColumnResizingService },\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\nTableDirective.propDecorators = {\n locked: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n minWidth: [{ type: HostBinding, args: ['style.min-width',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TableDirective, [{\n type: Directive,\n args: [{\n selector: 'table' // tslint:disable-line:directive-selector\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ColumnResizingService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, { locked: [{\n type: Input\n }], minWidth: [{\n type: HostBinding,\n args: ['style.min-width']\n }], virtualColumns: [{\n type: Input\n }] }); })();\n\nconst exportedModules = [\n ColumnComponent,\n ColumnGroupComponent,\n LogicalCellDirective,\n LogicalRowDirective,\n FocusableDirective,\n FooterTemplateDirective,\n ColGroupComponent,\n ResizableContainerDirective,\n TemplateContextDirective,\n FieldAccessorPipe,\n DetailTemplateDirective,\n SpanColumnComponent,\n TableDirective,\n LoadingComponent\n];\n/**\n * @hidden\n */\nclass SharedModule {\n static exports() {\n return [\n ColumnComponent,\n SpanColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n DetailTemplateDirective,\n FocusableDirective\n ];\n }\n}\nSharedModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedModule });\nSharedModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedModule_Factory(t) { return new (t || SharedModule)(); }, imports: [[CommonModule],\n DraggableModule, EventsModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedModule, { declarations: function () { return [ColumnComponent,\n ColumnGroupComponent,\n LogicalCellDirective,\n LogicalRowDirective,\n FocusableDirective,\n FooterTemplateDirective,\n ColGroupComponent,\n ResizableContainerDirective,\n TemplateContextDirective,\n FieldAccessorPipe,\n DetailTemplateDirective,\n SpanColumnComponent,\n TableDirective,\n LoadingComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [ColumnComponent,\n ColumnGroupComponent,\n LogicalCellDirective,\n LogicalRowDirective,\n FocusableDirective,\n FooterTemplateDirective,\n ColGroupComponent,\n ResizableContainerDirective,\n TemplateContextDirective,\n FieldAccessorPipe,\n DetailTemplateDirective,\n SpanColumnComponent,\n TableDirective,\n LoadingComponent,\n DraggableModule, EventsModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules],\n exports: [exportedModules, DraggableModule, EventsModule],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the `Contains` (**Contains**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass ContainsFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"contains\", localization); }\n}\nContainsFilterOperatorComponent.ɵfac = function ContainsFilterOperatorComponent_Factory(t) { return new (t || ContainsFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nContainsFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ContainsFilterOperatorComponent, selectors: [[\"kendo-filter-contains-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => ContainsFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function ContainsFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nContainsFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ContainsFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => ContainsFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-contains-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `DoesNotContain` (**Does not contain**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass DoesNotContainFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"doesnotcontain\", localization); }\n}\nDoesNotContainFilterOperatorComponent.ɵfac = function DoesNotContainFilterOperatorComponent_Factory(t) { return new (t || DoesNotContainFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDoesNotContainFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DoesNotContainFilterOperatorComponent, selectors: [[\"kendo-filter-not-contains-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => DoesNotContainFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function DoesNotContainFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nDoesNotContainFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DoesNotContainFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => DoesNotContainFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-not-contains-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `EndsWith` (**Ends with**) string filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass EndsWithFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"endswith\", localization); }\n}\nEndsWithFilterOperatorComponent.ɵfac = function EndsWithFilterOperatorComponent_Factory(t) { return new (t || EndsWithFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nEndsWithFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: EndsWithFilterOperatorComponent, selectors: [[\"kendo-filter-endswith-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EndsWithFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EndsWithFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nEndsWithFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EndsWithFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EndsWithFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-endswith-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `Equal` (**Is equal to**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass EqualFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"eq\", localization); }\n}\nEqualFilterOperatorComponent.ɵfac = function EqualFilterOperatorComponent_Factory(t) { return new (t || EqualFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nEqualFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: EqualFilterOperatorComponent, selectors: [[\"kendo-filter-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EqualFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function EqualFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nEqualFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EqualFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => EqualFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsEmpty` (**Is empty**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsEmptyFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isempty\", localization); }\n}\nIsEmptyFilterOperatorComponent.ɵfac = function IsEmptyFilterOperatorComponent_Factory(t) { return new (t || IsEmptyFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsEmptyFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsEmptyFilterOperatorComponent, selectors: [[\"kendo-filter-isempty-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsEmptyFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsEmptyFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsEmptyFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsEmptyFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsEmptyFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isempty-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNotEmpty` (**Is not empty**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNotEmptyFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnotempty\", localization); }\n}\nIsNotEmptyFilterOperatorComponent.ɵfac = function IsNotEmptyFilterOperatorComponent_Factory(t) { return new (t || IsNotEmptyFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNotEmptyFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNotEmptyFilterOperatorComponent, selectors: [[\"kendo-filter-isnotempty-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotEmptyFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNotEmptyFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNotEmptyFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNotEmptyFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotEmptyFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnotempty-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNotNull` (**Is not null**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNotNullFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnotnull\", localization); }\n}\nIsNotNullFilterOperatorComponent.ɵfac = function IsNotNullFilterOperatorComponent_Factory(t) { return new (t || IsNotNullFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNotNullFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNotNullFilterOperatorComponent, selectors: [[\"kendo-filter-isnotnull-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotNullFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNotNullFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNotNullFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNotNullFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNotNullFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnotnull-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `IsNull` (**Is null**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass IsNullFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"isnull\", localization); }\n}\nIsNullFilterOperatorComponent.ɵfac = function IsNullFilterOperatorComponent_Factory(t) { return new (t || IsNullFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nIsNullFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: IsNullFilterOperatorComponent, selectors: [[\"kendo-filter-isnull-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNullFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function IsNullFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nIsNullFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(IsNullFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => IsNullFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-isnull-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `NotEqual` (**Is not equal to**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass NotEqualFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"neq\", localization); }\n}\nNotEqualFilterOperatorComponent.ɵfac = function NotEqualFilterOperatorComponent_Factory(t) { return new (t || NotEqualFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNotEqualFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NotEqualFilterOperatorComponent, selectors: [[\"kendo-filter-neq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => NotEqualFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function NotEqualFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nNotEqualFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NotEqualFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => NotEqualFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-neq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `StartsWith` (**Starts with**) filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass StartsWithFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"startswith\", localization); }\n}\nStartsWithFilterOperatorComponent.ɵfac = function StartsWithFilterOperatorComponent_Factory(t) { return new (t || StartsWithFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStartsWithFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StartsWithFilterOperatorComponent, selectors: [[\"kendo-filter-startswith-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => StartsWithFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function StartsWithFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nStartsWithFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StartsWithFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => StartsWithFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-startswith-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Greater` (**Is greater than**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass GreaterFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"gt\", localization); }\n}\nGreaterFilterOperatorComponent.ɵfac = function GreaterFilterOperatorComponent_Factory(t) { return new (t || GreaterFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGreaterFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GreaterFilterOperatorComponent, selectors: [[\"kendo-filter-gt-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function GreaterFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nGreaterFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GreaterFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-gt-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/**\n * Represents the `GreaterOrEqualTo` (**Is greater than or equal to**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass GreaterOrEqualToFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"gte\", localization); }\n}\nGreaterOrEqualToFilterOperatorComponent.ɵfac = function GreaterOrEqualToFilterOperatorComponent_Factory(t) { return new (t || GreaterOrEqualToFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nGreaterOrEqualToFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GreaterOrEqualToFilterOperatorComponent, selectors: [[\"kendo-filter-gte-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterOrEqualToFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function GreaterOrEqualToFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nGreaterOrEqualToFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GreaterOrEqualToFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => GreaterOrEqualToFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-gte-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Less` (**Is less than**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass LessFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"lt\", localization); }\n}\nLessFilterOperatorComponent.ɵfac = function LessFilterOperatorComponent_Factory(t) { return new (t || LessFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLessFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LessFilterOperatorComponent, selectors: [[\"kendo-filter-lt-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LessFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nLessFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LessFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-lt-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `LessOrEqualTo` (**Is less than or equal to**) numeric filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass LessOrEqualToFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"lte\", localization); }\n}\nLessOrEqualToFilterOperatorComponent.ɵfac = function LessOrEqualToFilterOperatorComponent_Factory(t) { return new (t || LessOrEqualToFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nLessOrEqualToFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: LessOrEqualToFilterOperatorComponent, selectors: [[\"kendo-filter-lte-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessOrEqualToFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function LessOrEqualToFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nLessOrEqualToFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LessOrEqualToFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => LessOrEqualToFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-lte-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Greater` (**Is after**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass AfterFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"after\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"gt\"\n };\n }\n}\nAfterFilterOperatorComponent.ɵfac = function AfterFilterOperatorComponent_Factory(t) { return new (t || AfterFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAfterFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AfterFilterOperatorComponent, selectors: [[\"kendo-filter-after-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AfterFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nAfterFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AfterFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-after-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `GreaterOrEqualTo` (**Is after or equal to**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass AfterEqFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"after-eq\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"gte\"\n };\n }\n}\nAfterEqFilterOperatorComponent.ɵfac = function AfterEqFilterOperatorComponent_Factory(t) { return new (t || AfterEqFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nAfterEqFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AfterEqFilterOperatorComponent, selectors: [[\"kendo-filter-after-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterEqFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function AfterEqFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nAfterEqFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AfterEqFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => AfterEqFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-after-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `LessOrEqualTo` (**Is before or equal to**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass BeforeEqFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"before-eq\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"lte\"\n };\n }\n}\nBeforeEqFilterOperatorComponent.ɵfac = function BeforeEqFilterOperatorComponent_Factory(t) { return new (t || BeforeEqFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBeforeEqFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BeforeEqFilterOperatorComponent, selectors: [[\"kendo-filter-before-eq-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeEqFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function BeforeEqFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nBeforeEqFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BeforeEqFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeEqFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-before-eq-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\n/*\n * Represents the `Less then` (**Is before**) date filter operator.\n *\n * For more information and examples, refer to:\n * * [Setting the default filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-default-filter-operator)\n * * [Setting the order of the filter operators]({% slug builtinfiltertemplate_grid %}#toc-setting-the-order-of-the-filter-operators)\n */\nclass BeforeFilterOperatorComponent extends FilterOperatorBase {\n constructor(localization) { super(\"before\", localization); }\n /**\n * @hidden\n */\n toJSON() {\n return {\n text: this.text,\n value: \"lt\"\n };\n }\n}\nBeforeFilterOperatorComponent.ɵfac = function BeforeFilterOperatorComponent_Factory(t) { return new (t || BeforeFilterOperatorComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBeforeFilterOperatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BeforeFilterOperatorComponent, selectors: [[\"kendo-filter-before-operator\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeFilterOperatorComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function BeforeFilterOperatorComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nBeforeFilterOperatorComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BeforeFilterOperatorComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: FilterOperatorBase,\n useExisting: forwardRef(() => BeforeFilterOperatorComponent)\n }\n ],\n selector: 'kendo-filter-before-operator',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, null); })();\n\nconst FILTER_OPERATORS = [\n FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent\n];\nconst importedModules = [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule,\n SharedModule\n];\nconst COMPONENTS = [\n FilterInputDirective\n];\n/**\n * @hidden\n */\nclass SharedFilterModule {\n static exports() {\n return [\n ...FILTER_OPERATORS\n ];\n }\n}\nSharedFilterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SharedFilterModule });\nSharedFilterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SharedFilterModule_Factory(t) { return new (t || SharedFilterModule)(); }, imports: [[...importedModules],\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule,\n SharedModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SharedFilterModule, { declarations: [FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent,\n FilterInputDirective], imports: [CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule,\n SharedModule], exports: [FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent,\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n DropDownListModule,\n AutoCompleteModule,\n InputsModule,\n DatePickerModule,\n PopupModule,\n SharedModule,\n FilterInputDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SharedFilterModule, [{\n type: NgModule,\n args: [{\n declarations: [FILTER_OPERATORS, COMPONENTS],\n exports: [FILTER_OPERATORS, importedModules, COMPONENTS],\n imports: [...importedModules]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass FilterHostDirective {\n constructor(host, resolver) {\n this.host = host;\n this.resolver = resolver;\n }\n ngOnInit() {\n this.component = this.host.createComponent(this.resolver.resolveComponentFactory(this.componentType()));\n this.initComponent({\n column: this.column,\n filter: this.filter\n });\n }\n ngOnDestroy() {\n if (this.component) {\n this.component.destroy();\n this.component = null;\n }\n }\n ngOnChanges(changes) {\n if (anyChanged([\"column\", \"filter\"], changes)) {\n this.initComponent({\n column: this.column,\n filter: this.filter\n });\n }\n }\n initComponent({ column, filter: filter$$1 }) {\n const instance = this.component.instance;\n instance.column = column;\n instance.filter = filter$$1;\n }\n}\nFilterHostDirective.ɵfac = function FilterHostDirective_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nFilterHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterHostDirective, inputs: { column: \"column\", filter: \"filter\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\nFilterHostDirective.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n\n\n/**\n * @hidden\n *\n * > List the following components in the GridModule as `entryComponents`.\n */\nconst filterComponentFactory = (type) => ({\n \"boolean\": BooleanFilterCellComponent,\n \"date\": DateFilterCellComponent,\n \"numeric\": NumericFilterCellComponent,\n \"text\": StringFilterCellComponent\n}[type]);\n\n/**\n * @hidden\n */\nclass FilterCellHostDirective extends FilterHostDirective {\n constructor(host, resolver) {\n super(host, resolver);\n }\n componentType() {\n if (!isNullOrEmptyString(this.column.filter)) {\n return filterComponentFactory(this.column.filter);\n }\n return StringFilterCellComponent;\n }\n}\nFilterCellHostDirective.ɵfac = function FilterCellHostDirective_Factory(t) { return new (t || FilterCellHostDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver)); };\nFilterCellHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterCellHostDirective, selectors: [[\"\", \"kendoFilterCellHost\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFilterCellHostDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ComponentFactoryResolver }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterCellHostDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterCellHost]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ComponentFactoryResolver }]; }, null); })();\n\nconst INTERNAL_COMPONENTS = [\n FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n FilterCellHostDirective,\n FilterCellWrapperComponent,\n DateFilterCellComponent\n];\nconst ENTRY_COMPONENTS = [\n StringFilterCellComponent,\n NumericFilterCellComponent,\n BooleanFilterCellComponent,\n DateFilterCellComponent\n];\n/**\n * @hidden\n */\nclass RowFilterModule {\n static exports() {\n return [\n FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n FilterCellOperatorsComponent,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n DateFilterCellComponent,\n SharedFilterModule.exports()\n ];\n }\n}\nRowFilterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: RowFilterModule });\nRowFilterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function RowFilterModule_Factory(t) { return new (t || RowFilterModule)(); }, imports: [[SharedFilterModule],\n SharedFilterModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(RowFilterModule, { declarations: [FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n FilterCellHostDirective,\n FilterCellWrapperComponent,\n DateFilterCellComponent], imports: [SharedFilterModule], exports: [FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n FilterCellHostDirective,\n FilterCellWrapperComponent,\n DateFilterCellComponent,\n SharedFilterModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RowFilterModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS],\n entryComponents: ENTRY_COMPONENTS,\n exports: [INTERNAL_COMPONENTS, SharedFilterModule],\n imports: [SharedFilterModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst normalizeSettings = ({ buttonCount = 10, info = true, type = 'numeric', pageSizes = false, previousNext = true }) => ({\n buttonCount,\n info,\n pageSizes: pageSizes === true ? [5, 10, 20] : pageSizes,\n previousNext,\n type\n});\n/**\n * @hidden\n */\nconst normalize = (settings) => normalizeSettings(settings === true ? {} : settings);\n\n/**\n * @hidden\n */\nclass PagerComponent {\n constructor(pagerContext) {\n this.pagerContext = pagerContext;\n this.total = 0;\n this.skip = 1;\n this.pageChange = new EventEmitter();\n this.settings = normalize({});\n this._templateContext = {};\n }\n set options(value) {\n this.settings = normalize(value);\n }\n get pagerWrapClass() {\n return true;\n }\n get gridPagerClass() {\n return true;\n }\n get widgetClass() {\n return true;\n }\n get totalPages() {\n return Math.ceil((this.total || 0) / this.pageSize);\n }\n get currentPage() {\n return Math.floor((this.skip || 0) / this.pageSize) + 1;\n }\n get templateContext() {\n const context = this._templateContext;\n context.totalPages = this.totalPages;\n context.total = this.total;\n context.skip = this.skip;\n context.pageSize = this.pageSize;\n context.currentPage = this.currentPage;\n return context;\n }\n ngOnInit() {\n this.pageChangeSubscription = this.pagerContext.pageChange.subscribe(this.changePage.bind(this));\n }\n ngOnChanges(changes) {\n if (anyChanged(['pageSize', 'skip', 'total'], changes, false)) {\n this.pagerContext.notifyChanges({\n pageSize: this.pageSize,\n skip: this.skip,\n total: this.total\n });\n }\n }\n ngOnDestroy() {\n if (this.pageChangeSubscription) {\n this.pageChangeSubscription.unsubscribe();\n }\n }\n changePage(event) {\n this.pageChange.emit(event);\n }\n}\nPagerComponent.ɵfac = function PagerComponent_Factory(t) { return new (t || PagerComponent)(ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerComponent, selectors: [[\"kendo-pager\"]], hostVars: 6, hostBindings: function PagerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-wrap\", ctx.pagerWrapClass)(\"k-grid-pager\", ctx.gridPagerClass)(\"k-widget\", ctx.widgetClass);\n } }, inputs: { total: \"total\", skip: \"skip\", options: \"options\", pageSize: \"pageSize\", template: \"template\" }, outputs: { pageChange: \"pageChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [[3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\", 4, \"ngIf\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"buttonCount\", 4, \"ngIf\"], [3, \"pageSizes\", 4, \"ngIf\"], [3, \"buttonCount\"], [3, \"pageSizes\"]], template: function PagerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, PagerComponent_ng_container_0_Template, 1, 2, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, PagerComponent_ng_container_1_Template, 7, 6, \"ng-container\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.template == null ? null : ctx.template.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx.template == null ? null : ctx.template.templateRef));\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet, PagerPrevButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerNextButtonsComponent,\n PagerInfoComponent,\n PagerPageSizesComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nPagerComponent.ctorParameters = () => [\n { type: PagerContextService }\n];\nPagerComponent.propDecorators = {\n total: [{ type: Input }],\n skip: [{ type: Input }],\n pageSize: [{ type: Input }],\n options: [{ type: Input }],\n template: [{ type: Input }],\n pageChange: [{ type: Output }],\n pagerWrapClass: [{ type: HostBinding, args: ['class.k-pager-wrap',] }],\n gridPagerClass: [{ type: HostBinding, args: ['class.k-grid-pager',] }],\n widgetClass: [{ type: HostBinding, args: ['class.k-widget',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pager',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: PagerContextService }]; }, { total: [{\n type: Input\n }], skip: [{\n type: Input\n }], pageChange: [{\n type: Output\n }], options: [{\n type: Input\n }], pagerWrapClass: [{\n type: HostBinding,\n args: ['class.k-pager-wrap']\n }], gridPagerClass: [{\n type: HostBinding,\n args: ['class.k-grid-pager']\n }], widgetClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }], pageSize: [{\n type: Input\n }], template: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n this.localization = localization;\n this.pagerContext = pagerContext;\n this.cd = cd;\n this.total = this.pagerContext.total;\n this.skip = this.pagerContext.skip;\n this.pageSize = this.pagerContext.pageSize;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerElementComponent\n */\n get currentPage() {\n return Math.floor((this.skip || 0) / this.pageSize) + 1;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerElementComponent\n */\n get totalPages() {\n return Math.ceil((this.total || 0) / this.pageSize);\n }\n /**\n * @hidden\n *\n * @param {string} key\n * @returns {string}\n *\n * @memberOf PagerElementComponent\n */\n textFor(key) {\n return this.localization.get(key);\n }\n /**\n * @hidden\n *\n * @param {number} page\n *\n * @memberOf PagerElementComponent\n */\n changePage(page) {\n this.pagerContext.changePage(page);\n return false;\n }\n /**\n * @hidden\n *\n * @memberOf PagerElementComponent\n */\n ngOnInit() {\n this.subscriptions = this.pagerContext.changes.subscribe(this.onChanges.bind(this));\n this.subscriptions.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n}\nPagerElementComponent.ɵfac = function PagerElementComponent_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nPagerElementComponent.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PagerElementComponent });\n\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays buttons for navigating to the first and to the previous page ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerPrevButtonsComponent extends PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n super(localization, pagerContext, cd);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerPrevButtonsComponent\n */\n get disabled() {\n return this.currentPage === 1 || !this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerPrevButtonsComponent.ɵfac = function PagerPrevButtonsComponent_Factory(t) { return new (t || PagerPrevButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerPrevButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerPrevButtonsComponent, selectors: [[\"kendo-pager-prev-buttons\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 14, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 3, \"title\", \"ngClass\", \"click\"], [3, \"ngClass\"]], template: function PagerPrevButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerPrevButtonsComponent_Template_a_click_0_listener() { return ctx.currentPage !== 1 ? ctx.changePage(0) : false; });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerPrevButtonsComponent_Template_a_click_2_listener() { return ctx.currentPage !== 1 ? ctx.changePage(ctx.currentPage - 2) : false; });\n ɵngcc0.ɵɵelement(3, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerFirstPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(8, _c131, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(10, _c132));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerFirstPage\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerPreviousPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(11, _c133, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c134));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerPreviousPage\"));\n } }, directives: [ɵngcc5.NgClass], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerPrevButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerPrevButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-prev-buttons',\n template: `\n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n// tslint:disable: no-access-missing-member\n/**\n * Displays buttons for navigating to the next and to the last page ([see example]({% slug paging_grid %}#toc-pager-template)).\n */\nclass PagerNextButtonsComponent extends PagerElementComponent {\n constructor(localization, pagerContext, cd) {\n super(localization, pagerContext, cd);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerNextButtonsComponent\n */\n get disabled() {\n return this.currentPage === this.totalPages || !this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerNextButtonsComponent.ɵfac = function PagerNextButtonsComponent_Factory(t) { return new (t || PagerNextButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerNextButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerNextButtonsComponent, selectors: [[\"kendo-pager-next-buttons\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 14, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 3, \"title\", \"ngClass\", \"click\"], [3, \"ngClass\"]], template: function PagerNextButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNextButtonsComponent_Template_a_click_0_listener() { return ctx.currentPage !== ctx.totalPages ? ctx.changePage(ctx.currentPage) : false; });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function PagerNextButtonsComponent_Template_a_click_2_listener() { return ctx.currentPage !== ctx.totalPages ? ctx.changePage(ctx.totalPages - 1) : false; });\n ɵngcc0.ɵɵelement(3, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerNextPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(8, _c133, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(10, _c135));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerNextPage\"));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"title\", ctx.textFor(\"pagerLastPage\"))(\"ngClass\", ɵngcc0.ɵɵpureFunction1(11, _c136, ctx.disabled));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c137));\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerLastPage\"));\n } }, directives: [ɵngcc5.NgClass], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerNextButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerNextButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-next-buttons',\n template: `\n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\n/**\n * Displays numeric buttons to enable navigation between the pages.\n */\nclass PagerNumericButtonsComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number[]}\n * @memberOf PagerNumericButtonsComponent\n */\n get buttons() {\n let result = [];\n for (let idx = this.start; idx <= this.end; idx++) {\n result.push(idx);\n }\n return result;\n }\n /**\n * @hidden\n */\n get end() {\n return Math.min((this.start + this.buttonCount) - 1, this.totalPages);\n }\n /**\n * @hidden\n */\n get start() {\n const page = this.currentPage;\n const buttonCount = this.buttonCount;\n if (page > buttonCount) {\n const reminder = (page % buttonCount);\n return (reminder === 0) ? (page - buttonCount) + 1 : (page - reminder) + 1;\n }\n return 1;\n }\n /**\n * @hidden\n */\n pageLabel(num) {\n const pageText = this.textFor('pagerPage');\n if (pageText) {\n return pageText + ' ' + num;\n }\n return num.toString();\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerNumericButtonsComponent.ɵfac = function PagerNumericButtonsComponent_Factory(t) { return new (t || PagerNumericButtonsComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerNumericButtonsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerNumericButtonsComponent, selectors: [[\"kendo-pager-numeric-buttons\"]], inputs: { buttonCount: \"buttonCount\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 5, consts: [[3, \"ngClass\"], [4, \"ngIf\"], [4, \"ngFor\", \"ngForOf\"], [\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-link\", 3, \"click\"], [\"href\", \"#\", \"tabindex\", \"-1\", 3, \"ngClass\", \"click\"]], template: function PagerNumericButtonsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, PagerNumericButtonsComponent_li_1_Template, 3, 1, \"li\", 1);\n ɵngcc0.ɵɵtemplate(2, PagerNumericButtonsComponent_li_2_Template, 3, 5, \"li\", 2);\n ɵngcc0.ɵɵtemplate(3, PagerNumericButtonsComponent_li_3_Template, 3, 1, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(4, _c139));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.start > 1);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.buttons);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.end < ctx.totalPages);\n } }, directives: [ɵngcc5.NgClass, ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerNumericButtonsComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerNumericButtonsComponent.propDecorators = {\n buttonCount: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerNumericButtonsComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-numeric-buttons',\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { buttonCount: [{\n type: Input\n }] }); })();\n\n/**\n * Displays an input element which allows the typing and rendering of page numbers.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * \n * \n * \n * \n * \n * \n *\n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": false\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": true\n * }\n * ];\n * }\n *\n * ```\n */\nclass PagerInputComponent extends PagerElementComponent {\n constructor(localization, pagerContext, zone, cd) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n this.zone = zone;\n /**\n * @hidden\n *\n * @param {string} value\n *\n * @memberOf PagerInputComponent\n */\n this.handleKeyDown = (event) => {\n let incomingValue = this.numericInput.value || this.current;\n if (event.keyCode === Keys.Enter) {\n event.preventDefault();\n if (incomingValue !== this.current) {\n this.zone.run(() => {\n this.changePage(incomingValue - 1);\n });\n }\n }\n };\n /**\n * @hidden\n *\n * @param {string} value\n *\n * @memberOf PagerInputComponent\n */\n this.handleBlur = () => {\n const inputValue = this.numericInput.value;\n if (!inputValue) {\n this.numericInput.writeValue(this.current);\n return;\n }\n if (inputValue !== this.current) {\n this.zone.run(() => {\n this.changePage(inputValue - 1);\n });\n }\n };\n }\n /**\n * @hidden\n */\n get current() {\n return this.hasPages ? this.currentPage : 0;\n }\n get hasPages() {\n return this.totalPages !== 0;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerInputComponent.ɵfac = function PagerInputComponent_Factory(t) { return new (t || PagerInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(PagerContextService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nPagerInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerInputComponent, selectors: [[\"kendo-pager-input\"]], viewQuery: function PagerInputComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(NumericTextBoxComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.numericInput = _t.first);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 4, vars: 17, consts: [[3, \"ngClass\"], [\"format\", \"n0\", 3, \"spinners\", \"decimals\", \"disabled\", \"value\", \"min\", \"max\", \"autoCorrect\", \"title\", \"kendoEventsOutsideAngular\"]], template: function PagerInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction0(13, _c140));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"pagerPage\"), \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"spinners\", false)(\"decimals\", 0)(\"disabled\", !ctx.hasPages)(\"value\", ctx.current)(\"min\", ctx.hasPages ? 1 : 0)(\"max\", ctx.totalPages)(\"autoCorrect\", true)(\"title\", ctx.textFor(\"pagerPageNumberInputTitle\"))(\"kendoEventsOutsideAngular\", ɵngcc0.ɵɵpureFunction2(14, _c141, ctx.handleKeyDown, ctx.handleBlur));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate2(\" \", ctx.textFor(\"pagerOf\"), \" \", ctx.totalPages, \" \");\n } }, directives: [ɵngcc5.NgClass, ɵngcc6.NumericTextBoxComponent, ɵngcc2.EventsOutsideAngularDirective], encapsulation: 2 });\n/** @nocollapse */\nPagerInputComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: PagerContextService },\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\nPagerInputComponent.propDecorators = {\n numericInput: [{ type: ViewChild, args: [NumericTextBoxComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-pager-input',\n template: `\n \n {{textFor('pagerPage')}}\n \n \n {{textFor('pagerOf')}} {{totalPages}}\n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: PagerContextService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, { numericInput: [{\n type: ViewChild,\n args: [NumericTextBoxComponent]\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays information about the current page and the total number of records ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerInfoComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerInfoComponent\n */\n get maxItems() {\n return Math.min(this.currentPage * this.pageSize, this.total);\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {number}\n * @memberOf PagerInfoComponent\n */\n get currentPageText() {\n return this.total ?\n (this.currentPage - 1) * this.pageSize + 1 :\n 0;\n }\n /**\n * @hidden\n *\n * @readonly\n * @type {boolean}\n * @memberOf PagerInfoComponent\n */\n get classes() {\n return true;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = pageSize;\n this.cd.markForCheck();\n }\n}\nPagerInfoComponent.ɵfac = function PagerInfoComponent_Factory(t) { return new (t || PagerInfoComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerInfoComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerInfoComponent, selectors: [[\"kendo-pager-info\"]], hostVars: 4, hostBindings: function PagerInfoComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-info\", ctx.classes)(\"k-label\", ctx.classes);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 5, template: function PagerInfoComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n } if (rf & 2) {\n ɵngcc0.ɵɵtextInterpolate5(\"\", ctx.currentPageText, \" - \", ctx.maxItems, \" \", ctx.textFor(\"pagerOf\"), \" \", ctx.total, \" \", ctx.textFor(\"pagerItems\"), \"\");\n } }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerInfoComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerInfoComponent.propDecorators = {\n classes: [{ type: HostBinding, args: [\"class.k-pager-info\",] }, { type: HostBinding, args: [\"class.k-label\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerInfoComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-info',\n template: `{{currentPageText}} - {{maxItems}} {{textFor('pagerOf')}} {{total}} {{textFor('pagerItems')}}`\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { classes: [{\n type: HostBinding,\n args: [\"class.k-pager-info\"]\n }, {\n type: HostBinding,\n args: [\"class.k-label\"]\n }] }); })();\n\n// tslint:disable:no-access-missing-member\n/**\n * Displays a drop-down list for the page size selection ([see example]({% slug paging_grid %}#toc-pager-templates)).\n */\nclass PagerPageSizesComponent extends PagerElementComponent {\n constructor(localization, cd, pagerContext) {\n super(localization, pagerContext, cd);\n this.pagerContext = pagerContext;\n this._pageSizes = [];\n }\n get pageSizes() {\n return this._pageSizes;\n }\n /**\n * The page sizes collection. Can be an Array of numbers and/or PageSizeItem objects.\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public gridData: any[] = products;\n * public pageSize = 2;\n * public pagesizes = [{text: 'One', value: 1}, {text: 'Two', value: 2}, {text: 'All', value : 'all'}];\n * }\n *\n * const products = [{\n * 'ProductID' : 1,\n * 'ProductName' : \"Chai\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 1,\n * 'QuantityPerUnit' : \"10 boxes x 20 bags\",\n * 'UnitPrice' : 18.0000,\n * 'UnitsInStock' : 39,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 10,\n * 'Discontinued' : false\n *\n * }, {\n * 'ProductID' : 2,\n * 'ProductName' : \"Chang\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 1,\n * 'QuantityPerUnit' : \"24 - 12 oz bottles\",\n * 'UnitPrice' : 19.0000,\n * 'UnitsInStock' : 17,\n * 'UnitsOnOrder' : 40,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 3,\n * 'ProductName' : \"Aniseed Syrup\",\n * 'SupplierID' : 1,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"12 - 550 ml bottles\",\n * 'UnitPrice' : 10.0000,\n * 'UnitsInStock' : 13,\n * 'UnitsOnOrder' : 70,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 4,\n * 'ProductName' : \"Chef Anton\\'s Cajun Seasoning\",\n * 'SupplierID' : 2,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"48 - 6 oz jars\",\n * 'UnitPrice' : 22.0000,\n * 'UnitsInStock' : 53,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 0,\n * 'Discontinued' : false\n * }, {\n * 'ProductID' : 5,\n * 'ProductName' : \"Chef Anton\\'s Gumbo Mix\",\n * 'SupplierID' : 2,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"36 boxes\",\n * 'UnitPrice' : 21.3500,\n * 'UnitsInStock' : 0,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 0,\n * 'Discontinued' : true\n * }, {\n * 'ProductID' : 6,\n * 'ProductName' : \"Grandma\\'s Boysenberry Spread\",\n * 'SupplierID' : 3,\n * 'CategoryID' : 2,\n * 'QuantityPerUnit' : \"12 - 8 oz jars\",\n * 'UnitPrice' : 25.0000,\n * 'UnitsInStock' : 120,\n * 'UnitsOnOrder' : 0,\n * 'ReorderLevel' : 25,\n * 'Discontinued' : false\n * }];\n * ```\n */\n set pageSizes(pageSizes) {\n const normalizedItems = [];\n pageSizes.forEach(item => {\n if (typeof item === 'number') {\n normalizedItems.push({\n text: item.toString(),\n value: item\n });\n }\n else {\n normalizedItems.push(item);\n }\n });\n this._pageSizes = normalizedItems;\n }\n /**\n * @hidden\n *\n * @readonly\n */\n get classes() {\n return true;\n }\n /**\n * @hidden\n *\n * @readonly\n */\n get showInitialPageSize() {\n return this.pageSizes\n .filter(item => {\n if (typeof item.value === 'number') {\n return item.value === Number(this.pageSize);\n }\n return this.total === Number(this.pageSize);\n })\n .length === 0;\n }\n /**\n * @hidden\n */\n pageSizeChange(value) {\n this.pageSize = parseInt(value, 10);\n this.pagerContext.changePageSize(this.pageSize);\n }\n /**\n * @hidden\n */\n getValue(page) {\n return typeof page.value === 'number' ? page.value : this.total;\n }\n /**\n * @hidden\n */\n getSelectedState(page) {\n if (typeof page.value === 'number') {\n return page.value === this.pageSize ? true : undefined;\n }\n return this.pageSize === this.total;\n }\n onChanges({ total, skip, pageSize }) {\n this.total = total;\n this.skip = skip;\n this.pageSize = typeof pageSize === 'number' ? pageSize : this.total;\n this.cd.markForCheck();\n }\n}\nPagerPageSizesComponent.ɵfac = function PagerPageSizesComponent_Factory(t) { return new (t || PagerPageSizesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(PagerContextService)); };\nPagerPageSizesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PagerPageSizesComponent, selectors: [[\"kendo-pager-page-sizes\"]], hostVars: 4, hostBindings: function PagerPageSizesComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pager-sizes\", ctx.classes)(\"k-label\", ctx.classes);\n } }, inputs: { pageSizes: \"pageSizes\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 5, vars: 4, consts: [[3, \"change\"], [\"select\", \"\"], [3, \"value\", 4, \"ngIf\"], [3, \"value\", \"selected\", 4, \"ngFor\", \"ngForOf\"], [3, \"value\"], [3, \"value\", \"selected\"]], template: function PagerPageSizesComponent_Template(rf, ctx) { if (rf & 1) {\n const _r222 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"select\", 0, 1);\n ɵngcc0.ɵɵlistener(\"change\", function PagerPageSizesComponent_Template_select_change_0_listener() { ɵngcc0.ɵɵrestoreView(_r222); const _r218 = ɵngcc0.ɵɵreference(1); return ctx.pageSizeChange(_r218.value); });\n ɵngcc0.ɵɵtemplate(2, PagerPageSizesComponent_option_2_Template, 2, 2, \"option\", 2);\n ɵngcc0.ɵɵtemplate(3, PagerPageSizesComponent_option_3_Template, 2, 3, \"option\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtext(4);\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-label\", ctx.textFor(\"pagerItemsPerPage\"));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showInitialPageSize);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.pageSizes);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.textFor(\"pagerItemsPerPage\"), \" \");\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf], encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nPagerPageSizesComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ChangeDetectorRef },\n { type: PagerContextService }\n];\nPagerPageSizesComponent.propDecorators = {\n pageSizes: [{ type: Input }],\n classes: [{ type: HostBinding, args: ['class.k-pager-sizes',] }, { type: HostBinding, args: ['class.k-label',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerPageSizesComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-pager-page-sizes',\n template: `\n \n {{ textFor('pagerItemsPerPage') }}\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }, { type: PagerContextService }]; }, { pageSizes: [{\n type: Input\n }], classes: [{\n type: HostBinding,\n args: ['class.k-pager-sizes']\n }, {\n type: HostBinding,\n args: ['class.k-label']\n }] }); })();\n\nconst importedModules$1 = [\n CommonModule,\n InputsModule,\n SharedModule\n];\nconst INTERNAL_COMPONENTS$1 = [\n PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective\n];\n/**\n * @hidden\n */\nclass PagerModule {\n static exports() {\n return [\n PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective\n ];\n }\n}\nPagerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PagerModule });\nPagerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PagerModule_Factory(t) { return new (t || PagerModule)(); }, imports: [[...importedModules$1]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PagerModule, { declarations: [PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective], imports: [CommonModule,\n InputsModule,\n SharedModule], exports: [PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PagerModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS$1],\n exports: [INTERNAL_COMPONENTS$1],\n imports: [...importedModules$1]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass GroupHeaderComponent {\n constructor(groupsService, groupInfoService) {\n this.groupsService = groupsService;\n this.groupInfoService = groupInfoService;\n this.skipGroupDecoration = false;\n this.hasDetails = false;\n this.totalColumnsCount = 0;\n this.groups = [];\n this.isExpanded = false;\n }\n get groupItemClass() {\n return true;\n }\n ngDoCheck() {\n this.isExpanded = this.groupsService.isExpanded(this.item.index);\n }\n prefixGroupCell(item) {\n return new Array(item.level);\n }\n toggleGroup(item) {\n this.groupsService.toggleRow(item.index, item.data);\n return false;\n }\n groupSpan(item) {\n const groupCount = (this.groups || []).length;\n const detailOffset = this.hasDetails ? 1 : 0;\n if (this.hasGroupHeaderColumn) {\n return groupCount + 1 + detailOffset - item.level;\n }\n let columnCount = columnsSpan(this.columns);\n if (this.skipGroupDecoration) {\n return columnCount;\n }\n return groupCount + columnCount + detailOffset - item.level;\n }\n logicalColSpan() {\n return this.skipGroupDecoration ? 1 : this.totalColumnsCount;\n }\n ariaRole() {\n if (this.skipGroupDecoration) {\n return 'presentation';\n }\n return 'gridcell';\n }\n formatForGroup(item) {\n return this.groupInfoService.formatForGroup(item);\n }\n groupTitle(item) {\n return this.groupInfoService.groupTitle(item);\n }\n groupHeaderTemplate(item) {\n return this.groupInfoService.groupHeaderTemplate(item);\n }\n}\nGroupHeaderComponent.ɵfac = function GroupHeaderComponent_Factory(t) { return new (t || GroupHeaderComponent)(ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(GroupInfoService)); };\nGroupHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupHeaderComponent, selectors: [[\"\", \"kendoGridGroupHeader\", \"\"]], hostVars: 2, hostBindings: function GroupHeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grouping-row\", ctx.groupItemClass);\n } }, inputs: { skipGroupDecoration: \"skipGroupDecoration\", hasDetails: \"hasDetails\", totalColumnsCount: \"totalColumnsCount\", groups: \"groups\", rowIndex: \"rowIndex\", logicalRowIndex: \"logicalRowIndex\", item: \"item\", hasGroupHeaderColumn: \"hasGroupHeaderColumn\", groupHeaderColumns: \"groupHeaderColumns\", columns: \"columns\" }, attrs: _c142, decls: 3, vars: 3, consts: [[3, \"ngIf\"], [\"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\", 4, \"ngIf\"], [4, \"ngIf\"], [\"class\", \"k-group-cell\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 1, \"k-group-cell\"], [\"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\"], [1, \"k-reset\"], [\"href\", \"#\", \"tabindex\", \"-1\", \"role\", \"presentation\", 1, \"k-icon\", 3, \"ngClass\", \"click\"], [3, \"templateContext\"], [\"role\", \"gridcell\", \"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"gridcell\", \"aria-selected\", \"false\", \"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"logicalSlaveCell\", \"groupItem\", \"colSpan\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function GroupHeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupHeaderComponent_ng_template_0_Template, 1, 1, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, GroupHeaderComponent_td_1_Template, 3, 9, \"td\", 1);\n ɵngcc0.ɵɵtemplate(2, GroupHeaderComponent_ng_container_2_Template, 2, 1, \"ng-container\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.skipGroupDecoration);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !(ctx.skipGroupDecoration && ctx.hasGroupHeaderColumn));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasGroupHeaderColumn);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalCellDirective, ɵngcc5.NgClass, TemplateContextDirective, ɵngcc5.NgTemplateOutlet], pipes: [FieldAccessorPipe], encapsulation: 2 });\n/** @nocollapse */\nGroupHeaderComponent.ctorParameters = () => [\n { type: GroupsService },\n { type: GroupInfoService }\n];\nGroupHeaderComponent.propDecorators = {\n rowIndex: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n item: [{ type: Input }],\n skipGroupDecoration: [{ type: Input }],\n hasDetails: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n hasGroupHeaderColumn: [{ type: Input }],\n groupHeaderColumns: [{ type: Input }],\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n groupItemClass: [{ type: HostBinding, args: ['class.k-grouping-row',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupHeaderComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridGroupHeader]',\n template: `\n \n \n \n \n

\n \n \n \n \n {{groupTitle(item)}}: {{item.data | valueOf:\"value\": formatForGroup(item)}}\n \n \n \n \n

\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: GroupsService }, { type: GroupInfoService }]; }, { skipGroupDecoration: [{\n type: Input\n }], hasDetails: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], groups: [{\n type: Input\n }], groupItemClass: [{\n type: HostBinding,\n args: ['class.k-grouping-row']\n }], rowIndex: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], item: [{\n type: Input\n }], hasGroupHeaderColumn: [{\n type: Input\n }], groupHeaderColumns: [{\n type: Input\n }], columns: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass DropTargetDirective {\n constructor(element, service) {\n this.element = element;\n this.service = service;\n this.context = {};\n this.enter = new EventEmitter();\n this.leave = new EventEmitter();\n this.drop = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n ngOnInit() {\n this.service.add(this);\n const changes = this.service.changes.pipe(filter(({ target }) => target === this));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'leave'))\n .subscribe(e => {\n this.leave.next(this.eventArgs(e));\n }));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'enter'))\n .subscribe(e => {\n this.enter.next(this.eventArgs(e));\n }));\n this.subscriptions.add(changes.pipe(filter(({ type }) => type === 'drop'))\n .subscribe(e => {\n this.drop.next(this.eventArgs(e));\n }));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n eventArgs(e) {\n return {\n target: this,\n mouseEvent: e.mouseEvent,\n draggable: e.draggable\n };\n }\n}\nDropTargetDirective.ɵfac = function DropTargetDirective_Factory(t) { return new (t || DropTargetDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DragAndDropService)); };\nDropTargetDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DropTargetDirective, selectors: [[\"\", \"kendoDropTarget\", \"\"]], inputs: { context: \"context\" }, outputs: { enter: \"enter\", leave: \"leave\", drop: \"drop\" } });\n/** @nocollapse */\nDropTargetDirective.ctorParameters = () => [\n { type: ElementRef },\n { type: DragAndDropService }\n];\nDropTargetDirective.propDecorators = {\n context: [{ type: Input }],\n enter: [{ type: Output }],\n leave: [{ type: Output }],\n drop: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DropTargetDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDropTarget]'\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: DragAndDropService }]; }, { context: [{\n type: Input\n }], enter: [{\n type: Output\n }], leave: [{\n type: Output\n }], drop: [{\n type: Output\n }] }); })();\n\nconst withoutField = ({ field }) => isNullOrEmptyString(field);\nconst alreadyGrouped = ({ groups, field }) => groups.some(group => group.field === field);\nconst overSameTarget = ({ target, field }) => target.field === field;\nconst overLastTarget = ({ target }) => target.lastTarget;\nconst isLastGroup = ({ groups, field }) => groups.map(group => group.field).indexOf(field) === groups.length - 1;\nconst isNotGroupable = (groupsService) => ({ field }) => !groupsService.isGroupable(field);\nconst columnRules = (groupService) => or(withoutField, alreadyGrouped, isNotGroupable(groupService));\nconst indicatorRules = or(overSameTarget, and(overLastTarget, isLastGroup));\n/**\n * @hidden\n */\nclass GroupPanelComponent {\n constructor(hint, cue, groupInfoService, localization, cd) {\n this.hint = hint;\n this.cue = cue;\n this.groupInfoService = groupInfoService;\n this.localization = localization;\n this.cd = cd;\n this.change = new EventEmitter();\n this.groups = [];\n this.dropTargets = new QueryList();\n this.groupTitles = [];\n this.subscription = new Subscription();\n }\n get groupHeaderClass() {\n return true;\n }\n set text(value) {\n this.emptyText = value;\n }\n get text() {\n return this.emptyText ? this.emptyText : this.localization.get('groupPanelEmpty');\n }\n ngAfterViewInit() {\n this.subscription.add(observe(this.dropTargets)\n .subscribe(this.attachTargets.bind(this)));\n }\n ngOnInit() {\n this.subscription.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngDoCheck() {\n const currentTitles = this.groups.map(group => this.groupInfoService.groupTitle(group));\n if (currentTitles.length !== this.groupTitles.length || currentTitles.some((current, idx) => current !== this.groupTitles[idx])) {\n this.groupTitles = currentTitles;\n this.cd.markForCheck();\n }\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n }\n directionChange(group) {\n const index = this.groups.findIndex(x => x.field === group.field);\n const groups = [...this.groups.slice(0, index), group, ...this.groups.slice(index + 1)];\n this.change.emit(groups);\n }\n insert(field, index) {\n const groups = this.groups.filter(x => x.field !== field);\n if (groups.length || this.groups.length === 0) {\n this.change.emit([...groups.slice(0, index), { field: field }, ...groups.slice(index)]);\n }\n }\n remove(group) {\n this.change.emit(this.groups.filter(x => x.field !== group.field));\n }\n canDrop(draggable, target) {\n const isIndicator = draggable.type === 'groupIndicator';\n const rules = isIndicator\n ? indicatorRules\n : columnRules(this.groupInfoService);\n return !rules({\n field: draggable.field,\n groups: this.groups,\n target\n });\n }\n attachTargets() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n this.targetSubscription = new Subscription();\n const enterStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.enter), from([]));\n const leaveStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.leave), from([]));\n const dropStream = this.dropTargets\n .reduce((acc, target) => merge(acc, target.drop), from([]));\n this.targetSubscription.add(enterStream.pipe(tap(_ => this.hint.removeLock()), filter(({ draggable, target }) => this.canDrop(draggable.context, target.context)), tap(this.enter.bind(this)), switchMapTo(dropStream.pipe(takeUntil(leaveStream.pipe(tap(this.leave.bind(this))))))).subscribe(this.drop.bind(this)));\n }\n enter({ draggable, target }) {\n this.hint.enable();\n let before = target.context.lastTarget || isTargetBefore(draggable.element.nativeElement, target.element.nativeElement);\n if (this.localization.rtl) {\n before = !before;\n }\n this.cue.position(position(target.element.nativeElement, before));\n }\n leave() {\n this.hint.disable();\n this.cue.hide();\n }\n drop({ target, draggable }) {\n const field = draggable.context.field;\n const index = this.dropTargets.toArray().indexOf(target);\n this.insert(field, index);\n }\n}\nGroupPanelComponent.ɵfac = function GroupPanelComponent_Factory(t) { return new (t || GroupPanelComponent)(ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(GroupInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nGroupPanelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupPanelComponent, selectors: [[\"kendo-grid-group-panel\"]], viewQuery: function GroupPanelComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DropTargetDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropTargets = _t);\n } }, hostVars: 4, hostBindings: function GroupPanelComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grouping-header\", ctx.groupHeaderClass)(\"k-grouping-header-flex\", ctx.groupHeaderClass);\n } }, inputs: { groups: \"groups\", text: \"text\" }, outputs: { change: \"change\" }, decls: 3, vars: 3, consts: [[3, \"ngIf\"], [\"class\", \"k-indicator-container\", \"kendoDropTarget\", \"\", 3, \"context\", 4, \"ngFor\", \"ngForOf\"], [\"class\", \"k-indicator-container\", \"kendoDropTarget\", \"\", 3, \"context\", 4, \"ngIf\"], [\"kendoDropTarget\", \"\", 1, \"k-indicator-container\", 3, \"context\"], [\"kendoDraggableColumn\", \"\", \"kendoGroupIndicator\", \"\", \"kendoDraggable\", \"\", 3, \"enableDrag\", \"context\", \"group\", \"groupTitle\", \"directionChange\", \"remove\"]], template: function GroupPanelComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, GroupPanelComponent_ng_template_0_Template, 2, 3, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, GroupPanelComponent_div_1_Template, 2, 10, \"div\", 1);\n ɵngcc0.ɵɵtemplate(2, GroupPanelComponent_div_2_Template, 2, 2, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.groups.length === 0);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.groups);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.groups.length !== 0);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, DropTargetDirective,\n DraggableColumnDirective,\n GroupIndicatorComponent, ɵngcc2.DraggableDirective]; }, encapsulation: 2, changeDetection: 0 });\n/** @nocollapse */\nGroupPanelComponent.ctorParameters = () => [\n { type: DragHintService },\n { type: DropCueService },\n { type: GroupInfoService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nGroupPanelComponent.propDecorators = {\n change: [{ type: Output }],\n groupHeaderClass: [{ type: HostBinding, args: [\"class.k-grouping-header\",] }, { type: HostBinding, args: [\"class.k-grouping-header-flex\",] }],\n text: [{ type: Input }],\n groups: [{ type: Input }],\n dropTargets: [{ type: ViewChildren, args: [DropTargetDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupPanelComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'kendo-grid-group-panel',\n template: `\n \n \n {{ text }}\n \n \n
\n \n
\n \n
 
\n `\n }]\n }], function () { return [{ type: DragHintService }, { type: DropCueService }, { type: GroupInfoService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { change: [{\n type: Output\n }], groups: [{\n type: Input\n }], dropTargets: [{\n type: ViewChildren,\n args: [DropTargetDirective]\n }], groupHeaderClass: [{\n type: HostBinding,\n args: [\"class.k-grouping-header\"]\n }, {\n type: HostBinding,\n args: [\"class.k-grouping-header-flex\"]\n }], text: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass GroupIndicatorComponent {\n constructor() {\n this.directionChange = new EventEmitter();\n this.remove = new EventEmitter();\n }\n get groupIndicatorClass() {\n return true;\n }\n get dir() {\n return this.group.dir ? this.group.dir : \"asc\";\n }\n toggleDirection() {\n this.directionChange.emit({\n dir: this.dir === \"asc\" ? \"desc\" : \"asc\",\n field: this.group.field\n });\n return false;\n }\n removeDescriptor() {\n this.remove.emit({\n dir: this.group.dir,\n field: this.group.field\n });\n return false;\n }\n}\nGroupIndicatorComponent.ɵfac = function GroupIndicatorComponent_Factory(t) { return new (t || GroupIndicatorComponent)(); };\nGroupIndicatorComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: GroupIndicatorComponent, selectors: [[\"\", \"kendoGroupIndicator\", \"\"]], hostVars: 2, hostBindings: function GroupIndicatorComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-group-indicator\", ctx.groupIndicatorClass);\n } }, inputs: { group: \"group\", groupTitle: \"groupTitle\" }, outputs: { directionChange: \"directionChange\", remove: \"remove\" }, attrs: _c149, decls: 5, vars: 5, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-link\", 3, \"click\"], [1, \"k-icon\"], [\"tabindex\", \"-1\", 1, \"k-button\", \"k-button-icon\", \"k-bare\", 3, \"click\"], [1, \"k-icon\", \"k-i-group-delete\"]], template: function GroupIndicatorComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function GroupIndicatorComponent_Template_a_click_0_listener() { return ctx.toggleDirection(); });\n ɵngcc0.ɵɵelement(1, \"span\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(3, \"a\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function GroupIndicatorComponent_Template_a_click_3_listener() { return ctx.removeDescriptor(); });\n ɵngcc0.ɵɵelement(4, \"span\", 3);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵclassProp(\"k-i-sort-asc-sm\", ctx.dir === \"asc\")(\"k-i-sort-desc-sm\", ctx.dir === \"desc\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.groupTitle, \"\");\n } }, encapsulation: 2, changeDetection: 0 });\nGroupIndicatorComponent.propDecorators = {\n directionChange: [{ type: Output }],\n remove: [{ type: Output }],\n group: [{ type: Input }],\n groupTitle: [{ type: Input }],\n groupIndicatorClass: [{ type: HostBinding, args: [\"class.k-group-indicator\",] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupIndicatorComponent, [{\n type: Component,\n args: [{\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: '[kendoGroupIndicator]',\n template: `\n \n \n {{groupTitle}}\n \n \n \n `\n }]\n }], function () { return []; }, { directionChange: [{\n type: Output\n }], remove: [{\n type: Output\n }], groupIndicatorClass: [{\n type: HostBinding,\n args: [\"class.k-group-indicator\"]\n }], group: [{\n type: Input\n }], groupTitle: [{\n type: Input\n }] }); })();\n\n// TODO\n// tslint:disable:rxjs-no-unsafe-takeuntil\n/**\n * @hidden\n */\nconst preventOnDblClick = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\nconst hasClass = className => el => new RegExp(`(^| )${className}( |$)`).test(el.className);\nconst isDeleteButton = or(hasClass(\"k-i-group-delete\"), hasClass(\"k-button-icon\"));\nconst isSortIcon = or(hasClass(\"k-i-sort-asc-sm\"), hasClass(\"k-i-sort-desc-sm\"));\nconst skipButtons = and(not(isDeleteButton), not(isSortIcon), not(isFocusableWithTabKey), not(matchesNodeName(\"label\")));\nconst elementUnderCursor = ({ clientX, clientY }) => document.elementFromPoint(clientX, clientY);\nconst hideThenShow = (element, cont) => {\n element.style.display = 'none';\n const result = cont();\n element.style.display = 'block';\n return result;\n};\n/**\n * @hidden\n */\nclass DraggableColumnDirective {\n constructor(draggable, element, zone, service, hint, cue, nav, renderer) {\n this.draggable = draggable;\n this.element = element;\n this.zone = zone;\n this.service = service;\n this.hint = hint;\n this.cue = cue;\n this.nav = nav;\n this.renderer = renderer;\n this.context = {};\n this.drag = new EventEmitter();\n this.subscriptions = new Subscription();\n }\n set enableDrag(enabled) {\n this.enabled = enabled;\n this.updateTouchAction();\n }\n get hostClass() {\n return this.enabled;\n }\n ngOnInit() {\n this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(filter(_ => this.enabled), filter(({ originalEvent: { target } }) => target === this.element.nativeElement || skipButtons(target)), tap((e) => {\n const originalEvent = e.originalEvent;\n if (!e.isTouch) {\n originalEvent.preventDefault();\n }\n this.nav.navigateTo(originalEvent.target);\n }), switchMap(preventOnDblClick(this.draggable.kendoRelease)), tap(down => {\n this.hint.create(down, this.element.nativeElement, this.context.hint);\n this.cue.create();\n }), switchMap(down => this.draggable.kendoDrag.pipe(tap((e) => {\n if (e.isTouch) {\n e.originalEvent.preventDefault();\n }\n }), tap(this.hint.attach()), tap(this.cue.attach()), takeUntil(this.draggable.kendoRelease), map(move => ({ move, down })))), tap(this.performDrag.bind(this)), switchMapTo(this.draggable.kendoRelease)).subscribe(this.drop.bind(this))));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n drop(upEvent) {\n this.hint.remove();\n this.cue.remove();\n this.service.notifyDrop(this, upEvent);\n }\n performDrag({ move }) {\n this.hint.move(move);\n const cursorElement = this.elementUnderCursor(move);\n if (cursorElement) {\n this.service.notifyDrag(this, cursorElement, move);\n }\n this.drag.emit({\n draggable: this,\n mouseEvent: move\n });\n }\n elementUnderCursor(mouseEvent) {\n this.hint.hide();\n let target = elementUnderCursor(mouseEvent);\n if (target && /k-grouping-dropclue/.test(target.className)) {\n target = hideThenShow(target, elementUnderCursor.bind(this, mouseEvent));\n }\n this.hint.show();\n return target;\n }\n updateTouchAction() {\n if (!this.element) {\n return;\n }\n this.renderer.setStyle(this.element.nativeElement, 'touch-action', this.enabled ? 'none' : '');\n }\n}\nDraggableColumnDirective.ɵfac = function DraggableColumnDirective_Factory(t) { return new (t || DraggableColumnDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(DragAndDropService), ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(NavigationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nDraggableColumnDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DraggableColumnDirective, selectors: [[\"\", \"kendoDraggableColumn\", \"\"]], hostVars: 2, hostBindings: function DraggableColumnDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-draggable-header\", ctx.hostClass);\n } }, inputs: { context: \"context\", enableDrag: \"enableDrag\" }, outputs: { drag: \"drag\" } });\n/** @nocollapse */\nDraggableColumnDirective.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: NgZone },\n { type: DragAndDropService },\n { type: DragHintService },\n { type: DropCueService },\n { type: NavigationService },\n { type: Renderer2 }\n];\nDraggableColumnDirective.propDecorators = {\n context: [{ type: Input }],\n enableDrag: [{ type: Input }],\n drag: [{ type: Output }],\n hostClass: [{ type: HostBinding, args: ['class.k-grid-draggable-header',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DraggableColumnDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDraggableColumn]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: DragAndDropService }, { type: DragHintService }, { type: DropCueService }, { type: NavigationService }, { type: ɵngcc0.Renderer2 }]; }, { context: [{\n type: Input\n }], drag: [{\n type: Output\n }], enableDrag: [{\n type: Input\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-grid-draggable-header']\n }] }); })();\n\nconst exported = [\n DraggableColumnDirective,\n DropTargetDirective\n];\n/**\n * @hidden\n */\nclass DragAndDropModule {\n}\nDragAndDropModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DragAndDropModule });\nDragAndDropModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DragAndDropModule_Factory(t) { return new (t || DragAndDropModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DragAndDropModule, { declarations: [DraggableColumnDirective,\n DropTargetDirective], exports: [DraggableColumnDirective,\n DropTargetDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DragAndDropModule, [{\n type: NgModule,\n args: [{\n declarations: [exported],\n exports: [exported]\n }]\n }], null, null); })();\n\nconst exportedModules$1 = [\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderComponent,\n GroupPanelComponent,\n GroupIndicatorComponent\n];\n/**\n * @hidden\n */\nclass GroupModule {\n static exports() {\n return [\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective\n ];\n }\n}\nGroupModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: GroupModule });\nGroupModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function GroupModule_Factory(t) { return new (t || GroupModule)(); }, imports: [[CommonModule, SharedModule, DragAndDropModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(GroupModule, { declarations: function () { return [GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderComponent,\n GroupPanelComponent,\n GroupIndicatorComponent]; }, imports: function () { return [CommonModule,\n SharedModule,\n DragAndDropModule]; }, exports: function () { return [GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective,\n GroupHeaderComponent,\n GroupPanelComponent,\n GroupIndicatorComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$1],\n exports: [exportedModules$1],\n imports: [CommonModule, SharedModule, DragAndDropModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst DEFAULTS = {\n allowUnsort: true,\n mode: 'single',\n showIndexes: true,\n initialDirection: 'asc'\n};\n/**\n * @hidden\n */\nconst normalize$1 = (...settings) => Object.assign({}, DEFAULTS, ...settings);\n\n/**\n * @hidden\n */\nconst hasFilter = (settings, column) => settings.filter !== false && column.field && column.filterable;\n/**\n * @hidden\n */\nconst hasSort = (settings, column) => settings.sort !== false && column.field && column.sortable;\n/**\n * @hidden\n */\nconst hasLock = (settings, column) => settings.lock && column.lockable && !(column.parent && !column.parent.isSpanColumn);\n/**\n * @hidden\n */\nconst hasColumnChooser = (settings) => settings.columnChooser !== false;\n/**\n * @hidden\n */\nconst hasItems = (settings, column) => hasColumnChooser(settings) || hasLock(settings, column) || hasSort(settings, column) || hasFilter(settings, column);\n\nconst mergeObjects = (...args) => Object.assign.apply(null, [{}].concat(args));\nconst directions = initialDirection => initialDirection === \"asc\" ? [\"asc\", \"desc\"] : [\"desc\", \"asc\"];\n/**\n * @hidden\n */\nconst isRootLevel = ({ parent }) => !isTruthy(parent);\nconst ofColumnType = ({ draggable }) => ['column', 'columnGroup']\n .indexOf(draggable.context.type) >= 0;\nconst notSameElement = ({ draggable, target }) => draggable.element.nativeElement !== target.element.nativeElement;\nconst inSameParent = (x, y) => x.parent === y.parent ||\n (isInSpanColumn(y) && inSameParent(x, y.parent));\nconst sameParent = ({ draggable, target }) => inSameParent(draggable.context.column, target.context.column);\nconst lastNonLocked = ({ draggable }) => !isTruthy(draggable.context.column.locked) &&\n isRootLevel(draggable.context.column) &&\n draggable.context.lastColumn;\nconst notInSpanColumn = ({ draggable }) => !isInSpanColumn(draggable.context.column);\nconst reorderable = ({ draggable }) => draggable.context.column.reorderable;\nconst lockable = ({ draggable, target }) => draggable.context.column.lockable !== false ||\n draggable.context.column.isLocked === target.context.column.isLocked;\nconst rules = and(ofColumnType, reorderable, notInSpanColumn, notSameElement, sameParent, not(lastNonLocked), lockable);\n/**\n * @hidden\n */\nclass HeaderComponent {\n constructor(popupService, hint, cue, reorderService, idService, sortService, localization, cd) {\n this.popupService = popupService;\n this.hint = hint;\n this.cue = cue;\n this.reorderService = reorderService;\n this.idService = idService;\n this.sortService = sortService;\n this.localization = localization;\n this.cd = cd;\n this.columns = [];\n this.groups = [];\n this.sort = new Array();\n this.sortable = false;\n this.groupable = false;\n this.lockedColumnsCount = 0;\n this.resizable = false;\n this.reorderable = false;\n this.columnMenu = false;\n this.totalColumnsCount = 0;\n this.sortedFields = {};\n this.dropTargets = new QueryList();\n this.subscription = new Subscription();\n }\n get headerClass() {\n return !this.scrollable;\n }\n get sortableLabel() {\n return this.localization.get('sortable');\n }\n // Number of unlocked columns in the next table, if any\n get unlockedColumnsCount() {\n return this.totalColumnsCount - this.lockedColumnsCount - this.columns.length;\n }\n sortColumn(column) {\n this.sortService.sort(this.toggleSort(column));\n }\n onSortClick(column, event, link) {\n const target = event.target;\n if (column.headerTemplateRef && target !== link) {\n const hasFocusableParent = Boolean(closestInScope(target, isFocusable, link));\n if (hasFocusableParent) {\n // Do not sort when clicking focusable template elements.\n return;\n }\n }\n this.sortColumn(column);\n }\n onHeaderKeydown(column, args) {\n if (!this.sortable || args.defaultPrevented || column.sortable === false) {\n return;\n }\n if (args.keyCode === Keys.Enter && isPresent(column.field)) {\n this.sortService.sort(this.toggleSort(column));\n }\n }\n showSortNumbering(column) {\n const { showIndexes } = normalize$1(this.sortable);\n return showIndexes\n && this.sort\n && this.sort.filter(({ dir }) => isPresent(dir)).length > 1\n && this.sortOrder(column.field) > 0;\n }\n sortOrder(field) {\n return this.sort\n .filter(({ dir }) => isPresent(dir))\n .findIndex(x => x.field === field)\n + 1;\n }\n sortIcon(field) {\n const state$$1 = this.sortDescriptor(field);\n return {\n 'k-icon': isPresent(state$$1.dir),\n 'k-i-sort-desc-sm': state$$1.dir === \"desc\",\n 'k-i-sort-asc-sm': state$$1.dir === \"asc\"\n };\n }\n sortState(column) {\n if (!this.isSortable(column)) {\n return;\n }\n const state$$1 = this.sortDescriptor(column.field);\n if (state$$1.dir === 'asc') {\n return 'ascending';\n }\n if (state$$1.dir === 'desc') {\n return 'descending';\n }\n }\n sortStatus(column) {\n if (!this.sortedFields[column.field] || !this.isSortable(column)) {\n return;\n }\n let msg = 'sortedDefault';\n const state$$1 = this.sortDescriptor(column.field);\n if (state$$1.dir === 'asc') {\n msg = 'sortedAscending';\n }\n else if (state$$1.dir === 'desc') {\n msg = 'sortedDescending';\n }\n return this.localization.get(msg);\n }\n toggleSort(column) {\n const { allowUnsort, mode, initialDirection } = normalize$1(this.sortable, column.sortable);\n const descriptor = this.toggleDirection(column.field, allowUnsort, initialDirection);\n if (mode === 'single') {\n return [descriptor];\n }\n return [...this.sort.filter(desc => desc.field !== column.field), descriptor];\n }\n ngAfterViewInit() {\n this.subscription.add(observe(this.dropTargets)\n .subscribe(this.attachTargets.bind(this)));\n }\n ngDoCheck() {\n this._leafColumns = columnsToRender(this.columns || []).filter(x => !isColumnGroupComponent(x));\n }\n ngOnChanges(changes) {\n const sortChange = changes.sort;\n if (sortChange && !sortChange.isFirstChange()) {\n sortChange.currentValue.forEach(change => {\n this.sortedFields[change.field] = true;\n });\n }\n }\n ngOnInit() {\n this.subscription.add(this.localization.changes\n .subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n if (this.popupService) {\n this.popupService.destroy();\n }\n this.subscription.unsubscribe();\n }\n selectAllCheckboxId() {\n return this.idService.selectAllCheckboxId();\n }\n isFirstOnRow(column, index) {\n const isTailing = (c) => c &&\n (this.columnsForLevel(c.level).indexOf(c) > 0 || isTailing(c.parent));\n return index === 0 && !this.groups.length && !this.detailTemplate && isTailing(column.parent);\n }\n logicalColumnIndex(column) {\n const index = column.leafIndex;\n if (isPresent(index)) {\n return index + (isPresent(this.detailTemplate) ? 1 : 0);\n }\n return -1;\n }\n get showFilterMenu() {\n return !this.columnMenu && hasFilterMenu(this.filterable);\n }\n get showFilterRow() {\n return hasFilterRow(this.filterable);\n }\n showColumnMenu(column) {\n return this.columnMenu && column.columnMenu &&\n (this.columnMenuTemplate || column.columnMenuTemplates.length || hasItems(this.columnMenu, column));\n }\n isFilterable(column) {\n return !isNullOrEmptyString(column.field) && column.filterable === true;\n }\n canDrop(draggable, target) {\n return this.reorderable && rules({ draggable, target });\n }\n shouldActivate(column) {\n const canReorder = this.reorderable && column.reorderable;\n if (!canReorder && !isColumnComponent(column)) {\n return false;\n }\n const groupable = this.groupable && isColumnComponent(column) && column.groupable !== false;\n return groupable || canReorder;\n }\n isSortable(column) {\n return !isNullOrEmptyString(column.field)\n && isTruthy(this.sortable) && isTruthy(column.sortable);\n }\n isCheckboxColumn(column) {\n return isCheckboxColumn(column) && !column.templateRef;\n }\n trackByIndex(index, _item) {\n return index;\n }\n toggleDirection(field, allowUnsort, initialDirection) {\n const descriptor = this.sortDescriptor(field);\n const [first, second] = directions(initialDirection);\n let dir = first;\n if (descriptor.dir === first) {\n dir = second;\n }\n else if (descriptor.dir === second && allowUnsort) {\n dir = undefined;\n }\n return { dir, field };\n }\n columnsForLevel(level) {\n const columns = this.columns ? this.columns.filter(column => column.level === level) : [];\n return sortColumns(columnsToRender(columns));\n }\n isColumnGroupComponent(column) {\n return isColumnGroupComponent(column);\n }\n get columnLevels() {\n return new Array((this.totalColumnLevels || 0) + 1);\n }\n sortDescriptor(field) {\n return this.sort.find(item => item.field === field) || { field };\n }\n get leafColumns() {\n return this._leafColumns;\n }\n attachTargets() {\n if (this.targetSubscription) {\n this.targetSubscription.unsubscribe();\n }\n this.targetSubscription = new Subscription();\n const enterStream = merge(...this.dropTargets.map(target => target.enter));\n const leaveStream = merge(...this.dropTargets.map(target => target.leave));\n const dropStream = merge(...this.dropTargets.map(target => target.drop));\n this.targetSubscription.add(enterStream.pipe(tap(({ target, draggable }) => {\n if (draggable.context.type === 'groupIndicator') {\n return;\n }\n const targetLocked = isTruthy(target.context.column.isLocked);\n const draggableLocked = isTruthy(draggable.context.column.isLocked);\n if (this.lockedColumnsCount > 0 || targetLocked || draggableLocked) {\n this.hint.toggleLock(targetLocked);\n }\n }), filter(({ draggable, target }) => this.canDrop(draggable, target)), switchMap(this.trackMove.bind(this, leaveStream, dropStream)), map((e) => mergeObjects(e, { before: this.calculateBefore(e), changeContainer: e.changeContainer })), map(this.normalizeTarget.bind(this)), tap(this.enter.bind(this)), switchMap((args) => dropStream.pipe(map(() => args), takeUntil(leaveStream.pipe(tap(this.leave.bind(this)))))))\n .subscribe(this.drop.bind(this)));\n }\n normalizeTarget(e) {\n let target = e.target;\n const parent = target.context.column.parent;\n if (parent && parent.isSpanColumn) {\n const arr = this.dropTargets.toArray();\n const firstSpan = arr.find(t => t.context.column.parent === parent);\n const index = arr.indexOf(firstSpan);\n const adjust = e.before ? 0 : parent.childColumns.length - 1;\n target = arr[index + adjust];\n }\n return mergeObjects(e, { target });\n }\n trackMove(leaveStream, dropStream, e) {\n const column = e.target.context.column;\n const levelColumns = this.columnsForLevel(column.level);\n const index = levelColumns.indexOf(column);\n const isFirst = (column.locked ? index === levelColumns.length - 1 : index === 0);\n const changed = e.draggable.context.column.isLocked !== column.isLocked;\n if (changed && isFirst) {\n return e.draggable.drag\n .pipe(takeUntil(leaveStream), takeUntil(dropStream), map(({ mouseEvent }) => mergeObjects({ changeContainer: true }, e, { mouseEvent })));\n }\n return of(mergeObjects({ changeContainer: changed }, e));\n }\n calculateBefore({ draggable, target, mouseEvent, changeContainer = false }) {\n const targetElement = target.element.nativeElement;\n let before = false;\n if (changeContainer) {\n const { left } = offset(targetElement);\n const halfWidth = targetElement.offsetWidth / 2;\n const middle = left + halfWidth;\n before = middle > mouseEvent.pageX;\n if (this.localization.rtl) {\n before = !before;\n }\n }\n else {\n before = isTargetBefore(draggable.element.nativeElement, targetElement);\n }\n return before;\n }\n enter({ target, before }) {\n this.hint.enable();\n if (this.localization.rtl) {\n before = !before;\n }\n this.cue.position(position(target.element.nativeElement, before));\n }\n leave() {\n this.hint.disable();\n this.cue.hide();\n }\n drop({ draggable, target, before, changeContainer }) {\n this.reorderService.reorder({\n before,\n changeContainer,\n source: draggable.context.column,\n target: target.context.column\n });\n }\n}\nHeaderComponent.ɵfac = function HeaderComponent_Factory(t) { return new (t || HeaderComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(DragHintService), ɵngcc0.ɵɵdirectiveInject(DropCueService), ɵngcc0.ɵɵdirectiveInject(ColumnReorderService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(SortService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: HeaderComponent, selectors: [[\"\", \"kendoGridHeader\", \"\"]], viewQuery: function HeaderComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(DropTargetDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.dropTargets = _t);\n } }, hostVars: 2, hostBindings: function HeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-header\", ctx.headerClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", sort: \"sort\", sortable: \"sortable\", groupable: \"groupable\", lockedColumnsCount: \"lockedColumnsCount\", resizable: \"resizable\", reorderable: \"reorderable\", columnMenu: \"columnMenu\", totalColumnsCount: \"totalColumnsCount\", totalColumnLevels: \"totalColumnLevels\", detailTemplate: \"detailTemplate\", scrollable: \"scrollable\", filterable: \"filterable\", filter: \"filter\", columnMenuTemplate: \"columnMenuTemplate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c150, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngFor\", \"ngForOf\"], [\"kendoGridFilterRow\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"filter\", \"groups\", \"detailTemplate\", \"lockedColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"class\", \"k-group-cell k-header\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"class\", \"k-hierarchy-cell k-header\", \"role\", \"presentation\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\", \"ngForTrackBy\"], [\"role\", \"presentation\", 1, \"k-group-cell\", \"k-header\"], [\"role\", \"presentation\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnheader\", \"aria-selected\", \"false\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", \"class\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", \"rowSpan\", \"enableDrag\", \"context\", \"k-filterable\", \"k-first\", \"ngClass\", \"ngStyle\", \"keydown\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", \"class\", \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"rowSpan\", \"colSpan\", \"enableDrag\", \"context\", \"k-first\", \"k-filterable\", \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnheader\", \"aria-selected\", \"false\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", 1, \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", \"rowSpan\", \"enableDrag\", \"context\", \"ngClass\", \"ngStyle\", \"keydown\"], [3, \"column\", \"filter\", 4, \"ngIf\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", \"sort\", \"filter\", \"sortable\", 4, \"ngIf\"], [\"kendoGridColumnHandle\", \"\", \"kendoDraggable\", \"\", \"class\", \"k-column-resizer\", 3, \"column\", \"columns\", 4, \"ngIf\"], [3, \"column\", \"filter\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", \"sort\", \"filter\", \"sortable\"], [3, \"templateContext\"], [1, \"k-link\", 3, \"click\"], [\"link\", \"\"], [3, \"ngClass\"], [\"class\", \"k-sort-order\", 4, \"ngIf\"], [\"role\", \"status\", 1, \"k-sort-status\", 2, \"position\", \"absolute\", \"left\", \"-10000px\", 3, \"innerHtml\"], [1, \"k-sort-order\"], [\"kendoGridSelectAllCheckbox\", \"\", \"kendoGridFocusable\", \"\", 1, \"k-checkbox\"], [1, \"k-checkbox-label\"], [\"kendoGridColumnHandle\", \"\", \"kendoDraggable\", \"\", 1, \"k-column-resizer\", 3, \"column\", \"columns\"], [\"kendoGridLogicalCell\", \"\", \"kendoDropTarget\", \"\", \"kendoDraggable\", \"\", \"kendoDraggableColumn\", \"\", 1, \"k-header\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"rowSpan\", \"colSpan\", \"enableDrag\", \"context\", \"ngClass\", \"ngStyle\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\", 4, \"ngIf\"], [3, \"standalone\", \"settings\", \"column\", \"columnMenuTemplate\"], [\"kendoGridFilterRow\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"filter\", \"groups\", \"detailTemplate\", \"lockedColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"]], template: function HeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, HeaderComponent_ng_template_0_Template, 2, 2, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalRowDirective,\n LogicalCellDirective,\n DropTargetDirective, ɵngcc2.DraggableDirective, DraggableColumnDirective, ɵngcc5.NgClass, ɵngcc5.NgStyle, FilterMenuComponent,\n ColumnMenuComponent,\n TemplateContextDirective,\n SelectAllCheckboxDirective,\n FocusableDirective,\n ColumnHandleDirective,\n FilterRowComponent]; }, styles: [\".k-column-resizer[_ngcontent-%COMP%] {\\n cursor: col-resize;\\n display: block;\\n height: 1000%;\\n position: absolute;\\n top: 0;\\n width: .5em;\\n }\"] });\n/** @nocollapse */\nHeaderComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: DragHintService },\n { type: DropCueService },\n { type: ColumnReorderService },\n { type: IdService },\n { type: SortService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nHeaderComponent.propDecorators = {\n totalColumnLevels: [{ type: Input }],\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n scrollable: [{ type: Input }],\n filterable: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n sortable: [{ type: Input }],\n groupable: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n resizable: [{ type: Input }],\n reorderable: [{ type: Input }],\n columnMenu: [{ type: Input }],\n columnMenuTemplate: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n headerClass: [{ type: HostBinding, args: ['class.k-grid-header',] }],\n dropTargets: [{ type: ViewChildren, args: [DropTargetDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridHeader]',\n styles: [`\n .k-column-resizer {\n cursor: col-resize;\n display: block;\n height: 1000%;\n position: absolute;\n top: 0;\n width: .5em;\n }\n `],\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n {{column.displayTitle}}\n \n \n \n \n \n {{column.displayTitle}}\n \n {{sortOrder(column.field)}}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{column.displayTitle}}\n \n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n >\n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: DragHintService }, { type: DropCueService }, { type: ColumnReorderService }, { type: IdService }, { type: SortService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], sort: [{\n type: Input\n }], sortable: [{\n type: Input\n }], groupable: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], resizable: [{\n type: Input\n }], reorderable: [{\n type: Input\n }], columnMenu: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], dropTargets: [{\n type: ViewChildren,\n args: [DropTargetDirective]\n }], headerClass: [{\n type: HostBinding,\n args: ['class.k-grid-header']\n }], totalColumnLevels: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], filterable: [{\n type: Input\n }], filter: [{\n type: Input\n }], columnMenuTemplate: [{\n type: Input\n }] }); })();\n\n// TODO\n// tslint:disable:rxjs-no-unsafe-takeuntil\n/**\n * @hidden\n */\nconst fromPercentage = (value, percent) => {\n const sign = percent < 0 ? -1 : 1;\n return Math.ceil((Math.abs(percent) / 100) * value) * sign;\n};\n/**\n * @hidden\n */\nconst toPercentage = (value, whole) => (value / whole) * 100;\n/**\n * @hidden\n */\nconst headerWidth = (handle) => handle.nativeElement.parentElement.offsetWidth;\n/**\n * @hidden\n */\nconst allLeafColumns = columns => expandColumns(columns)\n .filter(c => !c.isColumnGroup);\n/**\n * @hidden\n */\nconst stopPropagation = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\n/**\n * @hidden\n */\nconst createMoveStream = (service, draggable) => mouseDown => draggable.kendoDrag.pipe(takeUntil(draggable.kendoRelease.pipe(tap(() => service.end()))), map(({ pageX }) => ({\n originalX: mouseDown.pageX,\n pageX\n})));\n/**\n * @hidden\n */\nconst preventOnDblClick$1 = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\n/**\n * @hidden\n */\nconst isInSpanColumn$1 = column => !!(column.parent && column.parent.isSpanColumn);\n/**\n * @hidden\n *\n * Calculates the column index. If the column is stated in `SpanColumn`,\n * the index for all child columns equals the index of the first child.\n */\nconst indexOf = (target, list) => {\n let index = 0;\n let ignore = 0;\n let skip = 0;\n while (index < list.length) {\n const current = list[index];\n const isParentSpanColumn = isInSpanColumn$1(current);\n if (current === target) {\n break;\n }\n if ((ignore-- <= 0) && isParentSpanColumn) {\n ignore = current.parent.childColumns.length - 1;\n skip += ignore;\n }\n index++;\n }\n return index - skip;\n};\n/**\n * @hidden\n */\nclass ColumnHandleDirective {\n constructor(draggable, element, service, zone, cdr, localization) {\n this.draggable = draggable;\n this.element = element;\n this.service = service;\n this.zone = zone;\n this.cdr = cdr;\n this.localization = localization;\n this.columns = [];\n this.subscriptions = new Subscription();\n this.rtl = false;\n }\n get visible() {\n return this.column.resizable ? 'block' : 'none';\n }\n get leftStyle() {\n return isTruthy(this.rtl) ? 0 : null;\n }\n get rightStyle() {\n return isTruthy(this.rtl) ? null : 0;\n }\n autoFit() {\n const allLeafs = allLeafColumns(this.columns);\n const currentLeafs = leafColumns([this.column]).filter(column => isTruthy(column.resizable));\n const columnInfo = currentLeafs.map(column => {\n const isParentSpan = isInSpanColumn$1(column);\n const isLastInSpan = isParentSpan ? column.parent.childColumns.last === column : false;\n const index = indexOf(column, allLeafs);\n return {\n column,\n headerIndex: this.columnsForLevel(column.level).indexOf(column),\n index,\n isLastInSpan,\n isParentSpan,\n level: column.level\n };\n });\n currentLeafs.forEach(column => column.width = 0);\n this.service.measureColumns(columnInfo);\n }\n ngOnInit() {\n const service = this.service.changes.pipe(filter(() => this.column.resizable), filter(e => isPresent(e.columns.find(column => column === this.column))));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'start'))\n .subscribe(this.initState.bind(this)));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'resizeColumn'))\n .subscribe(this.resize.bind(this)));\n this.subscriptions.add(this.service.changes.pipe(filter(e => e.type === 'start'), filter(this.shouldUpdate.bind(this)), take(1) //on first resize only\n ).subscribe(this.initColumnWidth.bind(this)));\n this.subscriptions.add(this.zone.runOutsideAngular(() => this.draggable.kendoPress.pipe(tap(stopPropagation), tap(() => this.service.start(this.column)), switchMap(preventOnDblClick$1(this.draggable.kendoRelease)), switchMap(createMoveStream(this.service, this.draggable)))\n .subscribe(({ pageX, originalX }) => {\n const delta = pageX - originalX;\n const percent = toPercentage(delta, this.column.resizeStartWidth || this.column.width);\n this.service.resizeColumns(percent);\n })));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'autoFitComplete'))\n .subscribe(this.sizeToFit.bind(this)));\n this.subscriptions.add(service.pipe(filter(e => e.type === 'triggerAutoFit'))\n .subscribe(this.autoFit.bind(this)));\n this.subscriptions.add(this.localization.changes.subscribe(({ rtl }) => this.rtl = rtl));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n shouldUpdate() {\n return !allLeafColumns(this.columns)\n .map(column => column.width)\n .some(isBlank);\n }\n initColumnWidth() {\n this.column.width = headerWidth(this.element);\n }\n initState() {\n this.column.resizeStartWidth = headerWidth(this.element);\n this.service.resizedColumn({\n column: this.column,\n oldWidth: this.column.resizeStartWidth\n });\n }\n resize({ deltaPercent }) {\n let delta = fromPercentage(this.column.resizeStartWidth, deltaPercent);\n if (isTruthy(this.rtl)) {\n delta *= -1;\n }\n const newWidth = Math.max(this.column.resizeStartWidth + delta, this.column.minResizableWidth);\n const tableDelta = newWidth > this.column.minResizableWidth ?\n delta : this.column.minResizableWidth - this.column.resizeStartWidth;\n this.updateWidth(this.column, newWidth);\n this.service.resizeTable(this.column, tableDelta);\n }\n sizeToFit({ columns, widths }) {\n const index = columns.indexOf(this.column);\n const width = Math.max(...widths.map(w => w[index])) + 1; //add 1px for IE\n const tableDelta = width - this.column.resizeStartWidth;\n this.updateWidth(this.column, width);\n this.service.resizeTable(this.column, tableDelta);\n }\n updateWidth(column, width) {\n column.width = width;\n this.cdr.markForCheck(); //force CD cycle\n }\n columnsForLevel(level) {\n return columnsToRender(this.columns ? this.columns.filter(column => column.level === level) : []);\n }\n}\nColumnHandleDirective.ɵfac = function ColumnHandleDirective_Factory(t) { return new (t || ColumnHandleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ColumnResizingService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColumnHandleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnHandleDirective, selectors: [[\"\", \"kendoGridColumnHandle\", \"\"]], hostVars: 6, hostBindings: function ColumnHandleDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"dblclick\", function ColumnHandleDirective_dblclick_HostBindingHandler() { return ctx.autoFit(); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible)(\"left\", ctx.leftStyle)(\"right\", ctx.rightStyle);\n } }, inputs: { columns: \"columns\", column: \"column\" } });\n/** @nocollapse */\nColumnHandleDirective.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: ElementRef },\n { type: ColumnResizingService },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: LocalizationService }\n];\nColumnHandleDirective.propDecorators = {\n columns: [{ type: Input }],\n column: [{ type: Input }],\n visible: [{ type: HostBinding, args: ['style.display',] }],\n leftStyle: [{ type: HostBinding, args: ['style.left',] }],\n rightStyle: [{ type: HostBinding, args: ['style.right',] }],\n autoFit: [{ type: HostListener, args: ['dblclick',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnHandleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnHandle]'\n }]\n }], function () { return [{ type: ɵngcc2.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: ɵngcc0.ElementRef }, { type: ColumnResizingService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc1.LocalizationService }]; }, { columns: [{\n type: Input\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], leftStyle: [{\n type: HostBinding,\n args: ['style.left']\n }], rightStyle: [{\n type: HostBinding,\n args: ['style.right']\n }], autoFit: [{\n type: HostListener,\n args: ['dblclick']\n }], column: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the select-all checkbox feature of the Grid ([see example]({% slug selection_grid %}#toc-select-all-feature)).\n */\nclass SelectAllCheckboxDirective {\n constructor(selectionService, el, renderer, ngZone) {\n this.selectionService = selectionService;\n this.el = el;\n this.renderer = renderer;\n this.ngZone = ngZone;\n /**\n * Fires when the user clicks the `kendoGridSelectAllCheckbox` select-all checkbox\n * ([see example]({% slug selection_grid %}#toc-select-all-feature)).\n */\n this.selectAllChange = new EventEmitter();\n this.type = \"checkbox\";\n this.stateSet = false;\n this.ngZone.runOutsideAngular(() => {\n this.destroyClick = this.renderer.listen(this.el.nativeElement, \"click\", this.onClick.bind(this));\n });\n }\n ngAfterContentChecked() {\n this.setState();\n }\n ngOnChanges() {\n this.stateSet = true;\n }\n ngOnDestroy() {\n if (this.destroyClick) {\n this.destroyClick();\n }\n }\n /**\n * @hidden\n */\n onClick() {\n // yields consistent cross-browser behavior when clicking an \"indeterminate\" checkbox\n const undefinedCheckedStateInIE = detectIE() && this.selectionService.selectAllState === undefined;\n const isChecked = undefinedCheckedStateInIE ? true : this.el.nativeElement.checked;\n const options = this.selectionService.options;\n this.selectAllChange.emit(isChecked ? \"checked\" : \"unchecked\");\n if (options.enabled && options.mode === \"multiple\") {\n this.ngZone.run(() => {\n this.selectionService.updateAll(isChecked);\n });\n }\n }\n /**\n * @hidden\n */\n setState() {\n const state$$1 = this.stateSet ? this.stateToBool() : this.selectionService.selectAllState;\n const elem = this.el.nativeElement;\n this.renderer.setProperty(elem, \"indeterminate\", !isPresent(state$$1));\n this.renderer.setProperty(elem, \"checked\", isPresent(state$$1) ? state$$1 : false);\n }\n /**\n * @hidden\n */\n stateToBool() {\n switch (this.state) {\n case \"checked\":\n return true;\n case \"unchecked\":\n return false;\n default:\n return undefined;\n }\n }\n}\nSelectAllCheckboxDirective.ɵfac = function SelectAllCheckboxDirective_Factory(t) { return new (t || SelectAllCheckboxDirective)(ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSelectAllCheckboxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectAllCheckboxDirective, selectors: [[\"\", \"kendoGridSelectAllCheckbox\", \"\"]], hostVars: 1, hostBindings: function SelectAllCheckboxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.type);\n } }, inputs: { state: \"state\" }, outputs: { selectAllChange: \"selectAllChange\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n/** @nocollapse */\nSelectAllCheckboxDirective.ctorParameters = () => [\n { type: SelectionService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nSelectAllCheckboxDirective.propDecorators = {\n state: [{ type: Input }],\n selectAllChange: [{ type: Output }],\n type: [{ type: HostBinding, args: ['attr.type',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectAllCheckboxDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectAllCheckbox]'\n }]\n }], function () { return [{ type: SelectionService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { selectAllChange: [{\n type: Output\n }], type: [{\n type: HostBinding,\n args: ['attr.type']\n }], state: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterMenuComponent {\n constructor(filterService, popupService, localization) {\n this.filterService = filterService;\n this.popupService = popupService;\n this.localization = localization;\n /**\n * @hidden\n */\n this.filterLabel = this.localization.get('filter');\n }\n get hasFilters() {\n return filtersByField(this.filter, (this.column || {}).field).length > 0;\n }\n toggle(anchor, template) {\n this.popupRef = this.popupService.open(anchor, template, this.popupRef);\n return false;\n }\n close() {\n this.popupService.destroy();\n }\n}\nFilterMenuComponent.ɵfac = function FilterMenuComponent_Factory(t) { return new (t || FilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuComponent, selectors: [[\"kendo-grid-filter-menu\"]], inputs: { column: \"column\", filter: \"filter\" }, decls: 5, vars: 4, consts: [[\"href\", \"#\", 3, \"ngClass\", \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-filter\"], [\"template\", \"\"], [3, \"column\", \"filter\", \"close\"]], template: function FilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n const _r303 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function FilterMenuComponent_Template_a_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r303); const _r298 = ɵngcc0.ɵɵreference(1); const _r299 = ɵngcc0.ɵɵreference(4); return ctx.toggle(_r298, _r299); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, FilterMenuComponent_ng_template_3_Template, 1, 2, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(2, _c154, ctx.hasFilters));\n ɵngcc0.ɵɵattribute(\"title\", ctx.filterLabel);\n } }, directives: function () { return [ɵngcc5.NgClass, FilterMenuContainerComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterMenuComponent.ctorParameters = () => [\n { type: FilterService },\n { type: SinglePopupService },\n { type: LocalizationService }\n];\nFilterMenuComponent.propDecorators = {\n column: [{ type: Input }],\n filter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-menu',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: FilterService }, { type: SinglePopupService }, { type: ɵngcc1.LocalizationService }]; }, { column: [{\n type: Input\n }], filter: [{\n type: Input\n }] }); })();\n\nconst isNoValueOperator = operator => (operator === \"isnull\"\n || operator === \"isnotnull\"\n || operator === \"isempty\"\n || operator === \"isnotempty\");\nconst validFilters = ({ value, operator }) => !isNullOrEmptyString(value) || isNoValueOperator(operator);\nconst trimFilters = filter$$1 => {\n filter$$1.filters = filter$$1.filters.filter(validFilters);\n return filter$$1;\n};\nconst findParent = (filters, field, parent) => {\n return filters.reduce((acc, filter$$1) => {\n if (acc) {\n return acc;\n }\n if (filter$$1.filters) {\n return findParent(filter$$1.filters, field, filter$$1);\n }\n else if (filter$$1.field === field) {\n return parent;\n }\n return acc;\n }, undefined); // tslint:disable-line:align\n};\nconst parentLogicOfDefault = (filter$$1, field, def = \"and\") => {\n const parent = findParent(((filter$$1 || {}).filters || []), field);\n return isPresent(parent) ? parent.logic : def;\n};\n/**\n * @hidden\n */\nclass FilterMenuContainerComponent {\n constructor(parentService, childService, localization, cd) {\n this.parentService = parentService;\n this.childService = childService;\n this.localization = localization;\n this.cd = cd;\n this.close = new EventEmitter();\n /**\n * @hidden\n */\n this.actionsClass = 'k-action-buttons k-button-group';\n this._templateContext = {};\n }\n get filter() {\n return this._filter;\n }\n /**\n * The current root filter.\n * @type {CompositeFilterDescriptor}\n */\n set filter(value) {\n this._filter = cloneFilters(value);\n }\n get childFilter() {\n if (!isPresent(this._childFilter)) {\n this._childFilter = {\n filters: filtersByField(this.filter, (this.column || {}).field),\n logic: parentLogicOfDefault(this.filter, (this.column || {}).field)\n };\n }\n return this._childFilter;\n }\n ngOnInit() {\n this.subscription = this.childService.changes.subscribe(filter$$1 => this._childFilter = filter$$1);\n this.subscription.add(this.localization.changes.subscribe(() => this.cd.markForCheck()));\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n get disabled() {\n return !this.childFilter.filters.some(validFilters);\n }\n get templateContext() {\n this._templateContext.column = this.column;\n this._templateContext.filter = this.childFilter;\n this._templateContext.filterService = this.childService;\n // tslint:disable-next-line:no-string-literal\n this._templateContext[\"$implicit\"] = this.childFilter;\n return this._templateContext;\n }\n get hasTemplate() {\n return isPresent(this.column) && isPresent(this.column.filterMenuTemplateRef);\n }\n submit() {\n const filter$$1 = trimFilters(this.childFilter);\n if (filter$$1.filters.length) {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n removeFilter(root, this.column.field);\n root.filters.push(filter$$1);\n this.parentService.filter(root);\n }\n this.close.emit();\n return false;\n }\n reset() {\n const root = this.filter || {\n filters: [],\n logic: \"and\"\n };\n removeFilter(root, this.column.field);\n this.parentService.filter(root);\n this.close.emit();\n }\n get clearText() {\n return this.localization.get(\"filterClearButton\");\n }\n get filterText() {\n return this.localization.get(\"filterFilterButton\");\n }\n}\nFilterMenuContainerComponent.ɵfac = function FilterMenuContainerComponent_Factory(t) { return new (t || FilterMenuContainerComponent)(ɵngcc0.ɵɵdirectiveInject(FilterService, 4), ɵngcc0.ɵɵdirectiveInject(FilterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nFilterMenuContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuContainerComponent, selectors: [[\"kendo-grid-filter-menu-container\"]], inputs: { actionsClass: \"actionsClass\", filter: \"filter\", column: \"column\" }, outputs: { close: \"close\" }, features: [ɵngcc0.ɵɵProvidersFeature([FilterService])], decls: 10, vars: 7, consts: [[1, \"k-filter-menu\", \"k-group\", \"k-reset\", \"k-state-border-up\", 3, \"submit\", \"reset\"], [1, \"k-filter-menu-container\"], [3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [3, \"ngClass\"], [\"type\", \"reset\", 1, \"k-button\"], [\"type\", \"submit\", 1, \"k-button\", \"k-primary\", 3, \"disabled\"], [\"kendoFilterMenuHost\", \"\", 3, \"filterService\", \"column\", \"filter\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function FilterMenuContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"form\", 0);\n ɵngcc0.ɵɵlistener(\"submit\", function FilterMenuContainerComponent_Template_form_submit_0_listener() { return ctx.submit(); })(\"reset\", function FilterMenuContainerComponent_Template_form_reset_0_listener() { return ctx.reset(); });\n ɵngcc0.ɵɵelementStart(1, \"div\", 1);\n ɵngcc0.ɵɵelementContainerStart(2, 2);\n ɵngcc0.ɵɵtemplate(3, FilterMenuContainerComponent_ng_container_3_Template, 2, 3, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(4, FilterMenuContainerComponent_ng_container_4_Template, 2, 1, \"ng-container\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelementStart(5, \"div\", 4);\n ɵngcc0.ɵɵelementStart(6, \"button\", 5);\n ɵngcc0.ɵɵtext(7);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(8, \"button\", 6);\n ɵngcc0.ɵɵtext(9);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.hasTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx.actionsClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx.clearText);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx.filterText);\n } }, directives: function () { return [ɵngcc7.ɵangular_packages_forms_forms_y, ɵngcc7.NgControlStatusGroup, ɵngcc7.NgForm, ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, ɵngcc5.NgClass, FilterMenuHostDirective, ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\n/** @nocollapse */\nFilterMenuContainerComponent.ctorParameters = () => [\n { type: FilterService, decorators: [{ type: SkipSelf }] },\n { type: FilterService },\n { type: LocalizationService },\n { type: ChangeDetectorRef }\n];\nFilterMenuContainerComponent.propDecorators = {\n close: [{ type: Output }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n actionsClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuContainerComponent, [{\n type: Component,\n args: [{\n providers: [FilterService],\n selector: 'kendo-grid-filter-menu-container',\n template: `\n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n \n \n
\n
\n
\n `\n }]\n }], function () { return [{ type: FilterService, decorators: [{\n type: SkipSelf\n }] }, { type: FilterService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { close: [{\n type: Output\n }], actionsClass: [{\n type: Input\n }], filter: [{\n type: Input\n }], column: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass FilterMenuInputWrapperComponent extends FilterInputWrapperComponent {\n constructor() {\n super(null);\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n operatorChange(dataItem) {\n this.currentOperator = dataItem;\n }\n filterChange(filter$$1) {\n this.applyFilter(filter$$1);\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n get currentFilter() {\n return this._currentFilter;\n }\n /**\n * The current filter for the associated column field.\n * @readonly\n * @type {FilterDescriptor}\n */\n set currentFilter(value) {\n this._currentFilter = value;\n }\n updateFilter(filter$$1) {\n Object.assign(this.currentFilter, filter$$1);\n return this.filter;\n }\n onChange(value) {\n this.filterChange(this.updateFilter({\n field: this.column.field,\n operator: this.currentOperator,\n value: value\n }));\n }\n}\nFilterMenuInputWrapperComponent.ɵfac = function FilterMenuInputWrapperComponent_Factory(t) { return new (t || FilterMenuInputWrapperComponent)(); };\nFilterMenuInputWrapperComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FilterMenuInputWrapperComponent, selectors: [[\"kendo-grid-filter-menu-input-wrapper\"]], inputs: { currentFilter: \"currentFilter\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], ngContentSelectors: _c125, decls: 2, vars: 3, consts: [[\"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"value\", \"valuePrimitive\", \"valueChange\"]], template: function FilterMenuInputWrapperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵelementStart(0, \"kendo-dropdownlist\", 0);\n ɵngcc0.ɵɵlistener(\"valueChange\", function FilterMenuInputWrapperComponent_Template_kendo_dropdownlist_valueChange_0_listener($event) { return ctx.operatorChange($event); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵprojection(1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"data\", ctx.operators)(\"value\", ctx.currentOperator)(\"valuePrimitive\", true);\n } }, directives: [ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nFilterMenuInputWrapperComponent.ctorParameters = () => [];\nFilterMenuInputWrapperComponent.propDecorators = {\n filterService: [{ type: Input }],\n currentFilter: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuInputWrapperComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-filter-menu-input-wrapper',\n template: `\n \n \n \n `\n }]\n }], function () { return []; }, { currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass StringFilterMenuInputComponent {\n constructor() {\n this.operators = [];\n }\n}\nStringFilterMenuInputComponent.ɵfac = function StringFilterMenuInputComponent_Factory(t) { return new (t || StringFilterMenuInputComponent)(); };\nStringFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterMenuInputComponent, selectors: [[\"kendo-grid-string-filter-menu-input\"]], inputs: { operators: \"operators\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\" }, decls: 2, vars: 8, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 1, \"k-textbox\", 3, \"filterDelay\", \"ngModel\"]], template: function StringFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelement(1, \"input\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"ngModel\", ctx.currentFilter == null ? null : ctx.currentFilter.value);\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc7.DefaultValueAccessor, FilterInputDirective, ɵngcc7.NgControlStatus, ɵngcc7.NgModel], encapsulation: 2 });\nStringFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-menu-input',\n template: `\n \n \n \n `\n }]\n }], function () { return []; }, { operators: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a string-filter menu component.\n * ([see example]({% slug builtinfiltertemplate_grid %}#toc-configuration-components-for-filter-templates)).\n */\nclass StringFilterMenuComponent extends StringFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nStringFilterMenuComponent.ɵfac = function StringFilterMenuComponent_Factory(t) { return new (t || StringFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nStringFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StringFilterMenuComponent, selectors: [[\"kendo-grid-string-filter-menu\"]], hostVars: 2, hostBindings: function StringFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 7, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\"]], template: function StringFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-string-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, StringFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, StringFilterMenuComponent_kendo_grid_string_filter_menu_input_2_Template, 1, 5, \"kendo-grid-string-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: [StringFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent], encapsulation: 2 });\n/** @nocollapse */\nStringFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nStringFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StringFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-string-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a numeric-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass NumericFilterMenuComponent extends NumericFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nNumericFilterMenuComponent.ɵfac = function NumericFilterMenuComponent_Factory(t) { return new (t || NumericFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterMenuComponent, selectors: [[\"kendo-grid-numeric-filter-menu\"]], hostVars: 2, hostBindings: function NumericFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 13, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"]], template: function NumericFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-numeric-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, NumericFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, NumericFilterMenuComponent_kendo_grid_numeric_filter_menu_input_2_Template, 1, 11, \"kendo-grid-numeric-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: function () { return [NumericFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nNumericFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nNumericFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass NumericFilterMenuInputComponent {\n constructor(localization) {\n this.localization = localization;\n this.operators = [];\n /**\n * Specifies the value which is used to increment or decrement the component value.\n * @type {numeric}\n */\n this.step = 1;\n /**\n * Specifies whether the **Up** and **Down** spin buttons will be rendered.\n * @type {boolean}\n */\n this.spinners = true;\n }\n messageFor(key) {\n return this.localization.get(key);\n }\n}\nNumericFilterMenuInputComponent.ɵfac = function NumericFilterMenuInputComponent_Factory(t) { return new (t || NumericFilterMenuInputComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nNumericFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: NumericFilterMenuInputComponent, selectors: [[\"kendo-grid-numeric-filter-menu-input\"]], inputs: { operators: \"operators\", step: \"step\", spinners: \"spinners\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\", min: \"min\", max: \"max\", decimals: \"decimals\", format: \"format\" }, decls: 3, vars: 17, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 3, \"filterDelay\", \"autoCorrect\", \"value\", \"format\", \"decimals\", \"spinners\", \"min\", \"max\", \"step\"], [3, \"increment\", \"decrement\"]], template: function NumericFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-numerictextbox\", 1);\n ɵngcc0.ɵɵelement(2, \"kendo-numerictextbox-messages\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"autoCorrect\", true)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"format\", ctx.format)(\"decimals\", ctx.decimals)(\"spinners\", ctx.spinners)(\"min\", ctx.min)(\"max\", ctx.max)(\"step\", ctx.step);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"increment\", ctx.messageFor(\"filterNumericIncrement\"))(\"decrement\", ctx.messageFor(\"filterNumericDecrement\"));\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc6.NumericTextBoxComponent, FilterInputDirective, ɵngcc6.NumericTextBoxCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nNumericFilterMenuInputComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nNumericFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }],\n step: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n spinners: [{ type: Input }],\n decimals: [{ type: Input }],\n format: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NumericFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-numeric-filter-menu-input',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], step: [{\n type: Input\n }], spinners: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], decimals: [{\n type: Input\n }], format: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a date-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass DateFilterMenuComponent extends DateFilterComponent {\n constructor(localization) {\n super(null, localization);\n this.logicOperators = logicOperators(this.localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n /**\n * Determines if the inputs of second criteria will be displayed.\n */\n this.extra = true;\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n get firstFilter() {\n return setFilter(0, this.filter, (this.column || {}).field, this.operator);\n }\n get secondFilter() {\n return setFilter(1, this.filter, (this.column || {}).field, this.operator);\n }\n logicChange(value) {\n this.filter.logic = value;\n }\n localizationChange() {\n this.logicOperators = logicOperators(this.localization);\n super.localizationChange();\n }\n}\nDateFilterMenuComponent.ɵfac = function DateFilterMenuComponent_Factory(t) { return new (t || DateFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterMenuComponent, selectors: [[\"kendo-grid-date-filter-menu\"]], hostVars: 2, hostBindings: function DateFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", extra: \"extra\", column: \"column\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 3, vars: 16, consts: [[3, \"currentFilter\", \"operators\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\"], [\"class\", \"k-filter-and\", \"textField\", \"text\", \"valueField\", \"value\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\", 4, \"ngIf\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\", 4, \"ngIf\"], [\"textField\", \"text\", \"valueField\", \"value\", 1, \"k-filter-and\", 3, \"data\", \"valuePrimitive\", \"value\", \"valueChange\"], [3, \"operators\", \"currentFilter\", \"filterService\", \"column\", \"filter\", \"activeView\", \"bottomView\", \"topView\", \"format\", \"formatPlaceholder\", \"placeholder\", \"min\", \"max\", \"weekNumber\"]], template: function DateFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-grid-date-filter-menu-input\", 0);\n ɵngcc0.ɵɵtemplate(1, DateFilterMenuComponent_kendo_dropdownlist_1_Template, 1, 3, \"kendo-dropdownlist\", 1);\n ɵngcc0.ɵɵtemplate(2, DateFilterMenuComponent_kendo_grid_date_filter_menu_input_2_Template, 1, 14, \"kendo-grid-date-filter-menu-input\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"currentFilter\", ctx.firstFilter)(\"operators\", ctx.operators)(\"filterService\", ctx.filterService)(\"column\", ctx.column)(\"filter\", ctx.filter)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"format\", ctx.format)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"placeholder\", ctx.placeholder)(\"min\", ctx.min)(\"max\", ctx.max)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.extra);\n } }, directives: function () { return [DateFilterMenuInputComponent, ɵngcc5.NgIf, ɵngcc8.DropDownListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nDateFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nDateFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n extra: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-menu',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], extra: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], column: [{\n type: Input\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * Represents a Boolean-filter menu component.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * ```\n */\nclass BooleanFilterMenuComponent extends BooleanFilterComponent {\n constructor(localization) {\n super(null, localization);\n /**\n * The current menu filter.\n * @type {CompositeFilterDescriptor}\n */\n this.filter = { filters: [], logic: \"and\" };\n this.idPrefix = guid();\n }\n /**\n * @hidden\n */\n get hostClasses() {\n return false;\n }\n /**\n * @hidden\n */\n radioId(value) {\n return `${this.idPrefix}_${value}`;\n }\n /**\n * @hidden\n */\n onChange(value) {\n this.applyFilter(this.updateFilter({\n field: this.column.field,\n operator: \"eq\",\n value: value\n }));\n }\n /**\n * @hidden\n */\n isSelected(radioValue) {\n return this.filtersByField(this.column.field).some(({ value }) => value === radioValue);\n }\n}\nBooleanFilterMenuComponent.ɵfac = function BooleanFilterMenuComponent_Factory(t) { return new (t || BooleanFilterMenuComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nBooleanFilterMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: BooleanFilterMenuComponent, selectors: [[\"kendo-grid-boolean-filter-menu\"]], hostVars: 2, hostBindings: function BooleanFilterMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-filtercell\", ctx.hostClasses);\n } }, inputs: { filter: \"filter\", filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, \"k-radio-list\", \"k-reset\"], [4, \"ngFor\", \"ngForOf\"], [\"type\", \"radio\", 1, \"k-radio\", 3, \"name\", \"checked\", \"change\"], [1, \"k-radio-label\"]], template: function BooleanFilterMenuComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, BooleanFilterMenuComponent_li_1_Template, 4, 5, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.items);\n } }, directives: [ɵngcc5.NgForOf], encapsulation: 2 });\n/** @nocollapse */\nBooleanFilterMenuComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nBooleanFilterMenuComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-filtercell',] }],\n filter: [{ type: Input }],\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BooleanFilterMenuComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-boolean-filter-menu',\n template: `\n
    \n
  • \n \n \n
  • \n
\n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { filter: [{\n type: Input\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-filtercell']\n }], filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n *\n * > List the following components as `entryComponents` in the GridModule.\n */\nconst filterMenuComponentFactory = (type) => ({\n \"boolean\": BooleanFilterMenuComponent,\n \"date\": DateFilterMenuComponent,\n \"numeric\": NumericFilterMenuComponent,\n \"text\": StringFilterMenuComponent\n}[type]);\n\n/**\n * @hidden\n */\nclass FilterMenuHostDirective extends FilterHostDirective {\n constructor(host, resolver) {\n super(host, resolver);\n }\n componentType() {\n if (isPresent(this.column) && !isNullOrEmptyString(this.column.filter)) {\n return filterMenuComponentFactory(this.column.filter);\n }\n return StringFilterMenuComponent;\n }\n initComponent(ctx) {\n super.initComponent(ctx);\n this.component.instance.filterService = this.filterService;\n }\n}\nFilterMenuHostDirective.ɵfac = function FilterMenuHostDirective_Factory(t) { return new (t || FilterMenuHostDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ViewContainerRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ComponentFactoryResolver)); };\nFilterMenuHostDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: FilterMenuHostDirective, selectors: [[\"\", \"kendoFilterMenuHost\", \"\"]], inputs: { filterService: \"filterService\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nFilterMenuHostDirective.ctorParameters = () => [\n { type: ViewContainerRef },\n { type: ComponentFactoryResolver }\n];\nFilterMenuHostDirective.propDecorators = {\n filterService: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuHostDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoFilterMenuHost]'\n }]\n }], function () { return [{ type: ɵngcc0.ViewContainerRef }, { type: ɵngcc0.ComponentFactoryResolver }]; }, { filterService: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass DateFilterMenuInputComponent {\n constructor(popupService, localizationService) {\n this.popupService = popupService;\n this.localizationService = localizationService;\n this.operators = [];\n }\n ngOnDestroy() {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n open(picker) {\n this.subscription = this.popupService.onClose\n .pipe(filter(() => picker.isActive))\n .subscribe(e => e.preventDefault());\n }\n messageFor(key) {\n return this.localizationService.get(key);\n }\n}\nDateFilterMenuInputComponent.ɵfac = function DateFilterMenuInputComponent_Factory(t) { return new (t || DateFilterMenuInputComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nDateFilterMenuInputComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DateFilterMenuInputComponent, selectors: [[\"kendo-grid-date-filter-menu-input\"]], inputs: { operators: \"operators\", column: \"column\", filter: \"filter\", operator: \"operator\", currentFilter: \"currentFilter\", filterService: \"filterService\", format: \"format\", formatPlaceholder: \"formatPlaceholder\", placeholder: \"placeholder\", min: \"min\", max: \"max\", activeView: \"activeView\", bottomView: \"bottomView\", topView: \"topView\", weekNumber: \"weekNumber\" }, decls: 4, vars: 19, consts: [[3, \"column\", \"filter\", \"operators\", \"defaultOperator\", \"currentFilter\", \"filterService\"], [\"kendoFilterInput\", \"\", 3, \"filterDelay\", \"value\", \"placeholder\", \"formatPlaceholder\", \"format\", \"min\", \"max\", \"activeView\", \"bottomView\", \"topView\", \"weekNumber\", \"open\"], [\"picker\", \"\"], [3, \"toggle\", \"today\"]], template: function DateFilterMenuInputComponent_Template(rf, ctx) { if (rf & 1) {\n const _r325 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-filter-menu-input-wrapper\", 0);\n ɵngcc0.ɵɵelementStart(1, \"kendo-datepicker\", 1, 2);\n ɵngcc0.ɵɵlistener(\"open\", function DateFilterMenuInputComponent_Template_kendo_datepicker_open_1_listener() { ɵngcc0.ɵɵrestoreView(_r325); const _r324 = ɵngcc0.ɵɵreference(2); return ctx.open(_r324); });\n ɵngcc0.ɵɵelement(3, \"kendo-datepicker-messages\", 3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"column\", ctx.column)(\"filter\", ctx.filter)(\"operators\", ctx.operators)(\"defaultOperator\", ctx.operator)(\"currentFilter\", ctx.currentFilter)(\"filterService\", ctx.filterService);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"filterDelay\", 0)(\"value\", ctx.currentFilter == null ? null : ctx.currentFilter.value)(\"placeholder\", ctx.placeholder)(\"formatPlaceholder\", ctx.formatPlaceholder)(\"format\", ctx.format)(\"min\", ctx.min)(\"max\", ctx.max)(\"activeView\", ctx.activeView)(\"bottomView\", ctx.bottomView)(\"topView\", ctx.topView)(\"weekNumber\", ctx.weekNumber);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"toggle\", ctx.messageFor(\"filterDateToggle\"))(\"today\", ctx.messageFor(\"filterDateToday\"));\n } }, directives: [FilterMenuInputWrapperComponent, ɵngcc9.DatePickerComponent, FilterInputDirective, ɵngcc9.DatePickerCustomMessagesComponent], encapsulation: 2 });\n/** @nocollapse */\nDateFilterMenuInputComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: LocalizationService }\n];\nDateFilterMenuInputComponent.propDecorators = {\n operators: [{ type: Input }],\n column: [{ type: Input }],\n filter: [{ type: Input }],\n operator: [{ type: Input }],\n currentFilter: [{ type: Input }],\n filterService: [{ type: Input }],\n format: [{ type: Input }],\n formatPlaceholder: [{ type: Input }],\n placeholder: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n activeView: [{ type: Input }],\n bottomView: [{ type: Input }],\n topView: [{ type: Input }],\n weekNumber: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DateFilterMenuInputComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-date-filter-menu-input',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: ɵngcc1.LocalizationService }]; }, { operators: [{\n type: Input\n }], column: [{\n type: Input\n }], filter: [{\n type: Input\n }], operator: [{\n type: Input\n }], currentFilter: [{\n type: Input\n }], filterService: [{\n type: Input\n }], format: [{\n type: Input\n }], formatPlaceholder: [{\n type: Input\n }], placeholder: [{\n type: Input\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }], activeView: [{\n type: Input\n }], bottomView: [{\n type: Input\n }], topView: [{\n type: Input\n }], weekNumber: [{\n type: Input\n }] }); })();\n\nconst INTERNAL_COMPONENTS$2 = [\n FilterMenuComponent,\n FilterMenuContainerComponent,\n FilterMenuInputWrapperComponent,\n StringFilterMenuInputComponent,\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n NumericFilterMenuInputComponent,\n DateFilterMenuInputComponent,\n DateFilterMenuComponent,\n FilterMenuHostDirective,\n BooleanFilterMenuComponent\n];\nconst ENTRY_COMPONENTS$1 = [\n StringFilterMenuComponent,\n NumericFilterMenuComponent,\n DateFilterMenuComponent,\n BooleanFilterMenuComponent\n];\n/**\n * @hidden\n */\nclass FilterMenuModule {\n static exports() {\n return [\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n DateFilterMenuComponent,\n BooleanFilterMenuComponent,\n SharedFilterModule.exports()\n ];\n }\n}\nFilterMenuModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FilterMenuModule });\nFilterMenuModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FilterMenuModule_Factory(t) { return new (t || FilterMenuModule)(); }, imports: [[SharedFilterModule],\n SharedFilterModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FilterMenuModule, { declarations: [FilterMenuComponent,\n FilterMenuContainerComponent,\n FilterMenuInputWrapperComponent,\n StringFilterMenuInputComponent,\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n NumericFilterMenuInputComponent,\n DateFilterMenuInputComponent,\n DateFilterMenuComponent,\n FilterMenuHostDirective,\n BooleanFilterMenuComponent], imports: [SharedFilterModule], exports: [FilterMenuComponent,\n FilterMenuContainerComponent,\n FilterMenuInputWrapperComponent,\n StringFilterMenuInputComponent,\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n NumericFilterMenuInputComponent,\n DateFilterMenuInputComponent,\n DateFilterMenuComponent,\n FilterMenuHostDirective,\n BooleanFilterMenuComponent,\n SharedFilterModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FilterMenuModule, [{\n type: NgModule,\n args: [{\n declarations: [INTERNAL_COMPONENTS$2],\n entryComponents: ENTRY_COMPONENTS$1,\n exports: [INTERNAL_COMPONENTS$2, SharedFilterModule],\n imports: [SharedFilterModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ColumnListComponent {\n constructor(element, ngZone, renderer) {\n this.element = element;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.reset = new EventEmitter();\n this.apply = new EventEmitter();\n this.columnChange = new EventEmitter();\n this.autoSync = true;\n this.allowHideAll = false;\n this.actionsClass = 'k-action-buttons';\n this.unlockedCount = 0;\n }\n get className() {\n return true;\n }\n set columns(value) {\n this._columns = value.filter(column => column.includeInChooser !== false);\n this.allColumns = value;\n this.updateColumnState();\n }\n get columns() {\n return this._columns;\n }\n isDisabled(column) {\n return !(this.allowHideAll || this.hasFiltered || column.hidden || this.columns.find(current => current !== column && !current.hidden)) ||\n (this.hasVisibleLocked && !this.hasUnlockedFiltered && this.unlockedCount === 1 && !column.locked && !column.hidden);\n }\n ngOnInit() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n this.domSubscriptions = this.renderer.listen(this.element.nativeElement, 'click', (e) => {\n if (hasClasses(e.target, 'k-checkbox')) {\n if (this.autoSync) {\n const index = parseInt(e.target.getAttribute('data-index'), 10);\n const column = this.columns[index];\n const hidden = !e.target.checked;\n if (Boolean(column.hidden) !== hidden) {\n this.ngZone.run(() => {\n column.hidden = hidden;\n this.columnChange.emit([column]);\n });\n }\n }\n else {\n this.updateDisabled();\n }\n }\n });\n });\n }\n ngOnDestroy() {\n if (this.domSubscriptions) {\n this.domSubscriptions();\n }\n }\n cancelChanges() {\n this.forEachCheckBox((element, index) => {\n element.checked = !this.columns[index].hidden;\n });\n this.updateDisabled();\n this.reset.emit();\n }\n applyChanges() {\n const changed = [];\n this.forEachCheckBox((element, index) => {\n const column = this.columns[index];\n const hidden = !element.checked;\n if (Boolean(column.hidden) !== hidden) {\n column.hidden = hidden;\n changed.push(column);\n }\n });\n this.updateDisabled();\n this.apply.emit(changed);\n }\n forEachCheckBox(callback) {\n const checkboxes = this.element.nativeElement.getElementsByClassName('k-checkbox');\n const length = checkboxes.length;\n for (let idx = 0; idx < length; idx++) {\n callback(checkboxes[idx], idx);\n }\n }\n updateDisabled() {\n if (this.allowHideAll && !this.hasLocked) {\n return;\n }\n const checkedItems = [];\n this.forEachCheckBox((checkbox, index) => {\n if (checkbox.checked) {\n checkedItems.push({ checkbox, index });\n }\n checkbox.disabled = false;\n });\n if (!this.allowHideAll && checkedItems.length === 1 && !this.hasFiltered) {\n checkedItems[0].checkbox.disabled = true;\n }\n else if (this.hasLocked && !this.hasUnlockedFiltered) {\n const columns = this.columns;\n const checkedUnlocked = checkedItems.filter(item => !columns[item.index].locked);\n if (checkedUnlocked.length === 1) {\n checkedUnlocked[0].checkbox.disabled = true;\n }\n }\n }\n updateColumnState() {\n this.hasLocked = this.allColumns.filter(column => column.locked && (!column.hidden || column.includeInChooser !== false)).length > 0;\n this.hasVisibleLocked = this.allColumns.filter(column => column.locked && !column.hidden).length > 0;\n this.unlockedCount = this.columns.filter(column => !column.locked && !column.hidden).length;\n const filteredColumns = this.allColumns.filter(column => column.includeInChooser === false && !column.hidden);\n if (filteredColumns.length) {\n this.hasFiltered = filteredColumns.length > 0;\n this.hasUnlockedFiltered = filteredColumns.filter(column => !column.locked).length > 0;\n }\n else {\n this.hasFiltered = false;\n this.hasUnlockedFiltered = false;\n }\n }\n}\nColumnListComponent.ɵfac = function ColumnListComponent_Factory(t) { return new (t || ColumnListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nColumnListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnListComponent, selectors: [[\"kendo-grid-columnlist\"]], hostVars: 2, hostBindings: function ColumnListComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-column-list-wrapper\", ctx.className);\n } }, inputs: { autoSync: \"autoSync\", allowHideAll: \"allowHideAll\", actionsClass: \"actionsClass\", columns: \"columns\", applyText: \"applyText\", resetText: \"resetText\" }, outputs: { reset: \"reset\", apply: \"apply\", columnChange: \"columnChange\" }, decls: 3, vars: 2, consts: [[1, \"k-column-list\"], [\"class\", \"k-column-list-item\", 4, \"ngFor\", \"ngForOf\"], [3, \"ngClass\", 4, \"ngIf\"], [1, \"k-column-list-item\"], [\"type\", \"checkbox\", 1, \"k-checkbox\", 3, \"checked\", \"disabled\"], [1, \"k-checkbox-label\"], [3, \"ngClass\"], [\"type\", \"button\", 1, \"k-button\", 3, \"click\"], [\"type\", \"button\", 1, \"k-button\", \"k-primary\", 3, \"click\"]], template: function ColumnListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵtemplate(1, ColumnListComponent_label_1_Template, 4, 4, \"label\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(2, ColumnListComponent_div_2_Template, 5, 3, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.columns);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.autoSync);\n } }, directives: [ɵngcc5.NgForOf, ɵngcc5.NgIf, ɵngcc5.NgClass], encapsulation: 2 });\n/** @nocollapse */\nColumnListComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: NgZone },\n { type: Renderer2 }\n];\nColumnListComponent.propDecorators = {\n className: [{ type: HostBinding, args: [\"class.k-column-list-wrapper\",] }],\n reset: [{ type: Output }],\n apply: [{ type: Output }],\n columnChange: [{ type: Output }],\n columns: [{ type: Input }],\n autoSync: [{ type: Input }],\n allowHideAll: [{ type: Input }],\n applyText: [{ type: Input }],\n resetText: [{ type: Input }],\n actionsClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnListComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnlist',\n template: `\n
\n \n
\n
\n \n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { reset: [{\n type: Output\n }], apply: [{\n type: Output\n }], columnChange: [{\n type: Output\n }], autoSync: [{\n type: Input\n }], allowHideAll: [{\n type: Input\n }], actionsClass: [{\n type: Input\n }], className: [{\n type: HostBinding,\n args: [\"class.k-column-list-wrapper\"]\n }], columns: [{\n type: Input\n }], applyText: [{\n type: Input\n }], resetText: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the component for selecting columns in the Grid. To enable the user to show or hide columns,\n * add the component inside a [`ToolbarTemplate`]({% slug api_grid_toolbartemplatedirective %}) directive.\n *\n * @example\n * {% meta height:300 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnChooserComponent {\n constructor(localization, columnInfoService, popupService, ngZone, renderer, changeDetector) {\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.popupService = popupService;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.changeDetector = changeDetector;\n /**\n * Specifies if the changes in the visibility of the column will be immediately applied.\n */\n this.autoSync = false;\n /**\n * Specifies if all columns can be hidden.\n */\n this.allowHideAll = true;\n }\n get columns() {\n return this.columnInfoService.leafNamedColumns;\n }\n ngOnDestroy() {\n this.close();\n }\n /**\n * @hidden\n */\n toggle(anchor, template) {\n if (!this.popupRef) {\n const direction = this.localization.rtl ? 'right' : 'left';\n this.popupRef = this.popupService.open({\n anchor: anchor,\n content: template,\n positionMode: 'absolute',\n anchorAlign: { vertical: 'bottom', horizontal: direction },\n popupAlign: { vertical: 'top', horizontal: direction }\n });\n this.renderer.setAttribute(this.popupRef.popupElement, 'dir', this.localization.rtl ? 'rtl' : 'ltr');\n this.ngZone.runOutsideAngular(() => this.closeClick = this.renderer.listen(\"document\", \"click\", ({ target }) => {\n if (!closest(target, node => node === this.popupRef.popupElement || node === anchor)) {\n this.close();\n }\n }));\n }\n else {\n this.close();\n }\n }\n /**\n * @hidden\n */\n onApply(changed) {\n this.close();\n if (changed.length) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n }\n /**\n * @hidden\n */\n onChange(changed) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n close() {\n if (this.popupRef) {\n this.popupRef.close();\n this.popupRef = null;\n }\n this.detachClose();\n }\n detachClose() {\n if (this.closeClick) {\n this.closeClick();\n this.closeClick = null;\n }\n }\n}\nColumnChooserComponent.ɵfac = function ColumnChooserComponent_Factory(t) { return new (t || ColumnChooserComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc3.PopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnChooserComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnChooserComponent, selectors: [[\"kendo-grid-column-chooser\"]], inputs: { autoSync: \"autoSync\", allowHideAll: \"allowHideAll\" }, decls: 5, vars: 1, consts: [[\"type\", \"button\", 1, \"k-button\", \"k-bare\", \"k-button-icon\", 3, \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-columns\"], [\"template\", \"\"], [1, \"k-column-chooser-title\"], [3, \"columns\", \"applyText\", \"resetText\", \"autoSync\", \"allowHideAll\", \"apply\", \"columnChange\"]], template: function ColumnChooserComponent_Template(rf, ctx) { if (rf & 1) {\n const _r339 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnChooserComponent_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r339); const _r333 = ɵngcc0.ɵɵreference(1); const _r334 = ɵngcc0.ɵɵreference(4); return ctx.toggle(_r333, _r334); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnChooserComponent_ng_template_3_Template, 3, 6, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"columns\"));\n } }, directives: [ColumnListComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnChooserComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: PopupService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ChangeDetectorRef }\n];\nColumnChooserComponent.propDecorators = {\n autoSync: [{ type: Input }],\n allowHideAll: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnChooserComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-column-chooser',\n template: `\n \n \n {{ localization.get('columns') }}\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc3.PopupService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }]; }, { autoSync: [{\n type: Input\n }], allowHideAll: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the service that is passed to the\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuService {\n constructor() {\n /**\n * @hidden\n */\n this.closeMenu = new EventEmitter();\n }\n /**\n * Closes the column menu.\n */\n close() {\n this.closeMenu.emit();\n }\n}\nColumnMenuService.ɵfac = function ColumnMenuService_Factory(t) { return new (t || ColumnMenuService)(); };\nColumnMenuService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: ColumnMenuService, factory: ColumnMenuService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * @hidden\n */\nclass ColumnMenuItemBase {\n constructor() {\n this.hostClass = true;\n }\n ngOnInit() {\n if (isDevMode() && !this.service) {\n throw new Error('The service input of the predefined column menu components is mandatory.');\n }\n }\n /**\n * @hidden\n */\n close() {\n this.service.close();\n }\n}\nColumnMenuItemBase.ɵfac = function ColumnMenuItemBase_Factory(t) { return new (t || ColumnMenuItemBase)(); };\nColumnMenuItemBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuItemBase, hostVars: 2, hostBindings: function ColumnMenuItemBase_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-columnmenu-item-wrapper\", ctx.hostClass);\n } }, inputs: { service: \"service\" } });\nColumnMenuItemBase.propDecorators = {\n service: [{ type: Input }],\n hostClass: [{ type: HostBinding, args: ['class.k-columnmenu-item-wrapper',] }]\n};\n\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the component for selecting columns in the Grid that can be placed\n * inside a [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-chooser` component.\n *\n * @example\n * {% meta height:300 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnMenuChooserComponent extends ColumnMenuItemBase {\n constructor(localization, columnInfoService, changeDetector) {\n super();\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.changeDetector = changeDetector;\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n /**\n * Specifies if the content is expanded.\n */\n this.expanded = false;\n /**\n * @hidden\n */\n this.actionsClass = 'k-columnmenu-actions';\n }\n get columns() {\n return this.columnInfoService.leafNamedColumns;\n }\n /**\n * @hidden\n */\n onApply(changed) {\n this.close();\n if (changed.length) {\n this.changeDetector.markForCheck();\n this.columnInfoService.changeVisibility(changed);\n }\n }\n}\nColumnMenuChooserComponent.ɵfac = function ColumnMenuChooserComponent_Factory(t) { return new (t || ColumnMenuChooserComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnMenuChooserComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuChooserComponent, selectors: [[\"kendo-grid-columnmenu-chooser\"]], inputs: { expanded: \"expanded\" }, outputs: { expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [[\"icon\", \"columns\", 3, \"text\", \"expanded\", \"collapse\", \"expand\"], [\"kendoGridColumnMenuItemContentTemplate\", \"\"], [3, \"applyText\", \"resetText\", \"columns\", \"autoSync\", \"allowHideAll\", \"actionsClass\", \"apply\"]], template: function ColumnMenuChooserComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"collapse\", function ColumnMenuChooserComponent_Template_kendo_grid_columnmenu_item_collapse_0_listener() { return ctx.collapse.emit(); })(\"expand\", function ColumnMenuChooserComponent_Template_kendo_grid_columnmenu_item_expand_0_listener() { return ctx.expand.emit(); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuChooserComponent_ng_template_1_Template, 1, 6, \"ng-template\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"columns\"))(\"expanded\", ctx.expanded);\n } }, directives: function () { return [ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnListComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuChooserComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: ChangeDetectorRef }\n];\nColumnMenuChooserComponent.propDecorators = {\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n expanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuChooserComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-chooser',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc0.ChangeDetectorRef }]; }, { expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the component for editing column filters in the Grid that can be placed\n * inside a [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-filter` component.\n *\n * @example\n * {% meta height:400 %}\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n * {% endmeta %}\n */\nclass ColumnMenuFilterComponent extends ColumnMenuItemBase {\n constructor(localization) {\n super();\n this.localization = localization;\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n /**\n * Specifies if the content is expanded.\n */\n this.expanded = false;\n /**\n * @hidden\n */\n this.actionsClass = 'k-columnmenu-actions';\n }\n}\nColumnMenuFilterComponent.ɵfac = function ColumnMenuFilterComponent_Factory(t) { return new (t || ColumnMenuFilterComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nColumnMenuFilterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuFilterComponent, selectors: [[\"kendo-grid-columnmenu-filter\"]], inputs: { expanded: \"expanded\" }, outputs: { expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 2, consts: [[\"icon\", \"filter\", 3, \"text\", \"expanded\", \"collapse\", \"expand\"], [\"kendoGridColumnMenuItemContentTemplate\", \"\"], [3, \"column\", \"filter\", \"actionsClass\", \"close\"]], template: function ColumnMenuFilterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"collapse\", function ColumnMenuFilterComponent_Template_kendo_grid_columnmenu_item_collapse_0_listener() { return ctx.collapse.emit(); })(\"expand\", function ColumnMenuFilterComponent_Template_kendo_grid_columnmenu_item_expand_0_listener() { return ctx.expand.emit(); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuFilterComponent_ng_template_1_Template, 1, 3, \"ng-template\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"filter\"))(\"expanded\", ctx.expanded);\n } }, directives: function () { return [ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n FilterMenuContainerComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuFilterComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nColumnMenuFilterComponent.propDecorators = {\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n expanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuFilterComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-filter',\n template: `\n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents the content template of the\n * [`kendo-grid-columnmenu-item`]({% slug api_grid_columnmenuitemcomponent %}) component.\n * Provides an option for specifying the content of a column item.\n * To define the content template, nest an `` tag with the\n * `kendoGridColumnMenuItemContentTemplate` directive inside a ``.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * Item Content\n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuItemContentTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nColumnMenuItemContentTemplateDirective.ɵfac = function ColumnMenuItemContentTemplateDirective_Factory(t) { return new (t || ColumnMenuItemContentTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nColumnMenuItemContentTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ColumnMenuItemContentTemplateDirective, selectors: [[\"\", \"kendoGridColumnMenuItemContentTemplate\", \"\"]] });\n/** @nocollapse */\nColumnMenuItemContentTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuItemContentTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridColumnMenuItemContentTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents an item that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuItemComponent {\n constructor() {\n /**\n * Fires when the item is clicked.\n */\n this.itemClick = new EventEmitter();\n /**\n * Fires when the content is expanded.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the content is collapsed.\n */\n this.collapse = new EventEmitter();\n this.contentState = 'collapsed';\n }\n get iconClass() {\n return `k-i-${this.icon}`;\n }\n ngOnChanges(changes) {\n if (changes.expanded) {\n this.updateContentState();\n }\n }\n /**\n * @hidden\n */\n onClick(e) {\n this.itemClick.emit(e);\n if (this.contentTemplate) {\n this.expanded = !this.expanded;\n this.updateContentState();\n if (this.expanded) {\n this.expand.emit();\n }\n else {\n this.collapse.emit();\n }\n }\n }\n updateContentState() {\n this.contentState = this.expanded ? 'expanded' : 'collapsed';\n }\n}\nColumnMenuItemComponent.ɵfac = function ColumnMenuItemComponent_Factory(t) { return new (t || ColumnMenuItemComponent)(); };\nColumnMenuItemComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuItemComponent, selectors: [[\"kendo-grid-columnmenu-item\"]], contentQueries: function ColumnMenuItemComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnMenuItemContentTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentTemplate = _t.first);\n } }, inputs: { expanded: \"expanded\", icon: \"icon\", text: \"text\", selected: \"selected\", disabled: \"disabled\" }, outputs: { itemClick: \"itemClick\", expand: \"expand\", collapse: \"collapse\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 7, consts: [[1, \"k-columnmenu-item\", 3, \"click\"], [\"class\", \"k-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"style\", \"overflow:hidden;\", \"class\", \"k-columnmenu-item-content\", 4, \"ngIf\"], [1, \"k-icon\", 3, \"ngClass\"], [1, \"k-columnmenu-item-content\", 2, \"overflow\", \"hidden\"], [3, \"ngTemplateOutlet\"]], template: function ColumnMenuItemComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnMenuItemComponent_Template_div_click_0_listener($event) { return ctx.onClick($event); });\n ɵngcc0.ɵɵtemplate(1, ColumnMenuItemComponent_span_1_Template, 1, 1, \"span\", 1);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnMenuItemComponent_div_3_Template, 3, 2, \"div\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-state-selected\", ctx.selected)(\"k-state-disabled\", ctx.disabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.text, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contentTemplate);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgClass, ɵngcc5.NgTemplateOutlet], encapsulation: 2, data: { animation: [\n trigger('state', [\n state('collapsed', style({ display: 'none' })),\n state('expanded', style({ display: 'block' })),\n transition('collapsed => expanded', [\n style({\n height: '0px',\n display: 'block'\n }),\n animate('100ms ease-in', style({\n height: '*'\n }))\n ]),\n transition('expanded => collapsed', [\n style({\n height: '*'\n }),\n animate('100ms ease-in', style({\n height: '0px'\n }))\n ])\n ])\n ] } });\nColumnMenuItemComponent.propDecorators = {\n itemClick: [{ type: Output }],\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n icon: [{ type: Input }],\n text: [{ type: Input }],\n selected: [{ type: Input }],\n disabled: [{ type: Input }],\n expanded: [{ type: Input }],\n contentTemplate: [{ type: ContentChild, args: [ColumnMenuItemContentTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuItemComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('state', [\n state('collapsed', style({ display: 'none' })),\n state('expanded', style({ display: 'block' })),\n transition('collapsed => expanded', [\n style({\n height: '0px',\n display: 'block'\n }),\n animate('100ms ease-in', style({\n height: '*'\n }))\n ]),\n transition('expanded => collapsed', [\n style({\n height: '*'\n }),\n animate('100ms ease-in', style({\n height: '0px'\n }))\n ])\n ])\n ],\n selector: 'kendo-grid-columnmenu-item',\n template: `\n
\n \n \n {{ text }}\n
\n
\n \n \n
\n `\n }]\n }], function () { return []; }, { itemClick: [{\n type: Output\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], expanded: [{\n type: Input\n }], icon: [{\n type: Input\n }], text: [{\n type: Input\n }], selected: [{\n type: Input\n }], disabled: [{\n type: Input\n }], contentTemplate: [{\n type: ContentChild,\n args: [ColumnMenuItemContentTemplateDirective]\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents a column-menu item for sorting Grid columns that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n * Allows the user to sort the column.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-sort` component.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }, { Field1: 'Foo1', Field2: 'Bar1' }];\n * }\n *\n * ```\n */\nclass ColumnMenuSortComponent extends ColumnMenuItemBase {\n constructor(localization, sortService) {\n super();\n this.localization = localization;\n this.sortService = sortService;\n }\n get sortedAsc() {\n const descriptor = this.descriptor;\n return descriptor && (!descriptor.dir || descriptor.dir === 'asc');\n }\n get sortedDesc() {\n const descriptor = this.descriptor;\n return descriptor && descriptor.dir === 'desc';\n }\n /**\n * @hidden\n */\n toggleSort(dir) {\n const field = this.service.column.field;\n const { mode, allowUnsort } = normalize$1(this.service.sortable);\n const descriptor = this.descriptor;\n const sort = mode === 'multiple' ? this.service.sort.filter(s => s.field !== field) : [];\n if (descriptor && descriptor.dir === dir) {\n if (!allowUnsort) {\n return;\n }\n }\n else {\n sort.push({ field, dir });\n }\n this.sortService.sort(sort);\n this.close();\n }\n get descriptor() {\n return [].concat(this.service.sort || []).find(s => s.field === this.service.column.field);\n }\n}\nColumnMenuSortComponent.ɵfac = function ColumnMenuSortComponent_Factory(t) { return new (t || ColumnMenuSortComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(SortService)); };\nColumnMenuSortComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuSortComponent, selectors: [[\"kendo-grid-columnmenu-sort\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 4, consts: [[\"icon\", \"sort-asc-sm\", 3, \"text\", \"selected\", \"itemClick\"], [\"icon\", \"sort-desc-sm\", 3, \"text\", \"selected\", \"itemClick\"]], template: function ColumnMenuSortComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuSortComponent_Template_kendo_grid_columnmenu_item_itemClick_0_listener() { return ctx.toggleSort(\"asc\"); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(1, \"kendo-grid-columnmenu-item\", 1);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuSortComponent_Template_kendo_grid_columnmenu_item_itemClick_1_listener() { return ctx.toggleSort(\"desc\"); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"sortAscending\"))(\"selected\", ctx.sortedAsc);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"text\", ctx.localization.get(\"sortDescending\"))(\"selected\", ctx.sortedDesc);\n } }, directives: [ColumnMenuItemComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnMenuSortComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: SortService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuSortComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-sort',\n template: `\n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: SortService }]; }, null); })();\n\nconst POPUP_CLASS = 'k-grid-columnmenu-popup';\n/**\n * Represents the [column menu]({% slug columnmenu_grid %}) component.\n */\nclass ColumnMenuComponent {\n constructor(popupService, localization, service) {\n this.popupService = popupService;\n this.localization = localization;\n this.service = service;\n /**\n * @hidden\n */\n this.standalone = true;\n /**\n * The settings for the Column Menu.\n */\n this.settings = {};\n /**\n * @hidden\n */\n this.sortable = true;\n /**\n * @hidden\n */\n this.expandedFilter = false;\n /**\n * @hidden\n */\n this.expandedColumns = false;\n this.closeSubscription = service.closeMenu.subscribe(this.close.bind(this));\n }\n /**\n * @hidden\n */\n get isActive() {\n return (this.hasFilter && filtersByField(this.filter, this.column.field).length > 0) ||\n (!this.sortable && this.hasSort && this.sort.find(descriptor => descriptor.field === this.column.field));\n }\n /**\n * @hidden\n */\n get hasFilter() {\n return hasFilter(this.settings, this.column);\n }\n /**\n * @hidden\n */\n get hasSort() {\n return hasSort(this.settings, this.column);\n }\n /**\n * @hidden\n */\n get hasColumnChooser() {\n return hasColumnChooser(this.settings);\n }\n /**\n * @hidden\n */\n get hasLock() {\n return hasLock(this.settings, this.column);\n }\n ngOnChanges() {\n this.service.column = this.column;\n this.service.sort = this.sort;\n this.service.filter = this.filter;\n this.service.sortable = this.sortable;\n }\n ngOnDestroy() {\n this.close();\n this.closeSubscription.unsubscribe();\n }\n /**\n * @hidden\n */\n toggle(e, anchor, template) {\n e.preventDefault();\n this.expandedFilter = !this.hasColumnChooser;\n this.expandedColumns = !this.hasFilter;\n this.popupRef = this.popupService.open(anchor, template, this.popupRef, POPUP_CLASS);\n }\n /**\n * @hidden\n */\n close() {\n this.popupService.destroy();\n this.popupRef = null;\n }\n /**\n * @hidden\n */\n onColumnsExpand() {\n this.expandedColumns = true;\n this.expandedFilter = false;\n }\n /**\n * @hidden\n */\n onFilterExpand() {\n this.expandedFilter = true;\n this.expandedColumns = false;\n }\n}\nColumnMenuComponent.ɵfac = function ColumnMenuComponent_Factory(t) { return new (t || ColumnMenuComponent)(ɵngcc0.ɵɵdirectiveInject(SinglePopupService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnMenuService)); };\nColumnMenuComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuComponent, selectors: [[\"kendo-grid-column-menu\"]], hostVars: 2, hostBindings: function ColumnMenuComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-column-menu-standalone\", ctx.standalone);\n } }, inputs: { standalone: \"standalone\", settings: \"settings\", sortable: \"sortable\", column: \"column\", sort: \"sort\", filter: \"filter\", columnMenuTemplate: \"columnMenuTemplate\" }, features: [ɵngcc0.ɵɵProvidersFeature([ColumnMenuService]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 7, vars: 4, consts: [[\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-grid-column-menu\", \"k-grid-filter\", 3, \"ngClass\", \"click\"], [\"anchor\", \"\"], [1, \"k-icon\", \"k-i-more-vertical\"], [\"template\", \"\"], [\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"service\", 4, \"ngIf\"], [3, \"service\", \"expanded\", \"expand\", 4, \"ngIf\"], [3, \"service\"], [3, \"service\", \"expanded\", \"expand\"]], template: function ColumnMenuComponent_Template(rf, ctx) { if (rf & 1) {\n const _r361 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"a\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function ColumnMenuComponent_Template_a_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r361); const _r348 = ɵngcc0.ɵɵreference(1); const _r349 = ɵngcc0.ɵɵreference(4); return ctx.toggle($event, _r348, _r349); });\n ɵngcc0.ɵɵelement(2, \"span\", 2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(3, ColumnMenuComponent_ng_template_3_Template, 1, 5, \"ng-template\", null, 3, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(5, ColumnMenuComponent_ng_template_5_Template, 4, 4, \"ng-template\", null, 4, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngClass\", ɵngcc0.ɵɵpureFunction1(2, _c156, ctx.isActive));\n ɵngcc0.ɵɵattribute(\"title\", ctx.localization.get(\"columnMenu\"));\n } }, directives: function () { return [ɵngcc5.NgClass, ɵngcc5.NgTemplateOutlet, ɵngcc5.NgIf, ColumnMenuSortComponent,\n ColumnMenuLockComponent,\n ColumnMenuChooserComponent,\n ColumnMenuFilterComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nColumnMenuComponent.ctorParameters = () => [\n { type: SinglePopupService },\n { type: LocalizationService },\n { type: ColumnMenuService }\n];\nColumnMenuComponent.propDecorators = {\n standalone: [{ type: HostBinding, args: ['class.k-grid-column-menu-standalone',] }, { type: Input }],\n column: [{ type: Input }],\n settings: [{ type: Input }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n sortable: [{ type: Input }],\n columnMenuTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuComponent, [{\n type: Component,\n args: [{\n providers: [ColumnMenuService],\n selector: 'kendo-grid-column-menu',\n template: `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: SinglePopupService }, { type: ɵngcc1.LocalizationService }, { type: ColumnMenuService }]; }, { standalone: [{\n type: HostBinding,\n args: ['class.k-grid-column-menu-standalone']\n }, {\n type: Input\n }], settings: [{\n type: Input\n }], sortable: [{\n type: Input\n }], column: [{\n type: Input\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], columnMenuTemplate: [{\n type: Input\n }] }); })();\n\n/* tslint:disable:max-line-length */\n/**\n * Represents a column-menu item that can be placed inside a\n * [`ColumnMenuTemplate`]({% slug api_grid_columnmenutemplatedirective %}) directive.\n * Allows the user to lock or unlock the columns.\n *\n * > You have to set the [ColumnMenuService]({% slug api_grid_columnmenuservice %}) that is passed by\n * > the template to the service input of the `kendo-grid-columnmenu-lock` component.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public data: any[] = [{ Field1: 'Foo', Field2: 'Bar' }];\n * }\n *\n * ```\n */\nclass ColumnMenuLockComponent extends ColumnMenuItemBase {\n constructor(localization, columnInfoService, changeDetector) {\n super();\n this.localization = localization;\n this.columnInfoService = columnInfoService;\n this.changeDetector = changeDetector;\n }\n get text() {\n return this.localization.get(this.locked ? 'unlock' : 'lock');\n }\n get icon() {\n return this.locked ? 'unlock' : 'lock';\n }\n get disabled() {\n return !this.locked && this.columnInfoService.unlockedRootCount < 2;\n }\n /**\n * @hidden\n */\n toggleColumn() {\n this.toggleHierarchy(!this.locked);\n this.close();\n this.changeDetector.markForCheck();\n }\n toggleHierarchy(locked) {\n let root = this.service.column;\n while (root.parent) {\n root = root.parent;\n }\n const columns = [root];\n const allChanged = [];\n while (columns.length) {\n const column = columns.shift();\n column.locked = locked;\n allChanged.push(column);\n if (column.hasChildren) {\n columns.push(...column.childrenArray);\n }\n }\n this.columnInfoService.changeLocked(allChanged);\n }\n get locked() {\n return this.service.column.locked;\n }\n}\nColumnMenuLockComponent.ɵfac = function ColumnMenuLockComponent_Factory(t) { return new (t || ColumnMenuLockComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nColumnMenuLockComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ColumnMenuLockComponent, selectors: [[\"kendo-grid-columnmenu-lock\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 1, vars: 3, consts: [[3, \"text\", \"icon\", \"disabled\", \"itemClick\"]], template: function ColumnMenuLockComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"kendo-grid-columnmenu-item\", 0);\n ɵngcc0.ɵɵlistener(\"itemClick\", function ColumnMenuLockComponent_Template_kendo_grid_columnmenu_item_itemClick_0_listener() { return ctx.toggleColumn(); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"text\", ctx.text)(\"icon\", ctx.icon)(\"disabled\", ctx.disabled);\n } }, directives: [ColumnMenuItemComponent], encapsulation: 2 });\n/** @nocollapse */\nColumnMenuLockComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: ColumnInfoService },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuLockComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-columnmenu-lock',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ColumnInfoService }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\nconst COMPONENTS$1 = [\n ColumnListComponent,\n ColumnChooserComponent,\n ColumnMenuChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuComponent,\n ColumnMenuLockComponent,\n ColumnMenuTemplateDirective\n];\n/**\n * @hidden\n */\nclass ColumnMenuModule {\n static exports() {\n return [\n ColumnChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuLockComponent,\n ColumnMenuChooserComponent,\n ColumnMenuTemplateDirective,\n ColumnMenuComponent\n ];\n }\n}\nColumnMenuModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ColumnMenuModule });\nColumnMenuModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ColumnMenuModule_Factory(t) { return new (t || ColumnMenuModule)(); }, imports: [[CommonModule, FilterMenuModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ColumnMenuModule, { declarations: function () { return [ColumnListComponent,\n ColumnChooserComponent,\n ColumnMenuChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuComponent,\n ColumnMenuLockComponent,\n ColumnMenuTemplateDirective]; }, imports: function () { return [CommonModule,\n FilterMenuModule]; }, exports: function () { return [ColumnListComponent,\n ColumnChooserComponent,\n ColumnMenuChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuComponent,\n ColumnMenuLockComponent,\n ColumnMenuTemplateDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ColumnMenuModule, [{\n type: NgModule,\n args: [{\n declarations: [COMPONENTS$1],\n imports: [CommonModule, FilterMenuModule],\n exports: [COMPONENTS$1]\n }]\n }], null, null); })();\n\nconst exportedModules$2 = [\n HeaderComponent,\n HeaderTemplateDirective,\n ColumnHandleDirective,\n SelectAllCheckboxDirective\n];\nconst importedModules$2 = [\n CommonModule,\n GroupModule,\n RowFilterModule,\n FilterMenuModule,\n SharedModule,\n DragAndDropModule,\n ColumnMenuModule\n];\n/**\n * @hidden\n */\nclass HeaderModule {\n static exports() {\n return [\n HeaderTemplateDirective,\n SelectAllCheckboxDirective\n ];\n }\n}\nHeaderModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: HeaderModule });\nHeaderModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function HeaderModule_Factory(t) { return new (t || HeaderModule)(); }, imports: [[...importedModules$2]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(HeaderModule, { declarations: [HeaderComponent,\n HeaderTemplateDirective,\n ColumnHandleDirective,\n SelectAllCheckboxDirective], imports: [CommonModule,\n GroupModule,\n RowFilterModule,\n FilterMenuModule,\n SharedModule,\n DragAndDropModule,\n ColumnMenuModule], exports: [HeaderComponent,\n HeaderTemplateDirective,\n ColumnHandleDirective,\n SelectAllCheckboxDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(HeaderModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$2],\n exports: [exportedModules$2],\n imports: [...importedModules$2]\n }]\n }], null, null); })();\n\n/**\n * Represents the command columns of the Grid. You have to define the content of the\n * column inside an `` tag. The template context is set to the current\n * data item. For more information and examples on using the passed fields\n * and the command directives, refer to the article on\n * [editing the Grid in Angular Reactive Forms]({% slug editing_reactive_forms_grid %}).\n *\n * The following additional fields are passed:\n * - `columnIndex`—The current column index.\n * - `rowIndex`—The current data row index. If inside a new item row, `rowIndex`is `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n *\n * Usually, the template contains CRUD command directives such as:\n * - [`EditCommandDirective`]({% slug api_grid_editcommanddirective %})\n * - [`RemoveCommandDirective`]({% slug api_grid_removecommanddirective %})\n * - [`CancelCommandDirective`]({% slug api_grid_cancelcommanddirective %})\n * - [`SaveCommandDirective`]({% slug api_grid_savecommanddirective %})\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass CommandColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n}\nCommandColumnComponent.ɵfac = function CommandColumnComponent_Factory(t) { return new (t || CommandColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nCommandColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CommandColumnComponent, selectors: [[\"kendo-grid-command-column\"]], contentQueries: function CommandColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CommandColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CommandColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCommandColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nCommandColumnComponent.propDecorators = {\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CommandColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CommandColumnComponent)\n }\n ],\n selector: 'kendo-grid-command-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }] }); })();\n\n/**\n * Represents the checkbox for selecting columns in the Grid. If the column is\n * defined as empty, it renders a default checkbox for row selection.\n * You can also define the content of the column inside an `` tag.\n * The input requires you to include the `SelectionCheckbox` option.\n *\n * The template context is set to the current data item and the following additional fields are passed:\n * - `columnIndex`—The current column index.\n * - `rowIndex`—The current data row index. If inside a new item row, it will be `-1`.\n * - `dataItem`—The current data item.\n * - `column`—The current column instance.\n * - `isNew`—The state of the current item.\n *\n * For more examples, refer to:\n * - [Selecting or deselecting all items on a page]({% slug selection_grid %}#toc-select-all-feature)\n * - [Persisting the selection]({% slug selection_grid %}#toc-in-combination-with-the-select-all-feature)\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * Select row \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass CheckboxColumnComponent extends ColumnBase$1 {\n constructor(parent) {\n super(parent);\n this.parent = parent;\n /*\n * @hidden\n */\n this.isCheckboxColumn = true;\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n}\nCheckboxColumnComponent.ɵfac = function CheckboxColumnComponent_Factory(t) { return new (t || CheckboxColumnComponent)(ɵngcc0.ɵɵdirectiveInject(ColumnBase$1, 13)); };\nCheckboxColumnComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CheckboxColumnComponent, selectors: [[\"kendo-grid-checkbox-column\"]], contentQueries: function CheckboxColumnComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, CellTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n } }, inputs: { showSelectAll: \"showSelectAll\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CheckboxColumnComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CheckboxColumnComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCheckboxColumnComponent.ctorParameters = () => [\n { type: ColumnBase$1, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] }\n];\nCheckboxColumnComponent.propDecorators = {\n showSelectAll: [{ type: Input }],\n template: [{ type: ContentChild, args: [CellTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CheckboxColumnComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: ColumnBase$1,\n useExisting: forwardRef(() => CheckboxColumnComponent)\n }\n ],\n selector: 'kendo-grid-checkbox-column',\n template: ``\n }]\n }], function () { return [{ type: ColumnBase$1, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }]; }, { showSelectAll: [{\n type: Input\n }], template: [{\n type: ContentChild,\n args: [CellTemplateDirective]\n }] }); })();\n\n/* tslint:disable:no-input-rename */\n/**\n * Represents the row-selection checkbox of the Grid. The directive expects the\n * index of the current row as an input parameter. Inside the\n * [`CheckboxColumnComponent`]({% slug api_grid_checkboxcolumncomponent %}), apply the\n * directive to an `input` element. When the user clicks the checkbox that is associated\n * with the directive, a [`selectionChange`]({% slug api_grid_gridcomponent %}#toc-selectionChange)\n * event is triggered.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Select row \n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n *\n * class AppComponent {\n * public gridData: any[];\n *\n * constructor() {\n * this.gridData = products;\n * }\n * }\n *\n * const products = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000,\n * \"Discontinued\": true\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000,\n * \"Discontinued\": false\n * }\n * ];\n *\n * ```\n */\nclass SelectionCheckboxDirective {\n constructor(selectionService, el, renderer, ngZone) {\n this.selectionService = selectionService;\n this.el = el;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.type = \"checkbox\";\n this.ngZone.runOutsideAngular(() => {\n this.destroyClick = this.renderer.listen(this.el.nativeElement, \"click\", this.onClick.bind(this));\n this.destroyKeyDown = this.renderer.listen(this.el.nativeElement, \"keydown\", this.onKeyDown.bind(this));\n });\n }\n ngAfterContentChecked() {\n this.setCheckedState();\n }\n ngOnDestroy() {\n if (this.destroyClick) {\n this.destroyClick();\n }\n if (this.destroyKeyDown) {\n this.destroyKeyDown();\n }\n }\n onClick() {\n if (this.selectionService.options.enabled) {\n this.ngZone.run(() => {\n const ev = this.selectionService.toggleByIndex(this.itemIndex);\n ev.ctrlKey = true;\n ev.shiftKey = false;\n this.selectionService.changes.emit(ev);\n });\n }\n }\n onKeyDown(e) {\n if (e.keyCode === Keys.Enter) {\n this.onClick();\n }\n }\n /*\n * @hidden\n */\n setCheckedState() {\n this.renderer.setProperty(this.el.nativeElement, \"checked\", this.selectionService.isSelected(this.itemIndex));\n }\n}\nSelectionCheckboxDirective.ɵfac = function SelectionCheckboxDirective_Factory(t) { return new (t || SelectionCheckboxDirective)(ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSelectionCheckboxDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SelectionCheckboxDirective, selectors: [[\"\", \"kendoGridSelectionCheckbox\", \"\"]], hostVars: 1, hostBindings: function SelectionCheckboxDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"type\", ctx.type);\n } }, inputs: { itemIndex: [\"kendoGridSelectionCheckbox\", \"itemIndex\"] } });\n/** @nocollapse */\nSelectionCheckboxDirective.ctorParameters = () => [\n { type: SelectionService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: NgZone }\n];\nSelectionCheckboxDirective.propDecorators = {\n itemIndex: [{ type: Input, args: [\"kendoGridSelectionCheckbox\",] }],\n type: [{ type: HostBinding, args: ['attr.type',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SelectionCheckboxDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSelectionCheckbox]'\n }]\n }], function () { return [{ type: SelectionService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }]; }, { type: [{\n type: HostBinding,\n args: ['attr.type']\n }], itemIndex: [{\n type: Input,\n args: [\"kendoGridSelectionCheckbox\"]\n }] }); })();\n\nconst columnCellIndex = (cell, cells) => {\n let cellIndex = 0;\n for (let idx = 0; idx < cells.length; idx++) {\n if (cells[idx] === cell) {\n return cellIndex;\n }\n if (!hasClasses(cells[idx], 'k-hierarchy-cell k-group-cell')) {\n cellIndex++;\n }\n }\n};\n/**\n * @hidden\n */\nclass TableBodyComponent {\n constructor(detailsService, groupsService, changeNotification, editService, localization, ngZone, renderer, element, domEvents, selectionService, cellSelectionService, columnInfoService, navigationService) {\n this.detailsService = detailsService;\n this.groupsService = groupsService;\n this.changeNotification = changeNotification;\n this.editService = editService;\n this.localization = localization;\n this.ngZone = ngZone;\n this.renderer = renderer;\n this.element = element;\n this.domEvents = domEvents;\n this.selectionService = selectionService;\n this.cellSelectionService = cellSelectionService;\n this.columnInfoService = columnInfoService;\n this.navigationService = navigationService;\n this.columns = [];\n this.groups = [];\n this.skip = 0;\n this.noRecordsText = this.localization.get('noRecords');\n this.isLocked = false;\n this.skipGroupDecoration = false;\n this.showGroupFooters = false;\n this.lockedColumnsCount = 0;\n this.totalColumnsCount = 0;\n this.trackBy = defaultTrackBy;\n this.rowClass = () => null;\n this.cellKeydownSubscription = this.navigationService.cellKeydown.subscribe((args) => this.cellKeydownHandler(args));\n this.trackByWrapper = this.trackByWrapper.bind(this);\n this.trackByColumns = this.trackByColumns.bind(this);\n }\n get newDataItem() {\n return this.editService.newDataItem;\n }\n // Number of unlocked columns in the next table, if any\n get unlockedColumnsCount() {\n return this.totalColumnsCount - this.lockedColumnsCount - (this.allColumns || this.columns).length;\n }\n isAriaSelected(item, column) {\n return this.cellSelectionService.isCellSelected(item, column) ||\n this.isRowSelected(item) ? 'true' : 'false';\n }\n toggleRow(index, dataItem) {\n this.detailsService.toggleRow(index, dataItem);\n return false;\n }\n isExpanded(viewItem) {\n return this.detailsService.isExpanded(viewItem.index, viewItem.data);\n }\n detailButtonStyles(viewItem) {\n const expanded = this.isExpanded(viewItem);\n return expanded ? 'k-minus' : 'k-plus';\n }\n detailButtonTitle(viewItem) {\n const messageKey = this.isExpanded(viewItem) ? 'detailCollapse' : 'detailExpand';\n return this.localization.get(messageKey);\n }\n isGroup(item) {\n return item.type === 'group';\n }\n isDataItem(item) {\n return !this.isGroup(item) && !this.isFooter(item);\n }\n isFooter(item) {\n return item.type === 'footer';\n }\n isInExpandedGroup(item) {\n return this.groupsService.isInExpandedGroup(item.groupIndex, false);\n }\n isParentGroupExpanded(item) {\n return this.groupsService.isInExpandedGroup(item.index || item.groupIndex);\n }\n isOdd(item) {\n return item.index % 2 !== 0;\n }\n isSelectable() {\n return this.selectable && this.selectable.enabled !== false;\n }\n isRowSelected(item) {\n return this.selectionService.isSelected(item.index);\n }\n trackByWrapper(index, item) {\n if (item.type === 'data') {\n item.isEditing = this.editService.hasEdited(item.index);\n }\n return this.trackBy(index, item);\n }\n trackByColumns(index, item) {\n return this.virtualColumns ? index : item;\n }\n ngDoCheck() {\n if (this.hasGroupHeaderColumn) {\n this.groupHeaderColumns = columnsToRender(this.skipGroupDecoration ? this.columns : this.columns.toArray().slice(1));\n }\n else {\n this.groupHeaderColumns = [];\n }\n if (this.isLocked) {\n this.groupHeaderSlaveCellsCount =\n this.hasGroupHeaderColumn ? this.columnsContainer.nonLockedColumnsToRender.length : 1;\n }\n else {\n this.groupHeaderSlaveCellsCount = 0;\n }\n }\n ngOnChanges(changes) {\n if (isChanged(\"columns\", changes, false)) {\n this.changeNotification.notify();\n }\n }\n logicalRowIndex(rowIndex) {\n let pos = this.skip + rowIndex;\n if (this.hasDetailTemplate) {\n pos *= 2;\n }\n const absoluteRowIndex = 1 + pos;\n const addRowOffset = this.editService.hasNewItem ? 1 : 0;\n const filterRowOffset = hasFilterRow(this.filterable) ? 1 : 0;\n const headerRowCount = this.columnInfoService.totalLevels + filterRowOffset + addRowOffset;\n return absoluteRowIndex + headerRowCount;\n }\n addRowLogicalIndex() {\n return this.columnInfoService.totalLevels + 1 +\n (hasFilterRow(this.filterable) ? 1 : 0);\n }\n logicalColIndex(column) {\n if (!isPresent(column.leafIndex)) {\n return -1;\n }\n return column.leafIndex + (this.hasDetailTemplate ? 1 : 0);\n }\n ngOnInit() {\n this.ngZone.runOutsideAngular(() => {\n const clickHandler = this.clickHandler.bind(this);\n const mousedownSubscription = this.renderer.listen(this.element.nativeElement, 'mousedown', clickHandler);\n const mouseupSubscription = this.renderer.listen(this.element.nativeElement, 'mouseup', clickHandler);\n const clickSubscription = this.renderer.listen(this.element.nativeElement, 'click', clickHandler);\n const contextmenuSubscription = this.renderer.listen(this.element.nativeElement, 'contextmenu', clickHandler);\n const touchstartSubscription = this.renderer.listen(this.element.nativeElement, 'touchstart', clickHandler);\n const touchendSubscription = this.renderer.listen(this.element.nativeElement, 'touchend', clickHandler);\n this.clickSubscription = () => {\n mousedownSubscription();\n mouseupSubscription();\n clickSubscription();\n contextmenuSubscription();\n };\n this.touchSubscription = () => {\n touchstartSubscription();\n touchendSubscription();\n };\n });\n let originalNoRecordText = this.localization.get('noRecords');\n this.localization.changes.subscribe(() => {\n if (this.noRecordsText === originalNoRecordText) {\n this.noRecordsText = this.localization.get('noRecords');\n originalNoRecordText = this.noRecordsText;\n }\n });\n }\n ngOnDestroy() {\n if (this.clickSubscription) {\n this.clickSubscription();\n }\n if (this.touchSubscription) {\n this.touchSubscription();\n }\n this.cellKeydownSubscription.unsubscribe();\n clearTimeout(this.clickTimeout);\n }\n isEditingCell(index, column) {\n return this.editService.isEditing() && this.editService.isEditedColumn(index, column);\n }\n isEditingRow(index) {\n return this.editService.isEditing() && this.editService.hasEdited(index);\n }\n get hasGroupHeaderColumn() {\n return this.columnsContainer.hasGroupHeaderColumn;\n }\n get columnsContainer() {\n return this.columnInfoService.columnsContainer;\n }\n get columnsSpan() {\n return columnsSpan(this.columns);\n }\n get allColumnsSpan() {\n return columnsSpan(this.allColumns || this.columns);\n }\n get colSpan() {\n return this.columnsSpan + this.groups.length + (this.hasDetailTemplate ? 1 : 0);\n }\n get footerColumns() {\n return this.isLocked ? this.columnsContainer.lockedColumnsToRender : this.columnsContainer.nonLockedColumnsToRender;\n }\n showGroupHeader(item) {\n return !item.data.skipHeader;\n }\n get hasDetailTemplate() {\n return isPresent(this.detailTemplate);\n }\n clickHandler(eventArg) {\n const element = this.element.nativeElement;\n const target = this.eventTarget(eventArg);\n let cell, row, body, gridElement;\n let currentTarget = target;\n do {\n cell = closest(currentTarget, matchesNodeName('td'));\n row = closest(cell, matchesNodeName('tr'));\n body = closest(row, matchesNodeName('tbody'));\n currentTarget = body;\n gridElement = closestInScope(currentTarget, matchesClasses('k-grid'), element);\n } while (body && body !== element && !gridElement);\n if (cell && !hasClasses(cell, NON_DATA_CELL_CLASSES) &&\n !hasClasses(row, NON_DATA_ROW_CLASSES) &&\n body === element && !gridElement) {\n this.editService.preventCellClose();\n const focusable = target !== cell && isFocusableWithTabKey(target, false);\n if (!focusable && !matchesNodeName('label')(target) && !hasClasses(target, IGNORE_TARGET_CLASSSES) &&\n !closestInScope(target, matchesClasses(IGNORE_CONTAINER_CLASSES), cell)) {\n const args = this.cellClickArgs(cell, row, eventArg);\n if (eventArg.type === 'mousedown' || eventArg.type === 'touchstart') {\n this.domEvents.cellMousedown.emit(args);\n }\n else if (eventArg.type === 'mouseup' || eventArg.type === 'touchend') {\n this.domEvents.cellMouseup.emit(args);\n }\n else {\n if (args.isEditedColumn || !this.editService.closeCell(eventArg)) {\n if (eventArg.type === 'click') {\n this.clickTimeout = setTimeout(() => {\n this.emitCellClick(args);\n }, 0);\n }\n else {\n this.emitCellClick(args);\n }\n }\n }\n }\n }\n }\n emitCellClick(args) {\n this.domEvents.cellClick.emit(Object.assign(args, {\n isEdited: args.isEditedRow || args.isEditedColumn\n }));\n }\n cellKeydownHandler(args) {\n if (args.keyCode === Keys.Enter) {\n this.clickHandler(args);\n }\n }\n cellClickArgs(cell, row, eventArg) {\n const index = columnCellIndex(cell, row.cells);\n const column = this.columns.toArray()[index];\n const columnIndex = this.lockedColumnsCount + index;\n let rowIndex = row.getAttribute('data-kendo-grid-item-index');\n rowIndex = rowIndex ? parseInt(rowIndex, 10) : -1;\n const dataItem = rowIndex === -1 ? this.editService.newDataItem : this.data.at(rowIndex - this.skip);\n const isEditedColumn = this.editService.isEditedColumn(rowIndex, column);\n const isEditedRow = this.editService.isEdited(rowIndex);\n const type = eventArg.type === 'keydown' ? 'click' : eventArg.type;\n return {\n column: column,\n columnIndex: columnIndex,\n dataItem: dataItem,\n isEditedColumn: isEditedColumn,\n isEditedRow: isEditedRow,\n originalEvent: eventArg,\n rowIndex: rowIndex,\n type: type\n };\n }\n eventTarget(args) {\n if (args.type === 'touchend') {\n const touch = args.changedTouches[0];\n return document.elementFromPoint(touch.clientX, touch.clientY);\n }\n return args.target;\n }\n}\nTableBodyComponent.ɵfac = function TableBodyComponent_Factory(t) { return new (t || TableBodyComponent)(ɵngcc0.ɵɵdirectiveInject(DetailsService), ɵngcc0.ɵɵdirectiveInject(GroupsService), ɵngcc0.ɵɵdirectiveInject(ChangeNotificationService), ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(DomEventsService), ɵngcc0.ɵɵdirectiveInject(SelectionService), ɵngcc0.ɵɵdirectiveInject(CellSelectionService), ɵngcc0.ɵɵdirectiveInject(ColumnInfoService), ɵngcc0.ɵɵdirectiveInject(NavigationService)); };\nTableBodyComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TableBodyComponent, selectors: [[\"\", \"kendoGridTableBody\", \"\"]], inputs: { columns: \"columns\", groups: \"groups\", skip: \"skip\", noRecordsText: \"noRecordsText\", isLocked: \"isLocked\", skipGroupDecoration: \"skipGroupDecoration\", showGroupFooters: \"showGroupFooters\", lockedColumnsCount: \"lockedColumnsCount\", totalColumnsCount: \"totalColumnsCount\", trackBy: \"trackBy\", rowClass: \"rowClass\", allColumns: \"allColumns\", detailTemplate: \"detailTemplate\", noRecordsTemplate: \"noRecordsTemplate\", data: \"data\", selectable: \"selectable\", filterable: \"filterable\", virtualColumns: \"virtualColumns\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c157, decls: 3, vars: 4, consts: [[3, \"ngIf\"], [\"class\", \"k-grid-norecords\", 4, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-grid-add-row\", \"k-grid-edit-row\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"class\", \"k-hierarchy-cell\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngIf\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"isNew\", \"column\", \"dataItem\", \"ngClass\", \"ngStyle\", \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"class\", \"k-group-cell\", \"role\", \"presentation\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 1, \"k-group-cell\"], [\"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"isNew\", \"column\", \"dataItem\", \"ngClass\", \"ngStyle\", \"logicalRowIndex\", \"logicalColIndex\", \"colSpan\"], [1, \"k-grid-norecords\"], [3, \"ngIf\", \"templateContext\"], [4, \"ngIf\"], [\"kendoGridGroupHeader\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"groups\", \"item\", \"hasDetails\", \"skipGroupDecoration\", \"hasGroupHeaderColumn\", \"groupHeaderColumns\", \"rowIndex\", \"totalColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", \"ngClass\", \"k-alt\", \"k-master-row\", \"k-grid-edit-row\", \"k-state-selected\", 4, \"ngIf\"], [\"class\", \"k-detail-row\", \"kendoGridLogicalRow\", \"\", 3, \"k-alt\", \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", 4, \"ngIf\"], [\"class\", \"k-group-footer\", \"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", 4, \"ngIf\"], [\"kendoGridGroupHeader\", \"\", \"kendoGridLogicalRow\", \"\", 3, \"columns\", \"groups\", \"item\", \"hasDetails\", \"skipGroupDecoration\", \"hasGroupHeaderColumn\", \"groupHeaderColumns\", \"rowIndex\", \"totalColumnsCount\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"kendoGridLogicalRow\", \"\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\", \"ngClass\"], [\"class\", \"k-hierarchy-cell\", \"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"detailExpandCell\", 4, \"ngIf\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"column\", \"dataItem\", \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"colIndex\", \"colSpan\", \"touch-action\", \"ngClass\", \"k-grid-edit-cell\", \"ngStyle\", \"k-state-selected\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalCell\", \"\", \"aria-selected\", \"false\", 1, \"k-hierarchy-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"detailExpandCell\"], [\"class\", \"k-icon\", \"href\", \"#\", \"tabindex\", \"-1\", 3, \"ngClass\", \"click\", 4, \"ngIf\"], [\"href\", \"#\", \"tabindex\", \"-1\", 1, \"k-icon\", 3, \"ngClass\", \"click\"], [\"kendoGridCell\", \"\", \"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", 3, \"rowIndex\", \"columnIndex\", \"column\", \"dataItem\", \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"colIndex\", \"colSpan\", \"ngClass\", \"ngStyle\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-detail-row\", 3, \"dataRowIndex\", \"dataItem\", \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\"], [\"class\", \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-hierarchy-cell\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"gridcell\", \"aria-selected\", \"false\", 1, \"k-detail-cell\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"dataRowIndex\", \"dataItem\", \"colIndex\", \"colSpan\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [1, \"k-group-cell\"], [\"kendoGridLogicalRow\", \"\", 1, \"k-group-footer\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\", 4, \"ngFor\", \"ngForOf\", \"ngForTrackBy\"], [\"kendoGridLogicalCell\", \"\", 3, \"logicalRowIndex\", \"logicalColIndex\"], [3, \"templateContext\"]], template: function TableBodyComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TableBodyComponent_ng_template_0_Template, 4, 8, \"ng-template\", 0);\n ɵngcc0.ɵɵtemplate(1, TableBodyComponent_tr_1_Template, 4, 6, \"tr\", 1);\n ɵngcc0.ɵɵtemplate(2, TableBodyComponent_ng_template_2_Template, 4, 4, \"ng-template\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.editService.hasNewItem);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", (ctx.data == null ? null : ctx.data.length) === 0 || ctx.data == null);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.data)(\"ngForTrackBy\", ctx.trackByWrapper);\n } }, directives: function () { return [ɵngcc5.NgIf, ɵngcc5.NgForOf, LogicalRowDirective,\n LogicalCellDirective,\n CellComponent, ɵngcc5.NgClass, ɵngcc5.NgStyle, TemplateContextDirective,\n GroupHeaderComponent, ɵngcc5.NgTemplateOutlet]; }, encapsulation: 2 });\n/** @nocollapse */\nTableBodyComponent.ctorParameters = () => [\n { type: DetailsService },\n { type: GroupsService },\n { type: ChangeNotificationService },\n { type: EditService },\n { type: LocalizationService },\n { type: NgZone },\n { type: Renderer2 },\n { type: ElementRef },\n { type: DomEventsService },\n { type: SelectionService },\n { type: CellSelectionService },\n { type: ColumnInfoService },\n { type: NavigationService }\n];\nTableBodyComponent.propDecorators = {\n columns: [{ type: Input }],\n allColumns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n noRecordsTemplate: [{ type: Input }],\n data: [{ type: Input }],\n skip: [{ type: Input }],\n selectable: [{ type: Input }],\n filterable: [{ type: Input }],\n noRecordsText: [{ type: Input }],\n isLocked: [{ type: Input }],\n skipGroupDecoration: [{ type: Input }],\n showGroupFooters: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n totalColumnsCount: [{ type: Input }],\n virtualColumns: [{ type: Input }],\n trackBy: [{ type: Input }],\n rowClass: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TableBodyComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridTableBody]',\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{noRecordsText}}\n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"groupHeaderSlaveCellsCount\">\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\"\n [ngClass]=\"rowClass({ dataItem: item.data, index: item.index })\"\n [class.k-alt]=\"isOdd(item)\"\n [class.k-master-row]=\"detailTemplate?.templateRef\"\n [class.k-grid-edit-row]=\"isEditingRow(item.index)\"\n [attr.data-kendo-grid-item-index]=\"item.index\"\n [class.k-state-selected]=\"isSelectable() && isRowSelected(item)\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"unlockedColumnsCount\">\n \n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: DetailsService }, { type: GroupsService }, { type: ChangeNotificationService }, { type: EditService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: DomEventsService }, { type: SelectionService }, { type: CellSelectionService }, { type: ColumnInfoService }, { type: NavigationService }]; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], skip: [{\n type: Input\n }], noRecordsText: [{\n type: Input\n }], isLocked: [{\n type: Input\n }], skipGroupDecoration: [{\n type: Input\n }], showGroupFooters: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], totalColumnsCount: [{\n type: Input\n }], trackBy: [{\n type: Input\n }], rowClass: [{\n type: Input\n }], allColumns: [{\n type: Input\n }], detailTemplate: [{\n type: Input\n }], noRecordsTemplate: [{\n type: Input\n }], data: [{\n type: Input\n }], selectable: [{\n type: Input\n }], filterable: [{\n type: Input\n }], virtualColumns: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass CellComponent {\n constructor(editService, idService, cellContext) {\n this.editService = editService;\n this.idService = idService;\n this.cellContext = cellContext;\n this.isNew = false;\n this._templateContext = {};\n this._editTemplateContext = {};\n }\n get commandCellClass() {\n return this.isCommand(this.column);\n }\n set rowIndex(index) {\n this._rowIndex = index;\n this.updateCellContext();\n }\n get rowIndex() {\n return this._rowIndex;\n }\n get isEdited() {\n if (!(this.editService.isEditing() || this.isNew) || !this.isColumnEditable) {\n return false;\n }\n const editContext = this.editService.columnContext(this.rowIndex, this.column);\n return this.isFieldEditable(editContext, this.column);\n }\n get formGroup() {\n return this.editService.context(this.rowIndex).group;\n }\n get templateContext() {\n return this._templateContext;\n }\n get editTemplateContext() {\n this._editTemplateContext.$implicit = this.formGroup;\n this._editTemplateContext.isNew = this.isNew;\n this._editTemplateContext.column = this.column;\n this._editTemplateContext.dataItem = this.dataItem;\n this._editTemplateContext.formGroup = this.formGroup;\n this._editTemplateContext.rowIndex = this.rowIndex;\n return this._editTemplateContext;\n }\n get format() {\n if (isColumnComponent(this.column) && !isNullOrEmptyString(this.column.format)) {\n return extractFormat(this.column.format);\n }\n return undefined;\n }\n get isBoundColumn() {\n return this.column.field && !this.column.templateRef;\n }\n get isCheckboxColumn() {\n return isCheckboxColumn(this.column) && !this.column.templateRef;\n }\n get selectionCheckboxId() {\n return this.idService.selectionCheckboxId(this.rowIndex);\n }\n get isSpanColumn() {\n return isSpanColumn(this.column) && !this.column.templateRef;\n }\n get childColumns() {\n return columnsToRender([this.column]);\n }\n get isColumnEditable() {\n if (!this.column || this.isCommand(this.column)) {\n return false;\n }\n return this.column.editable !== false;\n }\n ngDoCheck() {\n this.updateCellContext();\n }\n ngOnChanges(_changes) {\n this.updateTemplateContext();\n }\n isCommand(column) {\n return column instanceof CommandColumnComponent;\n }\n isFieldEditable(editContext, column) {\n if (!isPresent(editContext)) {\n return false;\n }\n if (isPresent(column.editTemplate)) {\n return true;\n }\n return isPresent(editContext.group) && isPresent(editContext.group.get(column.field));\n }\n updateCellContext() {\n if (this.cellContext) {\n this.cellContext.rowIndex = this._rowIndex;\n }\n }\n updateTemplateContext() {\n if (!this.column.templateRef) {\n return;\n }\n const context = this._templateContext;\n context.isNew = this.isNew;\n context.column = this.column;\n context.dataItem = this.dataItem;\n context.rowIndex = this.rowIndex;\n context.columnIndex = this.columnIndex;\n context.$implicit = this.dataItem;\n }\n}\nCellComponent.ɵfac = function CellComponent_Factory(t) { return new (t || CellComponent)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(IdService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT, 8)); };\nCellComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CellComponent, selectors: [[\"\", \"kendoGridCell\", \"\"]], hostVars: 2, hostBindings: function CellComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-command-cell\", ctx.commandCellClass);\n } }, inputs: { isNew: \"isNew\", rowIndex: \"rowIndex\", column: \"column\", columnIndex: \"columnIndex\", dataItem: \"dataItem\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c162, decls: 3, vars: 3, consts: [[3, \"ngSwitch\"], [4, \"ngSwitchCase\"], [3, \"ngIf\", \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [3, \"ngIf\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [1, \"k-checkbox\", 3, \"kendoGridSelectionCheckbox\"], [1, \"k-checkbox-label\"], [4, \"ngIf\"], [3, \"ngSwitch\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"kendoGridFocusable\", \"\", 3, \"format\", \"formControl\", 4, \"ngSwitchCase\"], [\"type\", \"checkbox\", \"class\", \"k-checkbox\", \"kendoGridFocusable\", \"\", 3, \"formControl\", 4, \"ngSwitchCase\"], [\"type\", \"text\", \"class\", \"k-textbox\", \"kendoGridFocusable\", \"\", 3, \"formControl\", 4, \"ngSwitchDefault\"], [\"kendoGridFocusable\", \"\", 3, \"format\", \"formControl\"], [\"type\", \"checkbox\", \"kendoGridFocusable\", \"\", 1, \"k-checkbox\", 3, \"formControl\"], [\"type\", \"text\", \"kendoGridFocusable\", \"\", 1, \"k-textbox\", 3, \"formControl\"]], template: function CellComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵtemplate(1, CellComponent_ng_container_1_Template, 5, 6, \"ng-container\", 1);\n ɵngcc0.ɵɵtemplate(2, CellComponent_ng_container_2_Template, 3, 2, \"ng-container\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngSwitch\", ctx.isEdited);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", false);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngSwitchCase\", true);\n } }, directives: [ɵngcc5.NgSwitch, ɵngcc5.NgSwitchCase, ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet, ɵngcc5.NgForOf, FocusableDirective,\n SelectionCheckboxDirective, ɵngcc5.NgSwitchDefault, ɵngcc6.NumericTextBoxComponent, ɵngcc7.NgControlStatus, ɵngcc7.FormControlDirective, ɵngcc9.DatePickerComponent, ɵngcc7.CheckboxControlValueAccessor, ɵngcc7.DefaultValueAccessor], pipes: [FieldAccessorPipe], encapsulation: 2 });\n/** @nocollapse */\nCellComponent.ctorParameters = () => [\n { type: EditService },\n { type: IdService },\n { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CELL_CONTEXT,] }] }\n];\nCellComponent.propDecorators = {\n commandCellClass: [{ type: HostBinding, args: ['class.k-command-cell',] }],\n column: [{ type: Input }],\n columnIndex: [{ type: Input }],\n isNew: [{ type: Input }],\n rowIndex: [{ type: Input }],\n dataItem: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CellComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridCell]',\n template: `\n \n \n \n \n \n \n {{ dataItem | valueOf: childColumn.field: childColumn.format}}\n \n \n {{ dataItem | valueOf: column.field: column.format}}\n \n \n \n \n \n \n \n \n \n\n \n\n \n\n \n \n \n \n `\n }]\n }], function () { return [{ type: EditService }, { type: IdService }, { type: undefined, decorators: [{\n type: Optional\n }, {\n type: Inject,\n args: [CELL_CONTEXT]\n }] }]; }, { isNew: [{\n type: Input\n }], commandCellClass: [{\n type: HostBinding,\n args: ['class.k-command-cell']\n }], rowIndex: [{\n type: Input\n }], column: [{\n type: Input\n }], columnIndex: [{\n type: Input\n }], dataItem: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the `edit` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`edit`]({% slug api_grid_gridcomponent %}#toc-edit) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is in the edit mode, the button with `kendoGridEditCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n */\nclass EditCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.beginEdit(this.rowIndex);\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nEditCommandDirective.ɵfac = function EditCommandDirective_Factory(t) { return new (t || EditCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nEditCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditCommandDirective, selectors: [[\"\", \"kendoGridEditCommand\", \"\"]], hostVars: 4, hostBindings: function EditCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function EditCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-edit-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nEditCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nEditCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-edit-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(EditCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridEditCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-edit-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `cancel` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`cancel`]({% slug api_grid_gridcomponent %}#toc-cancel) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is not in the edit mode, the button with the `kendoGridCancelCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n * You can control the content of the button based on the state of the row.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass CancelCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return !this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n if (this.isEdited) {\n this.editService.endEdit(this.rowIndex);\n }\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nCancelCommandDirective.ɵfac = function CancelCommandDirective_Factory(t) { return new (t || CancelCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nCancelCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CancelCommandDirective, selectors: [[\"\", \"kendoGridCancelCommand\", \"\"]], hostVars: 4, hostBindings: function CancelCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function CancelCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-cancel-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nCancelCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nCancelCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-cancel-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CancelCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridCancelCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-cancel-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `save` command of the Grid. You can apply this directive to any `button`\n * element inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`save`]({% slug api_grid_gridcomponent %}#toc-save) event\n * is triggered ([see example]({% slug editing_grid %})).\n *\n * > When the row is not in the edit mode, the button with `kendoGridSaveCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n *\n * You can control the content of the button based on the state of the row.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass SaveCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return !this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n if (this.isEdited) {\n this.editService.save(this.rowIndex);\n }\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nSaveCommandDirective.ɵfac = function SaveCommandDirective_Factory(t) { return new (t || SaveCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nSaveCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: SaveCommandDirective, selectors: [[\"\", \"kendoGridSaveCommand\", \"\"]], hostVars: 4, hostBindings: function SaveCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function SaveCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-save-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nSaveCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nSaveCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-save-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SaveCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridSaveCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-save-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the `remove` command of the Grid. You can apply this directive to any `button` element\n * inside a [`CommandColumnComponent`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`remove` event]({% slug api_grid_gridcomponent %}#toc-remove)\n * is triggered ([see example]({% slug editing_reactive_forms_grid %})).\n *\n * > When the row is in the edit mode, the button with the `kendoGridRemoveCommand` is automatically hidden.\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass RemoveCommandDirective extends Button {\n constructor(editService, cellContext, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n this.cellContext = cellContext;\n /**\n * @hidden\n */\n this.commandClass = true;\n }\n /**\n * @hidden\n */\n get visible() {\n return this.isEdited ? 'none' : '';\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.remove(this.rowIndex);\n }\n ngDoCheck() {\n if (this.cellContext) {\n this.rowIndex = this.cellContext.rowIndex;\n this.isEdited = this.editService.isEdited(this.rowIndex);\n }\n }\n}\nRemoveCommandDirective.ɵfac = function RemoveCommandDirective_Factory(t) { return new (t || RemoveCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(CELL_CONTEXT), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nRemoveCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RemoveCommandDirective, selectors: [[\"\", \"kendoGridRemoveCommand\", \"\"]], hostVars: 4, hostBindings: function RemoveCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function RemoveCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.visible);\n ɵngcc0.ɵɵclassProp(\"k-grid-remove-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nRemoveCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: undefined, decorators: [{ type: Inject, args: [CELL_CONTEXT,] }] },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nRemoveCommandDirective.propDecorators = {\n visible: [{ type: HostBinding, args: ['style.display',] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-remove-command',] }],\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(RemoveCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridRemoveCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: undefined, decorators: [{\n type: Inject,\n args: [CELL_CONTEXT]\n }] }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-remove-command']\n }], visible: [{\n type: HostBinding,\n args: ['style.display']\n }], onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }] }); })();\n\n/**\n * Represents the command for adding a new item to the Grid. You can apply this directive to any\n * `button` element inside a [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When an associated button with the directive is clicked, the\n * [`add`]({% slug api_grid_gridcomponent %}#toc-add) event is triggered\n * ([see example]({% slug editing_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * ```\n */\nclass AddCommandDirective extends Button {\n constructor(editService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.editService = editService;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.editService.beginAdd();\n }\n /**\n * @hidden\n */\n get commandClass() {\n return true;\n }\n}\nAddCommandDirective.ɵfac = function AddCommandDirective_Factory(t) { return new (t || AddCommandDirective)(ɵngcc0.ɵɵdirectiveInject(EditService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nAddCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: AddCommandDirective, selectors: [[\"\", \"kendoGridAddCommand\", \"\"]], hostVars: 2, hostBindings: function AddCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function AddCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-add-command\", ctx.commandClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nAddCommandDirective.ctorParameters = () => [\n { type: EditService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nAddCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n commandClass: [{ type: HostBinding, args: ['class.k-grid-add-command',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AddCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridAddCommand]'\n }]\n }], function () { return [{ type: EditService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], commandClass: [{\n type: HostBinding,\n args: ['class.k-grid-add-command']\n }] }); })();\n\nconst exported$1 = [\n CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n EditTemplateDirective,\n TableBodyComponent,\n NoRecordsTemplateDirective,\n CellComponent,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective\n];\nconst importedModules$3 = [\n CommonModule,\n ReactiveFormsModule,\n FormsModule,\n SharedModule,\n GroupModule,\n NumericTextBoxModule,\n DatePickerModule\n];\n/**\n * @hidden\n */\nclass BodyModule {\n static exports() {\n return [\n CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n NoRecordsTemplateDirective,\n EditTemplateDirective,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective\n ];\n }\n}\nBodyModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: BodyModule });\nBodyModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function BodyModule_Factory(t) { return new (t || BodyModule)(); }, imports: [[...importedModules$3]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(BodyModule, { declarations: [CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n EditTemplateDirective,\n TableBodyComponent,\n NoRecordsTemplateDirective,\n CellComponent,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective], imports: [CommonModule,\n ReactiveFormsModule,\n FormsModule,\n SharedModule,\n GroupModule,\n NumericTextBoxModule,\n DatePickerModule], exports: [CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n EditTemplateDirective,\n TableBodyComponent,\n NoRecordsTemplateDirective,\n CellComponent,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BodyModule, [{\n type: NgModule,\n args: [{\n declarations: [exported$1],\n exports: [exported$1],\n imports: [...importedModules$3]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass FooterComponent {\n constructor() {\n this.columns = [];\n this.groups = [];\n this.lockedColumnsCount = 0;\n this.logicalRowIndex = 0;\n }\n get footerClass() {\n return !this.scrollable;\n }\n get columnsToRender() {\n return columnsToRender(this.columns || []);\n }\n logicalColumnIndex(column) {\n const index = column.leafIndex;\n if (isPresent(index)) {\n return index + (isPresent(this.detailTemplate) ? 1 : 0);\n }\n return -1;\n }\n}\nFooterComponent.ɵfac = function FooterComponent_Factory(t) { return new (t || FooterComponent)(); };\nFooterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: FooterComponent, selectors: [[\"\", \"kendoGridFooter\", \"\"]], hostVars: 2, hostBindings: function FooterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-footer\", ctx.footerClass);\n } }, inputs: { columns: \"columns\", groups: \"groups\", lockedColumnsCount: \"lockedColumnsCount\", logicalRowIndex: \"logicalRowIndex\", detailTemplate: \"detailTemplate\", scrollable: \"scrollable\" }, attrs: _c163, decls: 1, vars: 1, consts: [[3, \"ngIf\"], [\"kendoGridLogicalRow\", \"\", 3, \"logicalRowIndex\", \"logicalSlaveRow\", \"logicalCellsCount\", \"logicalSlaveCellsCount\"], [\"role\", \"presentation\", 3, \"k-group-cell\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\", 3, \"k-hierarchy-cell\", 4, \"ngIf\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnfooter\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"ngClass\", \"ngStyle\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"presentation\"], [\"kendoGridLogicalCell\", \"\", \"role\", \"columnfooter\", \"aria-selected\", \"false\", 3, \"logicalRowIndex\", \"logicalColIndex\", \"ngClass\", \"ngStyle\"], [3, \"templateContext\"]], template: function FooterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, FooterComponent_ng_template_0_Template, 4, 9, \"ng-template\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", true);\n } }, directives: [ɵngcc5.NgIf, LogicalRowDirective, ɵngcc5.NgForOf, LogicalCellDirective, ɵngcc5.NgClass, ɵngcc5.NgStyle, TemplateContextDirective], encapsulation: 2 });\nFooterComponent.propDecorators = {\n columns: [{ type: Input }],\n groups: [{ type: Input }],\n detailTemplate: [{ type: Input }],\n scrollable: [{ type: Input }],\n lockedColumnsCount: [{ type: Input }],\n logicalRowIndex: [{ type: Input }],\n footerClass: [{ type: HostBinding, args: ['class.k-grid-footer',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterComponent, [{\n type: Component,\n args: [{\n selector: '[kendoGridFooter]',\n template: `\n \n 0\"\n [logicalCellsCount]=\"columns.length\"\n [logicalSlaveCellsCount]=\"columns.length - lockedColumnsCount\"\n >\n \n \n \n \n \n \n \n \n \n \n `\n }]\n }], function () { return []; }, { columns: [{\n type: Input\n }], groups: [{\n type: Input\n }], lockedColumnsCount: [{\n type: Input\n }], logicalRowIndex: [{\n type: Input\n }], footerClass: [{\n type: HostBinding,\n args: ['class.k-grid-footer']\n }], detailTemplate: [{\n type: Input\n }], scrollable: [{\n type: Input\n }] }); })();\n\nconst exportedModules$3 = [\n FooterComponent\n];\nconst importedModules$4 = [\n CommonModule,\n SharedModule\n];\n/**\n * @hidden\n */\nclass FooterModule {\n static exports() {\n return [];\n }\n}\nFooterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: FooterModule });\nFooterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function FooterModule_Factory(t) { return new (t || FooterModule)(); }, imports: [[...importedModules$4]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(FooterModule, { declarations: [FooterComponent], imports: [CommonModule,\n SharedModule], exports: [FooterComponent] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(FooterModule, [{\n type: NgModule,\n args: [{\n declarations: [exportedModules$3],\n exports: [exportedModules$3],\n imports: [...importedModules$4]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass ToolbarComponent {\n constructor(grid) {\n this.grid = grid;\n this.context = {};\n }\n get classNames() {\n return 'k-header k-grid-toolbar';\n }\n set position(value) {\n this.context.position = value;\n }\n get toolbarTemplateRef() {\n return this.grid.toolbarTemplate ? this.grid.toolbarTemplate.templateRef : undefined;\n }\n}\nToolbarComponent.ɵfac = function ToolbarComponent_Factory(t) { return new (t || ToolbarComponent)(ɵngcc0.ɵɵdirectiveInject(GridComponent)); };\nToolbarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ToolbarComponent, selectors: [[\"kendo-grid-toolbar\"]], hostVars: 2, hostBindings: function ToolbarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassMap(ctx.classNames);\n } }, inputs: { position: \"position\" }, decls: 1, vars: 1, consts: [[4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"]], template: function ToolbarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, ToolbarComponent_0_Template, 1, 2, undefined, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.toolbarTemplateRef);\n } }, directives: [ɵngcc5.NgIf, ɵngcc5.NgTemplateOutlet], encapsulation: 2 });\n/** @nocollapse */\nToolbarComponent.ctorParameters = () => [\n { type: GridComponent }\n];\nToolbarComponent.propDecorators = {\n classNames: [{ type: HostBinding, args: ['class',] }],\n position: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ToolbarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-toolbar',\n template: `\n \n \n `\n }]\n }], function () { return [{ type: GridComponent }]; }, { classNames: [{\n type: HostBinding,\n args: ['class']\n }], position: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass LocalEditService {\n constructor(grid, localDataChangesService) {\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n create(item) {\n if (this.hasLocalData && this.grid.skip) {\n this.localDataChangesService.data.splice(this.grid.skip, 0, item);\n }\n else {\n this.data.unshift(item);\n }\n this.dataChanged();\n }\n update(_item) { } // tslint:disable-line:no-empty\n remove(item) {\n const data = this.data;\n for (let idx = 0; idx < data.length; idx++) {\n if (item === data[idx]) {\n data.splice(idx, 1);\n this.dataChanged({ action: 'remove', item: item });\n break;\n }\n }\n }\n assignValues(target, source) {\n Object.assign(target, source);\n }\n dataChanged(args = {}) {\n if (this.hasLocalData) {\n this.localDataChangesService.changes.emit(args);\n }\n }\n get hasLocalData() {\n return Array.isArray(this.localDataChangesService.data);\n }\n get data() {\n if (this.hasLocalData) {\n return this.localDataChangesService.data;\n }\n const data = this.grid.data;\n if (Array.isArray(data)) {\n return data;\n }\n if (isDevMode()) {\n throw new Error('The default edit service of the editing directives works only when binding to plain array.' +\n 'Please provide an editService.');\n }\n return [];\n }\n}\n\n/**\n * @hidden\n */\nclass EditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n this.defaultEditService = this.createDefaultService();\n }\n // Consider adding support for the dependency injection of the service to allow for specifying a generic service without code.\n // The Input should still be kept.\n /**\n * The edit service that will handle the operations.\n */\n set editService(value) {\n this.userEditService = value;\n }\n get editService() {\n return this.userEditService || this.defaultEditService;\n }\n /**\n * @hidden\n */\n ngOnInit() {\n this.subscriptions = this.grid.add.subscribe(this.addHandler.bind(this));\n this.subscriptions.add(this.grid.remove.subscribe(this.removeHandler.bind(this)));\n this.subscriptions.add(this.grid.cancel.subscribe(this.cancelHandler.bind(this)));\n this.subscriptions.add(this.grid.save.subscribe(this.saveHandler.bind(this)));\n this.subscriptions.add(this.grid.dataStateChange.subscribe(this.onStateChange.bind(this)));\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n createDefaultService() {\n return new LocalEditService(this.grid, this.localDataChangesService);\n }\n addHandler() {\n this.grid.addRow(this.createModel({ isNew: true }));\n }\n saveHandler(args) {\n const item = this.saveModel(args);\n if (item) {\n if (args.isNew) {\n this.editService.create(item);\n }\n else {\n this.editService.update(item);\n }\n }\n this.grid.closeRow(args.rowIndex);\n }\n cancelHandler({ rowIndex }) {\n this.closeEditor(rowIndex);\n }\n removeHandler({ dataItem }) {\n const removeItem = (shouldRemove) => {\n if (shouldRemove) {\n this.editService.remove(dataItem);\n }\n };\n if (this.removeConfirmation) {\n const result = this.removeConfirmation(dataItem);\n if (result instanceof Promise) {\n result.then(removeItem);\n }\n else if (result instanceof Observable) {\n result.pipe(take(1)).subscribe(removeItem);\n }\n else {\n removeItem(result);\n }\n }\n else {\n removeItem(true);\n }\n }\n onStateChange() {\n this.closeEditor();\n }\n closeEditor(rowIndex) {\n this.grid.closeRow(rowIndex);\n }\n}\nEditingDirectiveBase.ɵfac = function EditingDirectiveBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nEditingDirectiveBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: EditingDirectiveBase, inputs: { editService: \"editService\", removeConfirmation: \"removeConfirmation\" } });\nEditingDirectiveBase.propDecorators = {\n editService: [{ type: Input }],\n removeConfirmation: [{ type: Input }]\n};\n\n\n/**\n * @hidden\n */\nclass LocalRowEditService extends LocalEditService {\n update(_item) {\n this.dataChanged();\n }\n}\n\n/**\n * @hidden\n */\nclass RowEditingDirectiveBase extends EditingDirectiveBase {\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.subscriptions\n .add(this.grid.edit.subscribe(this.editHandler.bind(this)));\n }\n createDefaultService() {\n return new LocalRowEditService(this.grid, this.localDataChangesService);\n }\n addHandler() {\n this.closeEditor();\n super.addHandler();\n }\n editHandler(args) {\n this.closeEditor();\n this.rowIndex = args.rowIndex;\n this.grid.editRow(args.rowIndex, this.createModel(args));\n }\n saveHandler(args) {\n super.saveHandler(args);\n this.clean();\n }\n closeEditor(rowIndex = this.rowIndex) {\n super.closeEditor(rowIndex);\n this.clean();\n }\n clean() {\n delete this.rowIndex;\n }\n}\nRowEditingDirectiveBase.ɵfac = function RowEditingDirectiveBase_Factory(t) { return ɵRowEditingDirectiveBase_BaseFactory(t || RowEditingDirectiveBase); };\nRowEditingDirectiveBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: RowEditingDirectiveBase, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nconst ɵRowEditingDirectiveBase_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(RowEditingDirectiveBase);\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using\n * the Template-Driven Angular Forms ([see example]({% slug editing_directives_grid %}#toc-the-template-directive)).\n */\nclass TemplateEditingDirective extends RowEditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n editHandler(args) {\n super.editHandler(args);\n this.dataItem = args.dataItem;\n this.originalValues = {};\n this.editService.assignValues(this.originalValues, this.dataItem);\n }\n closeEditor(rowIndex) {\n if (this.dataItem) {\n this.editService.assignValues(this.dataItem, this.originalValues);\n }\n super.closeEditor(rowIndex);\n }\n createModel(args) {\n if (args.isNew) {\n return this.createNewItem();\n }\n }\n saveModel(args) {\n return args.dataItem;\n }\n clean() {\n super.clean();\n delete this.dataItem;\n }\n}\nTemplateEditingDirective.ɵfac = function TemplateEditingDirective_Factory(t) { return new (t || TemplateEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nTemplateEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TemplateEditingDirective, selectors: [[\"\", \"kendoGridTemplateEditing\", \"\"]], inputs: { createNewItem: [\"kendoGridTemplateEditing\", \"createNewItem\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nTemplateEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nTemplateEditingDirective.propDecorators = {\n createNewItem: [{ type: Input, args: ['kendoGridTemplateEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TemplateEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridTemplateEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createNewItem: [{\n type: Input,\n args: ['kendoGridTemplateEditing']\n }] }); })();\n\n/**\n * @hidden\n */\nconst markAllAsTouched = (control) => {\n control.markAsTouched();\n if (control.hasOwnProperty('controls')) {\n let controls = control.controls;\n for (let inner in controls) {\n if (controls.hasOwnProperty(inner)) {\n markAllAsTouched(controls[inner]);\n }\n }\n }\n};\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using the\n * Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-the-reactive-directive)).\n */\nclass ReactiveEditingDirective extends RowEditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n createModel(args) {\n return this.createFormGroup(args);\n }\n saveModel({ dataItem, formGroup, isNew }) {\n if (!formGroup.dirty && !isNew) {\n return;\n }\n if (formGroup.valid) {\n this.editService.assignValues(dataItem, formGroup.value);\n return dataItem;\n }\n markAllAsTouched(formGroup);\n }\n}\nReactiveEditingDirective.ɵfac = function ReactiveEditingDirective_Factory(t) { return new (t || ReactiveEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nReactiveEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ReactiveEditingDirective, selectors: [[\"\", \"kendoGridReactiveEditing\", \"\"]], inputs: { createFormGroup: [\"kendoGridReactiveEditing\", \"createFormGroup\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nReactiveEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nReactiveEditingDirective.propDecorators = {\n createFormGroup: [{ type: Input, args: ['kendoGridReactiveEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ReactiveEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridReactiveEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createFormGroup: [{\n type: Input,\n args: ['kendoGridReactiveEditing']\n }] }); })();\n\n/**\n * A directive which encapsulates the editing operations of the Grid when using the in-cell\n * editing with Reactive Forms ([see example]({% slug editing_directives_grid %}#toc-the-incell-directive)).\n */\nclass InCellEditingDirective extends EditingDirectiveBase {\n constructor(grid, localDataChangesService) {\n super(grid, localDataChangesService);\n this.grid = grid;\n this.localDataChangesService = localDataChangesService;\n }\n // Need mixin\n createModel(args) {\n return this.createFormGroup(args);\n }\n saveModel({ dataItem, formGroup, isNew }) {\n if (!formGroup.dirty && !isNew) {\n return;\n }\n if (formGroup.valid) {\n this.editService.assignValues(dataItem, formGroup.value);\n return dataItem;\n }\n markAllAsTouched(formGroup);\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.subscriptions.add(this.grid.cellClick.subscribe(this.cellClickHandler.bind(this)));\n this.subscriptions.add(this.grid.cellClose.subscribe(this.cellCloseHandler.bind(this)));\n }\n removeHandler(args) {\n super.removeHandler(args);\n this.grid.cancelCell();\n }\n cellClickHandler(args) {\n if (!args.isEdited && args.type !== 'contextmenu') {\n this.grid.editCell(args.rowIndex, args.columnIndex, this.createFormGroup(args));\n }\n }\n cellCloseHandler(args) {\n const { formGroup, dataItem } = args;\n if (!formGroup.valid) {\n args.preventDefault();\n }\n else if (formGroup.dirty) {\n this.editService.assignValues(dataItem, formGroup.value);\n this.editService.update(dataItem);\n }\n }\n}\nInCellEditingDirective.ɵfac = function InCellEditingDirective_Factory(t) { return new (t || InCellEditingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nInCellEditingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: InCellEditingDirective, selectors: [[\"\", \"kendoGridInCellEditing\", \"\"]], inputs: { createFormGroup: [\"kendoGridInCellEditing\", \"createFormGroup\"] }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nInCellEditingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: LocalDataChangesService }\n];\nInCellEditingDirective.propDecorators = {\n createFormGroup: [{ type: Input, args: ['kendoGridInCellEditing',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(InCellEditingDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridInCellEditing]'\n }]\n }], function () { return [{ type: GridComponent }, { type: LocalDataChangesService }]; }, { createFormGroup: [{\n type: Input,\n args: ['kendoGridInCellEditing']\n }] }); })();\n\nconst hasGroups = (items) => items && items.length && items[0].field && items[0].items;\nconst groupDescriptorsPresent = (descriptors) => isPresent(descriptors) && descriptors.length > 0;\nconst processGroups = (data, state$$1) => process(data, state$$1).data;\nconst removeParentDescriptors = (parents, owner) => g => g.field !== owner.field && !parents.some(y => y.field === g.field);\nconst findGroup = (groupIndex, groups) => {\n const parents = [];\n return {\n group: groupIndex.split(\"_\").reduce((acc, x) => {\n const idx = parseInt(x, 10);\n if (acc.items) {\n parents.push(acc);\n return acc.items[idx];\n }\n return isArray(acc) ? acc[idx] : acc;\n }, groups),\n parents\n };\n};\nconst findChildren = (data, parents) => {\n const filters = parents.map(p => ({ field: p.field, operator: \"eq\", value: p.value }));\n return filterBy(data, {\n filters: filters,\n logic: \"and\"\n });\n};\n/**\n * @hidden\n */\nconst count = (groups, includeFooters = false) => (groups.reduce((acc, group) => {\n if (!group.skipHeader) {\n acc++;\n }\n if (group.items) {\n const children = count(group.items, includeFooters);\n if (includeFooters && children && !group.hideFooter) {\n acc++;\n }\n acc += children;\n }\n return acc;\n}, 0) // tslint:disable-line:align\n);\n/**\n * @hidden\n */\nconst slice = (groups, skip, take$$1, includeFooters = false) => {\n if (!isPresent(take$$1)) {\n return groups;\n }\n const result = [];\n for (let idx = 0, length = groups.length; idx < length; idx++) {\n if (take$$1 <= 0) {\n break;\n }\n const group = groups[idx];\n const groupItems = group.items;\n let itemCount = count(groupItems, includeFooters);\n if (includeFooters && groupItems.length) {\n itemCount++;\n }\n const skipHeader = skip > 0;\n if (skip) {\n skip--;\n if (itemCount && skip >= itemCount) {\n skip -= itemCount;\n continue;\n }\n }\n if (!skipHeader || itemCount) {\n const items = [];\n let hideFooter = true;\n if (!skipHeader) {\n take$$1--;\n }\n if (take$$1) {\n if (hasGroups(groupItems)) {\n const children = slice(groupItems, skip, take$$1, includeFooters);\n items.push(...children);\n take$$1 -= count(children, includeFooters);\n }\n else {\n items.push(...groupItems.slice(skip, Math.min(skip + take$$1, groupItems.length)));\n take$$1 -= items.length;\n }\n if (take$$1 && includeFooters) {\n hideFooter = false;\n take$$1--;\n }\n skip = 0;\n }\n result.push({\n aggregates: group.aggregates,\n field: group.field,\n hideFooter,\n items,\n offset: idx,\n skipHeader,\n value: group.value\n });\n }\n }\n return result;\n};\nconst skippedHeaders = (groupItem) => {\n let total = 0;\n while (groupItem) {\n if (groupItem.skipHeader) {\n total++;\n }\n groupItem = groupItem.items && groupItem.items[0] || null;\n }\n return total;\n};\n/**\n * A directive which encapsulates the in-memory handling of grouping with virtual scrolling.\n */\nclass GroupBindingDirective extends DataBindingDirective {\n constructor(grid, changeDetector, localDataChangesService) {\n super(grid, changeDetector, localDataChangesService);\n }\n /**\n * The array of data which will be used to populate the Grid.\n */\n set kendoGridGroupBinding(value) {\n this.groups = null;\n this.grid.resetGroupsState();\n this.data = value;\n }\n /**\n * @hidden\n */\n set data(value) {\n this.originalData = value || [];\n this.dataChanged = true;\n }\n /**\n * Defines the descriptors by which the data will be sorted.\n */\n set sort(value) {\n const clear = this.state.sort !== value;\n this.grid.sort = this.state.sort = value;\n if (clear) {\n this.groups = null;\n this.grid.resetGroupsState();\n }\n }\n /**\n * Defines the descriptor by which the data will be filtered.\n */\n set filter(value) {\n const clear = diffFilters(this.state.filter, value);\n if (clear) {\n this.state.filter = value;\n this.grid.filter = cloneFilters(value);\n this.groups = null;\n this.grid.resetGroupsState();\n }\n }\n /**\n * Defines the descriptors by which the data will be grouped.\n */\n set group(value) {\n // don't clear if no groups are present in previous and current value\n const groupsPresent = groupDescriptorsPresent(this.state.group) || groupDescriptorsPresent(value);\n const clear = this.state.group !== value && groupsPresent;\n this.grid.group = this.state.group = value;\n if (clear) {\n this.groups = null;\n this.grid.resetGroupsState();\n this.skip = 0;\n }\n }\n /**\n * @hidden\n */\n ngOnInit() {\n super.ngOnInit();\n this.grid.groupExpand.subscribe(this.groupExpand.bind(this));\n this.grid.groupCollapse.subscribe(this.groupCollapse.bind(this));\n }\n groupExpand({ groupIndex }) {\n this.grid.expandGroupChildren(groupIndex);\n const { group, parents } = findGroup(groupIndex, this.groups);\n if (!group.items.length) {\n const descriptors = this.state.group.filter(removeParentDescriptors(parents, group));\n const children = findChildren(this.originalData, parents.concat(group));\n group.items = processGroups(children, {\n filter: this.state.filter,\n group: descriptors,\n sort: this.state.sort\n });\n }\n this.grid.data = this.dataResult(this.state.skip, this.state.take);\n }\n groupCollapse({ groupIndex }) {\n const { group } = findGroup(groupIndex, this.groups);\n if (group) {\n group.items = [];\n }\n this.grid.data = this.dataResult(this.state.skip, this.state.take);\n }\n process(state$$1) {\n if (state$$1.group && state$$1.group.length) {\n const groups = this.processGroups(state$$1);\n this.grid.skip -= skippedHeaders(groups.data[0]);\n return groups;\n }\n else {\n this.groups = null;\n }\n return super.process(state$$1);\n }\n processGroups(state$$1) {\n if (!this.groups || !this.groups.length) {\n this.groups = processGroups(this.originalData, {\n filter: state$$1.filter,\n group: state$$1.group,\n sort: state$$1.sort\n });\n }\n return this.dataResult(state$$1.skip, state$$1.take);\n }\n dataResult(skip, take$$1) {\n const includeFooters = this.grid.showGroupFooters;\n return {\n data: slice(this.groups, skip, take$$1, includeFooters),\n total: count(this.groups, includeFooters)\n };\n }\n applyState({ skip, take: take$$1, sort, group, filter: filter$$1 }) {\n this.skip = skip;\n this.state.take = take$$1;\n // this.pageSize = take; // do need to update take as the process with slice correctly\n this.sort = sort;\n this.group = group;\n this.filter = filter$$1;\n }\n}\nGroupBindingDirective.ɵfac = function GroupBindingDirective_Factory(t) { return new (t || GroupBindingDirective)(ɵngcc0.ɵɵdirectiveInject(GridComponent), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(LocalDataChangesService)); };\nGroupBindingDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: GroupBindingDirective, selectors: [[\"\", \"kendoGridGroupBinding\", \"\"]], inputs: { kendoGridGroupBinding: \"kendoGridGroupBinding\", sort: \"sort\", filter: \"filter\", group: \"group\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nGroupBindingDirective.ctorParameters = () => [\n { type: GridComponent },\n { type: ChangeDetectorRef },\n { type: LocalDataChangesService }\n];\nGroupBindingDirective.propDecorators = {\n kendoGridGroupBinding: [{ type: Input, args: [\"kendoGridGroupBinding\",] }],\n sort: [{ type: Input }],\n filter: [{ type: Input }],\n group: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GroupBindingDirective, [{\n type: Directive,\n args: [{ selector: '[kendoGridGroupBinding]' }]\n }], function () { return [{ type: GridComponent }, { type: ɵngcc0.ChangeDetectorRef }, { type: LocalDataChangesService }]; }, { kendoGridGroupBinding: [{\n type: Input,\n args: [\"kendoGridGroupBinding\"]\n }], sort: [{\n type: Input\n }], filter: [{\n type: Input\n }], group: [{\n type: Input\n }] }); })();\n\nconst exportedModules$4 = [\n GridComponent,\n ToolbarTemplateDirective,\n ToolbarComponent,\n DataBindingDirective,\n SelectionDirective,\n CustomMessagesComponent,\n GroupBindingDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n ...GroupModule.exports(),\n ...SharedModule.exports(),\n ...BodyModule.exports(),\n ...HeaderModule.exports(),\n ...FooterModule.exports(),\n ...PagerModule.exports(),\n ...RowFilterModule.exports(),\n ...FilterMenuModule.exports(),\n ...ColumnMenuModule.exports()\n];\nconst declarations = [\n GridComponent,\n ListComponent,\n ToolbarComponent,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n DataBindingDirective,\n ToolbarTemplateDirective,\n SelectionDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n GroupBindingDirective,\n GridMarqueeDirective\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Grid component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid module\n * import { GridModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule], // import Grid module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass GridModule {\n}\nGridModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: GridModule });\nGridModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function GridModule_Factory(t) { return new (t || GridModule)(); }, imports: [[\n CommonModule,\n GroupModule,\n SharedModule,\n BodyModule,\n HeaderModule,\n FooterModule,\n PagerModule,\n RowFilterModule,\n FilterMenuModule,\n ResizeSensorModule,\n ColumnMenuModule\n ]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(GridModule, { declarations: function () { return [GridComponent,\n ListComponent,\n ToolbarComponent,\n LocalizedMessagesDirective,\n CustomMessagesComponent,\n DataBindingDirective,\n ToolbarTemplateDirective,\n SelectionDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n GroupBindingDirective,\n GridMarqueeDirective]; }, imports: function () { return [CommonModule,\n GroupModule,\n SharedModule,\n BodyModule,\n HeaderModule,\n FooterModule,\n PagerModule,\n RowFilterModule,\n FilterMenuModule,\n ResizeSensorModule,\n ColumnMenuModule]; }, exports: function () { return [GridComponent,\n ToolbarTemplateDirective,\n ToolbarComponent,\n DataBindingDirective,\n SelectionDirective,\n CustomMessagesComponent,\n GroupBindingDirective,\n TemplateEditingDirective,\n ReactiveEditingDirective,\n InCellEditingDirective,\n ExpandDetailsDirective,\n GroupHeaderTemplateDirective,\n GroupHeaderColumnTemplateDirective,\n GroupFooterTemplateDirective,\n ColumnComponent,\n SpanColumnComponent,\n ColumnGroupComponent,\n FooterTemplateDirective,\n DetailTemplateDirective,\n FocusableDirective,\n CommandColumnComponent,\n CheckboxColumnComponent,\n SelectionCheckboxDirective,\n CellTemplateDirective,\n NoRecordsTemplateDirective,\n EditTemplateDirective,\n EditCommandDirective,\n CancelCommandDirective,\n SaveCommandDirective,\n RemoveCommandDirective,\n AddCommandDirective,\n HeaderTemplateDirective,\n SelectAllCheckboxDirective,\n PagerComponent,\n PagerPrevButtonsComponent,\n PagerNextButtonsComponent,\n PagerNumericButtonsComponent,\n PagerInputComponent,\n PagerInfoComponent,\n PagerPageSizesComponent,\n PagerTemplateDirective,\n FilterRowComponent,\n FilterCellComponent,\n FilterCellTemplateDirective,\n FilterCellOperatorsComponent,\n StringFilterCellComponent,\n NumericFilterCellComponent,\n AutoCompleteFilterCellComponent,\n BooleanFilterCellComponent,\n DateFilterCellComponent,\n FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent,\n StringFilterMenuComponent,\n FilterMenuTemplateDirective,\n NumericFilterMenuComponent,\n DateFilterMenuComponent,\n BooleanFilterMenuComponent,\n FilterCellOperatorsComponent,\n ContainsFilterOperatorComponent,\n DoesNotContainFilterOperatorComponent,\n EndsWithFilterOperatorComponent,\n EqualFilterOperatorComponent,\n IsEmptyFilterOperatorComponent,\n IsNotEmptyFilterOperatorComponent,\n IsNotNullFilterOperatorComponent,\n IsNullFilterOperatorComponent,\n NotEqualFilterOperatorComponent,\n StartsWithFilterOperatorComponent,\n GreaterFilterOperatorComponent,\n GreaterOrEqualToFilterOperatorComponent,\n LessFilterOperatorComponent,\n LessOrEqualToFilterOperatorComponent,\n AfterFilterOperatorComponent,\n AfterEqFilterOperatorComponent,\n BeforeEqFilterOperatorComponent,\n BeforeFilterOperatorComponent,\n ColumnChooserComponent,\n ColumnMenuFilterComponent,\n ColumnMenuItemComponent,\n ColumnMenuItemContentTemplateDirective,\n ColumnMenuSortComponent,\n ColumnMenuLockComponent,\n ColumnMenuChooserComponent,\n ColumnMenuTemplateDirective,\n ColumnMenuComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(GridModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules$4],\n imports: [\n CommonModule,\n GroupModule,\n SharedModule,\n BodyModule,\n HeaderModule,\n FooterModule,\n PagerModule,\n RowFilterModule,\n FilterMenuModule,\n ResizeSensorModule,\n ColumnMenuModule\n ]\n }]\n }], null, null); })();\n\nclass PDFMarginComponent$1 extends PDFMarginComponent {\n}\nPDFMarginComponent$1.ɵfac = function PDFMarginComponent$1_Factory(t) { return ɵPDFMarginComponent$1_BaseFactory(t || PDFMarginComponent$1); };\nPDFMarginComponent$1.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFMarginComponent$1, selectors: [[\"kendo-grid-pdf-margin\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PDFMarginComponent$1_Template(rf, ctx) { }, encapsulation: 2 });\nconst ɵPDFMarginComponent$1_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(PDFMarginComponent$1);\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFMarginComponent$1, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-pdf-margin',\n template: ''\n }]\n }], null, null); })();\n\n/**\n * Represents the PDF page template of the Grid that helps to customize the PDF pages. To define a page template,\n * nest an `` tag with the `kendoGridPDFTemplate` directive inside ``.\n *\n * The template context provides the following fields:\n * - `pageNumber`—Defines PDF page number.\n * - `totalPages`—Defines the total number of PDF pages.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * \n * \n * \n *
\n * Page {{ pageNum }} of {{ totalPages }}\n *
\n *
\n *
\n *
\n * `\n * })\n *\n * class AppComponent {\n * public gridData = [{\n * \"ProductID\": 1,\n * \"ProductName\": \"Chai\",\n * \"UnitPrice\": 18.0000\n * }, {\n * \"ProductID\": 2,\n * \"ProductName\": \"Chang\",\n * \"UnitPrice\": 19.0000\n * }\n * ];\n * }\n *\n * ```\n */\nclass PDFTemplateDirective$1 extends PDFTemplateDirective {\n constructor(templateRef) {\n super(templateRef);\n }\n}\nPDFTemplateDirective$1.ɵfac = function PDFTemplateDirective$1_Factory(t) { return new (t || PDFTemplateDirective$1)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPDFTemplateDirective$1.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PDFTemplateDirective$1, selectors: [[\"\", \"kendoGridPDFTemplate\", \"\"]], features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nPDFTemplateDirective$1.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFTemplateDirective$1, [{\n type: Directive,\n args: [{\n selector: '[kendoGridPDFTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nconst HEADER_CLASS = 'k-grid-header';\n/**\n * @hidden\n */\nconst FOOTER_CLASS = 'k-grid-footer';\nconst GRID_LIST = 'KENDO-GRID-LIST';\nconst TABLE = 'TABLE';\nconst matchesList = matchesNodeName(GRID_LIST);\nconst matchesTable = matchesNodeName(TABLE);\nconst suffix = (locked) => locked ? 'locked' : 'wrap';\n/**\n * @hidden\n */\nclass GridQuery {\n constructor(element) {\n this.element = element;\n this.list = findElement(element, matchesList);\n }\n content(locked) {\n return findElement(this.list, matchesClasses(`k-grid-content${locked ? '-locked' : ''}`));\n }\n header(locked) {\n this.headerWrap = this.headerWrap || findElement(this.element, matchesClasses(HEADER_CLASS));\n return findElement(this.headerWrap, matchesClasses(`${HEADER_CLASS}-${suffix(locked)}`));\n }\n footer(locked) {\n this.footerWrap = this.footerWrap || findElement(this.element, matchesClasses(FOOTER_CLASS));\n return findElement(this.footerWrap, matchesClasses(`${FOOTER_CLASS}-${suffix(locked)}`));\n }\n table() {\n return findElement(this.element, matchesTable);\n }\n}\n\nconst FIRST_CLASS = 'k-first';\nconst INPUTS = ['input', 'select', 'textarea', 'option'];\n/** @hidden */\nconst cloneNode = (node) => {\n const clone = node.cloneNode(false);\n if (node._kendoExportVisual) {\n clone._kendoExportVisual = node._kendoExportVisual;\n }\n if (INPUTS.indexOf(String(node.nodeName).toLowerCase()) >= 0) {\n clone.removeAttribute(\"id\");\n clone.removeAttribute(\"name\");\n clone.value = node.value;\n clone.checked = node.checked;\n clone.selected = node.selected;\n }\n let child = node.firstChild;\n while (child) {\n clone.appendChild(cloneNode(child));\n child = child.nextSibling;\n }\n return clone;\n};\nconst appendNodes = (element, nodes) => {\n const length = nodes.length;\n for (let idx = 0; idx < length; idx++) {\n element.appendChild(cloneNode(nodes[idx]));\n }\n};\nconst wrapTable = (table) => {\n const wrapper = document.createElement('div');\n wrapper.className = 'k-widget k-grid';\n wrapper.appendChild(table);\n return wrapper;\n};\nconst createTableElement = (sources) => {\n const sourceCount = sources.length;\n const element = cloneNode(sources[0]);\n const rowsCount = element.rows.length;\n if (sourceCount > 1) {\n for (let rowIdx = 0; rowIdx < rowsCount; rowIdx++) {\n for (let sourceIdx = 1; sourceIdx < sourceCount; sourceIdx++) {\n appendNodes(element.rows[rowIdx], sources[sourceIdx].rows[rowIdx].cells);\n }\n }\n }\n return element;\n};\nconst setFirstCellClass = (header, headers) => {\n if (headers.length > 1 && header.rows.length > 1) {\n for (let idx = 1; idx < header.rows.length; idx++) {\n const firstCellIndex = headers[0].rows[idx].cells.length;\n const cell = header.rows[idx].cells[firstCellIndex];\n if (String(cell.className).indexOf(FIRST_CLASS) === -1) {\n cell.className += ` ${FIRST_CLASS}`;\n }\n }\n }\n};\nconst createTable = (colGroups, headers, bodies, footers) => {\n const table = document.createElement('table');\n const colGroup = colGroups[0].cloneNode(true);\n for (let idx = 1; idx < colGroups.length; idx++) {\n appendNodes(colGroup, colGroups[idx].querySelectorAll('col'));\n }\n const header = createTableElement(headers);\n const body = createTableElement(bodies);\n header.className = HEADER_CLASS;\n setFirstCellClass(header, headers);\n table.appendChild(colGroup);\n table.appendChild(header);\n table.appendChild(body);\n if (footers.length) {\n const footer = createTableElement(footers);\n footer.className = FOOTER_CLASS;\n table.appendChild(footer);\n }\n return wrapTable(table);\n};\n/**\n * @hidden\n */\nconst exportElement = (wrapper) => {\n const query = new GridQuery(wrapper);\n const content = query.content();\n let result;\n if (content) {\n const colGroups = [content.querySelector('colgroup')];\n const headers = [query.header().querySelector('thead')];\n const bodies = [content.querySelector('tbody')];\n const footer = query.footer();\n const footers = [];\n if (footer) {\n footers.push(footer.querySelector('tfoot'));\n }\n const lockedContent = query.content(true);\n if (lockedContent) {\n colGroups.unshift(lockedContent.querySelector('colgroup'));\n headers.unshift(query.header(true).querySelector('thead'));\n bodies.unshift(lockedContent.querySelector('tbody'));\n if (footer) {\n footers.unshift(query.footer(true).querySelector('tfoot'));\n }\n }\n result = createTable(colGroups, headers, bodies, footers);\n }\n else {\n result = wrapTable(query.table().cloneNode(true));\n }\n return result;\n};\n\nconst createElement$1 = (tagName, className) => {\n const element = document.createElement(tagName);\n if (className) {\n element.className = className;\n }\n return element;\n};\nconst createDiv = (className) => {\n return createElement$1('div', className);\n};\n/**\n * Configures the settings for the export of Grid in PDF ([see example]({% slug pdfexport_grid %})).\n */\nclass PDFComponent extends PDFExportComponent {\n constructor(pdfService, suspendService, ngZone, element) {\n super(element);\n this.pdfService = pdfService;\n this.suspendService = suspendService;\n this.ngZone = ngZone;\n this.columns = new QueryList();\n this.saveSubscription = pdfService.savePDF.subscribe(this.savePDF.bind(this));\n this.drawSubscription = pdfService.drawPDF.subscribe(this.drawPDF.bind(this));\n this.reset = this.reset.bind(this);\n this.draw = this.draw.bind(this);\n }\n ngOnDestroy() {\n this.saveSubscription.unsubscribe();\n this.drawSubscription.unsubscribe();\n this.reset();\n }\n savePDF(component) {\n this.createPDF(component, this.draw);\n }\n drawPDF({ component, promise }) {\n this.createPDF(component, () => {\n this.createExportGroup(promise);\n });\n }\n createPDF(component, callback) {\n const pageSize = component.pageSize;\n const total = component.view.total;\n const columns = this.columns.toArray();\n if (columns.length) {\n this.originalColumns = component.columns.toArray();\n }\n this.component = component;\n this.suspendService.scroll = true;\n this.pdfService.exporting = true;\n this.initProgress();\n this.renderAllPages = this.allPages && pageSize < total;\n if (this.renderAllPages) {\n this.skip = component.skip;\n this.pageSize = pageSize;\n this.changePage(0, total, callback, columns);\n }\n else if (columns.length || component.virtualColumns) {\n this.changeColumns(columns, callback);\n }\n else {\n callback();\n }\n }\n initProgress() {\n const wrapperElement = this.component.wrapper.nativeElement;\n const progress = this.progress = createDiv('k-loading-pdf-mask');\n const overlay = cloneNode(wrapperElement);\n progress.appendChild(overlay);\n progress.appendChild(createDiv('k-loading-color'));\n progress.appendChild(createElement$1('span', 'k-i-loading k-icon'));\n this.originalHeight = wrapperElement.style.height;\n this.originalOverflow = wrapperElement.style.overflow;\n wrapperElement.style.height = wrapperElement.offsetHeight + 'px';\n wrapperElement.style.overflow = 'hidden';\n wrapperElement.appendChild(progress);\n this.applyScroll(overlay);\n }\n applyScroll(overlay) {\n const query = new GridQuery(this.component.wrapper.nativeElement);\n const content = query.content();\n if (content) {\n const overlayQuery = new GridQuery(overlay);\n const overlayContent = overlayQuery.content();\n overlayContent.scrollTop = content.scrollTop;\n overlayContent.scrollLeft = content.scrollLeft;\n overlayQuery.header().scrollLeft = query.header().scrollLeft;\n const footer = query.footer();\n if (footer) {\n overlayQuery.footer().scrollLeft = footer.scrollLeft;\n }\n const lockedContent = query.content(true);\n if (lockedContent) {\n const overlayLockedContent = overlayQuery.content(true);\n overlayLockedContent.scrollTop = lockedContent.scrollTop;\n overlayLockedContent.scrollLeft = lockedContent.scrollLeft;\n }\n }\n }\n draw() {\n this.createExportElement((element) => {\n this.save(element, this.fileName);\n });\n }\n createExportGroup(promise) {\n this.createExportElement((element) => {\n this.exportElement(element).then(group => promise.resolve(group));\n });\n }\n createExportElement(callback) {\n this.ngZone.runOutsideAngular(() => {\n const container = this.container = createDiv('k-grid-pdf-export-element');\n const element = exportElement(this.component.wrapper.nativeElement);\n container.appendChild(element);\n document.body.appendChild(container);\n callback(element);\n });\n }\n drawOptions() {\n const options = super.drawOptions();\n options._destructive = true;\n return options;\n }\n cleanup() {\n super.cleanup();\n this.pdfService.exporting = false;\n if (this.component) {\n const originalColumns = this.originalColumns;\n delete this.originalColumns;\n if (this.renderAllPages) {\n this.changePage(this.skip, this.pageSize, this.reset, originalColumns);\n }\n else if (originalColumns || this.component.virtualColumns) {\n this.changeColumns(originalColumns, this.reset);\n }\n else {\n this.reset();\n }\n }\n else {\n this.reset();\n }\n this.removeContainer();\n }\n removeContainer() {\n if (this.container) {\n document.body.removeChild(this.container);\n delete this.container;\n }\n }\n changePage(skip, _take, callback, columns) {\n this.ngZone.run(() => {\n this.pdfService.dataChanged.pipe(take(1)).subscribe(() => {\n if ((columns && columns.length) || this.component.virtualColumns) {\n this.changeColumns(columns, callback);\n }\n else {\n this.onStable(callback);\n }\n });\n this.component.notifyPageChange('pdf', { skip: skip, take: _take });\n });\n }\n changeColumns(columns, callback) {\n this.ngZone.run(() => {\n this.onStable(callback);\n if (columns && columns.length) {\n this.component.columns.reset(columns);\n }\n });\n }\n reset() {\n this.suspendService.scroll = false;\n this.renderAllPages = false;\n if (!this.component) {\n return;\n }\n const wrapperElement = this.component.wrapper.nativeElement;\n wrapperElement.removeChild(this.progress);\n wrapperElement.style.height = this.originalHeight;\n wrapperElement.style.overflow = this.originalOverflow;\n delete this.progress;\n delete this.component;\n }\n onStable(callback) {\n // not sure if it is an actual scenario. occurs in the tests.\n // onStable is triggered in the same pass without the change detection.\n // thus, the callback is called before the changes are applied without the timeout.\n setTimeout(() => {\n this.ngZone.onStable.asObservable().pipe(take(1)).subscribe(callback);\n }, 0); // tslint:disable-line: align\n }\n}\nPDFComponent.ɵfac = function PDFComponent_Factory(t) { return new (t || PDFComponent)(ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(SuspendService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nPDFComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PDFComponent, selectors: [[\"kendo-grid-pdf\"]], contentQueries: function PDFComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFMarginComponent$1, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PDFTemplateDirective$1, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase$1, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.marginComponent = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.pageTemplateDirective = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { allPages: \"allPages\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function PDFComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nPDFComponent.ctorParameters = () => [\n { type: PDFService },\n { type: SuspendService },\n { type: NgZone },\n { type: ElementRef }\n];\nPDFComponent.propDecorators = {\n allPages: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase$1,] }],\n marginComponent: [{ type: ContentChild, args: [PDFMarginComponent$1,] }],\n pageTemplateDirective: [{ type: ContentChild, args: [PDFTemplateDirective$1,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-pdf',\n template: ''\n }]\n }], function () { return [{ type: PDFService }, { type: SuspendService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ElementRef }]; }, { columns: [{\n type: ContentChildren,\n args: [ColumnBase$1]\n }], allPages: [{\n type: Input\n }], marginComponent: [{\n type: ContentChild,\n args: [PDFMarginComponent$1]\n }], pageTemplateDirective: [{\n type: ContentChild,\n args: [PDFTemplateDirective$1]\n }] }); })();\n\n/**\n * Represents the `export-to-PDF` command of the Grid.\n * You can apply this directive to any `button` element inside a\n * [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When the user clicks a button that is associated with the directive, the\n * [`pdfExport`]({% slug api_grid_gridcomponent %}#toc-pdfexport) event\n * fires ([see example]({% slug pdfexport_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass PDFCommandDirective extends Button {\n constructor(pdfService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.pdfService = pdfService;\n this.ngZone = ngZone;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.pdfService.exportClick.emit();\n }\n /**\n * @hidden\n */\n get pdfClass() {\n return true;\n }\n}\nPDFCommandDirective.ɵfac = function PDFCommandDirective_Factory(t) { return new (t || PDFCommandDirective)(ɵngcc0.ɵɵdirectiveInject(PDFService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nPDFCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PDFCommandDirective, selectors: [[\"\", \"kendoGridPDFCommand\", \"\"]], hostVars: 2, hostBindings: function PDFCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function PDFCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-pdf\", ctx.pdfClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nPDFCommandDirective.ctorParameters = () => [\n { type: PDFService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nPDFCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n pdfClass: [{ type: HostBinding, args: ['class.k-grid-pdf',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridPDFCommand]'\n }]\n }], function () { return [{ type: PDFService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], pdfClass: [{\n type: HostBinding,\n args: ['class.k-grid-pdf']\n }] }); })();\n\nconst exportedModules$5 = [\n PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1\n];\nconst declarations$1 = [\n PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Grid PDF component.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid and PDF modules\n * import { GridModule, PDFModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule, PDFModule], // import Grid and PDF modules\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass PDFModule {\n}\nPDFModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PDFModule });\nPDFModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PDFModule_Factory(t) { return new (t || PDFModule)(); } });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PDFModule, { declarations: [PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1], exports: [PDFComponent,\n PDFMarginComponent$1,\n PDFCommandDirective,\n PDFTemplateDirective$1] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PDFModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$5]\n }]\n }], null, null); })();\n\n/**\n * Arguments for the `excelExport` event.\n */\nclass ExcelExportEvent extends PreventableEvent {\n constructor(workbook) {\n super();\n this.workbook = workbook;\n }\n}\n\n/* tslint:disable object-literal-sort-keys */\nconst fetchComponentData = (component) => {\n return {\n data: component.view.map(item => item),\n group: component.group\n };\n};\nconst toExcelColumn = (column) => {\n return {\n title: column.title,\n field: column.field,\n locked: Boolean(column.locked),\n width: column.width,\n level: column.level,\n hidden: !column.isVisible,\n groupHeaderTemplate: column.groupHeaderTemplate,\n groupHeaderColumnTemplate: column.groupHeaderColumnTemplate,\n groupFooterTemplate: column.groupFooterTemplate,\n footerTemplate: column.footerTemplate\n };\n};\nconst toExcelColumns = (columns) => {\n const result = [];\n sortColumns(columns)\n .forEach((column) => {\n if (column.isSpanColumn) {\n result.push(...toExcelColumns(column.childrenArray));\n }\n else {\n const excelColumn = toExcelColumn(column);\n if (column.isColumnGroup) {\n excelColumn.children = [excelColumn].concat(toExcelColumns(column.childrenArray));\n }\n result.push(excelColumn);\n }\n });\n return result;\n};\nconst componentColumns = (component) => {\n const columns = toExcelColumns(component.columns.toArray());\n return orderBy(columns, [{ field: 'locked', dir: 'desc' }]);\n};\n/**\n * Configures the settings for the export of Grid in Excel ([see example]({% slug excelexport_grid %})).\n */\nclass ExcelComponent {\n constructor(excelService, localization, zone) {\n this.localization = localization;\n this.zone = zone;\n /**\n * Specifies the file name of the exported Excel file.\n * @default \"Export.xlsx\"\n */\n this.fileName = 'Export.xlsx';\n /**\n * @hidden\n */\n this.columns = new QueryList();\n this.saveSubscription = excelService.saveToExcel.subscribe(this.save.bind(this));\n }\n ngOnDestroy() {\n this.saveSubscription.unsubscribe();\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n }\n }\n save(component) {\n const data = (this.fetchData || fetchComponentData)(component);\n const exportData = (result) => {\n delete this.dataSubscription;\n this.exportData(component, result);\n };\n if (data instanceof Promise) {\n data.then(exportData);\n }\n else if (data instanceof Observable) {\n this.dataSubscription = data.pipe(take(1)).subscribe(exportData);\n }\n else {\n exportData(data);\n }\n }\n exportData(component, result) {\n const options = workbookOptions({\n columns: this.columns.length ? this.columns : componentColumns(component),\n data: result.data,\n group: result.group,\n filterable: this.filterable,\n creator: this.creator,\n date: this.date,\n paddingCellOptions: this.paddingCellOptions,\n headerPaddingCellOptions: this.headerPaddingCellOptions,\n rtl: this.localization.rtl,\n collapsible: this.collapsible\n });\n const args = new ExcelExportEvent(options);\n component.excelExport.emit(args);\n if (!args.isDefaultPrevented()) {\n this.zone.runOutsideAngular(() => this.saveFile(options));\n }\n }\n saveFile(options) {\n toDataURL(options).then((dataURL) => {\n saveAs(dataURL, this.fileName, {\n forceProxy: this.forceProxy,\n proxyURL: this.proxyURL\n });\n });\n }\n}\nExcelComponent.ɵfac = function ExcelComponent_Factory(t) { return new (t || ExcelComponent)(ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ExcelComponent, selectors: [[\"kendo-grid-excel\"]], contentQueries: function ExcelComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, ColumnBase, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.columns = _t);\n } }, inputs: { fileName: \"fileName\", filterable: \"filterable\", creator: \"creator\", date: \"date\", forceProxy: \"forceProxy\", proxyURL: \"proxyURL\", fetchData: \"fetchData\", paddingCellOptions: \"paddingCellOptions\", headerPaddingCellOptions: \"headerPaddingCellOptions\", collapsible: \"collapsible\" }, decls: 0, vars: 0, template: function ExcelComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nExcelComponent.ctorParameters = () => [\n { type: ExcelService },\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelComponent.propDecorators = {\n fileName: [{ type: Input }],\n filterable: [{ type: Input }],\n creator: [{ type: Input }],\n date: [{ type: Input }],\n forceProxy: [{ type: Input }],\n proxyURL: [{ type: Input }],\n fetchData: [{ type: Input }],\n paddingCellOptions: [{ type: Input }],\n headerPaddingCellOptions: [{ type: Input }],\n collapsible: [{ type: Input }],\n columns: [{ type: ContentChildren, args: [ColumnBase, { descendants: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-grid-excel',\n template: ``\n }]\n }], function () { return [{ type: ExcelService }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { fileName: [{\n type: Input\n }], columns: [{\n type: ContentChildren,\n args: [ColumnBase, { descendants: true }]\n }], filterable: [{\n type: Input\n }], creator: [{\n type: Input\n }], date: [{\n type: Input\n }], forceProxy: [{\n type: Input\n }], proxyURL: [{\n type: Input\n }], fetchData: [{\n type: Input\n }], paddingCellOptions: [{\n type: Input\n }], headerPaddingCellOptions: [{\n type: Input\n }], collapsible: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the `export-to-Excel` command of the Grid. You can apply this\n * directive to any `button` element inside a\n * [`ToolbarTemplate`]({% slug api_grid_commandcolumncomponent %}).\n * When the user clicks a button associated with the directive, the\n * [`excelExport`]({% slug api_grid_gridcomponent %}#toc-excelexport) event\n * fires ([see example]({% slug excelexport_grid %})).\n *\n * @example\n * ```html-no-run\n * \n * \n * \n * \n * \n * \n * \n * ```\n */\nclass ExcelCommandDirective extends Button {\n constructor(excelService, element, renderer, localization, ngZone) {\n super(element, renderer, null, localization, ngZone);\n this.excelService = excelService;\n this.ngZone = ngZone;\n }\n /**\n * @hidden\n */\n onClick(e) {\n e.preventDefault();\n this.excelService.exportClick.emit();\n }\n /**\n * @hidden\n */\n get excelClass() {\n return true;\n }\n}\nExcelCommandDirective.ɵfac = function ExcelCommandDirective_Factory(t) { return new (t || ExcelCommandDirective)(ɵngcc0.ɵɵdirectiveInject(ExcelService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nExcelCommandDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ExcelCommandDirective, selectors: [[\"\", \"kendoGridExcelCommand\", \"\"]], hostVars: 2, hostBindings: function ExcelCommandDirective_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function ExcelCommandDirective_click_HostBindingHandler($event) { return ctx.onClick($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-grid-excel\", ctx.excelClass);\n } }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nExcelCommandDirective.ctorParameters = () => [\n { type: ExcelService },\n { type: ElementRef },\n { type: Renderer2 },\n { type: LocalizationService },\n { type: NgZone }\n];\nExcelCommandDirective.propDecorators = {\n onClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n excelClass: [{ type: HostBinding, args: ['class.k-grid-excel',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelCommandDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoGridExcelCommand]'\n }]\n }], function () { return [{ type: ExcelService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { onClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], excelClass: [{\n type: HostBinding,\n args: ['class.k-grid-excel']\n }] }); })();\n\nconst declarations$2 = [ExcelComponent, ExcelCommandDirective];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Excel component of the Grid.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Grid and Excel modules\n * import { GridModule, ExcelModule } from '@progress/kendo-angular-grid';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, GridModule, ExcelModule], // import Grid and Excel modules\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass ExcelModule {\n}\nExcelModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ExcelModule });\nExcelModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ExcelModule_Factory(t) { return new (t || ExcelModule)(); }, imports: [ExcelExportModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ExcelModule, { declarations: function () { return [ExcelComponent,\n ExcelCommandDirective]; }, exports: function () { return [ExcelComponent,\n ExcelCommandDirective,\n ExcelExportModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ExcelModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$2],\n exports: [declarations$2, ExcelExportModule]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ColumnChooserComponent, ColumnListComponent, ColumnMenuChooserComponent, ColumnMenuFilterComponent, ColumnMenuItemBase, ColumnMenuItemContentTemplateDirective, ColumnMenuItemComponent, ColumnMenuLockComponent, ColumnMenuSortComponent, ColumnMenuTemplateDirective, ColumnMenuModule, ColumnMenuService, ColumnHandleDirective, ColumnResizingService, TableDirective, ColumnInfoService, DomEventsService, ExpandStateService, IdService, PreventableEvent, SortService, ChangeNotificationService, ColumnReorderService, DragAndDropModule, DragAndDropService, DragHintService, DraggableColumnDirective, DropCueService, DropTargetDirective, EditingDirectiveBase, RowEditingDirectiveBase, AddCommandDirective, CancelCommandDirective, EditCommandDirective, EditService as EditService$1, LocalDataChangesService, RemoveCommandDirective, SaveCommandDirective, ExcelCommandDirective, BooleanFilterComponent, BooleanFilterCellComponent, FilterCellHostDirective, FilterCellOperatorsComponent, FilterCellWrapperComponent, DateFilterComponent, FilterHostDirective, FilterInputWrapperComponent, FilterInputDirective, FilterRowComponent, DateFilterMenuInputComponent, FilterMenuContainerComponent, FilterMenuHostDirective, FilterMenuInputWrapperComponent, FilterMenuComponent, NumericFilterMenuInputComponent, StringFilterMenuInputComponent, NumericFilterComponent, FilterOperatorBase, SharedFilterModule, StringFilterComponent, GroupHeaderComponent, GroupIndicatorComponent, GroupInfoService, GroupPanelComponent, GroupsService, BrowserSupportService, ResizeService, ResponsiveService, LocalizedMessagesDirective, Messages, FocusGroup, FocusRoot, LogicalCellDirective, LogicalRowDirective, NavigationService, PagerContextService, PagerElementComponent, PDFCommandDirective, PDFTemplateDirective$1 as PDFTemplateDirective, CellComponent, CELL_CONTEXT, EMPTY_CELL_CONTEXT, FieldAccessorPipe, DetailsService, DEFAULT_SCROLLER_FACTORY, SCROLLER_FACTORY_TOKEN, ScrollRequestService, ScrollSyncService, ScrollerService, CellSelectionService, GridMarqueeDirective, SelectAllCheckboxDirective, SelectionCheckboxDirective, Selection, SelectionService, GridModule, SharedModule, GridComponent, ColumnBase$1 as ColumnBase, ColumnComponent, CommandColumnComponent, SpanColumnComponent, ColumnGroupComponent, CheckboxColumnComponent, ToolbarComponent, ToolbarTemplateDirective, CellTemplateDirective, HeaderTemplateDirective, FooterTemplateDirective, PagerTemplateDirective, ExpandDetailsDirective, DetailTemplateDirective, DetailExpandEvent, DetailCollapseEvent, GroupHeaderTemplateDirective, GroupHeaderColumnTemplateDirective, GroupFooterTemplateDirective, ResizableContainerDirective, TemplateContextDirective, NoRecordsTemplateDirective, DataBindingDirective, SelectionDirective, FilterService, FilterCellTemplateDirective, FilterCellComponent, StringFilterCellComponent, DateFilterCellComponent, BaseFilterCellComponent, FilterMenuTemplateDirective, NumericFilterMenuComponent, StringFilterMenuComponent, DateFilterMenuComponent, BooleanFilterMenuComponent, BeforeEqFilterOperatorComponent, BeforeFilterOperatorComponent, AfterEqFilterOperatorComponent, AfterFilterOperatorComponent, ContainsFilterOperatorComponent, DoesNotContainFilterOperatorComponent, EndsWithFilterOperatorComponent, EqualFilterOperatorComponent, IsEmptyFilterOperatorComponent, IsNotEmptyFilterOperatorComponent, IsNotNullFilterOperatorComponent, IsNullFilterOperatorComponent, NotEqualFilterOperatorComponent, StartsWithFilterOperatorComponent, NumericFilterCellComponent, AutoCompleteFilterCellComponent, GreaterFilterOperatorComponent, GreaterOrEqualToFilterOperatorComponent, LessOrEqualToFilterOperatorComponent, LessFilterOperatorComponent, PagerPrevButtonsComponent, PagerNextButtonsComponent, PagerNumericButtonsComponent, PagerInputComponent, PagerInfoComponent, PagerPageSizesComponent, RowFilterModule, FilterMenuModule, BodyModule, GroupModule, HeaderModule, FooterModule, PagerModule, TemplateEditingDirective, ReactiveEditingDirective, InCellEditingDirective, EditTemplateDirective, ColGroupComponent, HeaderComponent, ListComponent, FooterComponent, TableBodyComponent, PagerComponent, CustomMessagesComponent, LoadingComponent, PDFModule, PDFComponent, PDFMarginComponent$1 as PDFMarginComponent, PDFService, ExcelModule, ExcelComponent, ExcelService, ExcelExportEvent, CellCloseEvent, SuspendService, GroupBindingDirective, slice, count, Skip, ColumnReorderEvent, FocusableDirective, ColumnVisibilityChangeEvent, ColumnMenuComponent, SinglePopupService, PopupCloseEvent };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7a1RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O2lHQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozt1RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21IQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Z0hBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzswSUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs0SEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzBJQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUlBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NEpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OEtBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUlBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7eUpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7b2RBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O3FKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztzSkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzhNQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OytIQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzJHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Nk9BQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzJJQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozt1RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztzSkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztzSUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0RBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7a0xBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O21IQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozt1RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztzSEFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztxTUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZHQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs2RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7MEJBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzJGQUdFO0FBQ0Y7QUFDQTs7O2dEQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dVRBaWNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBJQW1HRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZTQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzJHQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MmJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O29wRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO3FFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7a0RBV0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozt5SkFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29GQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztzREEwQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7d0tBcUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzJHQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O1dBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztrVEFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7b0dBa0NFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztpT0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21NQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O2lHQWVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRNQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzsyRkFvQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBIQStCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7OzJIQW1CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzswR0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7OzsySEF1QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpSkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7d1pBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OzttS0FrQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozt3RUFZRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs2QkFVRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NlBBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt1TEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzhGQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OzttRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2lEQVVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O3NSQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt5R0FNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzZFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzJFQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3VLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzhKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2dLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21LQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2tLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OytKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O21LQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2dLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzZKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O3NLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzhKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2dLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7O2lLQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OytKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs0S0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3dMQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRIQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBUUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozt5REF1QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrRUEwQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUpBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0VBMENFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VKQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7NEdBaUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUlBMkJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7aURBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs0RkFpQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs2TEFxRUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzt3TkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3R0E4Q0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lEQWdCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztnR0FLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzswQkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MlFBNExFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs2REFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O2lJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztpSEFzQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7NFFBbUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7eUVBZ0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7dUtBaUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztzSEErQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OytJQThDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztnTEFrQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzRJQW9ERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzJEQW1CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O29PQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7d0tBc0NFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQVFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozt3RkFnQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Z0VBMEJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztnREFHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7MkNBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7cURBcUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzhEQWtCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzswTEFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztlQXVDRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7b0VBYUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OzsyR0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OzsyREFrQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O29FQVNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7O3FKQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O3dKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O3lKQVlFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OzsrRUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7OzsrRUFnTkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O2dTQThERTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7MERBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7NktBOENFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7aUZBYUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VLQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7bUdBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lRQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZRQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7cVFBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztrU0FHRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQW1CRTtBQUNGO0FBQ0E7QUFDQTs7Ozs7Ozs7OzswQkFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUxBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7d0xBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzswREFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBTUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzsyWUFNRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzBEQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OzBCQU1FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiogQ29weXJpZ2h0IMKpIDIwMjAgUHJvZ3Jlc3MgU29mdHdhcmUgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4qIExpY2Vuc2VkIHVuZGVyIGNvbW1lcmNpYWwgbGljZW5zZS4gU2VlIExJQ0VOU0UubWQgaW4gdGhlIHByb2plY3Qgcm9vdCBmb3IgbW9yZSBpbmZvcm1hdGlvblxuKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5qZWN0LCBTa2lwU2VsZiwgRWxlbWVudFJlZiwgUmVuZGVyZXIyLCBOZ1pvbmUsIENoYW5nZURldGVjdG9yUmVmLCBIb3N0QmluZGluZywgVGVtcGxhdGVSZWYsIFF1ZXJ5TGlzdCwgSW5wdXQsIENvbnRlbnRDaGlsZHJlbiwgQ29udGVudENoaWxkLCBDb21wb25lbnQsIGZvcndhcmRSZWYsIEhvc3QsIE91dHB1dCwgaXNEZXZNb2RlLCBTZWN1cml0eUNvbnRleHQsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgU2VsZiwgVmlld0NvbnRhaW5lclJlZiwgUGlwZSwgTmdNb2R1bGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIEhvc3RMaXN0ZW5lciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNEb2N1bWVudEF2YWlsYWJsZSwgS2V5cywgRHJhZ2dhYmxlRGlyZWN0aXZlLCBpc0NoYW5nZWQsIGFueUNoYW5nZWQsIGhhc09ic2VydmVycywgUmVzaXplU2Vuc29yQ29tcG9uZW50LCBEcmFnZ2FibGVNb2R1bGUsIEV2ZW50c01vZHVsZSwgZ3VpZCwgUmVzaXplU2Vuc29yTW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItY29tbW9uJztcbmltcG9ydCB7IG1lcmdlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBmcm9tLCBpbnRlcnZhbCwgZnJvbUV2ZW50LCB6aXAsIEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSwgTDEwTl9QUkVGSVgsIENvbXBvbmVudE1lc3NhZ2VzIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2UsIGZpbHRlciwgdGFrZVVudGlsLCBtYXAsIHN3aXRjaE1hcFRvLCBkZWxheSwgYXVkaXRUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFwLCB0aHJvdHRsZVRpbWUsIGRlYm91bmNlVGltZSwgYnVmZmVyQ291bnQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgTkdfVkFMVUVfQUNDRVNTT1IsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgb3JkZXJCeSwgcHJvY2VzcywgaXNDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yLCBmaWx0ZXJCeSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcbmltcG9ydCB7IFBvcHVwU2VydmljZSwgUG9wdXBNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1wb3B1cCc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IGdldHRlciB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1jb21tb24nO1xuaW1wb3J0IHsgRHJvcERvd25MaXN0TW9kdWxlLCBBdXRvQ29tcGxldGVNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kcm9wZG93bnMnO1xuaW1wb3J0IHsgSW5wdXRzTW9kdWxlLCBOdW1lcmljVGV4dEJveENvbXBvbmVudCwgTnVtZXJpY1RleHRCb3hNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnB1dHMnO1xuaW1wb3J0IHsgRGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWRhdGVpbnB1dHMnO1xuaW1wb3J0IHsgSW50bFNlcnZpY2UgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1pbnRsJztcbmltcG9ydCB7IHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItYnV0dG9ucyc7XG5pbXBvcnQgeyBQREZNYXJnaW5Db21wb25lbnQsIFBERlRlbXBsYXRlRGlyZWN0aXZlLCBQREZFeHBvcnRDb21wb25lbnQgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1wZGYtZXhwb3J0JztcbmltcG9ydCB7IHNhdmVBcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1maWxlLXNhdmVyJztcbmltcG9ydCB7IHdvcmtib29rT3B0aW9ucywgdG9EYXRhVVJMLCBDb2x1bW5CYXNlLCBFeGNlbEV4cG9ydE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWV4Y2VsLWV4cG9ydCc7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEb21FdmVudHNTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jZWxsQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY2VsbE1vdXNlZG93biA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jZWxsTW91c2V1cCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5rZXlkb3duID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmZvY3VzSW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZm9jdXNPdXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMud2luZG93Qmx1ciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG59XG5Eb21FdmVudHNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCBFTVBUWV9SRUdFWCA9IC9eXFxzKiQvO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzUHJlc2VudCA9ICh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0JsYW5rID0gKHZhbHVlKSA9PiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzQXJyYXkgPSAodmFsdWUpID0+IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzVHJ1dGh5ID0gKHZhbHVlKSA9PiAhIXZhbHVlO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzTnVsbE9yRW1wdHlTdHJpbmcgPSAodmFsdWUpID0+IGlzQmxhbmsodmFsdWUpIHx8IEVNUFRZX1JFR0VYLnRlc3QodmFsdWUpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG9ic2VydmUgPSAobGlzdCkgPT4gbWVyZ2Uob2YobGlzdCksIGxpc3QuY2hhbmdlcyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNVbml2ZXJzYWwgPSAoKSA9PiB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIWlzTmFOKHZhbHVlKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBleHRyYWN0Rm9ybWF0ID0gKGZvcm1hdCkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhmb3JtYXQpICYmICFpc051bGxPckVtcHR5U3RyaW5nKGZvcm1hdCkgJiYgZm9ybWF0LnN0YXJ0c1dpdGgoJ3swOicpKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQuc2xpY2UoMywgZm9ybWF0Lmxlbmd0aCAtIDEpO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub3QgPSAoZm4pID0+ICguLi5hcmdzKSA9PiAhZm4uYXBwbHkobnVsbCwgYXJncyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgb3IgPSAoLi4uY29uZGl0aW9ucykgPT4gKHZhbHVlKSA9PiBjb25kaXRpb25zLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgfHwgeCh2YWx1ZSksIGZhbHNlKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBhbmQgPSAoLi4uY29uZGl0aW9ucykgPT4gKHZhbHVlKSA9PiBjb25kaXRpb25zLnJlZHVjZSgoYWNjLCB4KSA9PiBhY2MgJiYgeCh2YWx1ZSksIHRydWUpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IFNraXAgPSBuZXcgSW5qZWN0aW9uVG9rZW4oXCJTa2lwXCIpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOnZhcmlhYmxlLW5hbWVcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjcmVhdGVQcm9taXNlID0gKCkgPT4ge1xuICAgIGxldCByZXNvbHZlRm4sIHJlamVjdEZuO1xuICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmVGbiA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgIH07XG4gICAgICAgIHJlamVjdEZuID0gKGRhdGEpID0+IHtcbiAgICAgICAgICAgIHJlamVjdChkYXRhKTtcbiAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHByb21pc2UucmVzb2x2ZSA9IHJlc29sdmVGbjtcbiAgICBwcm9taXNlLnJlamVjdCA9IHJlamVjdEZuO1xuICAgIHJldHVybiBwcm9taXNlO1xufTtcbi8qKiBAaGlkZGVuICovXG5jb25zdCBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKCk7XG4vLyBUT0RPOiBNb3ZlIHRvIGtlbmRvLWNvbW1vblxuZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG4gICAgfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhNYXAucHJvdG90eXBlKTtcbiAgICBjb25zdCBwcm90byA9IE1hcC5wcm90b3R5cGU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICAgIGlmIChrZXkgIT09ICdlbnRyaWVzJyAmJiBrZXkgIT09ICdzaXplJyAmJiBwcm90b1trZXldID09PSBwcm90by5lbnRyaWVzKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgfVxufVxuY29uc3QgRlJBTUVfRFVSQVRJT04gPSAxMDAwIC8gNjA7XG5jb25zdCB3bmQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IHt9O1xuLyoqIEBoaWRkZW4gKi9cbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHduZC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgd25kLm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIHx8IChjYWxsYmFjayA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBGUkFNRV9EVVJBVElPTikpO1xuLyoqIEBoaWRkZW4gKi9cbmNvbnN0IGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd25kLmNhbmNlbEFuaW1hdGlvbkZyYW1lIHx8IHduZC5tc0NhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBjbGVhclRpbWVvdXQ7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZGV0ZWN0SUUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc0RvY3VtZW50QXZhaWxhYmxlKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1YS5pbmRleE9mKCdNU0lFICcpO1xuICAgIGNvbnN0IHRyaWRlbnQgPSB1YS5pbmRleE9mKCdUcmlkZW50LycpO1xuICAgIHJldHVybiBtc2llID4gMCB8fCB0cmlkZW50ID4gMDtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbERhdGFDaGFuZ2VzU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG59XG5Mb2NhbERhdGFDaGFuZ2VzU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZvY3VzUm9vdCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICByZWdpc3Rlckdyb3VwKGdyb3VwKSB7XG4gICAgICAgIGlmICh0aGlzLmFsaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5hZGQoZ3JvdXApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVucmVnaXN0ZXJHcm91cChncm91cCkge1xuICAgICAgICBpZiAodGhpcy5hbGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMuZGVsZXRlKGdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhY3RpdmF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWxpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzLmZvckVhY2goZiA9PiBmLmFjdGl2YXRlKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlYWN0aXZhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLmFsaXZlKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5mb3JFYWNoKGYgPT4gZi5kZWFjdGl2YXRlKCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuRm9jdXNSb290LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG5jb25zdCBmb2N1c2FibGVSZWdleCA9IC9eKD86YXxpbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGJ1dHRvbnxvYmplY3QpJC9pO1xuY29uc3QgTk9ERV9OQU1FX1BSRURJQ0FURVMgPSB7fTtcbmNvbnN0IHRvQ2xhc3NMaXN0ID0gKGNsYXNzTmFtZXMpID0+IFN0cmluZyhjbGFzc05hbWVzKS50cmltKCkuc3BsaXQoJyAnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNDbGFzc2VzID0gKGVsZW1lbnQsIGNsYXNzTmFtZXMpID0+IHtcbiAgICBjb25zdCBuYW1lc0xpc3QgPSB0b0NsYXNzTGlzdChjbGFzc05hbWVzKTtcbiAgICByZXR1cm4gQm9vbGVhbih0b0NsYXNzTGlzdChlbGVtZW50LmNsYXNzTmFtZSkuZmluZCgoY2xhc3NOYW1lKSA9PiBuYW1lc0xpc3QuaW5kZXhPZihjbGFzc05hbWUpID49IDApKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbWF0Y2hlc0NsYXNzZXMgPSAoY2xhc3NOYW1lcykgPT4gKGVsZW1lbnQpID0+IGhhc0NsYXNzZXMoZWxlbWVudCwgY2xhc3NOYW1lcyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgbWF0Y2hlc05vZGVOYW1lID0gKG5vZGVOYW1lKSA9PiB7XG4gICAgaWYgKCFOT0RFX05BTUVfUFJFRElDQVRFU1tub2RlTmFtZV0pIHtcbiAgICAgICAgTk9ERV9OQU1FX1BSRURJQ0FURVNbbm9kZU5hbWVdID0gKGVsZW1lbnQpID0+IFN0cmluZyhlbGVtZW50Lm5vZGVOYW1lKS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICByZXR1cm4gTk9ERV9OQU1FX1BSRURJQ0FURVNbbm9kZU5hbWVdO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9zZXN0ID0gKG5vZGUsIHByZWRpY2F0ZSkgPT4ge1xuICAgIHdoaWxlIChub2RlICYmICFwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNsb3Nlc3RJblNjb3BlID0gKG5vZGUsIHByZWRpY2F0ZSwgc2NvcGUpID0+IHtcbiAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBzY29wZSAmJiAhcHJlZGljYXRlKG5vZGUpKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIGlmIChub2RlICE9PSBzY29wZSkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNvbnRhaW5zID0gKHBhcmVudCwgbm9kZSwgbWF0Y2hTZWxmID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBvdXRzaWRlID0gIWNsb3Nlc3Qobm9kZSwgKGNoaWxkKSA9PiBjaGlsZCA9PT0gcGFyZW50KTtcbiAgICBpZiAob3V0c2lkZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGVsID0gY2xvc2VzdChub2RlLCAoY2hpbGQpID0+IGNoaWxkID09PSBub2RlKTtcbiAgICByZXR1cm4gZWwgJiYgKG1hdGNoU2VsZiB8fCBlbCAhPT0gcGFyZW50KTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNWaXNpYmxlID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBoYXNTaXplID0gcmVjdC53aWR0aCA+IDAgJiYgcmVjdC5oZWlnaHQgPiAwO1xuICAgIGNvbnN0IGhhc1Bvc2l0aW9uID0gcmVjdC54ICE9PSAwICYmIHJlY3QueSAhPT0gMDtcbiAgICAvLyBFbGVtZW50cyBjYW4gaGF2ZSB6ZXJvIHNpemUgZHVlIHRvIHN0eWxpbmcsIGJ1dCB0aGV5IHdpbGwgc3RpbGwgY291bnQgYXMgdmlzaWJsZS5cbiAgICAvLyBGb3IgZXhhbXBsZSwgdGhlIHNlbGVjdGlvbiBjaGVja2JveCBoYXMgbm8gc2l6ZSwgYnV0IGlzIG1hZGUgdmlzaWJsZSB0aHJvdWdoIHN0eWxpbmcuXG4gICAgcmV0dXJuIChoYXNTaXplIHx8IGhhc1Bvc2l0aW9uKSAmJiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS52aXNpYmlsaXR5ICE9PSAnaGlkZGVuJztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNGb2N1c2FibGUgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmICghZWxlbWVudC50YWdOYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IGhhc1RhYkluZGV4ID0gQm9vbGVhbihlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiSW5kZXgnKSk7XG4gICAgY29uc3QgZm9jdXNhYmxlID0gIWVsZW1lbnQuZGlzYWJsZWQgJiYgZm9jdXNhYmxlUmVnZXgudGVzdCh0YWdOYW1lKTtcbiAgICByZXR1cm4gZm9jdXNhYmxlIHx8IGhhc1RhYkluZGV4O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0ZvY3VzYWJsZVdpdGhUYWJLZXkgPSAoZWxlbWVudCwgY2hlY2tWaXNpYmlsaXR5ID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghaXNGb2N1c2FibGUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCB0YWJJbmRleCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpO1xuICAgIGNvbnN0IHZpc2libGUgPSAhY2hlY2tWaXNpYmlsaXR5IHx8IGlzVmlzaWJsZShlbGVtZW50KTtcbiAgICByZXR1cm4gdmlzaWJsZSAmJiB0YWJJbmRleCAhPT0gJy0xJztcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZmluZEVsZW1lbnQgPSAobm9kZSwgcHJlZGljYXRlLCBtYXRjaFNlbGYgPSB0cnVlKSA9PiB7XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKG1hdGNoU2VsZiAmJiBwcmVkaWNhdGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBmaW5kRWxlbWVudChub2RlLCBwcmVkaWNhdGUpO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZpbmRGb2N1c2FibGUgPSAoZWxlbWVudCwgY2hlY2tWaXNpYmlsaXR5ID0gdHJ1ZSkgPT4ge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChlbGVtZW50LCAobm9kZSkgPT4gaXNGb2N1c2FibGVXaXRoVGFiS2V5KG5vZGUsIGNoZWNrVmlzaWJpbGl0eSkpO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmaW5kRm9jdXNhYmxlQ2hpbGQgPSAoZWxlbWVudCwgY2hlY2tWaXNpYmlsaXR5ID0gdHJ1ZSkgPT4ge1xuICAgIHJldHVybiBmaW5kRWxlbWVudChlbGVtZW50LCAobm9kZSkgPT4gaXNGb2N1c2FibGVXaXRoVGFiS2V5KG5vZGUsIGNoZWNrVmlzaWJpbGl0eSksIGZhbHNlKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gcnRsU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIGVsZW1lbnQsIGluaXRpYWwpIHtcbiAgICBsZXQgcmVzdWx0ID0gcG9zaXRpb247XG4gICAgaWYgKGluaXRpYWwgPCAwKSB7XG4gICAgICAgIHJlc3VsdCA9IC1wb3NpdGlvbjtcbiAgICB9XG4gICAgZWxzZSBpZiAoaW5pdGlhbCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gZWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQub2Zmc2V0V2lkdGggLSBwb3NpdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuY29uc3QgaXNCdXR0b24gPSBtYXRjaGVzTm9kZU5hbWUoJ2J1dHRvbicpO1xuY29uc3QgaXNJbnB1dFRhZyA9IG1hdGNoZXNOb2RlTmFtZSgnaW5wdXQnKTtcbmNvbnN0IG5hdmlnYWJsZVJlZ2V4ID0gLyhidXR0b258Y2hlY2tib3h8Y29sb3J8ZmlsZXxyYWRpb3xyZXNldHxzdWJtaXQpL2k7XG5jb25zdCBpc05hdmlnYWJsZUlucHV0ID0gZWxlbWVudCA9PiBpc0lucHV0VGFnKGVsZW1lbnQpICYmIG5hdmlnYWJsZVJlZ2V4LnRlc3QoZWxlbWVudC50eXBlKTtcbmNvbnN0IGlzTmF2aWdhYmxlID0gZWxlbWVudCA9PiAhZWxlbWVudC5kaXNhYmxlZCAmJiAoaXNCdXR0b24oZWxlbWVudCkgfHwgaXNOYXZpZ2FibGVJbnB1dChlbGVtZW50KSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGVmYXVsdEZvY3VzYWJsZUVsZW1lbnQge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gaG9zdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLmZvY3VzYWJsZSA9IGZpbmRGb2N1c2FibGUodGhpcy5lbGVtZW50LCBmYWxzZSkgfHwgdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgZW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNhYmxlICYmICF0aGlzLmZvY3VzYWJsZS5kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvY3VzYWJsZSAmJiBpc1Zpc2libGUodGhpcy5mb2N1c2FibGUpO1xuICAgIH1cbiAgICBpc05hdmlnYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2FuRm9jdXMoKSAmJiBpc05hdmlnYWJsZSh0aGlzLmVsZW1lbnQpO1xuICAgIH1cbiAgICB0b2dnbGUoYWN0aXZlKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZm9jdXNhYmxlLCAndGFiSW5kZXgnLCBhY3RpdmUgPyAnMCcgOiAnLTEnKTtcbiAgICB9XG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2FibGUuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYW5Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlzaWJsZSAmJiB0aGlzLmVuYWJsZWQ7XG4gICAgfVxuICAgIGhhc0ZvY3VzKCkge1xuICAgICAgICByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGhpcy5lbGVtZW50ICYmIGNsb3Nlc3QoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCwgZSA9PiBlID09PSB0aGlzLmVsZW1lbnQpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IENFTExfQ09OVEVYVCA9IG5ldyBJbmplY3Rpb25Ub2tlbignZ3JpZC1jZWxsLWNvbnRleHQnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBFTVBUWV9DRUxMX0NPTlRFWFQgPSB7fTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0aGF0IGNvbnRyb2xzIHRoZSB3YXkgZm9jdXNhYmxlIGVsZW1lbnRzIHJlY2VpdmVcbiAqIFtmb2N1cyBpbiBhIG5hdmlnYWJsZSBHcmlkXSh7JSBzbHVnIGtleWJvYXJkX25hdmlnYXRpb25fZ3JpZCAlfSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiay10ZXh0Ym94XCIgcGxhY2Vob2xkZXI9XCJUYWIgc3RvcCAjMFwiIHN0eWxlPVwibWFyZ2luLWJvdHRvbTogOHB4O1wiIC8+XG4gKiAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIiBbbmF2aWdhYmxlXT1cInRydWVcIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTAwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiIHdpZHRoPVwiMTUwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxuICogICAgICAgICAgICAgICAgICA8IS0tIFRoZSBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aWxsIGJlIGZvY3VzZWQgd2hlbiBwcmVzc2luZyBFbnRlciBvbiB0aGUgY2VsbCAtLT5cbiAqICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJrLXRleHRib3hcIiBrZW5kb0dyaWRGb2N1c2FibGUgW3ZhbHVlXT1cImRhdGFJdGVtLlByb2R1Y3ROYW1lXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDhweDtcIiAvPlxuICogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiay1idXR0b25cIiBrZW5kb0dyaWRGb2N1c2FibGU+VXBkYXRlPC9idXR0b24+XG4gKiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gd2lkdGg9XCIxMDBcIj5cbiAqICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlPlxuICogICAgICAgICAgICAgICAgICA8IS0tIEEgc2luZ2xlIGZvY3VzYWJsZSBlbGVtZW50IHdpbGwgYmUgZm9jdXNlZCBkdXJpbmcgbmF2aWdhdGlvbiAtLT5cbiAqICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIga2VuZG9HcmlkRm9jdXNhYmxlPkRlbGV0ZTwvYnV0dG9uPlxuICogICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiay10ZXh0Ym94XCIgcGxhY2Vob2xkZXI9XCJUYWIgc3RvcCAjMlwiIHN0eWxlPVwibWFyZ2luLXRvcDogOHB4O1wiIC8+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSA9IFt7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICB9LCB7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogICAgIH1dO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIEZvY3VzYWJsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoY2VsbENvbnRleHQsIGhvc3RFbGVtZW50LCByZW5kZXJlcikge1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQgPSBob3N0RWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwID0gdGhpcy5jZWxsQ29udGV4dC5mb2N1c0dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwLnJlZ2lzdGVyRWxlbWVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBuZXcgRGVmYXVsdEZvY3VzYWJsZUVsZW1lbnQodGhpcy5ob3N0RWxlbWVudCwgdGhpcy5yZW5kZXJlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5ncm91cC5pc0FjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKGlzQWN0aXZlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAudW5yZWdpc3RlckVsZW1lbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvZ2dsZShhY3RpdmUpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCAmJiBhY3RpdmUgIT09IHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC50b2dnbGUoYWN0aXZlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY2FuRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50LmNhbkZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpc05hdmlnYWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuaXNOYXZpZ2FibGUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaGFzRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50Lmhhc0ZvY3VzKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWdpc3RlckVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgIH1cbn1cbkZvY3VzYWJsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEZvY3VzYWJsZV0nICsgYCxcbiAgICAgICAgW2tlbmRvR3JpZEVkaXRDb21tYW5kXSxcbiAgICAgICAgW2tlbmRvR3JpZFJlbW92ZUNvbW1hbmRdLFxuICAgICAgICBba2VuZG9HcmlkU2F2ZUNvbW1hbmRdLFxuICAgICAgICBba2VuZG9HcmlkQ2FuY2VsQ29tbWFuZF0sXG4gICAgICAgIFtrZW5kb0dyaWRTZWxlY3Rpb25DaGVja2JveF1cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZvY3VzYWJsZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfSwgeyB0eXBlOiBJbmplY3QsIGFyZ3M6IFtDRUxMX0NPTlRFWFQsXSB9LCB7IHR5cGU6IFNraXBTZWxmIH1dIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyaWRGb2N1c2FibGVFbGVtZW50IHtcbiAgICBjb25zdHJ1Y3RvcihuYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XG4gICAgfVxuICAgIGZvY3VzKCkge1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzQ2VsbCgpO1xuICAgIH1cbiAgICB0b2dnbGUoYWN0aXZlKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UudG9nZ2xlKGFjdGl2ZSk7XG4gICAgfVxuICAgIGNhbkZvY3VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaGFzRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmhhc0ZvY3VzKCk7XG4gICAgfVxuICAgIGlzTmF2aWdhYmxlKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvbkN1cnNvciB7XG4gICAgY29uc3RydWN0b3IobW9kZWwpIHtcbiAgICAgICAgdGhpcy5tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmFjdGl2ZVJvdyA9IDA7XG4gICAgICAgIHRoaXMuYWN0aXZlQ29sID0gMDtcbiAgICAgICAgdGhpcy52aXJ0dWFsQ29sID0gMDtcbiAgICAgICAgdGhpcy52aXJ0dWFsUm93ID0gMDtcbiAgICB9XG4gICAgZ2V0IHJvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZmluZFJvdyh0aGlzLmFjdGl2ZVJvdyk7XG4gICAgfVxuICAgIGdldCBjZWxsKCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvdztcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuZmluZENlbGwodGhpcy5hY3RpdmVDb2wsIHJvdyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRhdGFSb3dJbmRleCgpIHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3c7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIHJldHVybiByb3cuZGF0YVJvd0luZGV4O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXNzdW1lcyBhbmQgYW5ub3VuY2VzIGEgbmV3IGN1cnNvciBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICByZXNldChyb3dJbmRleCA9IHRoaXMuYWN0aXZlUm93LCBjb2xJbmRleCA9IHRoaXMuYWN0aXZlQ29sLCBmb3JjZSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGUocm93SW5kZXgsIGNvbEluZGV4LCBmb3JjZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlydHVhbFJvdyA9IHJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ29sID0gY29sSW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYWN0aXZhdGUocm93SW5kZXgsIGNvbEluZGV4LCBmb3JjZSkge1xuICAgICAgICBpZiAoIWZvcmNlICYmIHRoaXMuaXNBY3RpdmVSYW5nZShyb3dJbmRleCwgY29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldkNvbEluZGV4ID0gdGhpcy5hY3RpdmVDb2w7XG4gICAgICAgIGNvbnN0IHByZXZSb3dJbmRleCA9IHRoaXMuYWN0aXZlUm93O1xuICAgICAgICB0aGlzLmFjdGl2ZUNvbCA9IGNvbEluZGV4O1xuICAgICAgICB0aGlzLmFjdGl2ZVJvdyA9IHJvd0luZGV4O1xuICAgICAgICB0aGlzLmNoYW5nZXMubmV4dCh7XG4gICAgICAgICAgICBjb2xJbmRleCxcbiAgICAgICAgICAgIHByZXZDb2xJbmRleCxcbiAgICAgICAgICAgIHByZXZSb3dJbmRleCxcbiAgICAgICAgICAgIHJvd0luZGV4XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNBY3RpdmVSYW5nZShyb3dJbmRleCwgY29sSW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlUm93ICE9PSByb3dJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmNlbGw7XG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIGVuZCB9ID0gdGhpcy5tb2RlbC5jZWxsUmFuZ2UoY2VsbCk7XG4gICAgICAgIHJldHVybiAhQm9vbGVhbihjZWxsKSB8fCAoc3RhcnQgPD0gY29sSW5kZXggJiYgY29sSW5kZXggPD0gZW5kKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQXNzdW1lcyBhIG5ldyBjdXJzb3IgcG9zaXRpb24gd2l0aG91dCBhbm5vdW5jaW5nIGl0LlxuICAgICAqL1xuICAgIGFzc3VtZShyb3dJbmRleCA9IHRoaXMuYWN0aXZlUm93LCBjb2xJbmRleCA9IHRoaXMuYWN0aXZlQ29sKSB7XG4gICAgICAgIHRoaXMudmlydHVhbFJvdyA9IHJvd0luZGV4O1xuICAgICAgICB0aGlzLnZpcnR1YWxDb2wgPSBjb2xJbmRleDtcbiAgICAgICAgdGhpcy5hY3RpdmVDb2wgPSBjb2xJbmRleDtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3cgPSByb3dJbmRleDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW5ub3VuY2VzIGEgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gdG8gc3Vic2NyaWJlcnMuXG4gICAgICovXG4gICAgYW5ub3VuY2UoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KHtcbiAgICAgICAgICAgIGNvbEluZGV4OiB0aGlzLmFjdGl2ZUNvbCxcbiAgICAgICAgICAgIHByZXZDb2xJbmRleDogdGhpcy5hY3RpdmVDb2wsXG4gICAgICAgICAgICBwcmV2Um93SW5kZXg6IHRoaXMuYWN0aXZlUm93LFxuICAgICAgICAgICAgcm93SW5kZXg6IHRoaXMuYWN0aXZlUm93XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhY3RpdmF0ZVZpcnR1YWxDZWxsKGNlbGwpIHtcbiAgICAgICAgY29uc3Qgcm93UmFuZ2UgPSB0aGlzLm1vZGVsLnJvd1JhbmdlKGNlbGwpO1xuICAgICAgICBjb25zdCBjZWxsUmFuZ2UgPSB0aGlzLm1vZGVsLmNlbGxSYW5nZShjZWxsKTtcbiAgICAgICAgY29uc3QgYWN0aXZlQ29sID0gdGhpcy5hY3RpdmVDb2w7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVJvdyA9IHRoaXMuYWN0aXZlUm93O1xuICAgICAgICBpZiAocm93UmFuZ2Uuc3RhcnQgPD0gYWN0aXZlUm93ICYmIGFjdGl2ZVJvdyA8PSByb3dSYW5nZS5lbmQgJiZcbiAgICAgICAgICAgIGNlbGxSYW5nZS5zdGFydCA8PSBhY3RpdmVDb2wgJiYgYWN0aXZlQ29sIDw9IGNlbGxSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlUm93ID0gY2VsbC5yb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29sID0gY2VsbC5jb2xJbmRleDtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzQWN0aXZlKHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVDb2wgPT09IGNvbEluZGV4ICYmIHRoaXMuYWN0aXZlUm93ID09PSByb3dJbmRleDtcbiAgICB9XG4gICAgbW92ZVVwKG9mZnNldCA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0Um93KC1vZmZzZXQpO1xuICAgIH1cbiAgICBtb3ZlRG93bihvZmZzZXQgPSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldFJvdyhvZmZzZXQpO1xuICAgIH1cbiAgICBtb3ZlTGVmdChvZmZzZXQgPSAxKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldENvbCgtb2Zmc2V0KTtcbiAgICB9XG4gICAgbW92ZVJpZ2h0KG9mZnNldCA9IDEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0Q29sKG9mZnNldCk7XG4gICAgfVxuICAgIGxhc3RDZWxsSW5kZXgocm93KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhLmNvbHVtbnMubGVhZkNvbHVtbnNUb1JlbmRlci5sZW5ndGggLSAxICtcbiAgICAgICAgICAgICh0aGlzLm1ldGFkYXRhLmhhc0RldGFpbFRlbXBsYXRlICYmICghcm93IHx8ICFyb3cuZ3JvdXBJdGVtKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgb2Zmc2V0Q29sKG9mZnNldCkge1xuICAgICAgICBjb25zdCBwcmV2Um93ID0gdGhpcy5tb2RlbC5maW5kUm93KHRoaXMudmlydHVhbFJvdyk7XG4gICAgICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMubGFzdENlbGxJbmRleChwcmV2Um93KTtcbiAgICAgICAgY29uc3QgdmlydHVhbENvbCA9IHRoaXMudmlydHVhbENvbDtcbiAgICAgICAgdGhpcy52aXJ0dWFsQ29sID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odmlydHVhbENvbCArIG9mZnNldCwgbGFzdEluZGV4KSk7XG4gICAgICAgIGxldCBuZXh0Q29sSW5kZXggPSB0aGlzLnZpcnR1YWxDb2w7XG4gICAgICAgIGxldCBuZXh0Um93SW5kZXggPSB0aGlzLnZpcnR1YWxSb3c7XG4gICAgICAgIGxldCBjZWxsID0gdGhpcy5tb2RlbC5maW5kQ2VsbCh0aGlzLnZpcnR1YWxDb2wsIHByZXZSb3cpO1xuICAgICAgICBpZiAoIWNlbGwgJiYgdGhpcy5tZXRhZGF0YS52aXJ0dWFsQ29sdW1ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGUobmV4dFJvd0luZGV4LCBuZXh0Q29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsLmNvbFNwYW4gPiAxICYmIGNlbGwuY29sSW5kZXggPD0gdmlydHVhbENvbCAmJiB2aXJ0dWFsQ29sIDwgY2VsbC5jb2xJbmRleCArIGNlbGwuY29sU3Bhbikge1xuICAgICAgICAgICAgbmV4dENvbEluZGV4ID0gb2Zmc2V0ID4gMCA/IE1hdGgubWluKGNlbGwuY29sSW5kZXggKyBjZWxsLmNvbFNwYW4sIGxhc3RJbmRleCkgOiBNYXRoLm1heCgwLCBjZWxsLmNvbEluZGV4ICsgb2Zmc2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDZWxsID0gdGhpcy5tb2RlbC5maW5kQ2VsbChuZXh0Q29sSW5kZXgsIHByZXZSb3cpO1xuICAgICAgICAgICAgaWYgKGNlbGwgIT09IG5leHRDZWxsKSB7XG4gICAgICAgICAgICAgICAgY2VsbCA9IG5leHRDZWxsO1xuICAgICAgICAgICAgICAgIHRoaXMudmlydHVhbENvbCA9IGNlbGwuY29sSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpcnR1YWxDb2wgPSB2aXJ0dWFsQ29sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlKGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgIH1cbiAgICBvZmZzZXRSb3cob2Zmc2V0KSB7XG4gICAgICAgIGxldCBuZXh0Q29sSW5kZXggPSB0aGlzLnZpcnR1YWxDb2w7XG4gICAgICAgIGlmICh0aGlzLm1ldGFkYXRhICYmIHRoaXMubWV0YWRhdGEuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICBjb25zdCBtYXhJbmRleCA9IHRoaXMubWV0YWRhdGEubWF4TG9naWNhbFJvd0luZGV4O1xuICAgICAgICAgICAgbGV0IG5leHRJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHRoaXMuYWN0aXZlUm93ICsgb2Zmc2V0LCBtYXhJbmRleCkpO1xuICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEuaGFzRGV0YWlsVGVtcGxhdGUgJiYgIXRoaXMubW9kZWwuZmluZFJvdyhuZXh0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gb2Zmc2V0ID4gMCA/IG5leHRJbmRleCArIDEgOiBuZXh0SW5kZXggLSAxO1xuICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5leHRJbmRleCwgbWF4SW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLmhhc0RldGFpbFRlbXBsYXRlICYmIG5leHRJbmRleCA9PT0gbWF4SW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb2RlbC5sYXN0Um93LmluZGV4ICE9PSBtYXhJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIG5hdmlnYXRlIHBhc3QgdGhlIGxhc3QgY29sbGFwc2VkIHJvdy5cbiAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4LS07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbmV4dFJvdyA9IHRoaXMubW9kZWwuZmluZFJvdyhuZXh0SW5kZXgpO1xuICAgICAgICAgICAgaWYgKG5leHRSb3cpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZHVwbGljYXRpb25cbiAgICAgICAgICAgICAgICBsZXQgY2VsbCA9IHRoaXMubW9kZWwuZmluZENlbGwodGhpcy52aXJ0dWFsQ29sLCBuZXh0Um93KTtcbiAgICAgICAgICAgICAgICBpZiAoY2VsbC5yb3dJbmRleCA8PSB0aGlzLnZpcnR1YWxSb3cgJiYgb2Zmc2V0ID4gMCAmJiBjZWxsLnJvd1NwYW4gPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNlbGwgPSB0aGlzLm1vZGVsLmZpbmRDZWxsKHRoaXMudmlydHVhbENvbCwgdGhpcy5tb2RlbC5maW5kUm93KGNlbGwucm93SW5kZXggKyBjZWxsLnJvd1NwYW4gLSAxICsgb2Zmc2V0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHRJbmRleCA9IGNlbGwucm93SW5kZXg7XG4gICAgICAgICAgICAgICAgbmV4dENvbEluZGV4ID0gY2VsbC5jb2xJbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmlydHVhbFJvdyA9IG5leHRJbmRleDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2YXRlKG5leHRJbmRleCwgbmV4dENvbEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXh0Um93ID0gdGhpcy5tb2RlbC5maW5kUm93KHRoaXMudmlydHVhbFJvdyArIG9mZnNldCkgfHwgdGhpcy5tb2RlbC5uZXh0Um93KHRoaXMudmlydHVhbFJvdywgb2Zmc2V0KTtcbiAgICAgICAgaWYgKCFuZXh0Um93KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNlbGwgPSB0aGlzLm1vZGVsLmZpbmRDZWxsKHRoaXMudmlydHVhbENvbCwgbmV4dFJvdyk7XG4gICAgICAgIGlmIChjZWxsICYmIGNlbGwucm93SW5kZXggPD0gdGhpcy52aXJ0dWFsUm93ICYmIG9mZnNldCA+IDAgJiYgY2VsbC5yb3dTcGFuID4gMSkgeyAvLyBzcGFubmVkIGNlbGwgZ28gdG8gbmV4dFxuICAgICAgICAgICAgY29uc3QgbmV4dFBvcyA9IGNlbGwucm93SW5kZXggKyBjZWxsLnJvd1NwYW4gLSAxICsgb2Zmc2V0O1xuICAgICAgICAgICAgY2VsbCA9IHRoaXMubW9kZWwuZmluZENlbGwodGhpcy52aXJ0dWFsQ29sLCB0aGlzLm1vZGVsLmZpbmRSb3cobmV4dFBvcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2VsbCAmJiB0aGlzLm1ldGFkYXRhLnZpcnR1YWxDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmF0ZSh0aGlzLnZpcnR1YWxSb3cgKyBvZmZzZXQsIHRoaXMudmlydHVhbENvbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aXJ0dWFsUm93ID0gY2VsbC5yb3dJbmRleDtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGUodGhpcy52aXJ0dWFsUm93LCBjZWxsLmNvbEluZGV4KTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBJdGVtTWFwIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB7fTtcbiAgICB9XG4gICAgZ2V0IGZpcnN0KCkge1xuICAgICAgICBpZiAodGhpcy5jb3VudCA+IDApIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICB0aGlzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlbTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbGFzdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY291bnQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcy5pdGVtcyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1trZXlzW2tleXMubGVuZ3RoIC0gMV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZUl0ZW0oa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zW2tleV0pIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLml0ZW1zW2tleV07XG4gICAgICAgICAgICB0aGlzLmNvdW50LS07XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0SXRlbShrZXksIGl0ZW0pIHtcbiAgICAgICAgaWYgKCF0aGlzLml0ZW1zW2tleV0pIHtcbiAgICAgICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLml0ZW1zW2tleV0gPSBpdGVtO1xuICAgIH1cbiAgICBnZXRJdGVtKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1trZXldO1xuICAgIH1cbiAgICB0b0FycmF5KCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgdGhpcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtcy5oYXNPd25Qcm9wZXJ0eShrZXkpICYmIGNhbGxiYWNrKHRoaXMuaXRlbXNba2V5XSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZpbmQoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBDb250YWlucyBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnRseSByZW5kZXJlZCByb3dzIGFuZCBjZWxscy5cbiAqL1xuY2xhc3MgTmF2aWdhdGlvbk1vZGVsIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5yb3dzID0gbmV3IEl0ZW1NYXAoKTtcbiAgICB9XG4gICAgZ2V0IGZpcnN0Um93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dzLmZpcnN0O1xuICAgIH1cbiAgICBnZXQgbGFzdFJvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93cy5sYXN0O1xuICAgIH1cbiAgICByZWdpc3RlckNlbGwoY2VsbCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3MuZ2V0SXRlbShjZWxsLmxvZ2ljYWxSb3dJbmRleCk7XG4gICAgICAgIGlmICghcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sSW5kZXggPSBjZWxsLmxvZ2ljYWxDb2xJbmRleDtcbiAgICAgICAgY29uc3QgbW9kZWxDZWxsID0ge1xuICAgICAgICAgICAgdWlkOiBjZWxsLnVpZCxcbiAgICAgICAgICAgIGNvbEluZGV4LFxuICAgICAgICAgICAgcm93SW5kZXg6IHJvdy5pbmRleCxcbiAgICAgICAgICAgIGNvbFNwYW46IGNlbGwuY29sU3BhbixcbiAgICAgICAgICAgIHJvd1NwYW46IGNlbGwucm93U3BhbixcbiAgICAgICAgICAgIGRldGFpbEV4cGFuZENlbGw6IGNlbGwuZGV0YWlsRXhwYW5kQ2VsbCxcbiAgICAgICAgICAgIGRhdGFJdGVtOiByb3cuZGF0YUl0ZW0sXG4gICAgICAgICAgICBkYXRhUm93SW5kZXg6IHJvdy5kYXRhUm93SW5kZXgsXG4gICAgICAgICAgICBmb2N1c0dyb3VwOiBjZWxsLmZvY3VzR3JvdXBcbiAgICAgICAgfTtcbiAgICAgICAgcm93LmNlbGxzLnNldEl0ZW0oY29sSW5kZXgsIG1vZGVsQ2VsbCk7XG4gICAgICAgIGlmIChjZWxsLmdyb3VwSXRlbSkge1xuICAgICAgICAgICAgcm93Lmdyb3VwSXRlbSA9IGNlbGwuZ3JvdXBJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtb2RlbENlbGw7XG4gICAgfVxuICAgIHVucmVnaXN0ZXJDZWxsKGluZGV4LCByb3dJbmRleCwgY2VsbCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLnJvd3MuZ2V0SXRlbShyb3dJbmRleCk7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gcm93LmNlbGxzLmdldEl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLnVpZCA9PT0gY2VsbC51aWQpIHtcbiAgICAgICAgICAgICAgICByb3cuY2VsbHMucmVtb3ZlSXRlbShpbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVnaXN0ZXJSb3cocm93KSB7XG4gICAgICAgIGNvbnN0IG1vZGVsUm93ID0ge1xuICAgICAgICAgICAgdWlkOiByb3cudWlkLFxuICAgICAgICAgICAgaW5kZXg6IHJvdy5sb2dpY2FsUm93SW5kZXgsXG4gICAgICAgICAgICBkYXRhSXRlbTogcm93LmRhdGFJdGVtLFxuICAgICAgICAgICAgZGF0YVJvd0luZGV4OiByb3cuZGF0YVJvd0luZGV4LFxuICAgICAgICAgICAgY2VsbHM6IG5ldyBJdGVtTWFwKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3dzLnNldEl0ZW0ocm93LmxvZ2ljYWxSb3dJbmRleCwgbW9kZWxSb3cpO1xuICAgIH1cbiAgICB1cGRhdGVSb3cocm93KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnJvd3MuZ2V0SXRlbShyb3cubG9naWNhbFJvd0luZGV4KTtcbiAgICAgICAgaWYgKGN1cnJlbnQpIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudCwge1xuICAgICAgICAgICAgICAgIGRhdGFJdGVtOiByb3cuZGF0YUl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVJvd0luZGV4OiByb3cuZGF0YVJvd0luZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bnJlZ2lzdGVyUm93KGluZGV4LCByb3cpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLnJvd3MuZ2V0SXRlbShpbmRleCk7XG4gICAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC51aWQgPT09IHJvdy51aWQpIHtcbiAgICAgICAgICAgIHRoaXMucm93cy5yZW1vdmVJdGVtKGluZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjZWxsUmFuZ2UoY2VsbCkge1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnQgPSBjZWxsLmNvbEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kID0gY2VsbC5jb2xJbmRleCArIChjZWxsLmNvbFNwYW4gfHwgMSkgLSAxO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGFydCxcbiAgICAgICAgICAgICAgICBlbmRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICByb3dSYW5nZShjZWxsKSB7XG4gICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IGNlbGwucm93SW5kZXg7XG4gICAgICAgICAgICBjb25zdCBlbmQgPSBjZWxsLnJvd0luZGV4ICsgKGNlbGwucm93U3BhbiB8fCAxKSAtIDE7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0LFxuICAgICAgICAgICAgICAgIGVuZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIG5leHRSb3cocm93SW5kZXgsIG9mZnNldCkge1xuICAgICAgICBjb25zdCByb3dzID0gdGhpcy5yb3dzLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5yb3dzLmdldEl0ZW0ocm93SW5kZXgpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHJvd3MuaW5kZXhPZihyb3cpO1xuICAgICAgICBjb25zdCBuZXh0ID0gcm93c1twb3NpdGlvbiArIG9mZnNldF07XG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cbiAgICBmaW5kUm93KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd3MuZ2V0SXRlbShpbmRleCk7XG4gICAgfVxuICAgIGZpbmRDZWxsKGluZGV4LCByb3cpIHtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJbmRleCA9IHJvdy5pbmRleDtcbiAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuZ2V0SXRlbShpbmRleCk7XG4gICAgICAgIGxldCBjdXJyZW50SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgd2hpbGUgKCFjZWxsICYmIHJvdykge1xuICAgICAgICAgICAgcm93ID0gdGhpcy5yb3dzLmdldEl0ZW0oY3VycmVudEluZGV4KTtcbiAgICAgICAgICAgIGNlbGwgPSB0aGlzLnJvd0NlbGwoaW5kZXgsIHJvdyk7XG4gICAgICAgICAgICBjdXJyZW50SW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2VsbCAmJiByb3dJbmRleCA8PSByb3cuaW5kZXggKyAoY2VsbC5yb3dTcGFuIHx8IDEpIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcm93Q2VsbChpbmRleCwgcm93KSB7XG4gICAgICAgIGlmICghcm93IHx8ICFyb3cuY2VsbHMuY291bnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdENlbGwgPSByb3cuY2VsbHMuZmlyc3Q7XG4gICAgICAgIGxldCBjZWxsLCBjdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICAgICAgd2hpbGUgKCFjZWxsICYmIGN1cnJlbnRJbmRleCA+PSBmaXJzdENlbGwuY29sSW5kZXgpIHtcbiAgICAgICAgICAgIGNlbGwgPSByb3cuY2VsbHMuZ2V0SXRlbShjdXJyZW50SW5kZXgpO1xuICAgICAgICAgICAgY3VycmVudEluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNlbGwgJiYgaW5kZXggPD0gY2VsbC5jb2xJbmRleCArIChjZWxsLmNvbFNwYW4gfHwgMSkgLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIGEgc3BlY2lmaWVkIGV2ZW50LlxuICAgICAqIEluIHRoaXMgd2F5LCB0aGUgc291cmNlIGNvbXBvbmVudCBzdXBwcmVzc2VzXG4gICAgICogdGhlIGJ1aWx0LWluIGJlaGF2aW9yIHRoYXQgZm9sbG93cyB0aGUgZXZlbnQuXG4gICAgICovXG4gICAgcHJldmVudERlZmF1bHQoKSB7XG4gICAgICAgIHRoaXMucHJldmVudGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGV2ZW50IHdhcyBwcmV2ZW50ZWRcbiAgICAgKiBieSBhbnkgb2YgaXRzIHN1YnNjcmliZXJzLlxuICAgICAqXG4gICAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBkZWZhdWx0IGFjdGlvbiB3YXMgcHJldmVudGVkLlxuICAgICAqIE90aGVyd2lzZSwgcmV0dXJucyBgZmFsc2VgLlxuICAgICAqL1xuICAgIGlzRGVmYXVsdFByZXZlbnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldmVudGVkO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgY2VsbENsb3NlYCBldmVudC5cbiAqL1xuY2xhc3MgQ2VsbENsb3NlRXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbiA9ICdjZWxsQ2xvc2UnO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzRXF1YWwgPSAoaW5kZXgpID0+IChpdGVtKSA9PiBpdGVtLmluZGV4ID09PSBpbmRleDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc05vdEVxdWFsID0gKGluZGV4KSA9PiAoaXRlbSkgPT4gaXRlbS5pbmRleCAhPT0gaW5kZXg7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNOZXdSb3cgPSAoaW5kZXgpID0+IGluZGV4ID09PSAtMSB8fCBpbmRleCA9PT0gdW5kZWZpbmVkO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEVkaXRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5lZGl0ZWRJbmRpY2VzID0gW107XG4gICAgICAgIHRoaXMua2VlcEVkaXRDZWxsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2xvc2luZ0NlbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkU291cmNlID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdGhpcy5jaGFuZ2VkU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc3dpdGNoTWFwKCgpID0+IHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkpKTtcbiAgICB9XG4gICAgZWRpdFJvdyhpbmRleCwgZ3JvdXAgPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5lZGl0ZWRJbmRpY2VzLnB1c2goeyBpbmRleCwgZ3JvdXAgfSk7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIGFkZFJvdyhncm91cCkge1xuICAgICAgICB0aGlzLm5ld0l0ZW1Hcm91cCA9IHsgZ3JvdXAgfTtcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQoKTtcbiAgICB9XG4gICAgZWRpdENlbGwocm93SW5kZXgsIGNvbHVtbiwgZ3JvdXApIHtcbiAgICAgICAgaWYgKGlzTmV3Um93KHJvd0luZGV4KSB8fCBjb2x1bW4uZWRpdGFibGUgPT09IGZhbHNlIHx8ICEoY29sdW1uLmVkaXRUZW1wbGF0ZSB8fCBjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2ZW50Q2VsbENsb3NlKCk7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZUNlbGwoKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0Um93KHJvd0luZGV4LCBncm91cCk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNFZGl0aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0ZWRJbmRpY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGlzRWRpdGluZ0NlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdGluZygpICYmIHRoaXMuY29sdW1uICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBoYXNOZXdJdGVtKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMubmV3SXRlbUdyb3VwKTtcbiAgICB9XG4gICAgZ2V0IG5ld0RhdGFJdGVtKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNOZXdJdGVtKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXdJdGVtR3JvdXAuZ3JvdXAudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjbG9zZShpbmRleCkge1xuICAgICAgICBpZiAoaXNOZXdSb3coaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0l0ZW1Hcm91cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRlZEluZGljZXMgPSB0aGlzLmVkaXRlZEluZGljZXMuZmlsdGVyKGlzTm90RXF1YWwoaW5kZXgpKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBjbG9zZUNlbGwob3JpZ2luYWxFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4gJiYgIXRoaXMuY2xvc2luZ0NlbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaW5kZXgsIGdyb3VwIH0gPSB0aGlzLmVkaXRlZEluZGljZXNbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgYXJncyA9IG5ldyBDZWxsQ2xvc2VFdmVudCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cDogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IG9yaWdpbmFsRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHJvd0luZGV4OiBpbmRleFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2luZ0NlbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2luZ0NlbGwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxDZWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2FuY2VsQ2VsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRlZEluZGljZXMgPSBbXTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNvbHVtbjtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkQ2xvc2VDZWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4gJiYgIXRoaXMua2VlcEVkaXRDZWxsO1xuICAgIH1cbiAgICBwcmV2ZW50Q2VsbENsb3NlKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMua2VlcENlbGxUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMua2VlcEVkaXRDZWxsID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMua2VlcENlbGxUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMua2VlcEVkaXRDZWxsID0gZmFsc2U7XG4gICAgICAgICAgICB9LCAwKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29udGV4dChpbmRleCkge1xuICAgICAgICBpZiAoaXNOZXdSb3coaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5uZXdJdGVtR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJ5SW5kZXgoaW5kZXgpO1xuICAgIH1cbiAgICBjb2x1bW5Db250ZXh0KGluZGV4LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKGlzTmV3Um93KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV3SXRlbUdyb3VwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW4gfHwgY29sdW1uID09PSB0aGlzLmNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzRWRpdGVkKGluZGV4KSB7XG4gICAgICAgIGlmIChpc05ld1JvdyhpbmRleCkgJiYgaXNQcmVzZW50KHRoaXMubmV3SXRlbUdyb3VwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICF0aGlzLmNvbHVtbiAmJiBpc1ByZXNlbnQodGhpcy5maW5kQnlJbmRleChpbmRleCkpO1xuICAgIH1cbiAgICBoYXNFZGl0ZWQoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLmNvbnRleHQoaW5kZXgpKTtcbiAgICB9XG4gICAgaXNFZGl0ZWRDb2x1bW4oaW5kZXgsIGNvbHVtbikge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW4gJiYgdGhpcy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLmZpbmRCeUluZGV4KGluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBiZWdpbkVkaXQocm93SW5kZXgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoeyBhY3Rpb246ICdlZGl0Jywgcm93SW5kZXggfSk7XG4gICAgfVxuICAgIGJlZ2luQWRkKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7IGFjdGlvbjogJ2FkZCcgfSk7XG4gICAgfVxuICAgIGVuZEVkaXQocm93SW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyBncm91cDogZm9ybUdyb3VwIH0gPSB0aGlzLmNvbnRleHQocm93SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7IGFjdGlvbjogJ2NhbmNlbCcsIHJvd0luZGV4LCBmb3JtR3JvdXAsIGlzTmV3OiBpc05ld1Jvdyhyb3dJbmRleCkgfSk7XG4gICAgfVxuICAgIHNhdmUocm93SW5kZXgpIHtcbiAgICAgICAgY29uc3QgeyBncm91cDogZm9ybUdyb3VwIH0gPSB0aGlzLmNvbnRleHQocm93SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7IGFjdGlvbjogJ3NhdmUnLCByb3dJbmRleCwgZm9ybUdyb3VwLCBpc05ldzogaXNOZXdSb3cocm93SW5kZXgpIH0pO1xuICAgIH1cbiAgICByZW1vdmUocm93SW5kZXgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoeyBhY3Rpb246ICdyZW1vdmUnLCByb3dJbmRleCB9KTtcbiAgICB9XG4gICAgZmluZEJ5SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGVkSW5kaWNlcy5maW5kKGlzRXF1YWwoaW5kZXgpKTtcbiAgICB9XG4gICAgb25DaGFuZ2VkKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRTb3VyY2UubmV4dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5FZGl0U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRWRpdFNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEV4cGFuZFN0YXRlU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoaXNJbml0aWFsbHlDb2xsYXBzZWQpIHtcbiAgICAgICAgdGhpcy5pc0luaXRpYWxseUNvbGxhcHNlZCA9IGlzSW5pdGlhbGx5Q29sbGFwc2VkO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnJvd1N0YXRlID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICB0b2dnbGVSb3coaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gdGhpcy5yb3dTdGF0ZS5oYXMoaW5kZXgpO1xuICAgICAgICBjb25zdCBleHBhbmQgPSAhdGhpcy5pc0luaXRpYWxseUNvbGxhcHNlZCA/IGZvdW5kIDogIWZvdW5kO1xuICAgICAgICBjb25zdCBwcmV2ZW50ZWQgPSB0aGlzLmVtaXRFdmVudCh7IGRhdGFJdGVtLCBleHBhbmQsIGluZGV4IH0pO1xuICAgICAgICBpZiAocHJldmVudGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1N0YXRlLmRlbGV0ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd1N0YXRlLmFkZChpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNFeHBhbmRlZChpbmRleCkge1xuICAgICAgICBjb25zdCBmb3VuZCA9IHRoaXMucm93U3RhdGUuaGFzKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbml0aWFsbHlDb2xsYXBzZWQgPyBmb3VuZCA6ICFmb3VuZDtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMucm93U3RhdGUuY2xlYXIoKTtcbiAgICB9XG4gICAgZW1pdEV2ZW50KGFyZ3MpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoYXJncyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmNvbnN0IHJlbW92ZUxhc3QgPSBncm91cEluZGV4ID0+IGdyb3VwSW5kZXgubGFzdEluZGV4T2YoXCJfXCIpID4gLTFcbiAgICA/IGdyb3VwSW5kZXguc2xpY2UoMCwgZ3JvdXBJbmRleC5sYXN0SW5kZXhPZihcIl9cIikpXG4gICAgOiBcIlwiO1xuY29uc3QgaXNDaGlsZEluZGV4ID0gKHRhcmdldEluZGV4LCBwYXJlbnRJbmRleCkgPT4gcGFyZW50SW5kZXggIT09IHRhcmdldEluZGV4ICYmIHRhcmdldEluZGV4LnN0YXJ0c1dpdGgocGFyZW50SW5kZXgpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyb3Vwc1NlcnZpY2UgZXh0ZW5kcyBFeHBhbmRTdGF0ZVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGlzQ29sbGFwc2VkID0gZmFsc2UpIHtcbiAgICAgICAgc3VwZXIoaXNDb2xsYXBzZWQpO1xuICAgIH1cbiAgICBpc0luRXhwYW5kZWRHcm91cChncm91cEluZGV4LCBza2lwU2VsZiA9IHRydWUpIHtcbiAgICAgICAgaWYgKHNraXBTZWxmKSB7XG4gICAgICAgICAgICBncm91cEluZGV4ID0gcmVtb3ZlTGFzdChncm91cEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB3aGlsZSAoZ3JvdXBJbmRleCAmJiBleHBhbmRlZCkge1xuICAgICAgICAgICAgZXhwYW5kZWQgPSB0aGlzLmlzRXhwYW5kZWQoZ3JvdXBJbmRleCk7XG4gICAgICAgICAgICBncm91cEluZGV4ID0gcmVtb3ZlTGFzdChncm91cEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgfVxuICAgIGV4cGFuZENoaWxkcmVuKHBhcmVudEluZGV4KSB7XG4gICAgICAgIHRoaXMucm93U3RhdGUuZm9yRWFjaChpbmRleCA9PiBpc0NoaWxkSW5kZXgoaW5kZXgsIHBhcmVudEluZGV4KSAmJiB0aGlzLnJvd1N0YXRlLmRlbGV0ZShpbmRleCkpO1xuICAgIH1cbn1cbkdyb3Vwc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3Vwc1NlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBCb29sZWFuLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW1NraXAsXSB9XSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZXJDb250ZXh0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgfVxuICAgIGdldCBjdXJyZW50UGFnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2tpcCAvIHRoaXMucGFnZVNpemU7XG4gICAgfVxuICAgIG5vdGlmeUNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICB0aGlzLnRvdGFsID0gY2hhbmdlcy50b3RhbDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGNoYW5nZXMucGFnZVNpemU7XG4gICAgICAgIHRoaXMuc2tpcCA9IGNoYW5nZXMuc2tpcDtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoY2hhbmdlcyk7XG4gICAgfVxuICAgIGNoYW5nZVBhZ2UocGFnZSkge1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UubmV4dCh7IHNraXA6IHBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0YWtlOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgIH1cbiAgICBjaGFuZ2VQYWdlU2l6ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UubmV4dCh7IHNraXA6IDAsIHRha2U6IHZhbHVlIH0pO1xuICAgIH1cbiAgICBuZXh0UGFnZSgpIHtcbiAgICAgICAgY29uc3QgbmV4dFBhZ2UgPSB0aGlzLmN1cnJlbnRQYWdlICsgMTtcbiAgICAgICAgaWYgKG5leHRQYWdlICogdGhpcy5wYWdlU2l6ZSA8IHRoaXMudG90YWwpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShuZXh0UGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJldlBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHByZXZQYWdlID0gdGhpcy5jdXJyZW50UGFnZSAtIDE7XG4gICAgICAgIGlmIChwcmV2UGFnZSAqIHRoaXMucGFnZVNpemUgPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VQYWdlKHByZXZQYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgZGV0YWlsQ29sbGFwc2VgIGV2ZW50LlxuICovXG5jbGFzcyBEZXRhaWxDb2xsYXBzZUV2ZW50IGV4dGVuZHMgUHJldmVudGFibGVFdmVudCB7XG4gICAgY29uc3RydWN0b3IoYXJncykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGFyZ3MpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgZGV0YWlsRXhwYW5kYCBldmVudC5cbiAqL1xuY2xhc3MgRGV0YWlsRXhwYW5kRXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3RvcihhcmdzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgYXJncyk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRGV0YWlsc1NlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLnJvd1N0YXRlID0gbmV3IFNldCgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yb3dTdGF0ZS5jbGVhcigpO1xuICAgIH1cbiAgICBpc0V4cGFuZGVkKGluZGV4LCBkYXRhSXRlbSkge1xuICAgICAgICBpZiAodGhpcy51c2VyQ2FsbGJhY2spIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJDYWxsYmFjayh7IGluZGV4LCBkYXRhSXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5yb3dTdGF0ZS5oYXMoaW5kZXgpO1xuICAgIH1cbiAgICB0b2dnbGVSb3coaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRXhwYW5kZWQoaW5kZXgsIGRhdGFJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZVJvdyhpbmRleCwgZGF0YUl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRSb3coaW5kZXgsIGRhdGFJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBleHBhbmRSb3coaW5kZXgsIGRhdGFJdGVtKSB7XG4gICAgICAgIGNvbnN0IHByZXZlbnRlZCA9IHRoaXMuZW1pdEV2ZW50KHsgZGF0YUl0ZW0sIGluZGV4LCBleHBhbmQ6IHRydWUgfSk7XG4gICAgICAgIGlmICghcHJldmVudGVkICYmICF0aGlzLnVzZXJDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhpcy5yb3dTdGF0ZS5hZGQoaW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbGxhcHNlUm93KGluZGV4LCBkYXRhSXRlbSkge1xuICAgICAgICBjb25zdCBwcmV2ZW50ZWQgPSB0aGlzLmVtaXRFdmVudCh7IGRhdGFJdGVtLCBpbmRleCwgZXhwYW5kOiBmYWxzZSB9KTtcbiAgICAgICAgaWYgKCFwcmV2ZW50ZWQgJiYgIXRoaXMudXNlckNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0aGlzLnJvd1N0YXRlLmRlbGV0ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdEV2ZW50KGFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXZlbnRBcmcgPSBuZXcgKGFyZ3MuZXhwYW5kID8gRGV0YWlsRXhwYW5kRXZlbnQgOiBEZXRhaWxDb2xsYXBzZUV2ZW50KShhcmdzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoZXZlbnRBcmcpO1xuICAgICAgICByZXR1cm4gZXZlbnRBcmcuaXNEZWZhdWx0UHJldmVudGVkKCk7XG4gICAgfVxufVxuRGV0YWlsc1NlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxSZXF1ZXN0U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdHMgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cbiAgICBzY3JvbGxUbyhyZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMucmVxdWVzdHMubmV4dChyZXF1ZXN0KTtcbiAgICB9XG59XG5TY3JvbGxSZXF1ZXN0U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuY29uc3QgaXNJblNhbWVHcmlkID0gKGVsZW1lbnQsIGdyaWRFbGVtZW50KSA9PiBjbG9zZXN0KGVsZW1lbnQsIG1hdGNoZXNOb2RlTmFtZSgna2VuZG8tZ3JpZCcpKSA9PT0gZ3JpZEVsZW1lbnQ7XG5jb25zdCBtYXRjaEhlYWRlckNlbGwgPSBtYXRjaGVzTm9kZU5hbWUoJ3RoJyk7XG5jb25zdCBtYXRjaERhdGFDZWxsID0gbWF0Y2hlc05vZGVOYW1lKCd0ZCcpO1xuY29uc3QgbWF0Y2hGb290ZXJDZWxsID0gbWF0Y2hlc05vZGVOYW1lKCcuay1ncmlkLWZvb3RlciB0ZCcpO1xuY29uc3QgbWF0Y2hDZWxsID0gKGVsZW1lbnQpID0+IG1hdGNoRGF0YUNlbGwoZWxlbWVudCkgfHwgbWF0Y2hIZWFkZXJDZWxsKGVsZW1lbnQpIHx8IG1hdGNoRm9vdGVyQ2VsbChlbGVtZW50KTtcbmNvbnN0IGdyaWRDZWxsID0gKGVsZW1lbnQsIGdyaWRFbGVtZW50KSA9PiB7XG4gICAgbGV0IHRhcmdldCA9IGNsb3Nlc3QoZWxlbWVudCwgbWF0Y2hDZWxsKTtcbiAgICB3aGlsZSAodGFyZ2V0ICYmICFpc0luU2FtZUdyaWQodGFyZ2V0LCBncmlkRWxlbWVudCkpIHtcbiAgICAgICAgdGFyZ2V0ID0gY2xvc2VzdCh0YXJnZXQucGFyZW50RWxlbWVudCwgbWF0Y2hDZWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcmdldDtcbn07XG5jb25zdCB0YXJnZXRDZWxsID0gKHRhcmdldCwgZ3JpZEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBjZWxsID0gZ3JpZENlbGwodGFyZ2V0LCBncmlkRWxlbWVudCk7XG4gICAgY29uc3Qgcm93ID0gY2xvc2VzdChjZWxsLCBtYXRjaGVzTm9kZU5hbWUoJ3RyJykpO1xuICAgIGlmIChjZWxsICYmIHJvdykge1xuICAgICAgICBsZXQgcm93SW5kZXggPSByb3cuZ2V0QXR0cmlidXRlKCdhcmlhLXJvd2luZGV4Jyk7XG4gICAgICAgIHJvd0luZGV4ID0gcm93SW5kZXggPyBwYXJzZUludChyb3dJbmRleCwgMTApIC0gMSA6IG51bGw7XG4gICAgICAgIGxldCBjb2xJbmRleCA9IGNlbGwuZ2V0QXR0cmlidXRlKCdhcmlhLWNvbGluZGV4Jyk7XG4gICAgICAgIGNvbEluZGV4ID0gY29sSW5kZXggPyBwYXJzZUludChjb2xJbmRleCwgMTApIC0gMSA6IG51bGw7XG4gICAgICAgIGlmIChyb3dJbmRleCAhPT0gbnVsbCAmJiBjb2xJbmRleCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgY29sSW5kZXgsIHJvd0luZGV4LCBlbGVtZW50OiBjZWxsIH07XG4gICAgICAgIH1cbiAgICB9XG59O1xuY29uc3QgaXNBcnJvd0tleSA9IGtleUNvZGUgPT4ga2V5Q29kZSA9PT0gS2V5cy5BcnJvd0xlZnQgfHwga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1JpZ2h0IHx8XG4gICAga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwIHx8IGtleUNvZGUgPT09IEtleXMuQXJyb3dEb3duO1xuY29uc3QgaXNOYXZpZ2F0aW9uS2V5ID0ga2V5Q29kZSA9PiBpc0Fycm93S2V5KGtleUNvZGUpIHx8XG4gICAga2V5Q29kZSA9PT0gS2V5cy5QYWdlVXAgfHwga2V5Q29kZSA9PT0gS2V5cy5QYWdlRG93biB8fFxuICAgIGtleUNvZGUgPT09IEtleXMuSG9tZSB8fCBrZXlDb2RlID09PSBLZXlzLkVuZDtcbmNvbnN0IGlzSW5wdXQgPSBtYXRjaGVzTm9kZU5hbWUoJ2lucHV0Jyk7XG5jb25zdCBpc1RleHRJbnB1dCA9IGVsZW1lbnQgPT4gZWxlbWVudCAmJiBpc0lucHV0KGVsZW1lbnQpICYmIGVsZW1lbnQudHlwZS50b0xvd2VyQ2FzZSgpID09PSAndGV4dCc7XG5jb25zdCBpc1ByaW50YWJsZUNoYXJhY3RlciA9IChzdHIpID0+IHN0ci5sZW5ndGggPT09IDEgJiYgc3RyLm1hdGNoKC9cXFMvKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBOYXZpZ2F0aW9uVmlld3BvcnQge1xuICAgIGNvbnN0cnVjdG9yKGZpcnN0SXRlbUluZGV4LCBsYXN0SXRlbUluZGV4KSB7XG4gICAgICAgIHRoaXMuZmlyc3RJdGVtSW5kZXggPSBmaXJzdEl0ZW1JbmRleDtcbiAgICAgICAgdGhpcy5sYXN0SXRlbUluZGV4ID0gbGFzdEl0ZW1JbmRleDtcbiAgICB9XG4gICAgY29udGFpbnNSb3coZGF0YVJvd0luZGV4KSB7XG4gICAgICAgIGNvbnN0IGhlYWRlclJvdyA9IGRhdGFSb3dJbmRleCA8IDA7XG4gICAgICAgIHJldHVybiBoZWFkZXJSb3cgfHwgKGRhdGFSb3dJbmRleCA+PSB0aGlzLmZpcnN0SXRlbUluZGV4ICYmIGRhdGFSb3dJbmRleCA8PSB0aGlzLmxhc3RJdGVtSW5kZXgpO1xuICAgIH1cbiAgICBpbnRlcnNlY3RzKHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0aGlzLmZpcnN0SXRlbUluZGV4ICYmIHRoaXMubGFzdEl0ZW1JbmRleCA8PSBlbmQpIHx8XG4gICAgICAgICAgICAodGhpcy5maXJzdEl0ZW1JbmRleCA8PSBzdGFydCAmJiBzdGFydCA8PSB0aGlzLmxhc3RJdGVtSW5kZXgpIHx8XG4gICAgICAgICAgICAodGhpcy5maXJzdEl0ZW1JbmRleCA8PSBlbmQgJiYgZW5kIDw9IHRoaXMubGFzdEl0ZW1JbmRleCk7XG4gICAgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih6b25lLCBkb21FdmVudHMsIHBhZ2VyQ29udGV4dFNlcnZpY2UsIHNjcm9sbFJlcXVlc3RTZXJ2aWNlLCBncm91cHNTZXJ2aWNlLCBkZXRhaWxzU2VydmljZSwgZm9jdXNSb290LCBlZGl0U2VydmljZSwgY2QsIGxvY2FsaXphdGlvbiwgZm9jdXNhYmxlUGFyZW50KSB7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gZG9tRXZlbnRzO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dFNlcnZpY2UgPSBwYWdlckNvbnRleHRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNjcm9sbFJlcXVlc3RTZXJ2aWNlID0gc2Nyb2xsUmVxdWVzdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZSA9IGdyb3Vwc1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2UgPSBkZXRhaWxzU2VydmljZTtcbiAgICAgICAgdGhpcy5mb2N1c1Jvb3QgPSBmb2N1c1Jvb3Q7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5jZCA9IGNkO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5mb2N1c2FibGVQYXJlbnQgPSBmb2N1c2FibGVQYXJlbnQ7XG4gICAgICAgIHRoaXMuY2VsbEtleWRvd24gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuYWN0aXZlUm93SW5kZXggPSAwO1xuICAgICAgICB0aGlzLmFsaXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlID0gMCAvKiBTdGFuZGJ5ICovO1xuICAgICAgICB0aGlzLm1vZGVsID0gbmV3IE5hdmlnYXRpb25Nb2RlbCgpO1xuICAgICAgICB0aGlzLmN1cnNvciA9IG5ldyBOYXZpZ2F0aW9uQ3Vyc29yKHRoaXMubW9kZWwpO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSB0aGlzLmN1cnNvci5jaGFuZ2VzO1xuICAgIH1cbiAgICBzZXQgbWV0YWRhdGEodmFsdWUpIHtcbiAgICAgICAgdGhpcy5tZXRhID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY3Vyc29yLm1ldGFkYXRhID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBtZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YTtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFsaXZlO1xuICAgIH1cbiAgICBnZXQgYWN0aXZlQ2VsbCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSAhPT0gMCAvKiBTdGFuZGJ5ICovKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJzb3IuY2VsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgYWN0aXZlUm93KCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlICE9PSAwIC8qIFN0YW5kYnkgKi8pIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmN1cnNvci5yb3csIHtcbiAgICAgICAgICAgICAgICBjZWxsczogdGhpcy5jdXJzb3Iucm93LmNlbGxzLnRvQXJyYXkoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFjdGl2ZURhdGFSb3coKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCgwLCB0aGlzLmFjdGl2ZVJvd0luZGV4IC0gdGhpcy5tZXRhLmhlYWRlclJvd3MpO1xuICAgIH1cbiAgICBpbml0KG1ldGEpIHtcbiAgICAgICAgdGhpcy5hbGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZm9jdXNSb290LmFsaXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tZXRhZGF0YSA9IG1ldGE7XG4gICAgICAgIGNvbnN0IG9uU3RhYmxlU3Vic2NyaWJlciA9ICguLi5vcGVyYXRvcnMpID0+IChhcmdzKSA9PiB0aGlzLnpvbmUuaXNTdGFibGUgP1xuICAgICAgICAgICAgZnJvbShbdHJ1ZV0pLnBpcGUobWFwKCgpID0+IGFyZ3MpKSA6XG4gICAgICAgICAgICB0aGlzLnpvbmUub25TdGFibGUucGlwZSh0YWtlKDEpLCBtYXAoKCkgPT4gYXJncyksIC4uLm9wZXJhdG9ycyk7XG4gICAgICAgIGNvbnN0IG9uU3RhYmxlID0gb25TdGFibGVTdWJzY3JpYmVyKCk7XG4gICAgICAgIHRoaXMuc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmN1cnNvci5jaGFuZ2VzXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFyZ3MgPT4gdGhpcy5vbkN1cnNvckNoYW5nZXMoYXJncykpKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmRvbUV2ZW50cy5mb2N1cy5waXBlKHN3aXRjaE1hcChvblN0YWJsZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PiB0aGlzLm5hdmlnYXRlVG8oYXJncy50YXJnZXQpKSk7XG4gICAgICAgIHRoaXMuc3Vicy5hZGQodGhpcy5kb21FdmVudHMuZm9jdXNPdXQucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5tb2RlICE9PSAwIC8qIFN0YW5kYnkgKi8pLCBzd2l0Y2hNYXAob25TdGFibGVTdWJzY3JpYmVyKHRha2VVbnRpbCh0aGlzLmRvbUV2ZW50cy5mb2N1cykpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB0aGlzLm9uRm9jdXNPdXQoYXJncykpKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLmRvbUV2ZW50cy53aW5kb3dCbHVyLnBpcGUoZmlsdGVyKCgpID0+IHRoaXMubW9kZSAhPT0gMCAvKiBTdGFuZGJ5ICovKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbldpbmRvd0JsdXIoKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKFxuICAgICAgICAvLyBDbG9zaW5nIHRoZSBlZGl0b3Igd2lsbCBub3QgYWx3YXlzIHRyaWdnZXIgZm9jdXNvdXQgaW4gRmlyZWZveC5cbiAgICAgICAgLy8gVG8gZ2V0IGFyb3VuZCB0aGlzLCB3ZSBlbnN1cmUgdGhhdCB0aGUgY2VsbCBpcyBjbG9zZWQgYWZ0ZXIgZWRpdGluZy5cbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5jaGFuZ2VzLnBpcGUoZmlsdGVyKGUgPT4gZS5hY3Rpb24gIT09ICdlZGl0JyAmJiB0aGlzLm1vZGUgPT09IDIgLyogQ29udGVudCAqLyksIGZpbHRlcigoZSkgPT4gZS5hY3Rpb24gPT09ICdjZWxsQ2xvc2UnICYmICFlLnByZXZlbnRlZCksIHN3aXRjaE1hcChvblN0YWJsZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMubGVhdmVDZWxsKCkpKTtcbiAgICAgICAgdGhpcy5zdWJzLmFkZCh0aGlzLnBhZ2VyQ29udGV4dFNlcnZpY2UucGFnZUNoYW5nZVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmN1cnNvci5yZXNldCgwLCAwKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuZG9tRXZlbnRzLmtleWRvd25cbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXJncyA9PiB0aGlzLm9uS2V5ZG93bihhcmdzKSkpO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuZG9tRXZlbnRzLmtleWRvd24ucGlwZShmaWx0ZXIoYXJncyA9PiBhcmdzLmtleUNvZGUgPT09IEtleXMuVGFiICYmIHRoaXMubW9kZSA9PT0gMiAvKiBDb250ZW50ICovKSwgc3dpdGNoTWFwVG8odGhpcy5kb21FdmVudHMuZm9jdXNPdXQucGlwZSh0YWtlVW50aWwoXG4gICAgICAgIC8vIFRpbWVvdXQgaWYgZm9jdXNPdXQgZG9lc24ndCBmaXJlIHZlcnkgc29vblxuICAgICAgICBpbnRlcnZhbCgwKS5waXBlKHRha2UoMSkpKSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uVGFib3V0KCkpKTtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNhYmxlUGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gbmV3IEdyaWRGb2N1c2FibGVFbGVtZW50KHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2FibGVQYXJlbnQucmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFsaXZlID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZ2lzdGVyQ2VsbChjZWxsKSB7XG4gICAgICAgIGlmIChjZWxsLmxvZ2ljYWxSb3dJbmRleCAhPT0gdGhpcy5wZW5kaW5nUm93SW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsQ2VsbCA9IHRoaXMubW9kZWwucmVnaXN0ZXJDZWxsKGNlbGwpO1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbENlbGwgJiYgdGhpcy5jdXJzb3IuYWN0aXZhdGVWaXJ0dWFsQ2VsbChtb2RlbENlbGwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ2VsbCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVyQ2VsbE9uQ3VycmVudFJvdyhjZWxsKSB7XG4gICAgICAgIGlmIChjZWxsLmxvZ2ljYWxSb3dJbmRleCA9PT0gdGhpcy5wZW5kaW5nUm93SW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwucmVnaXN0ZXJDZWxsKGNlbGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVucmVnaXN0ZXJDZWxsKGluZGV4LCByb3dJbmRleCwgY2VsbCkge1xuICAgICAgICB0aGlzLm1vZGVsLnVucmVnaXN0ZXJDZWxsKGluZGV4LCByb3dJbmRleCwgY2VsbCk7XG4gICAgfVxuICAgIHJlZ2lzdGVyUm93KHJvdykge1xuICAgICAgICB0aGlzLm1vZGVsLnJlZ2lzdGVyUm93KHJvdyk7XG4gICAgICAgIHRoaXMucGVuZGluZ1Jvd0luZGV4ID0gcm93LmxvZ2ljYWxSb3dJbmRleDtcbiAgICB9XG4gICAgdXBkYXRlUm93KHJvdykge1xuICAgICAgICB0aGlzLm1vZGVsLnVwZGF0ZVJvdyhyb3cpO1xuICAgIH1cbiAgICB1bnJlZ2lzdGVyUm93KGluZGV4LCByb3cpIHtcbiAgICAgICAgdGhpcy5tb2RlbC51bnJlZ2lzdGVyUm93KGluZGV4LCByb3cpO1xuICAgIH1cbiAgICBpc0NlbGxGb2N1c2FibGUoY2VsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbGl2ZSAmJlxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgJiZcbiAgICAgICAgICAgIHRoaXMubW9kZSAhPT0gMiAvKiBDb250ZW50ICovICYmXG4gICAgICAgICAgICB0aGlzLmN1cnNvci5pc0FjdGl2ZShjZWxsLmxvZ2ljYWxSb3dJbmRleCwgY2VsbC5sb2dpY2FsQ29sSW5kZXgpO1xuICAgIH1cbiAgICBpc0NlbGxGb2N1c2VkKGNlbGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gMSAvKiBDdXJzb3IgKi8gJiYgdGhpcy5pc0NlbGxGb2N1c2FibGUoY2VsbCk7XG4gICAgfVxuICAgIG5hdmlnYXRlVG8oZWwpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsaXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2VsbCA9IHRhcmdldENlbGwoZWwsIHRoaXMubWV0YS5ncmlkRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb2xkTW9kZSA9IHRoaXMubW9kZTtcbiAgICAgICAgY29uc3QgZm9jdXNJbkNlbGwgPSBjb250YWlucyhjZWxsLmVsZW1lbnQsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICAgICAgICBjb25zdCBmb2N1c0luQWN0aXZlUm93Q29udGVudCA9IHRoaXMubW9kZSA9PT0gMiAvKiBDb250ZW50ICovICYmXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJvd0luZGV4ID09PSBjZWxsLnJvd0luZGV4ICYmXG4gICAgICAgICAgICBlbCAhPT0gY2VsbC5lbGVtZW50O1xuICAgICAgICBpZiAoZm9jdXNJbkNlbGwpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZSA9IDIgLyogQ29udGVudCAqLztcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVJvdygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFmb2N1c0luQWN0aXZlUm93Q29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlID0gMSAvKiBDdXJzb3IgKi87XG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUFjdGl2ZSA9IHRoaXMuY3Vyc29yLmlzQWN0aXZlKGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgaXNDdXJzb3IgPSBvbGRNb2RlID09PSAxIC8qIEN1cnNvciAqLyAmJiBhbHJlYWR5QWN0aXZlO1xuICAgICAgICAgICAgaWYgKCFpc0N1cnNvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRyeUZvY3VzKGVsKSB7XG4gICAgICAgIHRoaXMuYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICBjb25zdCBmb2N1c2FibGUgPSBmaW5kRm9jdXNhYmxlQ2hpbGQoZWwpO1xuICAgICAgICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gdGFyZ2V0Q2VsbChmb2N1c2FibGUsIHRoaXMubWV0YS5ncmlkRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoY2VsbC5yb3dJbmRleCwgY2VsbC5jb2xJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlRWxlbWVudHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVudGVyQ2VsbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9jdXNhYmxlLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIWZvY3VzYWJsZTtcbiAgICB9XG4gICAgbmVlZHNWaWV3cG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YSAmJiB0aGlzLm1ldGEuaXNWaXJ0dWFsO1xuICAgIH1cbiAgICBzZXRWaWV3cG9ydChmaXJzdEl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCkge1xuICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbmV3IE5hdmlnYXRpb25WaWV3cG9ydChmaXJzdEl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCk7XG4gICAgICAgIGlmICh0aGlzLm1ldGEgJiYgdGhpcy5tZXRhLmlzVmlydHVhbCAmJiB0aGlzLmFjdGl2ZURhdGFSb3cgPiAtMSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVJvd0luZGV4ID0gdGhpcy5hY3RpdmVEYXRhUm93O1xuICAgICAgICAgICAgY29uc3QgYWhlYWQgPSBmaXJzdEl0ZW1JbmRleCAtIGRhdGFSb3dJbmRleDtcbiAgICAgICAgICAgIGNvbnN0IGJlaGluZCA9IGRhdGFSb3dJbmRleCAtIGxhc3RJdGVtSW5kZXg7XG4gICAgICAgICAgICBpZiAoYWhlYWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoZmlyc3RJdGVtSW5kZXggKyB0aGlzLm1ldGEuaGVhZGVyUm93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiZWhpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQobGFzdEl0ZW1JbmRleCAtIHRoaXMubWV0YS5oZWFkZXJSb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRDb2x1bW5WaWV3cG9ydChmaXJzdEl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCkge1xuICAgICAgICB0aGlzLmNvbHVtblZpZXdwb3J0ID0gbmV3IE5hdmlnYXRpb25WaWV3cG9ydChmaXJzdEl0ZW1JbmRleCwgbGFzdEl0ZW1JbmRleCk7XG4gICAgfVxuICAgIGZvY3VzQ2VsbChyb3dJbmRleCA9IHVuZGVmaW5lZCwgY29sSW5kZXggPSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gMSAvKiBDdXJzb3IgKi87XG4gICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KHJvd0luZGV4LCBjb2xJbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUNlbGw7XG4gICAgfVxuICAgIGZvY3VzQ2VsbEJ5RWxlbWVudChlbCkge1xuICAgICAgICBjb25zdCBjZWxsID0gdGFyZ2V0Q2VsbChlbCwgdGhpcy5tZXRhLmdyaWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICBpZiAoY2VsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNDZWxsKGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvY3VzTmV4dENlbGwod3JhcCA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNBZGphY2VudENlbGwodHJ1ZSwgd3JhcCk7XG4gICAgfVxuICAgIGZvY3VzUHJldkNlbGwod3JhcCA9IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNBZGphY2VudENlbGwoZmFsc2UsIHdyYXApO1xuICAgIH1cbiAgICB0b2dnbGUoYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gYWN0aXZlO1xuICAgICAgICB0aGlzLmN1cnNvci5hbm5vdW5jZSgpO1xuICAgIH1cbiAgICBoYXNGb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gMSAvKiBDdXJzb3IgKi8gfHwgdGhpcy5tb2RlID09PSAyIC8qIENvbnRlbnQgKi87XG4gICAgfVxuICAgIGF1dG9Gb2N1c0NlbGwoc3RhcnQsIGVuZCkge1xuICAgICAgICByZXR1cm4gIXRoaXMubWV0YS52aXJ0dWFsQ29sdW1ucyB8fCBlbmQgPCB0aGlzLm1ldGEuY29sdW1ucy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggfHwgdGhpcy5jb2x1bW5WaWV3cG9ydC5pbnRlcnNlY3RzKHN0YXJ0LCBlbmQpO1xuICAgIH1cbiAgICBmb2N1c0FkamFjZW50Q2VsbChmd2QsIHdyYXApIHtcbiAgICAgICAgdGhpcy5mb2N1c0NlbGwoKTtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmd2QgPyB0aGlzLm1vdmVDdXJzb3JGd2QoKSA6IHRoaXMubW92ZUN1cnNvckJ3ZCgpO1xuICAgICAgICBpZiAod3JhcCAmJiAhc3VjY2Vzcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IGZ3ZCA/IHRoaXMuY3Vyc29yLm1vdmVEb3duKDEpIDogdGhpcy5jdXJzb3IubW92ZVVwKDEpO1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSB0aGlzLmN1cnNvci5yb3c7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sSWR4ID0gZndkID8gMCA6IHRoaXMuY3Vyc29yLmxhc3RDZWxsSW5kZXgocm93KTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChyb3cuaW5kZXgsIGNvbElkeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZUNlbGw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSAwIC8qIFN0YW5kYnkgKi87XG4gICAgICAgICAgICB0aGlzLmN1cnNvci5hbm5vdW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbnRlckNlbGwoKSB7XG4gICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmN1cnNvci5jZWxsO1xuICAgICAgICBpZiAoIWNlbGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncm91cCA9IGNlbGwuZm9jdXNHcm91cDtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gZ3JvdXAgJiYgZ3JvdXAuY2FuRm9jdXMoKTtcbiAgICAgICAgdGhpcy5tb2RlID0gZm9jdXNhYmxlID8gMiAvKiBDb250ZW50ICovIDogMSAvKiBDdXJzb3IgKi87XG4gICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZhdGVSb3coKTtcbiAgICAgICAgICAgIGdyb3VwLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGVhdmVDZWxsKCkge1xuICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5jdXJzb3IuY2VsbDtcbiAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JvdXAgPSBjZWxsLmZvY3VzR3JvdXA7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IGdyb3VwICYmIGdyb3VwLmNhbkZvY3VzKCk7XG4gICAgICAgIGlmICghZm9jdXNhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZSA9IDEgLyogQ3Vyc29yICovO1xuICAgICAgICB0aGlzLmN1cnNvci5hbm5vdW5jZSgpO1xuICAgIH1cbiAgICBhY3RpdmF0ZUVsZW1lbnRzKCkge1xuICAgICAgICB0aGlzLmZvY3VzUm9vdC5hY3RpdmF0ZSgpO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlRWxlbWVudHMoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNSb290LmRlYWN0aXZhdGUoKTtcbiAgICB9XG4gICAgYWN0aXZhdGVSb3coKSB7XG4gICAgICAgIHRoaXMuY3Vyc29yLnJvdy5jZWxsc1xuICAgICAgICAgICAgLmZvckVhY2goY2VsbCA9PiBjZWxsLmZvY3VzR3JvdXAgJiYgY2VsbC5mb2N1c0dyb3VwLmFjdGl2YXRlKCkpO1xuICAgIH1cbiAgICBtb3ZlQ3Vyc29yRndkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gdGhpcy5jdXJzb3IubW92ZUxlZnQoKSA6IHRoaXMuY3Vyc29yLm1vdmVSaWdodCgpO1xuICAgIH1cbiAgICBtb3ZlQ3Vyc29yQndkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gdGhpcy5jdXJzb3IubW92ZVJpZ2h0KCkgOiB0aGlzLmN1cnNvci5tb3ZlTGVmdCgpO1xuICAgIH1cbiAgICBvbkN1cnNvcktleWRvd24oYXJncykge1xuICAgICAgICBsZXQgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgbW9kaWZpZXIgPSBhcmdzLmN0cmxLZXkgfHwgYXJncy5tZXRhS2V5O1xuICAgICAgICBjb25zdCBzdGVwID0gbW9kaWZpZXIgPyA1IDogMTtcbiAgICAgICAgaWYgKCF0aGlzLm9uQ2VsbEtleWRvd24oYXJncykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmN1cnNvci5yb3c7XG4gICAgICAgIHN3aXRjaCAoYXJncy5rZXlDb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEtleXMuQXJyb3dEb3duOlxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdGhpcy5jdXJzb3IubW92ZURvd24oc3RlcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuQXJyb3dVcDpcbiAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRoaXMuY3Vyc29yLm1vdmVVcChzdGVwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5BcnJvd1JpZ2h0OlxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdGhpcy5tb3ZlQ3Vyc29yRndkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuQXJyb3dMZWZ0OlxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdGhpcy5tb3ZlQ3Vyc29yQndkKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEtleXMuUGFnZURvd246XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWV0YWRhdGEuaXNWaXJ0dWFsICYmIHRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRJdGVtSW5kZXggPSB0aGlzLm1ldGEuaGVhZGVyUm93cyArIHRoaXMudmlld3BvcnQubGFzdEl0ZW1JbmRleCArIDE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGFkYXRhLmhhc0RldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0SXRlbUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW1JbmRleCA9IE1hdGgubWluKHRoaXMubWV0YS5tYXhMb2dpY2FsUm93SW5kZXgsIG5leHRJdGVtSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldChuZXh0SXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLm1ldGFkYXRhLmhhc1BhZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5wYWdlckNvbnRleHRTZXJ2aWNlLm5leHRQYWdlKCkpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBLZXlzLlBhZ2VVcDpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5pc1ZpcnR1YWwgJiYgdGhpcy52aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmlld3BvcnRTaXplID0gdGhpcy52aWV3cG9ydC5sYXN0SXRlbUluZGV4IC0gdGhpcy52aWV3cG9ydC5maXJzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0SXRlbUluZGV4ID0gdGhpcy52aWV3cG9ydC5maXJzdEl0ZW1JbmRleDtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5leHRJdGVtSW5kZXggPSBNYXRoLm1heCh0aGlzLm1ldGEuaGVhZGVyUm93cywgZmlyc3RJdGVtSW5kZXggLSB2aWV3cG9ydFNpemUgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQobmV4dEl0ZW1JbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5tZXRhZGF0YS5oYXNQYWdlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMucGFnZXJDb250ZXh0U2VydmljZS5wcmV2UGFnZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmVudERlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5Ib21lOlxuICAgICAgICAgICAgICAgIGlmIChtb2RpZmllcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRhLmlzVmlydHVhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQodGhpcy5tZXRhLmhlYWRlclJvd3MsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KHRoaXMubW9kZWwuZmlyc3RSb3cuaW5kZXgsIDAsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQocm93LmluZGV4LCAwLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5FbmQ6XG4gICAgICAgICAgICAgICAgaWYgKG1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGEuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdFJvd0luZGV4ID0gdGhpcy5tZXRhLm1heExvZ2ljYWxSb3dJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1ldGEuaGFzRGV0YWlsVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Um93SW5kZXgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KGxhc3RSb3dJbmRleCwgdGhpcy5jdXJzb3IubGFzdENlbGxJbmRleCgpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnNvci5yZXNldCh0aGlzLm1vZGVsLmxhc3RSb3cuaW5kZXgsIHRoaXMuY3Vyc29yLmxhc3RDZWxsSW5kZXgodGhpcy5tb2RlbC5sYXN0Um93KSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmN1cnNvci5sYXN0Q2VsbEluZGV4KHJvdyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLm1vZGVsLmZpbmRDZWxsKGxhc3RJbmRleCwgcm93KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KGNlbGwucm93SW5kZXgsIGNlbGwuY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQocm93LmluZGV4LCBsYXN0SW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgS2V5cy5FbnRlcjpcbiAgICAgICAgICAgIGNhc2UgS2V5cy5GMjpcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cEl0ZW0gPSByb3cuZ3JvdXBJdGVtO1xuICAgICAgICAgICAgICAgIGlmIChncm91cEl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmdyb3Vwc1NlcnZpY2UudG9nZ2xlUm93KGdyb3VwSXRlbS5pbmRleCwgZ3JvdXBJdGVtLmRhdGEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jdXJzb3IuY2VsbC5kZXRhaWxFeHBhbmRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5kZXRhaWxzU2VydmljZS50b2dnbGVSb3cocm93LmRhdGFSb3dJbmRleCwgcm93LmRhdGFJdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVudGVyQ2VsbCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3Vyc29yLmNlbGwuZm9jdXNHcm91cC5pc05hdmlnYWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmICghYXJncy5jdHJsS2V5ICYmICFhcmdzLmFsdEtleSAmJiBpc1ByaW50YWJsZUNoYXJhY3RlcihhcmdzLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRlckNlbGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Db250ZW50S2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmICghdGhpcy5vbkNlbGxLZXlkb3duKGFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uZmlybSA9ICFhcmdzLmRlZmF1bHRQcmV2ZW50ZWQgJiYgYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyICYmIGlzVGV4dElucHV0KGFyZ3Muc3JjRWxlbWVudCk7XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuRXNjYXBlIHx8IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5GMiB8fCBjb25maXJtKSB7XG4gICAgICAgICAgICB0aGlzLmxlYXZlQ2VsbCgpO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3IucmVzZXQoKTtcbiAgICAgICAgICAgIGFyZ3Muc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNOYXZpZ2F0aW9uS2V5KGFyZ3Mua2V5Q29kZSkgJiYgdGhpcy5jdXJzb3IuY2VsbC5mb2N1c0dyb3VwLmlzTmF2aWdhYmxlKCkpIHtcbiAgICAgICAgICAgIHRoaXMub25DdXJzb3JLZXlkb3duKGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubGVhdmVDZWxsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DZWxsS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmICh0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGluZ0NlbGwoKSkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlybSA9IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5FbnRlcjtcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbCA9IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5Fc2NhcGU7XG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0ZSA9IGlzTmF2aWdhdGlvbktleShhcmdzLmtleUNvZGUpO1xuICAgICAgICAgICAgaWYgKGNvbmZpcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmNsb3NlQ2VsbChhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY2FuY2VsQ2VsbCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobmF2aWdhdGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZWxsS2V5ZG93bi5lbWl0KGFyZ3MpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgb25DdXJzb3JDaGFuZ2VzKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVSb3dJbmRleCA9IGFyZ3Mucm93SW5kZXg7XG4gICAgICAgIGNvbnN0IGRhdGFSb3dJbmRleCA9IHRoaXMuYWN0aXZlRGF0YVJvdztcbiAgICAgICAgaWYgKHRoaXMubWV0YSAmJiAodGhpcy5tZXRhLmlzVmlydHVhbCAmJiB0aGlzLnZpZXdwb3J0ICYmXG4gICAgICAgICAgICAhdGhpcy52aWV3cG9ydC5jb250YWluc1JvdyhkYXRhUm93SW5kZXgpICYmIGRhdGFSb3dJbmRleCA+IC0xKSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxSZXF1ZXN0U2VydmljZS5zY3JvbGxUbyh7IHJvdzogZGF0YVJvd0luZGV4IH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1ldGEudmlydHVhbENvbHVtbnMgJiYgYXJncy5jb2xJbmRleCA+PSB0aGlzLm1ldGEuY29sdW1ucy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmFjdGl2ZUNlbGw7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IHRoaXMubW9kZWwuY2VsbFJhbmdlKGNlbGwpO1xuICAgICAgICAgICAgaWYgKCFjZWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aXJ0dWFsQ2VsbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKCFjZWxsICYmIHRoaXMubW9kZSAhPT0gMCAvKiBTdGFuZGJ5ICovKSB8fCAoY2VsbCAmJiAhdGhpcy5jb2x1bW5WaWV3cG9ydC5pbnRlcnNlY3RzKHN0YXJ0LCBlbmQpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsUmVxdWVzdFNlcnZpY2Uuc2Nyb2xsVG8oeyBjb2x1bW46IGFyZ3MuY29sSW5kZXggLSAodGhpcy5tZXRhZGF0YS5oYXNEZXRhaWxUZW1wbGF0ZSA/IDEgOiAwKSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkZvY3VzT3V0KGFyZ3MpIHtcbiAgICAgICAgaWYgKGlzVmlzaWJsZShhcmdzLnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZSA9IDAgLyogU3RhbmRieSAqLztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZvY3VzZWQgdGFyZ2V0IGlzIG5vIGxvbmdlciB2aXNpYmxlLFxuICAgICAgICAgICAgLy8gcmVzZXQgdG8gY3Vyc29yIG1vZGUgYW5kIHJlY2FwdHVyZSBmb2N1cy5cbiAgICAgICAgICAgIHRoaXMubW9kZSA9IDEgLyogQ3Vyc29yICovO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVhY3RpdmF0ZUVsZW1lbnRzKCk7XG4gICAgICAgIHRoaXMuY3Vyc29yLmFubm91bmNlKCk7XG4gICAgfVxuICAgIG9uV2luZG93Qmx1cigpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gMCAvKiBTdGFuZGJ5ICovO1xuICAgICAgICB0aGlzLmRlYWN0aXZhdGVFbGVtZW50cygpO1xuICAgICAgICB0aGlzLmN1cnNvci5hbm5vdW5jZSgpO1xuICAgIH1cbiAgICBvbktleWRvd24oYXJncykge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAxIC8qIEN1cnNvciAqLykge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvcktleWRvd24oYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlID09PSAyIC8qIENvbnRlbnQgKi8pIHtcbiAgICAgICAgICAgIHRoaXMub25Db250ZW50S2V5ZG93bihhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvblRhYm91dCgpIHtcbiAgICAgICAgLy8gVGFiYmVkIG91dCBvZiB0aGUgbGFzdCBmb2N1c2FibGUgY29udGVudCBlbGVtZW50XG4gICAgICAgIC8vIHJlc2V0IHRvIGN1cnNvciBtb2RlIGFuZCByZWNhcHR1cmUgZm9jdXMuXG4gICAgICAgIGlmICh0aGlzLmN1cnNvci5jZWxsLmZvY3VzR3JvdXAuaXNOYXZpZ2FibGUoKSkge1xuICAgICAgICAgICAgLy8gVW5sZXNzIHRoZSBjZWxsIGhhcyBhIHNpbmdsZSBmb2N1c2FibGUgZWxlbWVudCxcbiAgICAgICAgICAgIC8vIG90aGVyd2lzZSB3ZSdkIHJldHVybiB0byBDb250ZW50IG1vZGUgYW5kIGVudGVyIGFuIGVuZGxlc3MgbG9vcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubGVhdmVDZWxsKCk7XG4gICAgICAgIHRoaXMuY3Vyc29yLnJlc2V0KCk7XG4gICAgfVxufVxuTmF2aWdhdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk5hdmlnYXRpb25TZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBEb21FdmVudHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTY3JvbGxSZXF1ZXN0U2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBzU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGV0YWlsc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEZvY3VzUm9vdCB9LFxuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBGb2N1c2FibGVEaXJlY3RpdmUsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihkb21FdmVudHMsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IGRvbUV2ZW50cztcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlID0gbmF2aWdhdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uU3RhcnRJbmRleCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IFtdO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkZFN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG4gICAgZ2V0IGVuYWJsZU1hcnF1ZWUoKSB7XG4gICAgICAgIGNvbnN0IGNoZWNrYm94T25seSA9IHRoaXMuc2V0dGluZ3MgJiYgdHlwZW9mIHRoaXMuc2V0dGluZ3MgPT09ICdvYmplY3QnICYmIHRoaXMuc2V0dGluZ3MuY2hlY2tib3hPbmx5O1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZ3MgfHwgY2hlY2tib3hPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZVNldHRpbmdzID0gdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlO1xuICAgICAgICBjb25zdCBkcmFnQW5kTXVsdGlwbGUgPSB0eXBlb2YgKHNlbGVjdGFibGVTZXR0aW5ncykgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBpc1ByZXNlbnQoc2VsZWN0YWJsZVNldHRpbmdzKSAmJlxuICAgICAgICAgICAgc2VsZWN0YWJsZVNldHRpbmdzLm1vZGUgPT09ICdtdWx0aXBsZScgJiZcbiAgICAgICAgICAgIHNlbGVjdGFibGVTZXR0aW5ncy5lbmFibGVkICE9PSBmYWxzZSAmJlxuICAgICAgICAgICAgIXNlbGVjdGFibGVTZXR0aW5ncy5jaGVja2JveE9ubHkgJiZcbiAgICAgICAgICAgIHNlbGVjdGFibGVTZXR0aW5ncy5kcmFnO1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmUgJiYgZHJhZ0FuZE11bHRpcGxlO1xuICAgIH1cbiAgICBpbml0KHNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uID0gW107XG4gICAgICAgIGlmIChzZXR0aW5ncy5zZWxlY3RhYmxlICYmIHNldHRpbmdzLnNlbGVjdGFibGUuZW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0QWxsU3RhdGUgPSB0cnVlO1xuICAgICAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgICAgICB3aGlsZSAoIWl0ZW0uZG9uZSkge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnZhbHVlICYmIGl0ZW0udmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgcm93QXJncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLnZhbHVlLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS52YWx1ZS5pbmRleFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ3Mucm93U2VsZWN0ZWQocm93QXJncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbltpdGVtLnZhbHVlLmluZGV4XSA9IHJvd0FyZ3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RBbGxTdGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNlbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RBbGxTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzU2VsZWN0ZWQoaW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MgJiYgdGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAmJiBpc1ByZXNlbnQodGhpcy5jdXJyZW50U2VsZWN0aW9uW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlQ2xpY2soaXRlbSwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXY7XG4gICAgICAgIGNvbnN0IGN0cmxLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiBjdHJsS2V5ICYmIHRoaXMuaXNTZWxlY3RlZChpdGVtLmluZGV4KSkge1xuICAgICAgICAgICAgZXYgPSB0aGlzLnRvZ2dsZShpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICBpZiAoY3RybEtleSAmJiAhZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBldiA9IHRoaXMudG9nZ2xlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICBldiA9IHRoaXMuYWRkQWxsVG8oaXRlbSwgY3RybEtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoZXYpKSB7XG4gICAgICAgICAgICBldiA9IHRoaXMuc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50U2VsZWN0aW9uW2l0ZW0uaW5kZXhdID0ge1xuICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLmRhdGEsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFldi5zZWxlY3RlZFJvd3MubGVuZ3RoICYmICFldi5kZXNlbGVjdGVkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldi5jdHJsS2V5ID0gY3RybEtleTtcbiAgICAgICAgZXYuc2hpZnRLZXkgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoZXYpO1xuICAgIH1cbiAgICB0b2dnbGUoaXRlbSkge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGxldCBkZXNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25TdGFydEluZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgICAgY29uc3Qgcm93QXJncyA9IHsgZGF0YUl0ZW06IGl0ZW0uZGF0YSwgaW5kZXg6IGl0ZW0uaW5kZXggfTtcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChpdGVtLmluZGV4KSkge1xuICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3MucHVzaChyb3dBcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNlbGVjdGVkUm93czogZGVzZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBzZWxlY3RlZFJvd3M6IHNlbGVjdGVkUm93c1xuICAgICAgICB9O1xuICAgIH1cbiAgICB0b2dnbGVCeUluZGV4KGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RBbGxDaGVja2VkICYmIHRoaXMuaXNTZWxlY3RlZChpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB3aGlsZSAoIWl0ZW0uZG9uZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWUgJiYgaXRlbS52YWx1ZS50eXBlID09PSBcImRhdGFcIiAmJiBpdGVtLnZhbHVlLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Ub1RvZ2dsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbS52YWx1ZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS52YWx1ZS5pbmRleFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChpbmRleCkgfHwgdGhpcy5vcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b2dnbGUoaXRlbVRvVG9nZ2xlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdChpdGVtVG9Ub2dnbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZWN0KGl0ZW0pIHtcbiAgICAgICAgbGV0IGRlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uU3RhcnRJbmRleCA9IGl0ZW0uaW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKGl0ZW0uaW5kZXgpKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFJvd3MucHVzaCh7IGRhdGFJdGVtOiBpdGVtLmRhdGEsIGluZGV4OiBpdGVtLmluZGV4IH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbi5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICAgIGlmIChyb3cuaW5kZXggIT09IGl0ZW0uaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBkZXNlbGVjdGVkUm93cy5wdXNoKHJvdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3M6IGRlc2VsZWN0ZWRSb3dzLFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZFJvd3NcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy9Vc2VkIHRvIG1hbnVhbGx5IGRlc2VsZWN0IHJlbW92ZWQgaXRlbXNcbiAgICBkZXNlbGVjdChyZW1vdmVkSXRlbSkge1xuICAgICAgICBjb25zdCBpdGVyYXRvciQkMSA9IHRoaXMuZ2V0SXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IGl0ZW0gPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghaXRlbS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiICYmIGl0ZW0udmFsdWUuZGF0YSA9PT0gcmVtb3ZlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbTogaXRlbS52YWx1ZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS52YWx1ZS5pbmRleFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZChyb3dBcmdzLmluZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWRSb3dzOiBbcm93QXJnc10sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJvd3M6IFtdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEFsbFRvKGl0ZW0sIGN0cmxLZXkpIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkUm93cyA9IFtdO1xuICAgICAgICBsZXQgZGVzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbih0aGlzLmxhc3RTZWxlY3Rpb25TdGFydEluZGV4LCBpdGVtLmluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5tYXgodGhpcy5sYXN0U2VsZWN0aW9uU3RhcnRJbmRleCwgaXRlbS5pbmRleCk7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlICYmIG5leHQudmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBuZXh0LnZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7IGRhdGFJdGVtOiBuZXh0LnZhbHVlLmRhdGEsIGluZGV4OiBpZHggfTtcbiAgICAgICAgICAgICAgICBpZiAoKGlkeCA8IHN0YXJ0IHx8IGlkeCA+IGVuZCkgJiYgdGhpcy5pc1NlbGVjdGVkKGlkeCkgJiYgIWN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3MucHVzaChyb3dBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChpZHggPj0gc3RhcnQgJiYgaWR4IDw9IGVuZCkgJiYgIXRoaXMuaXNTZWxlY3RlZChpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRSb3dzOiBkZXNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogc2VsZWN0ZWRSb3dzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHVwZGF0ZUFsbChzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZCA9IHNlbGVjdEFsbENoZWNrZWQ7XG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgbGV0IGRlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlICYmIG5leHQudmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBuZXh0LnZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7IGRhdGFJdGVtOiBuZXh0LnZhbHVlLmRhdGEsIGluZGV4OiBpZHggfTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKGlkeCkgJiYgIXNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3MucHVzaChyb3dBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoaWR4KSAmJiBzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxlY3RlZFJvd3MubGVuZ3RoICYmICFkZXNlbGVjdGVkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXYgPSB7XG4gICAgICAgICAgICBjdHJsS2V5OiB0cnVlLFxuICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3M6IGRlc2VsZWN0ZWRSb3dzLFxuICAgICAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBzaGlmdEtleTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChldik7XG4gICAgfVxuICAgIHNlbGVjdFJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KSB7XG4gICAgICAgIGxldCBzZWxlY3RlZFJvd3MgPSBbXTtcbiAgICAgICAgbGV0IGRlc2VsZWN0ZWRSb3dzID0gW107XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgbmV4dCA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgd2hpbGUgKCFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgIGlmIChuZXh0LnZhbHVlICYmIG5leHQudmFsdWUudHlwZSA9PT0gXCJkYXRhXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSBuZXh0LnZhbHVlLmluZGV4O1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7IGRhdGFJdGVtOiBuZXh0LnZhbHVlLmRhdGEsIGluZGV4OiBpZHggfTtcbiAgICAgICAgICAgICAgICBpZiAoKGlkeCA8IHN0YXJ0IHx8IGlkeCA+IGVuZCkgJiYgdGhpcy5pc1NlbGVjdGVkKGlkeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZFJvd3MucHVzaChyb3dBcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKChpZHggPj0gc3RhcnQgJiYgaWR4IDw9IGVuZCkgJiYgIXRoaXMuaXNTZWxlY3RlZChpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkUm93cy5wdXNoKHJvd0FyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRSb3dzOiBkZXNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogc2VsZWN0ZWRSb3dzXG4gICAgICAgIH07XG4gICAgfVxuICAgIGdldCBzZWxlY3RBbGxTdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbFN0YXRlO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb24ubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5pbmRleDtcbiAgICAgICAgfSkuZmlsdGVyKChuKSA9PiB0eXBlb2YgbiA9PT0gXCJudW1iZXJcIik7XG4gICAgfVxuICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGNoZWNrYm94T25seTogZmFsc2UsXG4gICAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgbW9kZTogXCJtdWx0aXBsZVwiXG4gICAgICAgIH07XG4gICAgICAgIGlmICghaXNQcmVzZW50KHRoaXMuc2V0dGluZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzLnNlbGVjdGFibGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBjaGVja2JveE9ubHk6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IHRoaXMuc2V0dGluZ3Muc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICBtb2RlOiBcIm11bHRpcGxlXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihkZWZhdWx0T3B0aW9ucywgdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuICAgIHRhcmdldEFyZ3MoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5tb3VzZURvd25FdmVudEFyZ3Mucm93SW5kZXgsXG4gICAgICAgICAgICBkYXRhSXRlbTogdGhpcy5tb3VzZURvd25FdmVudEFyZ3MuZGF0YUl0ZW1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgYWRkU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24gPSB0aGlzLmRvbUV2ZW50cy5jZWxsQ2xpY2suc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkICYmICF0aGlzLm9wdGlvbnMuY2hlY2tib3hPbmx5ICYmIGFyZ3MudHlwZSAhPT0gJ2NvbnRleHRtZW51Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soeyBpbmRleDogYXJncy5yb3dJbmRleCwgZGF0YTogYXJncy5kYXRhSXRlbSB9LCBhcmdzLm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24gPSB0aGlzLmRvbUV2ZW50cy5jZWxsTW91c2Vkb3duLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2VEb3duRXZlbnRBcmdzID0gYXJncztcbiAgICAgICAgICAgICAgICBpZiAoKHRoaXMub3B0aW9ucy5lbmFibGVkICYmICghdGhpcy5vcHRpb25zLm1vZGUgfHwgdGhpcy5vcHRpb25zLm1vZGUgPT09IFwibXVsdGlwbGVcIikgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMub3B0aW9ucy5jaGVja2JveE9ubHkgJiYgYXJncy5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Mub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb2N1c0NlbGxCeUVsZW1lbnQoYXJncy5vcmlnaW5hbEV2ZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSAmJiAhdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJlc2VudChhcmdzLmFjdGlvbikgJiYgYXJncy5hY3Rpb24gPT09ICdyZW1vdmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2VsZWN0KGFyZ3MuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRJdGVyYXRvcigpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSB0aGlzLnNldHRpbmdzLnZpZXcuYWNjZXNzb3IoKTtcbiAgICAgICAgaWYgKCFhY2Nlc3Nvcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2Nlc3NvcltpdGVyYXRvcl0oKTtcbiAgICB9XG4gICAgcmVtb3ZlU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG5TZWxlY3Rpb25TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TZWxlY3Rpb25TZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRG9tRXZlbnRzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDZWxsU2VsZWN0aW9uU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoZG9tRXZlbnRzLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5kb21FdmVudHMgPSBkb21FdmVudHM7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgPSBsb2NhbERhdGFDaGFuZ2VzU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMubW91c2VVcEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRyYWdTZWxlY3REZXNlbGVjdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtID0geyBpdGVtS2V5OiAwLCBjb2x1bW5LZXk6IDAgfTtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uSXRlbVJvd0luZGV4ID0gMDtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uSXRlbUNvbEluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5hZGRTdWJzY3JpcHRpb25zKCk7XG4gICAgfVxuICAgIGdldCBlbmFibGVNYXJxdWVlKCkge1xuICAgICAgICBjb25zdCBjaGVja2JveE9ubHkgPSB0aGlzLnNldHRpbmdzICYmIHR5cGVvZiB0aGlzLnNldHRpbmdzID09PSAnb2JqZWN0JyAmJiB0aGlzLnNldHRpbmdzLmNoZWNrYm94T25seTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzIHx8IGNoZWNrYm94T25seSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGVTZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3Muc2VsZWN0YWJsZTtcbiAgICAgICAgY29uc3QgZHJhZ0FuZE11bHRpcGxlID0gdHlwZW9mIChzZWxlY3RhYmxlU2V0dGluZ3MpID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgaXNQcmVzZW50KHNlbGVjdGFibGVTZXR0aW5ncykgJiZcbiAgICAgICAgICAgIHNlbGVjdGFibGVTZXR0aW5ncy5tb2RlID09PSAnbXVsdGlwbGUnICYmXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2V0dGluZ3MuY2VsbCAmJlxuICAgICAgICAgICAgc2VsZWN0YWJsZVNldHRpbmdzLmVuYWJsZWQgIT09IGZhbHNlICYmXG4gICAgICAgICAgICBzZWxlY3RhYmxlU2V0dGluZ3MuZHJhZztcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlICYmIGRyYWdBbmRNdWx0aXBsZTtcbiAgICB9XG4gICAgaW5pdChzZXR0aW5ncykge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IFtdO1xuICAgICAgICBpZiAoc2V0dGluZ3Muc2VsZWN0YWJsZSAmJiBzZXR0aW5ncy5zZWxlY3RhYmxlLmVuYWJsZWQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVyYXRvciQkMSA9IHRoaXMuZ2V0SXRlcmF0b3IoKTtcbiAgICAgICAgICAgIGxldCBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICAgICAgd2hpbGUgKCFpdGVtLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbTogaXRlbS52YWx1ZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGl0ZW0udmFsdWUuaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuY29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxBcmdzID0gc2V0dGluZ3MuY2VsbFNlbGVjdGVkKHJvd0FyZ3MsIGNvbCwgY29sLmxlYWZJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRDZWxsQXJncy5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbi5wdXNoKHNlbGVjdGVkQ2VsbEFyZ3MuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlzQ2VsbFNlbGVjdGVkKGl0ZW0sIGNvbCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncyAmJiB0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRDZWxsQXJncyA9IHRoaXMuc2V0dGluZ3MuY2VsbFNlbGVjdGVkKHsgZGF0YUl0ZW06IGl0ZW0uZGF0YSwgaW5kZXg6IGl0ZW0uaW5kZXggfSwgY29sLCBjb2wubGVhZkluZGV4KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZW5hYmxlZCAmJiBzZWxlY3RlZENlbGxBcmdzLnNlbGVjdGVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaGFuZGxlQ2xpY2soaXRlbSwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZHJhZ2dpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZXY7XG4gICAgICAgIGNvbnN0IGN0cmxLZXkgPSBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiBjdHJsS2V5ICYmIHRoaXMuaXNDZWxsU2VsZWN0ZWQoaXRlbSwgaXRlbS5jb2x1bW4pKSB7XG4gICAgICAgICAgICBldiA9IHRoaXMudG9nZ2xlKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgICAgICAgIGlmIChjdHJsS2V5ICYmICFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGV2ID0gdGhpcy50b2dnbGUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Um93SW5kZXggPSBNYXRoLm1pbih0aGlzLmxhc3RTZWxlY3Rpb25JdGVtUm93SW5kZXgsIGl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q29sSW5kZXggPSBNYXRoLm1pbih0aGlzLmxhc3RTZWxlY3Rpb25JdGVtQ29sSW5kZXgsIGl0ZW0uY29sdW1uLmxlYWZJbmRleCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kUm93SW5kZXggPSBNYXRoLm1heCh0aGlzLmxhc3RTZWxlY3Rpb25JdGVtUm93SW5kZXgsIGl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVuZENvbEluZGV4ID0gTWF0aC5tYXgodGhpcy5sYXN0U2VsZWN0aW9uSXRlbUNvbEluZGV4LCBpdGVtLmNvbHVtbi5sZWFmSW5kZXgpO1xuICAgICAgICAgICAgICAgIGV2ID0gdGhpcy5zZWxlY3RSYW5nZShzdGFydFJvd0luZGV4LCBzdGFydENvbEluZGV4LCBlbmRSb3dJbmRleCwgZW5kQ29sSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNQcmVzZW50KGV2KSkge1xuICAgICAgICAgICAgZXYgPSB0aGlzLnNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNlbGVjdGlvbiA9IFt0aGlzLmxhc3RTZWxlY3Rpb25JdGVtXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2LnNlbGVjdGVkQ2VsbHMubGVuZ3RoICYmICFldi5kZXNlbGVjdGVkQ2VsbHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXYuY3RybEtleSA9IGN0cmxLZXk7XG4gICAgICAgIGV2LnNoaWZ0S2V5ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KGV2KTtcbiAgICB9XG4gICAgdG9nZ2xlKGl0ZW0pIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICAgICAgbGV0IGRlc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtID1cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuY2VsbFNlbGVjdGVkKHsgZGF0YUl0ZW06IGl0ZW0uZGF0YSwgaW5kZXg6IGl0ZW0uaW5kZXggfSwgaXRlbS5jb2x1bW4sIGl0ZW0uY29sdW1uLmxlYWZJbmRleCkuaXRlbTtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uSXRlbVJvd0luZGV4ID0gaXRlbS5pbmRleDtcbiAgICAgICAgdGhpcy5sYXN0U2VsZWN0aW9uSXRlbUNvbEluZGV4ID0gaXRlbS5jb2x1bW4ubGVhZkluZGV4O1xuICAgICAgICBpZiAodGhpcy5pc0NlbGxTZWxlY3RlZChpdGVtLCBpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRDZWxscy5wdXNoKHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZWN0ZWRDZWxscy5wdXNoKHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkZXNlbGVjdGVkQ2VsbHMsXG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzXG4gICAgICAgIH07XG4gICAgfVxuICAgIHNlbGVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkQ2VsbHMgPSBbXTtcbiAgICAgICAgY29uc3QgZGVzZWxlY3RlZENlbGxzID0gW107XG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0gPVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5jZWxsU2VsZWN0ZWQoeyBkYXRhSXRlbTogaXRlbS5kYXRhLCBpbmRleDogaXRlbS5pbmRleCB9LCBpdGVtLmNvbHVtbiwgaXRlbS5jb2x1bW4ubGVhZkluZGV4KS5pdGVtO1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtUm93SW5kZXggPSBpdGVtLmluZGV4O1xuICAgICAgICB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtQ29sSW5kZXggPSBpdGVtLmNvbHVtbi5sZWFmSW5kZXg7XG4gICAgICAgIGlmICghdGhpcy5pc0NlbGxTZWxlY3RlZChpdGVtLCBpdGVtLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHMucHVzaCh0aGlzLmxhc3RTZWxlY3Rpb25JdGVtKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRTZWxlY3Rpb24uZm9yRWFjaCgoc2VsZWN0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWRJdGVtLml0ZW1LZXkgIT09IHRoaXMubGFzdFNlbGVjdGlvbkl0ZW0uaXRlbUtleSB8fCBzZWxlY3RlZEl0ZW0uY29sdW1uS2V5ICE9PSB0aGlzLmxhc3RTZWxlY3Rpb25JdGVtLmNvbHVtbktleSkge1xuICAgICAgICAgICAgICAgIGRlc2VsZWN0ZWRDZWxscy5wdXNoKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGVzZWxlY3RlZENlbGxzLFxuICAgICAgICAgICAgc2VsZWN0ZWRDZWxsc1xuICAgICAgICB9O1xuICAgIH1cbiAgICAvL1VzZWQgdG8gbWFudWFsbHkgZGVzZWxlY3QgcmVtb3ZlZCBpdGVtc1xuICAgIGRlc2VsZWN0KHJlbW92ZWRJdGVtKSB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yJCQxID0gdGhpcy5nZXRJdGVyYXRvcigpO1xuICAgICAgICBsZXQgaXRlbSA9IGl0ZXJhdG9yJCQxLm5leHQoKTtcbiAgICAgICAgbGV0IHJvd0FyZ3M7XG4gICAgICAgIHdoaWxlICghaXRlbS5kb25lKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWx1ZSAmJiBpdGVtLnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiICYmIGl0ZW0udmFsdWUuZGF0YSA9PT0gcmVtb3ZlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICByb3dBcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbTogaXRlbS52YWx1ZS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS52YWx1ZS5pbmRleFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpdGVtID0gaXRlcmF0b3IkJDEubmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dBcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBjZWxsc1RvUmVtb3ZlID0gdGhpcy5jdXJyZW50U2VsZWN0aW9uLmZpbHRlcihzZWxlY3RlZEl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbmRlciA9IHRoaXMuc2V0dGluZ3MuY2VsbFNlbGVjdGVkKHJvd0FyZ3MsIG51bGwsIG51bGwpLml0ZW07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbS5pdGVtS2V5ID09PSBjb250ZW5kZXIuaXRlbUtleTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNlbGxzVG9SZW1vdmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV2ID0ge1xuICAgICAgICAgICAgICAgICAgICBjdHJsS2V5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RlZENlbGxzOiBjZWxsc1RvUmVtb3ZlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxzOiBbXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoZXYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdFJhbmdlKHN0YXJ0Um93SW5kZXgsIHN0YXJ0Q29sSW5kZXgsIGVuZFJvd0luZGV4LCBlbmRDb2xJbmRleCkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gW107XG4gICAgICAgIGNvbnN0IGRlc2VsZWN0ZWRDZWxscyA9IFtdO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25TdGFydFJvdyA9IE1hdGgubWluKHN0YXJ0Um93SW5kZXgsIGVuZFJvd0luZGV4KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uU3RhcnRDb2wgPSBNYXRoLm1pbihzdGFydENvbEluZGV4LCBlbmRDb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbkVuZFJvdyA9IE1hdGgubWF4KHN0YXJ0Um93SW5kZXgsIGVuZFJvd0luZGV4KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uRW5kQ29sID0gTWF0aC5tYXgoc3RhcnRDb2xJbmRleCwgZW5kQ29sSW5kZXgpO1xuICAgICAgICBjb25zdCBpdGVyYXRvciQkMSA9IHRoaXMuZ2V0SXRlcmF0b3IoKTtcbiAgICAgICAgbGV0IG5leHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIHdoaWxlICghbmV4dC5kb25lKSB7XG4gICAgICAgICAgICBpZiAobmV4dC52YWx1ZSAmJiBuZXh0LnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWR4ID0gbmV4dC52YWx1ZS5pbmRleDtcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gbmV4dC52YWx1ZS5kYXRhO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0FyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaWR4XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmNvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGl0ZW0gfSA9IHRoaXMuc2V0dGluZ3MuY2VsbFNlbGVjdGVkKHJvd0FyZ3MsIGNvbCwgY29sLmxlYWZJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5pc0NlbGxTZWxlY3RlZChuZXh0LnZhbHVlLCBjb2wpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0luUm93UmFuZ2UgPSBzZWxlY3Rpb25TdGFydFJvdyA8PSBpZHggJiYgaWR4IDw9IHNlbGVjdGlvbkVuZFJvdztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJbkNvbFJhbmdlID0gc2VsZWN0aW9uU3RhcnRDb2wgPD0gY29sLmxlYWZJbmRleCAmJiBjb2wubGVhZkluZGV4IDw9IHNlbGVjdGlvbkVuZENvbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJblNlbGVjdGlvblJlY3QgPSBpc0luUm93UmFuZ2UgJiYgaXNJbkNvbFJhbmdlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSW5TZWxlY3Rpb25SZWN0ICYmIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdGVkQ2VsbHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNJblNlbGVjdGlvblJlY3QgJiYgIXNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENlbGxzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5leHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2VsZWN0ZWRDZWxscyxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHNcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICAgICAgY2hlY2tib3hPbmx5OiBmYWxzZSxcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICBtb2RlOiBcIm11bHRpcGxlXCJcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5zZXR0aW5ncykpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0T3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3Muc2VsZWN0YWJsZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNoZWNrYm94T25seTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogdGhpcy5zZXR0aW5ncy5zZWxlY3RhYmxlLFxuICAgICAgICAgICAgICAgIG1vZGU6IFwibXVsdGlwbGVcIlxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGRlZmF1bHRPcHRpb25zLCB0aGlzLnNldHRpbmdzLnNlbGVjdGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJlbW92ZVN1YnNjcmlwdGlvbnMoKTtcbiAgICB9XG4gICAgYWRkU3Vic2NyaXB0aW9ucygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24gPSB0aGlzLmRvbUV2ZW50cy5jZWxsQ2xpY2suc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5lbmFibGVkICYmICF0aGlzLm9wdGlvbnMuY2hlY2tib3hPbmx5ICYmIGFyZ3MudHlwZSAhPT0gJ2NvbnRleHRtZW51Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soeyBpbmRleDogYXJncy5yb3dJbmRleCwgZGF0YTogYXJncy5kYXRhSXRlbSwgY29sdW1uOiBhcmdzLmNvbHVtbiB9LCBhcmdzLm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24gPSB0aGlzLmRvbUV2ZW50cy5jZWxsTW91c2Vkb3duLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW91c2VEb3duRXZlbnRBcmdzID0gYXJncztcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmVuYWJsZWQgJiYgKCF0aGlzLm9wdGlvbnMubW9kZSB8fCB0aGlzLm9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5vcHRpb25zLmNoZWNrYm94T25seSAmJiBhcmdzLm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNDZWxsQnlFbGVtZW50KGFyZ3Mub3JpZ2luYWxFdmVudC50YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgJiYgIXRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1ByZXNlbnQoYXJncy5hY3Rpb24pICYmIGFyZ3MuYWN0aW9uID09PSAncmVtb3ZlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNlbGVjdChhcmdzLml0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0SXRlcmF0b3IoKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gdGhpcy5zZXR0aW5ncy52aWV3LmFjY2Vzc29yKCk7XG4gICAgICAgIGlmICghYWNjZXNzb3IpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjZXNzb3JbaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIHJlbW92ZVN1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jZWxsQ2xpY2tTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3VzZWRvd25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubW91c2Vkb3duU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLm1vdXNlZG93blN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZWRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuQ2VsbFNlbGVjdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNlbGxTZWxlY3Rpb25TZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRG9tRXZlbnRzU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH1cbl07XG5cbmNvbnN0IGNyZWF0ZUVsZW1lbnQgPSAoKSA9PiB7XG4gICAgY29uc3QgbWFycXVlZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgbWFycXVlZS5jbGFzc05hbWUgPSBcImstbWFycXVlZVwiO1xuICAgIGNvbnN0IG1hcnF1ZWVDb2xvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgbWFycXVlZUNvbG9yLmNsYXNzTmFtZSA9IFwiay1tYXJxdWVlLWNvbG9yXCI7XG4gICAgbWFycXVlZS5hcHBlbmRDaGlsZChtYXJxdWVlQ29sb3IpO1xuICAgIHJldHVybiBtYXJxdWVlO1xufTtcbmNvbnN0IFBPSU5URVJfT0ZGU0VUID0gMjtcbmNvbnN0IE1JTklNQUxfRFJBR19ESVNUQU5DRSA9IDU7XG5jb25zdCBvZmZzZXRzID0ge1xuICAgIHRvcExlZnQ6IHsgeDogUE9JTlRFUl9PRkZTRVQsIHk6IFBPSU5URVJfT0ZGU0VUIH0sXG4gICAgdG9wUmlnaHQ6IHsgeDogLVBPSU5URVJfT0ZGU0VULCB5OiBQT0lOVEVSX09GRlNFVCB9LFxuICAgIGJvdHRvbUxlZnQ6IHsgeDogUE9JTlRFUl9PRkZTRVQsIHk6IC1QT0lOVEVSX09GRlNFVCB9LFxuICAgIGJvdHRvbVJpZ2h0OiB7IHg6IC1QT0lOVEVSX09GRlNFVCwgeTogLVBPSU5URVJfT0ZGU0VUIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JpZE1hcnF1ZWVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGRyYWdnYWJsZSwgc2VsZWN0aW9uLCBjZWxsU2VsZWN0aW9uLCBkb21FdmVudHMpIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb24gPSBjZWxsU2VsZWN0aW9uO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IGRvbUV2ZW50cztcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGdldCB1c2VyU2VsZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuY2VsbFNlbGVjdGlvbi5lbmFibGVNYXJxdWVlIHx8IHRoaXMuc2VsZWN0aW9uLmVuYWJsZU1hcnF1ZWUpID8gJ25vbmUnIDogbnVsbDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9ICh0aGlzLmRyYWdnYWJsZS5rZW5kb1ByZXNzLnN1YnNjcmliZSh0aGlzLnN0YXJ0LmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmRyYWdnYWJsZS5rZW5kb0RyYWcuc3Vic2NyaWJlKHRoaXMubW92ZU1hcnF1ZWUuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuY2xlYW4oKTtcbiAgICB9XG4gICAgc3RhcnQoYXJncykge1xuICAgICAgICBpZiAoYXJncy5vcmlnaW5hbEV2ZW50LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2stY2hlY2tib3gnKSkge1xuICAgICAgICAgICAgdGhpcy5wcmVzc0FyZ3MgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJlc3NBcmdzID0gYXJncztcbiAgICAgICAgdGhpcy5wcmVzc1RhcmdldCA9IG51bGw7XG4gICAgfVxuICAgIG1vdmVNYXJxdWVlKGFyZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXNzVGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzVGFyZ2V0ID0gdGhpcy5jZWxsU2VsZWN0aW9uLmFjdGl2ZSA/IHRoaXMuY2VsbFNlbGVjdGlvbi5tb3VzZURvd25FdmVudEFyZ3MgOiB0aGlzLnNlbGVjdGlvbi5tb3VzZURvd25FdmVudEFyZ3M7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJlc3MgPSB0aGlzLnByZXNzQXJncztcbiAgICAgICAgaWYgKCFwcmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25TdGFydGVkKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChNYXRoLnBvdygoYXJncy5wYWdlWCAtIHByZXNzLnBhZ2VYKSwgMikgKyBNYXRoLnBvdygoYXJncy5wYWdlWSAtIHByZXNzLnBhZ2VZKSwgMikpO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gTUlOSU1BTF9EUkFHX0RJU1RBTkNFKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdFbmRTdWJzY3JpcHRpb24gPSBtZXJnZSh0aGlzLmRvbUV2ZW50cy5jZWxsTW91c2V1cC5waXBlKHRha2UoMSkpLCB0aGlzLmRyYWdnYWJsZS5rZW5kb1JlbGVhc2UucGlwZShkZWxheSgxKSwgdGFrZSgxKSkpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5lbmRTZWxlY3Rpb24uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0TWFycXVlZSgpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5tYXJxdWVlRWxlbWVudDtcbiAgICAgICAgY29uc3QgbWFycXVlZVF1YWRyYW50ID0gdGhpcy5nZXRNYXJxdWVlUXVhZHJhbnQoYXJncy5wYWdlWCwgYXJncy5wYWdlWSwgcHJlc3MucGFnZVgsIHByZXNzLnBhZ2VZKTtcbiAgICAgICAgbGV0IGxlZnQgPSBNYXRoLm1pbihhcmdzLnBhZ2VYLCBwcmVzcy5wYWdlWCk7XG4gICAgICAgIGxldCB0b3AgPSBNYXRoLm1pbihhcmdzLnBhZ2VZLCBwcmVzcy5wYWdlWSk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5hYnMoYXJncy5wYWdlWCAtIHByZXNzLnBhZ2VYKTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gTWF0aC5hYnMoYXJncy5wYWdlWSAtIHByZXNzLnBhZ2VZKTtcbiAgICAgICAgaWYgKG1hcnF1ZWVRdWFkcmFudCkge1xuICAgICAgICAgICAgbGVmdCArPSBvZmZzZXRzW21hcnF1ZWVRdWFkcmFudF0ueDtcbiAgICAgICAgICAgIHRvcCArPSBvZmZzZXRzW21hcnF1ZWVRdWFkcmFudF0ueTtcbiAgICAgICAgfVxuICAgICAgICBlbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YDtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLndpZHRoID0gYCR7d2lkdGh9cHhgO1xuICAgICAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XG4gICAgfVxuICAgIGVuZFNlbGVjdGlvbihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLnR5cGUgPT09ICdtb3VzZXVwJyB8fCBhcmdzLnR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxTZWxlY3Rpb24uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uLmRyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb24uY2hhbmdlcy5lbWl0KHRoaXMuY2VsbFNlbGVjdGlvbi5zZWxlY3RSYW5nZSh0aGlzLnByZXNzVGFyZ2V0LnJvd0luZGV4LCB0aGlzLnByZXNzVGFyZ2V0LmNvbHVtbi5sZWFmSW5kZXgsIGFyZ3Mucm93SW5kZXgsIGFyZ3MuY29sdW1uLmxlYWZJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb24uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNoYW5nZXMuZW1pdCh0aGlzLnNlbGVjdGlvbi5zZWxlY3RSYW5nZSh0aGlzLnByZXNzVGFyZ2V0LnJvd0luZGV4LCBhcmdzLnJvd0luZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhbigpO1xuICAgIH1cbiAgICBjbGVhbigpIHtcbiAgICAgICAgaWYgKHRoaXMubWFycXVlZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5tYXJxdWVlRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLm1hcnF1ZWVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kcmFnRW5kU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdFbmRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRyYWdFbmRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNzVGFyZ2V0ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmVzc0FyZ3MgPSBudWxsO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uLmFjdGl2ZSA/IHRoaXMuY2VsbFNlbGVjdGlvbi5kcmFnZ2luZyA9IGZhbHNlIDogdGhpcy5zZWxlY3Rpb24uZHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgaW5pdE1hcnF1ZWUoKSB7XG4gICAgICAgIGlmICghdGhpcy5tYXJxdWVlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5tYXJxdWVlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5tYXJxdWVlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0TWFycXVlZVF1YWRyYW50KHBvaW50ZXJYLCBwb2ludGVyWSwgc3RhcnRYLCBzdGFydFkpIHtcbiAgICAgICAgY29uc3QgbGVmdEhhbGYgPSBwb2ludGVyWCA8IHN0YXJ0WDtcbiAgICAgICAgY29uc3QgcmlnaHRIYWxmID0gcG9pbnRlclggPiBzdGFydFg7XG4gICAgICAgIGNvbnN0IHRvcEhhbGYgPSBwb2ludGVyWSA8IHN0YXJ0WTtcbiAgICAgICAgY29uc3QgYm90dG9tSGFsZiA9IHBvaW50ZXJZID4gc3RhcnRZO1xuICAgICAgICBpZiAobGVmdEhhbGYgJiYgdG9wSGFsZikge1xuICAgICAgICAgICAgcmV0dXJuICd0b3BMZWZ0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdEhhbGYgJiYgYm90dG9tSGFsZikge1xuICAgICAgICAgICAgcmV0dXJuICdib3R0b21MZWZ0JztcbiAgICAgICAgfVxuICAgICAgICBpZiAocmlnaHRIYWxmICYmIHRvcEhhbGYpIHtcbiAgICAgICAgICAgIHJldHVybiAndG9wUmlnaHQnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyaWdodEhhbGYgJiYgYm90dG9tSGFsZikge1xuICAgICAgICAgICAgcmV0dXJuICdib3R0b21SaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufVxuR3JpZE1hcnF1ZWVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRTZWxlY3Rpb25NYXJxdWVlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JpZE1hcnF1ZWVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEcmFnZ2FibGVEaXJlY3RpdmUgfSxcbiAgICB7IHR5cGU6IFNlbGVjdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENlbGxTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEb21FdmVudHNTZXJ2aWNlIH1cbl07XG5HcmlkTWFycXVlZURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB1c2VyU2VsZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS51c2VyLXNlbGVjdCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLi13ZWJraXQtdXNlci1zZWxlY3QnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBab25lQXdhcmVFdmVudEVtaXR0ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAgIGNvbnN0cnVjdG9yKG5nWm9uZSwgaXNBc3luYyA9IGZhbHNlKSB7XG4gICAgICAgIHN1cGVyKGlzQXN5bmMpO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICB9XG4gICAgc3Vic2NyaWJlKGdlbmVyYXRvck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIGxldCBzY2hlZHVsZXJGbjtcbiAgICAgICAgbGV0IGVycm9yRm4gPSAoXykgPT4gbnVsbDtcbiAgICAgICAgbGV0IGNvbXBsZXRlRm4gPSAoKSA9PiBudWxsO1xuICAgICAgICBpZiAoZ2VuZXJhdG9yT3JOZXh0ICYmIHR5cGVvZiBnZW5lcmF0b3JPck5leHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXJGbiA9ICh2YWx1ZSkgPT4geyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gZ2VuZXJhdG9yT3JOZXh0Lm5leHQodmFsdWUpKTsgfTtcbiAgICAgICAgICAgIGlmIChnZW5lcmF0b3JPck5leHQuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvckZuID0gKGVycikgPT4geyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gZ2VuZXJhdG9yT3JOZXh0LmVycm9yKGVycikpOyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdlbmVyYXRvck9yTmV4dC5jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRlRm4gPSAoKSA9PiB7IHRoaXMubmdab25lLnJ1bigoKSA9PiBnZW5lcmF0b3JPck5leHQuY29tcGxldGUoKSk7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzY2hlZHVsZXJGbiA9ICh2YWx1ZSkgPT4geyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gZ2VuZXJhdG9yT3JOZXh0KHZhbHVlKSk7IH07XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBlcnJvckZuID0gKGVycikgPT4geyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gZXJyb3IoZXJyKSk7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZUZuID0gKCkgPT4geyB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gY29tcGxldGUoKSk7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cGVyLnN1YnNjcmliZShzY2hlZHVsZXJGbiwgZXJyb3JGbiwgY29tcGxldGVGbik7XG4gICAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbiBjZWxsIHRlbXBsYXRlIG9mIHRoZSBHcmlkIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyB0ZW1wbGF0ZXNfY29sdW1uc19ncmlkICV9I3RvYy1jZWxsLXRlbXBsYXRlKSkuXG4gKiBIZWxwcyB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGNlbGxzLiBUbyBkZWZpbmUgdGhlIGNlbGwgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZ1xuICogd2l0aCB0aGUgYGtlbmRvR3JpZENlbGxUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSBhIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YCB0YWcuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGEgaXRlbSBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZpZWxkcyBhcmUgcGFzc2VkOlxuICogLSBgY29sdW1uSW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBpbmRleC4gVXNlIGl0IGFzIGFuIGFsaWFzIGZvciBhIHRlbXBsYXRlIHZhcmlhYmxlIGJ5IHV0aWxpemluZyB0aGUgYGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCJgIHN5bnRheC5cbiAqIC0gYHJvd0luZGV4YCZtZGFzaDtUaGUgY3VycmVudCBkYXRhIHJvdyBpbmRleC4gVXNlIGl0IGFzIGFuIGFsaWFzIGZvciBhIHRlbXBsYXRlIHZhcmlhYmxlIGJ5IHV0aWxpemluZyB0aGUgYGxldC1yb3dJbmRleD1cInJvd0luZGV4XCJgIHN5bnRheC5cbiAqIC0gYGRhdGFJdGVtYCZtZGFzaDtUaGUgY3VycmVudCBkYXRhIGl0ZW0uIFJlcHJlc2VudHMgdGhlIGRlZmF1bHQgY29udGV4dCB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gYW55IHRlbXBsYXRlIHZhcmlhYmxlIHdoaWNoIHV0aWxpemVzIHRoZSBgbGV0LXhgIHN5bnRheCZtZGFzaDtmb3IgZXhhbXBsZSwgYGxldC1kYXRhSXRlbWAuXG4gKiAtIGBjb2x1bW5gJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBpbnN0YW5jZS4gVXNlIGl0IGFzIGFuIGFsaWFzIGZvciBhIHRlbXBsYXRlIHZhcmlhYmxlIGJ5IHV0aWxpemluZyB0aGUgYGxldC1jb2x1bW49XCJjb2x1bW5cImAgc3ludGF4LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiPlxuICogICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiPlxuICogICAgICAgICAgICAgICAgICAgICBEYXRhIFJvdyAjOiB7e3Jvd0luZGV4fX0gL1xuICogICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7ZGF0YUl0ZW0uUHJvZHVjdE5hbWV9fTwvc3Ryb25nPlxuICogICAgICAgICAgICAgICAgICAgICAoe3tkYXRhSXRlbS5EaXNjb250aW51ZWQgPyBcImRpc2NvbnRpbnVlZFwiIDogXCJhY3RpdmVcIn19KVxuICogICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBncmlkRGF0YSA9IFt7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgICAgICB9LCB7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgICAgICB9XG4gKiAgICAgXTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ2VsbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ3JvdXAtaGVhZGVyIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEdyaWQgd2hpY2ggaGVscHMgdG8gY3VzdG9taXplIHRoZSBjb250ZW50IG9mIHRoZSBncm91cCBoZWFkZXIgaXRlbS5cbiAqIFRvIGRlZmluZSB0aGUgZ3JvdXAgaGVhZGVyIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZEdyb3VwSGVhZGVyVGVtcGxhdGVgXG4gKiBkaXJlY3RpdmUgaW5zaWRlIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YC5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgZGF0YSBpdGVtIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAtIGBncm91cGAmbWRhc2g7VGhlIGN1cnJlbnQgZ3JvdXAgaXRlbS5cbiAqIC0gYGZpZWxkYCZtZGFzaDtUaGUgbmFtZSBvZiB0aGUgZmllbGQgYnkgd2hpY2ggZGF0YSBpcyBncm91cGVkLlxuICogLSBgdmFsdWVgJm1kYXNoO1RoZSBjdXJyZW50IGdyb3VwIHZhbHVlLlxuICogLSBgYWdncmVnYXRlc2AmbWRhc2g7QWxsIGFnZ3JlZ2F0ZSB2YWx1ZXMgZm9yIHRoZSBjdXJyZW50IGdyb3VwLlxuICogLSBgaW5kZXhgJm1kYXNoO1RoZSBpbmRleCBvZiB0aGUgY3VycmVudCBncm91cC5cbiAqIC0gYGV4cGFuZGVkYCZtZGFzaDtBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiB0aGUgZ3JvdXAgaXMgY3VycmVudGx5IGV4cGFuZGVkLlxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBncm91cGFibGVfZ3JpZF93aXRoX2FnZ3JlZ2F0ZXMgJX0pKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tZGF0YS1xdWVyeSc7XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFtncm91cF09XCJncm91cHNcIj5cbiAqICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+XG4gKiAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEdyb3VwSGVhZGVyVGVtcGxhdGUgbGV0LWdyb3VwIGxldC1maWVsZD1cImZpZWxkXCIgbGV0LXZhbHVlPVwidmFsdWVcIj5cbiAqICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7ZmllbGR9fTwvc3Ryb25nPjoge3t2YWx1ZX19XG4gKiAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyb3VwcyA9IFt7IGZpZWxkOiBcIlByb2R1Y3ROYW1lXCIgfV07XG4gKlxuICogICAgIHB1YmxpYyBncmlkRGF0YSA9IHByb2Nlc3MoW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdLCB7XG4gKiAgICAgIGdyb3VwOiB0aGlzLmdyb3Vwc1xuICogICAgIH0pO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEdyb3VwSGVhZGVyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Hcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgZ3JvdXAtaGVhZGVyIGNvbHVtbiB0ZW1wbGF0ZSBvZiB0aGUgR3JpZCB3aGljaCBoZWxwcyB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGdyb3VwIGhlYWRlcnMuXG4gKiBUbyBkZWZpbmUgdGhlIGdyb3VwIGhlYWRlciB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb0dyaWRHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlYFxuICogZGlyZWN0aXZlIGluc2lkZSBgPGtlbmRvLWdyaWQtY29sdW1uPmAuIChbU2VlIGV4YW1wbGVdKHslIHNsdWcgZ3JvdXBhYmxlX2dyaWRfd2l0aF9hZ2dyZWdhdGVzICV9KSkuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGEgaXRlbSBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZpZWxkcyBhcmUgcGFzc2VkOlxuICogLSBgZ3JvdXBgJm1kYXNoO1RoZSBjdXJyZW50IGdyb3VwIGl0ZW0uXG4gKiAtIGBmaWVsZGAmbWRhc2g7VGhlIG5hbWUgb2YgdGhlIGZpZWxkIGJ5IHdoaWNoIGRhdGEgaXMgZ3JvdXBlZC5cbiAqIC0gYHZhbHVlYCZtZGFzaDtUaGUgY3VycmVudCBncm91cCB2YWx1ZS5cbiAqIC0gYGFnZ3JlZ2F0ZXNgJm1kYXNoO0FsbCBhZ2dyZWdhdGUgdmFsdWVzIGZvciB0aGUgY3VycmVudCBncm91cC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZSBsZXQtZ3JvdXA9XCJncm91cFwiIGxldC1hZ2dyZWdhdGVzPVwiYWdncmVnYXRlc1wiPlxuICogICAgICAgICA8c3BhbiB0aXRsZT1cIkdyb3VwIEhlYWRlciBDb2x1bW4gVGVtcGxhdGUgZm9yIFByb2R1Y3ROYW1lXCI+XG4gKiAgICAgICAgICAgICBDb3VudDoge3sgYWdncmVnYXRlcy5EaXNjb250aW51ZWQuY291bnQgfX1cbiAqICAgICAgICAgPC9zcGFuPlxuICogICAgIDwvbmctdGVtcGxhdGU+XG4gKiA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogYGBgXG4gKi9cbmNsYXNzIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Hcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkR3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb2x1bW4gZWRpdC1jZWxsIHRlbXBsYXRlIG9mIHRoZSBHcmlkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9KSkuXG4gKiBIZWxwcyB0byBjdXN0b21pemUgdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRlZCBjZWxscy4gVG8gZGVmaW5lIHRoZSBjZWxsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YFxuICogdGFnIHdpdGggdGhlIGBrZW5kb0dyaWRFZGl0VGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgYSBgPGtlbmRvLWdyaWQtY29sdW1uPmAgdGFnLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogLSBgZm9ybUdyb3VwYCZtZGFzaDtUaGUgY3VycmVudCBbYEZvcm1Hcm91cGBdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ2Zvcm1ncm91cGFwaSddIH19KS5cbiAqIElmIHlvdSB1c2UgdGhlIEdyaWQgaW5zaWRlIFtUZW1wbGF0ZS1Ecml2ZW4gRm9ybXNdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ2Zvcm1zJ10gfX0pLCBpdCB3aWxsIGJlIGB1bmRlZmluZWRgLlxuICogLSBgcm93SW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgcm93IGluZGV4LiBJZiBpbnNpZGUgYSBuZXcgaXRlbSByb3csIGByb3dJbmRleGAgaXMgYC0xYC5cbiAqIC0gYGRhdGFJdGVtYCZtZGFzaDtUaGUgY3VycmVudCBkYXRhIGl0ZW0uXG4gKiAtIGBjb2x1bW5gJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBpbnN0YW5jZS5cbiAqIC0gYGlzTmV3YCZtZGFzaDtUaGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaXRlbS5cbiAqL1xuY2xhc3MgRWRpdFRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuRWRpdFRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRWRpdFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRWRpdFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29sdW1uIGdyb3VwIGZvb3RlciBjZWxsIHRlbXBsYXRlIG9mIHRoZSBHcmlkIHdoaWNoIGhlbHBzIHRvIGN1c3RvbWl6ZSB0aGUgZ3JvdXAgZm9vdGVyIGNlbGwgZm9yIHRoZSBjb2x1bW4uXG4gKiBUbyBkZWZpbmUgdGhlIGdyb3VwIGZvb3RlciB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb0dyaWRHcm91cEZvb3RlclRlbXBsYXRlYCBkaXJlY3RpdmVcbiAqIGluc2lkZSBgPGtlbmRvLWdyaWQtY29sdW1uPmAuXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGFnZ3JlZ2F0ZXMgYW5kIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBmaWVsZHMgYXJlIHBhc3NlZDpcbiAqIC0gYGNvbHVtbmAmbWRhc2g7RGVmaW5lcyBhbiBpbnN0YW5jZSBvZiB0aGUgYENvbHVtbkNvbXBvbmVudGAgb3B0aW9uLlxuICogLSBgZmllbGRgJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBmaWVsZCBuYW1lLlxuICogLSBgZ3JvdXBgJm1kYXNoO1RoZSBjdXJyZW50IGdyb3VwIGRhdGEgaXRlbS5cbiAqIC0gYGFnZ3JlZ2F0ZXNgJm1kYXNoO0FsbCBhZ2dyZWdhdGUgdmFsdWVzIGZvciB0aGUgY3VycmVudCBncm91cC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICogaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1kYXRhLXF1ZXJ5JztcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW2dyb3VwXT1cImdyb3Vwc1wiPlxuICogICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkR3JvdXBGb290ZXJUZW1wbGF0ZSBsZXQtYWdncmVnYXRlcyBsZXQtZmllbGQ9XCJmaWVsZFwiPlxuICogICAgICAgICAgICAgICAgICAgIENvdW50OiB7e2FnZ3JlZ2F0ZXNbZmllbGRdLmNvdW50fX1cbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZ3JvdXBzID0gW3sgZmllbGQ6IFwiUHJvZHVjdE5hbWVcIiwgYWdncmVnYXRlczogW3sgZmllbGQ6IFwiUHJvZHVjdE5hbWVcIiwgYWdncmVnYXRlOiBcImNvdW50XCIgfV0gfV07XG4gKlxuICogICAgIHB1YmxpYyBncmlkRGF0YSA9IHByb2Nlc3MoW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdLCB7XG4gKiAgICAgIGdyb3VwOiB0aGlzLmdyb3Vwc1xuICogICAgIH0pO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Hcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkR3JvdXBGb290ZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb2x1bW4gaGVhZGVyIGNlbGwgdGVtcGxhdGUgb2YgdGhlIEdyaWRcbiAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyB0ZW1wbGF0ZXNfY29sdW1uc19ncmlkICV9I3RvYy1oZWFkZXItdGVtcGxhdGUpKS5cbiAqIEhlbHBzIHRvIGN1c3RvbWl6ZSB0aGUgdGFibGUgaGVhZGVyIGNlbGwgZm9yIHRoZSBjb2x1bW4uXG4gKiBUbyBkZWZpbmUgYSBoZWFkZXIgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZVxuICogW2BrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfaGVhZGVydGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tZ3JpZC1jb2x1bW4+YCB0YWcuXG4gKlxuICogIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHNldCB0byB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZpZWxkcyBhcmUgcGFzc2VkOlxuICogKiBgY29sdW1uYCZtZGFzaDtEZWZpbmVzIGFuIGluc3RhbmNlIG9mIHRoZSBbYENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1uY29tcG9uZW50ICV9KSBvcHRpb24uXG4gKiAqIGBjb2x1bW5JbmRleGAmbWRhc2g7RGVmaW5lcyB0aGUgY3VycmVudCBjb2x1bW4gaW5kZXguXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCI+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCI+XG4gKiAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5maWVsZH19KHt7Y29sdW1uSW5kZXh9fSlcbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkSGVhZGVyVGVtcGxhdGUgbGV0LWNvbHVtbiBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiPlxuICogICAgICAgICAgICAgICAgICAge3tjb2x1bW4uZmllbGR9fSh7e2NvbHVtbkluZGV4fX0pXG4gKiAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkSGVhZGVyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5IZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbiBmb290ZXIgY2VsbCB0ZW1wbGF0ZSBvZiB0aGUgR3JpZFxuICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlXSh7JSBzbHVnIHRlbXBsYXRlc19jb2x1bW5zX2dyaWQgJX0jdG9jLWZvb3Rlci10ZW1wbGF0ZSkpLlxuICogSGVscHMgdG8gY3VzdG9taXplIHRoZSB0YWJsZSBmb290ZXIgY2VsbCBmb3IgdGhlIGNvbHVtbi5cbiAqIFRvIGRlZmluZSBhIGZvb3RlciB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlXG4gKiBbYGtlbmRvR3JpZEZvb3RlclRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9mb290ZXJ0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlIGluc2lkZSB0aGUgYDxrZW5kby1ncmlkLWNvbHVtbj5gIHRhZy5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAqIGBjb2x1bW5gJm1kYXNoO0RlZmluZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFtgQ29sdW1uQ29tcG9uZW50YF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5jb21wb25lbnQgJX0pIG9wdGlvbi5cbiAqICogYGNvbHVtbkluZGV4YCZtZGFzaDtEZWZpbmVzIHRoZSBjdXJyZW50IGNvbHVtbiBpbmRleC5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGlzcGxheSBhZ2dyZWdhdGVzIGluIHRoZSBmb290ZXIgb2YgdGhlIEdyaWQsXG4gKiByZWZlciB0byB0aGUgYXJ0aWNsZSBvbiBbYWdncmVnYXRlc10oeyUgc2x1ZyBncm91cGFibGVfZ3JpZF93aXRoX2FnZ3JlZ2F0ZXMgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIHNjcm9sbGFibGU9XCJub25lXCI+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGb290ZXJUZW1wbGF0ZSBsZXQtY29sdW1uIGxldC1jb2x1bW5JbmRleD1cImNvbHVtbkluZGV4XCI+XG4gKiAgICAgICAgICAgICAgICAgICB7e2NvbHVtbi5maWVsZH19KHt7Y29sdW1uSW5kZXh9fSlcbiAqICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRm9vdGVyVGVtcGxhdGUgbGV0LWNvbHVtbiBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiPlxuICogICAgICAgICAgICAgICAgICAge3tjb2x1bW4uZmllbGR9fSh7e2NvbHVtbkluZGV4fX0pXG4gKiAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRm9vdGVyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Gb290ZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBjb2x1bW4gbWVudSBpbiB0aGUgR3JpZC4gUHJvdmlkZXMgYW4gb3B0aW9uIGZvclxuICogY3VzdG9taXppbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbHVtbiBtZW51IGZvciBhbGwgb3IgZm9yIHNwZWNpZmljIGNvbHVtbnMuXG4gKiBUbyBkZWZpbmUgdGhlIGNvbnRlbnQgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZVxuICogYGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSB0aGUgYGtlbmRvLWdyaWRgIG9yIHRoZSBgPGtlbmRvLWdyaWQtY29sdW1uPmAgY29tcG9uZW50LlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IGlzIHBhc3NlcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogLSBgc2VydmljZWAmbWRhc2g7UmVwcmVzZW50cyB0aGUgW0NvbHVtbk1lbnVTZXJ2aWNlXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnVzZXJ2aWNlICV9KS5cbiAqIC0gYGNvbHVtbmAmbWRhc2g7UmVwcmVzZW50cyB0aGUgR3JpZCBjb2x1bW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBba2VuZG9HcmlkQmluZGluZ109XCJkYXRhXCIgW3NvcnRhYmxlXT1cInRydWVcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydCBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydD5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDFcIiBbd2lkdGhdPVwiMTAwXCI+XG4gKiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrIFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtbG9jaz5cbiAqICAgICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0IFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydD5cbiAqICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiIFt3aWR0aF09XCIxMDBcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IGFueVtdID0gW3sgRmllbGQxOiAnRm9vJywgRmllbGQyOiAnQmFyJyB9LCB7IEZpZWxkMTogJ0ZvbzEnLCBGaWVsZDI6ICdCYXIxJyB9XTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1NwYW5Db2x1bW4gPSBjb2x1bW4gPT4gY29sdW1uLmlzU3BhbkNvbHVtbjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc0NoZWNrYm94Q29sdW1uID0gY29sdW1uID0+IGNvbHVtbi5pc0NoZWNrYm94Q29sdW1uO1xuY29uc3QgaXNDb2x1bW5Db250YWluZXIgPSBjb2x1bW4gPT4gY29sdW1uLmlzQ29sdW1uR3JvdXAgfHwgaXNTcGFuQ29sdW1uKGNvbHVtbik7XG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciB0aGUgY29sdW1uIGNvbXBvbmVudHMgb2YgdGhlIEdyaWQuXG4gKi9cbmNsYXNzIENvbHVtbkJhc2UkMSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXRjaGVzTWVkaWEgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGNvbHVtbiBpbmRleCBhZnRlciByZW9yZGVyaW5nLlxuICAgICAgICAgKlxuICAgICAgICAgKiA+IGBvcmRlckluZGV4YCBpcyBhIHJlYWQtb25seSBwcm9wZXJ0eS4gU2V0dGluZyB0aGlzIGZpZWxkIGRvZXMgbm90IGFmZmVjdCBjb2x1bW4gb3JkZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9yZGVySW5kZXggPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0NvbHVtbkdyb3VwID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzU3BhbkNvbHVtbiA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyByZXNpemFibGUuXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVzaXphYmxlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gaXMgcmVvcmRlcmFibGUuXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVvcmRlcmFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHdpZHRoIChpbiBwaXhlbHMpIGJlbG93IHdoaWNoIHRoZSB1c2VyIGlzIG5vdCBhYmxlIHRvIHJlc2l6ZSB0aGUgY29sdW1uIGJ5IHVzaW5nIHRoZSBVSS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWluUmVzaXphYmxlV2lkdGggPSAxMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRvZ2dsZXMgdGhlIGxvY2tlZCAoZnJvemVuKSBzdGF0ZSBvZiB0aGUgY29sdW1ucyAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgbG9ja2VkX2NvbHVtbnNfZ3JpZCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBgYGB0c1xuICAgICAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgICAgICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCIgW3Njcm9sbGFibGVdPVwic2Nyb2xsYWJsZVwiIHN0eWxlPVwiaGVpZ2h0OiAyMDBweFwiPlxuICAgICAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiIFtsb2NrZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCIgd2lkdGg9XCIyMDBcIj5cbiAgICAgICAgICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgICAgICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgdGl0bGU9XCJVbml0IFByaWNlXCIgd2lkdGg9XCIyMzBcIj5cbiAgICAgICAgICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgICAgICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgICAgICogICAgYFxuICAgICAgICAgKiB9KVxuICAgICAgICAgKlxuICAgICAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAgICAgKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9kdWN0cztcbiAgICAgICAgICogICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAgICAgICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAgICAgKiAgfSwge1xuICAgICAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgICAgICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAgICAgICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgICAgICogIH1cbiAgICAgICAgICogXTtcbiAgICAgICAgICpcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBjb2x1bW4gY2FuIGJlIGxvY2tlZCBvciB1bmxvY2tlZCBmcm9tIHRoZSBjb2x1bW4gbWVudSBvciBieSByZW9yZGVyaW5nIHRoZSBjb2x1bW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb2NrYWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiBtZW51IHdpbGwgYmUgc2hvd24gZm9yIHRoZSBjb2x1bW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbHVtbk1lbnUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBjb2x1bW4gd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgY29sdW1uLWNob29zZXIgbGlzdC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jbHVkZUluQ2hvb3NlciA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhlYWRlclRlbXBsYXRlcyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1uTWVudVRlbXBsYXRlcyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgaWYgKHBhcmVudCAmJiAhaXNDb2x1bW5Db250YWluZXIocGFyZW50KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbiBiZSBuZXN0ZWQgb25seSBpbnNpZGUgQ29sdW1uR3JvdXBDb21wb25lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgd2lkdGggb2YgdGhlIGNvbHVtbiAoaW4gcGl4ZWxzKS5cbiAgICAgKi9cbiAgICBzZXQgd2lkdGgodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fd2lkdGggPSBwYXJzZUludCh2YWx1ZSwgMTApO1xuICAgIH1cbiAgICBnZXQgd2lkdGgoKSB7IHJldHVybiB0aGlzLl93aWR0aDsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiBpc1NwYW5Db2x1bW4odGhpcy5wYXJlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQubGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQubGV2ZWwgKyAxIDogMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc0xvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQuaXNMb2NrZWQgOiB0aGlzLmxvY2tlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb2xzcGFuKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJvd3NwYW4odG90YWxDb2x1bW5MZXZlbHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGV2ZWwgPCB0b3RhbENvbHVtbkxldmVscyA/ICh0b3RhbENvbHVtbkxldmVscyAtIHRoaXMubGV2ZWwpICsgMSA6IDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGVhZGVyVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5oZWFkZXJUZW1wbGF0ZXMuZmlyc3Q7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSA/IHRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGZvb3RlclRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb290ZXJUZW1wbGF0ZSA/IHRoaXMuZm9vdGVyVGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29sdW1uTWVudVRlbXBsYXRlUmVmKCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuY29sdW1uTWVudVRlbXBsYXRlcy5maXJzdDtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlID8gdGVtcGxhdGUudGVtcGxhdGVSZWYgOiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGRpc3BsYXlUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaXNWaXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaGlkZGVuICYmIHRoaXMubWF0Y2hlc01lZGlhO1xuICAgIH1cbn1cbkNvbHVtbkJhc2UkMS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICByZXNpemFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlb3JkZXJhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW5SZXNpemFibGVXaWR0aDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGl0bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRvU2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9ja2VkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoaWRkZW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1lZGlhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5jbHVkZUluQ2hvb3NlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3R5bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhlYWRlclN0eWxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb290ZXJTdHlsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3NzQ2xhc3M6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2NsYXNzJyxdIH1dLFxuICAgIGhlYWRlckNsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb290ZXJDbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyVGVtcGxhdGVzOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSxdIH1dLFxuICAgIGZvb3RlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGNvbHVtbk1lbnVUZW1wbGF0ZXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbk1lbnVUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGZpbHRlci1jZWxsIHRlbXBsYXRlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLWN1c3RvbWl6aW5nLWZpbHRlci1yb3dzKSkuXG4gKi9cbmNsYXNzIEZpbHRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkZpbHRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGZpbHRlci1tZW51IHRlbXBsYXRlXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1jdXN0b21pemluZy1maWx0ZXItbWVudXMpKS5cbiAqL1xuY2xhc3MgRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRmlsdGVyTWVudVRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBpc0NvbHVtbkNvbXBvbmVudChjb2x1bW4pIHtcbiAgICByZXR1cm4gaXNQcmVzZW50KGNvbHVtbi5maWVsZCk7XG59XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbnMgb2YgdGhlIFtBbmd1bGFyIERhdGEgR3JpZF0oeyUgc2x1ZyBvdmVydmlld19ncmlkICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiIHRpdGxlPVwiUHJvZHVjdCBJRFwiIHdpZHRoPVwiMTIwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiVW5pdCBQcmljZVwiIHdpZHRoPVwiMjMwXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRGlzY29udGludWVkXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImRhdGFJdGVtLkRpc2NvbnRpbnVlZFwiIGRpc2FibGVkLz5cbiAqICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdO1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9kdWN0cztcbiAqICAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgfSwge1xuICogICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29sdW1uQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uQmFzZSQxIHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQpIHtcbiAgICAgICAgc3VwZXIocGFyZW50KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFsbG93cyB0aGUgY29sdW1uIGhlYWRlcnMgdG8gYmUgY2xpY2tlZCBhbmQgdGhlIGBzb3J0Q2hhbmdlYCBldmVudCBlbWl0dGVkLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGBzb3J0Q2hhbmdlYCBldmVudCB5b3Vyc2VsZiBhbmQgc29ydCB0aGUgZGF0YS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgY29sdW1uIGNhbiBiZSBkcmFnZ2VkIHRvIHRoZSBncm91cCBwYW5lbC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYHRydWVgLlxuICAgICAgICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgeW91IGNhbiBncm91cCB0aGUgY29sdW1ucyBieSB0aGUgY29sdW1uIGZpZWxkIGJ5IHVzaW5nIHRoZSBBUEkgb2YgdGhlIEdyaWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwYWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBlZGl0b3IgdHlwZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfcmVhY3RpdmVfZm9ybXNfZ3JpZCAlfSN0b2Mtc2V0dXApKS5cbiAgICAgICAgICogVXNlZCB3aGVuIHRoZSBjb2x1bW4gZW50ZXJzIHRoZSBlZGl0IG1vZGUuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0ZXh0YC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgaHRtbC1uby1ydW5cbiAgICAgICAgICogPGtlbmRvLWdyaWQ+XG4gICAgICAgICAqICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIGVkaXRvcj1cIm51bWVyaWNcIj5cbiAgICAgICAgICogICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgICAgICogPC9rZW5kby1ncmlkPlxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWRpdG9yID0gJ3RleHQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgZmlsdGVyIHR5cGUgdGhhdCBpcyBkaXNwbGF5ZWQgaW5zaWRlIHRoZSBmaWx0ZXIgcm93LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdGV4dGAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYGh0bWwtbm8tcnVuXG4gICAgICAgICAqIDxrZW5kby1ncmlkPlxuICAgICAgICAgKiAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiBmaWx0ZXI9XCJudW1lcmljXCI+XG4gICAgICAgICAqICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICAgICAqIDwva2VuZG8tZ3JpZD5cbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlciA9ICd0ZXh0JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgaWYgYSBmaWx0ZXIgVUkgd2lsbCBiZSBkaXNwbGF5ZWQgZm9yIHRoaXMgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYGh0bWwtbm8tcnVuXG4gICAgICAgICAqIDxrZW5kby1ncmlkPlxuICAgICAgICAgKiAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiBbZmlsdGVyYWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgKiAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAgICAgKiA8L2tlbmRvLWdyaWQ+XG4gICAgICAgICAqIGBgYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgY29sdW1uIGlzIGVkaXRhYmxlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGBgYGh0bWwtbm8tcnVuXG4gICAgICAgICAqIDxrZW5kby1ncmlkPlxuICAgICAgICAgKiAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiBbZWRpdGFibGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICogICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgICAgICogPC9rZW5kby1ncmlkPlxuICAgICAgICAgKiBgYGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWRpdGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy50ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGdyb3VwSGVhZGVyVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwSGVhZGVyVGVtcGxhdGUgPyB0aGlzLmdyb3VwSGVhZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBncm91cEhlYWRlckNvbHVtblRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlID8gdGhpcy5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgZ3JvdXBGb290ZXJUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBGb290ZXJUZW1wbGF0ZSA/IHRoaXMuZ3JvdXBGb290ZXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGVkaXRUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFRlbXBsYXRlID8gdGhpcy5lZGl0VGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBmaWx0ZXJDZWxsVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlckNlbGxUZW1wbGF0ZSA/IHRoaXMuZmlsdGVyQ2VsbFRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgZmlsdGVyTWVudVRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJNZW51VGVtcGxhdGUgPyB0aGlzLmZpbHRlck1lbnVUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGRpc3BsYXlUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGUgPT09IHVuZGVmaW5lZCA/IHRoaXMuZmllbGQgOiB0aGlzLnRpdGxlO1xuICAgIH1cbn1cbkNvbHVtbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDb2x1bW5CYXNlJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2x1bW5Db21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW4nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlJDEsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Db2x1bW5Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmllbGQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZWRpdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGVkaXRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbR3JvdXBIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0dyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBncm91cEZvb3RlclRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtHcm91cEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZWRpdFRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtFZGl0VGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBmaWx0ZXJDZWxsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0ZpbHRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGZpbHRlck1lbnVUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBpc1NwYW5Db2x1bW5Db21wb25lbnQoY29sdW1uKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5pc1NwYW5Db2x1bW47XG59XG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb2x1bW4gd2hpY2ggY2FuIGJlIHNwYW5uZWQgb3ZlciBtdWx0aXBsZSBkYXRhIGNlbGxzIHdoaWxlIHRoZSBpbmRpdmlkdWFsXG4gKiBoZWFkZXIgYW5kIGZvb3RlciBjZWxscyBhcmUgcmV0YWluZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzcGFubmVkX2NvbHVtbnNfZ3JpZCAlfSkpLlxuICogRW5hYmxlcyB5b3UgdG8gYWNoaWV2ZSBtb3JlIGZsZXhpYmxlIGxheW91dCB3aGlsZSBrZWVwaW5nIHRoZSBidWlsdC1pbiBVSSBlbGVtZW50IGZvclxuICogW3NvcnRpbmddKHslIHNsdWcgc29ydGluZ19ncmlkICV9KSwgW2ZpbHRlcmluZ10oeyUgc2x1ZyBmaWx0ZXJpbmdfZ3JpZCAlfSksIGFuZFxuICogW2dyb3VwaW5nXSh7JSBzbHVnIGdyb3VwaW5nYmFzaWNzX2dyaWQgJX0pLiBXcmFwIHRoZSBjb2x1bW5zIHRoYXQgd2lsbCBiZVxuICogbWVyZ2VkIGluc2lkZSB0aGUgYDxrZW5kby1ncmlkLXNwYW4tY29sdW1uPmAgdGFnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZ3JpZFxuICogICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJ0cnVlXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJ0cnVlXCJcbiAqICAgICAgICAgICAgICBba2VuZG9HcmlkQmluZGluZ109XCJwcm9kdWN0c1wiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCIgdGl0bGU9XCJQcm9kdWN0IElEXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1zcGFuLWNvbHVtbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlVuaXQgUHJpY2VcIiBmaWx0ZXI9XCJudW1lcmljXCIgd2lkdGg9XCIxODBcIiBmb3JtYXQ9XCJ7MDpjfVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJEaXNjb250aW51ZWRcIiB3aWR0aD1cIjEyMFwiIGZpbHRlcj1cImJvb2xlYW5cIj5cbiAqICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImRhdGFJdGVtLkRpc2NvbnRpbnVlZFwiIGRpc2FibGVkLz5cbiAqICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBwcm9kdWN0cyA9IFt7XG4gKiAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgIH0sIHtcbiAqICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgICB9XG4gKiAgIF07XG4gKiB9XG4gKlxuICogYGBgXG4gKlxuICogQnkgZGVmYXVsdCwgdGhlIGRhdGEgY2VsbCBkaXNwbGF5cyB0aGUgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBmaWVsZHMuIFRvIGZ1cnRoZXIgY3VzdG9taXplXG4gKiB0aGUgc3Bhbi1jb2x1bW4gZnVuY3Rpb25hbGl0eSwgdXNlIGEgW2NlbGwgdGVtcGxhdGVdKHslIHNsdWcgYXBpX2dyaWRfY2VsbHRlbXBsYXRlZGlyZWN0aXZlICV9KS5cbiAqXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+XG4gKiAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiZmllbGQxXCIgdGl0bGU9XCJGaWVsZCAxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJmaWVsZDJcIiB0aXRsZT1cIkZpZWxkIDJcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XG4gKiAgICAgICAgPGg1Pnt7IGRhdGFJdGVtLmZpZWxkMSB9fTwvaDU+XG4gKiAgICAgICAgPHA+e3sgZGF0YUl0ZW0uZmllbGQyIH19PC9wPlxuICogICAgPC9uZy10ZW1wbGF0ZT5cbiAqICA8L2tlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+XG4gKiBgYGBcbiAqL1xuY2xhc3MgU3BhbkNvbHVtbkNvbXBvbmVudCBleHRlbmRzIENvbHVtbkJhc2UkMSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIC8qXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaXNTcGFuQ29sdW1uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5lZGl0VGVtcGxhdGUgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNoaWxkQ29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jbHVkZUluQ2hvb3NlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9lZGl0YWJsZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xvY2tlZCA9IGZhbHNlO1xuICAgICAgICBpZiAocGFyZW50ICYmIHBhcmVudC5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3BhbkNvbHVtbiBjYW5ub3QgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIFNwYW5Db2x1bW4nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIGVkaXQgdGVtcGxhdGUgb2YgdGhlIGNvbHVtbiB3aWxsIGJlIHJlbmRlcmVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgLlxuICAgICAqXG4gICAgICogPiBUbyBlbmFibGUgdGhlIGVkaXRpbmcgZnVuY3Rpb25hbGl0eSBmb3IgYSBzcGFubmVkIGNvbHVtbiwgc2V0IGFuIGVkaXQgdGVtcGxhdGUgZm9yIGl0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sLW5vLXJ1blxuICAgICAqIDxrZW5kby1ncmlkPlxuICAgICAqICAgIDxrZW5kby1ncmlkLXNwYW4tY29sdW1uIFtlZGl0YWJsZV09XCJmYWxzZVwiPlxuICAgICAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCI+XG4gICAgICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj5cbiAgICAgKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRWRpdFRlbXBsYXRlPlxuICAgICAqICAgICAgICAgLi4uLi5cbiAgICAgKiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogICAgPC9rZW5kby1ncmlkLXNwYW4tY29sdW1uPlxuICAgICAqIDwva2VuZG8tZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzZXQgZWRpdGFibGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZWRpdGFibGUgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGVkaXRhYmxlKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuZWRpdFRlbXBsYXRlUmVmKSAmJiB0aGlzLl9lZGl0YWJsZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIGFkZGVkIGZvciBiYWNrd2FyZHMgY29tcGl0YWJpbGl0eVxuICAgICAqL1xuICAgIHNldCB3aWR0aChfdmFsdWUpIHtcbiAgICB9XG4gICAgZ2V0IHdpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbHVtbnMucmVkdWNlKCh0b3RhbCwgY29sdW1uKSA9PiB0b3RhbCArIGNvbHVtbi53aWR0aCwgMCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgbGVhZkluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbHVtbnMuZmlyc3QubGVhZkluZGV4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHRlbXBsYXRlUmVmKCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGUuZmlyc3Q7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZSA/IHRlbXBsYXRlLnRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGVkaXRUZW1wbGF0ZVJlZigpIHtcbiAgICAgICAgY29uc3QgZWRpdFRlbXBsYXRlID0gdGhpcy5lZGl0VGVtcGxhdGUuZmlyc3Q7XG4gICAgICAgIHJldHVybiBlZGl0VGVtcGxhdGUgPyBlZGl0VGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29sc3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRDb2x1bW5zLmZpbHRlcihjID0+IGMuaXNWaXNpYmxlKS5sZW5ndGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGxvY2tlZCAoZnJvemVuKSBzdGF0ZSBvZiB0aGUgY29sdW1ucy4gTG9ja2VkIGNvbHVtbnMgYXJlIHZpc2libGVcbiAgICAgKiBhdCBhbGwgdGltZXMgZHVyaW5nIHRoZSBob3Jpem9udGFsIHNjcm9sbGluZyBvZiB0aGUgR3JpZC5cbiAgICAgKlxuICAgICAqIEZvciB0aGUgb3B0aW9uIHRvIHdvcmsgcHJvcGVybHksIG1ha2Ugc3VyZSB0aGF0OlxuICAgICAqIC0gU2Nyb2xsaW5nIGlzIGVuYWJsZWQuXG4gICAgICogLSBUaGUgYGhlaWdodGAgb3B0aW9uIG9mIHRoZSBHcmlkIGlzIHNldC5cbiAgICAgKiAtIFRoZSB3aWR0aHMgb2YgYWxsIEdyaWQgY29sdW1ucyBhcmUgZXhwbGljaXRseSBzZXQgaW4gcGl4ZWxzLiBJbiB0aGlzIHdheSxcbiAgICAgKiB0aGUgR3JpZCBhZGp1c3RzIHRoZSBsYXlvdXQgb2YgdGhlIGxvY2tlZCBhbmQgdW5sb2NrZWQgY29sdW1ucy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFtzY3JvbGxhYmxlXT1cInNjcm9sbGFibGVcIiBzdHlsZT1cImhlaWdodDogMjAwcHhcIj5cbiAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1zcGFuLWNvbHVtbiBbbG9ja2VkXT1cInRydWVcIj5cbiAgICAgKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICAgICAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiIHdpZHRoPVwiMjAwXCI+XG4gICAgICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtc3Bhbi1jb2x1bW4+XG4gICAgICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgdGl0bGU9XCJVbml0IFByaWNlXCIgd2lkdGg9XCIyMzBcIj5cbiAgICAgKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gICAgICogICAgYFxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W107XG4gICAgICpcbiAgICAgKiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgKiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2R1Y3RzO1xuICAgICAqICAgIH1cbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAqICB9LCB7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMixcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBdO1xuICAgICAqXG4gICAgICogYGBgXG4gICAgICovXG4gICAgc2V0IGxvY2tlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9sb2NrZWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGxvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2tlZCB8fCB0aGlzLmNoaWxkQ29sdW1ucy5zb21lKGMgPT4gYy5sb2NrZWQpO1xuICAgIH1cbiAgICBnZXQgY2hpbGRyZW5BcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRDb2x1bW5zLnRvQXJyYXkoKTtcbiAgICB9XG4gICAgZ2V0IGhhc0NoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICB9XG59XG5TcGFuQ29sdW1uQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IENvbHVtbkJhc2UkMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNwYW5Db2x1bW5Db21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1zcGFuLWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNwYW5Db2x1bW5Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBDb2x1bW5CYXNlJDEsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5TcGFuQ29sdW1uQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDZWxsVGVtcGxhdGVEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0sXSB9XSxcbiAgICBlZGl0VGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0VkaXRUZW1wbGF0ZURpcmVjdGl2ZSwgeyBkZXNjZW5kYW50czogZmFsc2UgfSxdIH1dLFxuICAgIGNoaWxkQ29sdW1uczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uQ29tcG9uZW50LF0gfV0sXG4gICAgZWRpdGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvY2tlZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBleHBhbmRDb2x1bW5zID0gKGNvbHVtbnMpID0+IChjb2x1bW5zLnJlZHVjZSgoYWNjLCBjb2x1bW4pID0+IGFjYy5jb25jYXQoaXNTcGFuQ29sdW1uQ29tcG9uZW50KGNvbHVtbikgPyBjb2x1bW4uY2hpbGRyZW5BcnJheSA6IFtjb2x1bW5dKSwgW10pIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZXhwYW5kQ29sdW1uc1dpdGhTcGFuID0gKGNvbHVtbnMpID0+IChjb2x1bW5zLnJlZHVjZSgoYWNjLCBjb2x1bW4pID0+IGFjYy5jb25jYXQoaXNTcGFuQ29sdW1uQ29tcG9uZW50KGNvbHVtbikgP1xuICAgIFtjb2x1bW5dLmNvbmNhdChjb2x1bW4uY2hpbGRyZW5BcnJheSkgOlxuICAgIFtjb2x1bW5dKSwgW10pIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY29sdW1uc1RvUmVuZGVyID0gKGNvbHVtbnMpID0+IChleHBhbmRDb2x1bW5zKGNvbHVtbnMpLmZpbHRlcih4ID0+IHguaXNWaXNpYmxlKSk7XG5jb25zdCBzdW1Qcm9wID0gKHByb3ApID0+IChhcnJheSkgPT4gKGFycmF5IHx8IFtdKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyAoY3Vycltwcm9wXSB8fCAwKSwgMCk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc3VtQ29sdW1uV2lkdGhzID0gc3VtUHJvcCgnd2lkdGgnKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb2x1bW5zU3BhbiA9IHN1bVByb3AoJ2NvbHNwYW4nKTtcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmNvbnN0IHZhbGlkRmllbGQgPSBuZXcgUmVnRXhwKGBeWyRBLVpcXF9hLXpdWyRBLVpcXF9hLXowLTlcXFxcLl0qJGApO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzVmFsaWRGaWVsZE5hbWUgPSAoZmllbGROYW1lKSA9PiAhaXNOdWxsT3JFbXB0eVN0cmluZyhmaWVsZE5hbWUpICYmIHZhbGlkRmllbGQudGVzdChmaWVsZE5hbWUpICYmXG4gICAgZmllbGROYW1lWzBdICE9PSBcIi5cIiAmJiBmaWVsZE5hbWVbZmllbGROYW1lLmxlbmd0aCAtIDFdICE9PSBcIi5cIjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjaGlsZHJlbiA9IGNvbHVtbiA9PiBjb2x1bW4uY2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IGNoaWxkICE9PSBjb2x1bW4pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGxlYWZDb2x1bW5zID0gY29sdW1ucyA9PiB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKChhY2MsIGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmlzQ29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQobGVhZkNvbHVtbnMoY2hpbGRyZW4oY29sdW1uKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbHVtbi5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoY29sdW1uLmNoaWxkcmVuQXJyYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWNjLnB1c2goY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKS5maWx0ZXIoeCA9PiB4LmlzVmlzaWJsZSk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgc29tZUxlYWZDb2x1bW4gPSAoY2FsbGJhY2ssIC4uLmNvbHVtbnMpID0+IGxlYWZDb2x1bW5zKGNvbHVtbnMpLnNvbWUoY2FsbGJhY2spO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJlc2l6YWJsZUNvbHVtbnMgPSBjb2x1bW5zID0+IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBpc1RydXRoeShjb2x1bW4ucmVzaXphYmxlKSAmJiBjb2x1bW4uaXNWaXNpYmxlKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzb3J0Q29sdW1ucyA9IChjb2x1bW5zKSA9PiBvcmRlckJ5KGNvbHVtbnMsIFt7IGZpZWxkOiAnb3JkZXJJbmRleCcsIGRpcjogJ2FzYycgfV0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzSW5TcGFuQ29sdW1uID0gKGNvbHVtbikgPT4gaXNUcnV0aHkoY29sdW1uLnBhcmVudCkgJiYgaXNTcGFuQ29sdW1uQ29tcG9uZW50KGNvbHVtbi5wYXJlbnQpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pIHtcbiAgICByZXR1cm4gY29sdW1uLmlzQ29sdW1uR3JvdXA7XG59XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbHVtbiBncm91cCBoZWFkZXIgb2YgdGhlIEdyaWRcbiAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXNdKHslIHNsdWcgbXVsdGljb2x1bW5oZWFkZXJzX2NvbHVtbnNfZ3JpZCAlfSkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiPlxuICogICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLWdyb3VwIHRpdGxlPVwiUHJvZHVjdCBJbmZvXCI+XG4gKiAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRIZWFkZXJUZW1wbGF0ZSBsZXQtY29sdW1uSW5kZXg9XCJjb2x1bW5JbmRleFwiIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAqICAgICAgICAgICAgICAgQ29sdW1uIGluZGV4OiB7e2NvbHVtbkluZGV4fX0gLyBjb2x1bW4gdGl0bGU6IHt7Y29sdW1uLnRpdGxlfX1cbiAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCIgdGl0bGU9XCJQcm9kdWN0IElEXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbi1ncm91cD5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiIHRpdGxlPVwiVW5pdCBQcmljZVwiIHdpZHRoPVwiMjMwXCI+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRGlzY29udGludWVkXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cImRhdGFJdGVtLkRpc2NvbnRpbnVlZFwiIGRpc2FibGVkLz5cbiAqICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdO1xuICpcbiAqICAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgICAgIHRoaXMuZ3JpZERhdGEgPSBwcm9kdWN0cztcbiAqICAgIH1cbiAqIH1cbiAqXG4gKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgfSwge1xuICogICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgfVxuICogXTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29sdW1uR3JvdXBDb21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlJDEge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgICAgICBzdXBlcihwYXJlbnQpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaW5jbHVkZUluQ2hvb3NlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pc0NvbHVtbkdyb3VwID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWluUmVzaXphYmxlV2lkdGggPSAxMDtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbkdyb3VwQ29tcG9uZW50IGNhbm5vdCBiZSBuZXN0ZWQgaW5zaWRlIFNwYW5Db2x1bW5Db21wb25lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcm93c3BhbigpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY29sc3BhbigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sdW1uc1NwYW4odGhpcy5jaGlsZHJlblxuICAgICAgICAgICAgLmZpbHRlcihjaGlsZCA9PiBjaGlsZCAhPT0gdGhpcyAmJiBjaGlsZC5pc1Zpc2libGUpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBsZWFmSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuID8gKHRoaXMuZmlyc3RDaGlsZCB8fCB7fSkubGVhZkluZGV4IDogLTE7XG4gICAgfVxuICAgIGdldCBjaGlsZHJlbkFycmF5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjICE9PSB0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGhhc0NoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLmZpcnN0Q2hpbGQpO1xuICAgIH1cbiAgICBnZXQgZmlyc3RDaGlsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChjb2x1bW4gPT4gY29sdW1uICE9PSB0aGlzKTtcbiAgICB9XG59XG5Db2x1bW5Hcm91cENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDb2x1bW5CYXNlJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb2x1bW5Hcm91cENvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbi1ncm91cCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkdyb3VwQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29sdW1uQmFzZSQxLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9LCB7IHR5cGU6IEhvc3QgfSwgeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuQ29sdW1uR3JvdXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2hpbGRyZW46IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbkJhc2UkMSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGRldGFpbCB0ZW1wbGF0ZSBvZiB0aGUgR3JpZCAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzXSh7JSBzbHVnIGRldGFpbHJvd3RlbXBsYXRlX2dyaWQgJX0pKS5cbiAqIFRvIGRlZmluZSB0aGUgZGV0YWlsIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZERldGFpbFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGEgYDxrZW5kby1ncmlkPmAgdGFnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZFxuICogICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAqICAgICAgICAgc2VsZWN0YWJsZT1cInRydWVcIlxuICogICAgICAgICBzdHlsZT1cImhlaWdodDogMTYwcHhcIlxuICogICAgICAgICA+XG4gKiAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3RJRFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZERldGFpbFRlbXBsYXRlIGxldC1kYXRhSXRlbT5cbiAqICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YUl0ZW0uQ2F0ZWdvcnlcIj5cbiAqICAgICAgICAgICAgIDxoZWFkZXI+e3tkYXRhSXRlbS5DYXRlZ29yeT8uQ2F0ZWdvcnlOYW1lfX08L2hlYWRlcj5cbiAqICAgICAgICAgICAgIDxzcGFuPnt7ZGF0YUl0ZW0uQ2F0ZWdvcnk/LkRlc2NyaXB0aW9ufX08L3NwYW4+XG4gKiAgICAgICAgICAgPC9kaXY+XG4gKiAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgZGF0YSA9IFt7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlLFxuICogICAgICAgICBcIkNhdGVnb3J5XCI6IHtcbiAqICAgICAgICAgICAgIFwiQ2F0ZWdvcnlJRFwiOiAxLFxuICogICAgICAgICAgICAgXCJDYXRlZ29yeU5hbWVcIjogXCJCZXZlcmFnZXNcIixcbiAqICAgICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjogXCJTb2Z0IGRyaW5rcywgY29mZmVlcywgdGVhcywgYmVlcnMsIGFuZCBhbGVzXCJcbiAqICAgICAgICAgfVxuICogICAgICAgfSwge1xuICogICAgICAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2UsXG4gKiAgICAgICAgIFwiQ2F0ZWdvcnlcIjoge1xuICogICAgICAgICAgICAgXCJDYXRlZ29yeUlEXCI6IDEsXG4gKiAgICAgICAgICAgICBcIkNhdGVnb3J5TmFtZVwiOiBcIkJldmVyYWdlc1wiLFxuICogICAgICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiBcIlNvZnQgZHJpbmtzLCBjb2ZmZWVzLCB0ZWFzLCBiZWVycywgYW5kIGFsZXNcIlxuICogICAgICAgICB9XG4gKiAgICAgICB9LCB7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDMsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJBbmlzZWVkIFN5cnVwXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDEwLjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlLFxuICogICAgICAgICBcIkNhdGVnb3J5XCI6IHtcbiAqICAgICAgICAgICAgIFwiQ2F0ZWdvcnlJRFwiOiAyLFxuICogICAgICAgICAgICAgXCJDYXRlZ29yeU5hbWVcIjogXCJDb25kaW1lbnRzXCIsXG4gKiAgICAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IFwiU3dlZXQgYW5kIHNhdm9yeSBzYXVjZXMsIHJlbGlzaGVzLCBzcHJlYWRzLCBhbmQgc2Vhc29uaW5nc1wiXG4gKiAgICAgICAgIH1cbiAqICAgICB9XTtcbiAqXG4gKiB9XG4gKlxuICogYGBgXG4gKlxuICovXG5jbGFzcyBEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgICAgICB0aGlzLl9jb25kaXRpb24gPSAoKSA9PiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBmdW5jdGlvbiB0aGF0IGluZGljYXRlcyBpZiBhIGdpdmVuIGRldGFpbCByb3cgYW5kIHRoZSBhc3NvY2lhdGVkICoqRXhwYW5kKiogb3IgKipDb2xsYXBzZSoqIGJ1dHRvbiB3aWxsIGJlIGRpc3BsYXllZC5cbiAgICAgKi9cbiAgICBzZXQgc2hvd0lmKGZuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgc2hvd0lmIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZm4pfS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25kaXRpb24gPSBmbjtcbiAgICB9XG4gICAgZ2V0IHNob3dJZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbmRpdGlvbjtcbiAgICB9XG59XG5EZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZERldGFpbFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGV0YWlsVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcbkRldGFpbFRlbXBsYXRlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHNob3dJZjogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFtcImtlbmRvR3JpZERldGFpbFRlbXBsYXRlU2hvd0lmXCIsXSB9XVxufTtcblxuY29uc3QgY2FuQ3JlYXRlRWxlbWVudCA9ICgpID0+IGlzRG9jdW1lbnRBdmFpbGFibGUoKSAmJiBkb2N1bWVudC5jcmVhdGVFbGVtZW50O1xubGV0IGNhY2hlZFNjcm9sbGJhcldpZHRoID0gbnVsbDtcbmxldCBjYWNoZWRQaXhlbFJhdGlvO1xubGV0IGNhY2hlZFJ0bFNjcm9sbExlZnQgPSBudWxsO1xuZnVuY3Rpb24gc2Nyb2xsYmFyV2lkdGgoKSB7XG4gICAgaWYgKGNhY2hlZFNjcm9sbGJhcldpZHRoID09PSBudWxsICYmIGNhbkNyZWF0ZUVsZW1lbnQoKSkge1xuICAgICAgICBjYWNoZWRQaXhlbFJhdGlvID0gd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGl2LnN0eWxlLmNzc1RleHQgPSBcIm92ZXJmbG93OnNjcm9sbDtvdmVyZmxvdy14OmhpZGRlbjt6b29tOjE7Y2xlYXI6Ym90aDtkaXNwbGF5OmJsb2NrXCI7XG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSBcIiZuYnNwO1wiO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIGNhY2hlZFNjcm9sbGJhcldpZHRoID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LnNjcm9sbFdpZHRoO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gICAgfVxuICAgIHJldHVybiBjYWNoZWRTY3JvbGxiYXJXaWR0aDtcbn1cbmZ1bmN0aW9uIHJ0bFNjcm9sbExlZnQoKSB7XG4gICAgaWYgKGNhY2hlZFJ0bFNjcm9sbExlZnQgPT09IG51bGwgJiYgY2FuQ3JlYXRlRWxlbWVudCgpKSB7XG4gICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgIGRpdi5zdHlsZS5jc3NUZXh0ID0gXCJvdmVyZmxvdzpzY3JvbGw7em9vbToxO2NsZWFyOmJvdGg7ZGlzcGxheTpibG9jazt3aWR0aDoxMDBweDt2aXNpYmlsaXR5OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAwMHB4O2RpcmVjdGlvbjpydGw7XCI7XG4gICAgICAgIGRpdi5pbm5lckhUTUwgPSBcIjxkaXYgc3R5bGU9J3dpZHRoOjIwMHB4O2hlaWdodDoxcHg7JzwvZGl2PlwiO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSBkaXYuc2Nyb2xsTGVmdDtcbiAgICAgICAgZGl2LnNjcm9sbExlZnQgPSAtMTtcbiAgICAgICAgY2FjaGVkUnRsU2Nyb2xsTGVmdCA9IGRpdi5zY3JvbGxMZWZ0IDwgMCA/IGRpdi5zY3JvbGxMZWZ0IDogaW5pdGlhbDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkUnRsU2Nyb2xsTGVmdDtcbn1cbi8qKlxuICogQGhpZGRlblxuICogbW92ZSB0byBrZW5kby1jb21tb25cbiAqL1xuY2xhc3MgQnJvd3NlclN1cHBvcnRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih6b25lLCBjaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKGF1ZGl0VGltZSgxMDApKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRQaXhlbFJhdGlvICE9PSB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbykge1xuICAgICAgICAgICAgICAgICAgICB6b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRTY3JvbGxiYXJXaWR0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBzY3JvbGxiYXJXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbGJhcldpZHRoKCk7XG4gICAgfVxuICAgIGdldCBydGxTY3JvbGxMZWZ0KCkge1xuICAgICAgICByZXR1cm4gcnRsU2Nyb2xsTGVmdCgpO1xuICAgIH1cbn1cbkJyb3dzZXJTdXBwb3J0U2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQnJvd3NlclN1cHBvcnRTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTp1c2UtbGlmZS1jeWNsZS1pbnRlcmZhY2UgKi9cbmNvbnN0IGlzR3JvdXBJdGVtID0gKHNvdXJjZSkgPT4ge1xuICAgIHJldHVybiBzb3VyY2UuaXRlbXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBzb3VyY2UuZmllbGQgIT09IHVuZGVmaW5lZDtcbn07XG5jb25zdCBpc1ZpcnR1YWxHcm91cEl0ZW0gPSAoc291cmNlKSA9PiB7XG4gICAgcmV0dXJuIHNvdXJjZS5vZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBzb3VyY2Uuc2tpcEhlYWRlciAhPT0gdW5kZWZpbmVkO1xufTtcbmNvbnN0IGZsYXR0ZW5Hcm91cHMgPSAoZ3JvdXBzKSA9PiAoZ3JvdXBzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgaWYgKGlzR3JvdXBJdGVtKGN1cnIpKSB7XG4gICAgICAgIHJldHVybiBhY2MuY29uY2F0KGZsYXR0ZW5Hcm91cHMoY3Vyci5pdGVtcykpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjLmNvbmNhdChbY3Vycl0pO1xufSwgW10pIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXRlbUF0ID0gKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgZmlyc3QgPSBkYXRhWzBdO1xuICAgIGlmIChpc1ByZXNlbnQoZmlyc3QpICYmIGlzR3JvdXBJdGVtKGZpcnN0KSkge1xuICAgICAgICByZXR1cm4gZmxhdHRlbkdyb3VwcyhkYXRhKVtpbmRleF07XG4gICAgfVxuICAgIHJldHVybiBkYXRhW2luZGV4XTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZ2V0SXRlcmF0b3IkMSA9IChkYXRhLCB7IGZvb3RlcnMsIGxldmVsLCBkYXRhSW5kZXgsIHBhcmVudEdyb3VwSW5kZXgsIGdyb3VwSW5kZXggfSkgPT4ge1xuICAgIGNvbnN0IGZpcnN0ID0gZGF0YVswXTtcbiAgICBpZiAoaXNQcmVzZW50KGZpcnN0KSAmJiBpc0dyb3VwSXRlbShmaXJzdCkpIHtcbiAgICAgICAgaWYgKGlzVmlydHVhbEdyb3VwSXRlbShmaXJzdCkpIHtcbiAgICAgICAgICAgIGdyb3VwSW5kZXggPSBpc1ByZXNlbnQoZmlyc3Qub2Zmc2V0KSA/IGZpcnN0Lm9mZnNldCA6IGdyb3VwSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgLy90c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gICAgICAgIHJldHVybiBuZXcgR3JvdXBJdGVyYXRvcihkYXRhLCBmb290ZXJzLCBsZXZlbCwgZGF0YUluZGV4LCBwYXJlbnRHcm91cEluZGV4LCBncm91cEluZGV4KTtcbiAgICB9XG4gICAgLy90c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gICAgcmV0dXJuIG5ldyBJdGVtSXRlcmF0b3IoZGF0YSwgZGF0YUluZGV4LCBwYXJlbnRHcm91cEluZGV4KTtcbn07XG5jbGFzcyBBcnJheUl0ZXJhdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihhcnIsIGlkeCA9IDApIHtcbiAgICAgICAgdGhpcy5hcnIgPSBhcnI7XG4gICAgICAgIHRoaXMuaWR4ID0gaWR4O1xuICAgICAgICB0aGlzLmFyciA9IGFyciB8fCBbXTtcbiAgICB9XG4gICAgW2l0ZXJhdG9yXSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG5leHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkeCA8IHRoaXMuYXJyLmxlbmd0aCA/IHtcbiAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuYXJyW3RoaXMuaWR4KytdXG4gICAgICAgIH0gOiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyciwgZGF0YUluZGV4ID0gMCwgcmVzdWx0TWFwID0gKHgpID0+IHgpIHtcbiAgICAgICAgdGhpcy5kYXRhSW5kZXggPSBkYXRhSW5kZXg7XG4gICAgICAgIHRoaXMucmVzdWx0TWFwID0gcmVzdWx0TWFwO1xuICAgICAgICBjb25zdCBpdGVyID0gYXJyW2l0ZXJhdG9yXTtcbiAgICAgICAgdGhpcy5faW5uZXJJdGVyYXRvciA9IGl0ZXIgPyBhcnJbaXRlcmF0b3JdKCkgOiBuZXcgQXJyYXlJdGVyYXRvcihhcnIpO1xuICAgIH1cbiAgICBbaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0TWFwKHRoaXMuX2lubmVySXRlcmF0b3IubmV4dCgpLCB0aGlzLmRhdGFJbmRleCsrKTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgSXRlbUl0ZXJhdG9yIGV4dGVuZHMgSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyciwgZGF0YUluZGV4LCBncm91cEluZGV4KSB7XG4gICAgICAgIHN1cGVyKGFyciwgZGF0YUluZGV4LCAoeCwgaWR4KSA9PiAoe1xuICAgICAgICAgICAgZG9uZTogeC5kb25lLFxuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB4LnZhbHVlLFxuICAgICAgICAgICAgICAgIGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgaW5kZXg6IGlkeCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZGF0YSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIG5leHQgcmVjb3JkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICovXG4gICAgZ2V0IGluZGV4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhSW5kZXg7XG4gICAgfVxufVxuY29uc3QgcHJlZml4ID0gKHMsIG4pID0+IHtcbiAgICBjb25zdCBwID0gcyA/IHMgKyBcIl9cIiA6IHM7XG4gICAgcmV0dXJuIGAke3B9JHtufWA7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyb3VwSXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGFyciwgb3V0cHV0Rm9vdGVycyA9IGZhbHNlLCBsZXZlbCA9IDAsIGRhdGFJbmRleCA9IDAsIHBhcmVudEluZGV4ID0gXCJcIiwgZ3JvdXBJbmRleCA9IDApIHtcbiAgICAgICAgdGhpcy5hcnIgPSBhcnI7XG4gICAgICAgIHRoaXMub3V0cHV0Rm9vdGVycyA9IG91dHB1dEZvb3RlcnM7XG4gICAgICAgIHRoaXMubGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgdGhpcy5kYXRhSW5kZXggPSBkYXRhSW5kZXg7XG4gICAgICAgIHRoaXMucGFyZW50SW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICAgICAgdGhpcy5ncm91cEluZGV4ID0gZ3JvdXBJbmRleDtcbiAgICAgICAgdGhpcy5jdXJyZW50R3JvdXBJbmRleCA9IFwiXCI7XG4gICAgICAgIHRoaXMuYXJyID0gYXJyIHx8IFtdO1xuICAgICAgICB0aGlzLl9pdGVyYXRvciA9IG5ldyBJdGVyYXRvcih0aGlzLmFyciwgdGhpcy5kYXRhSW5kZXgpO1xuICAgIH1cbiAgICBbaXRlcmF0b3JdKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgbmV4dEdyb3VwSXRlbSgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5faXRlcmF0b3IubmV4dCgpLnZhbHVlO1xuICAgICAgICB0aGlzLl9pbm5lckl0ZXJhdG9yID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50R3JvdXBJbmRleCA9IHByZWZpeCh0aGlzLnBhcmVudEluZGV4LCB0aGlzLmdyb3VwSW5kZXgrKyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY3VycmVudCxcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IHRoaXMuY3VycmVudEdyb3VwSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiB0aGlzLmxldmVsLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXAnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9vdGVySXRlbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBncm91cCxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogdGhpcy5jdXJyZW50R3JvdXBJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMubGV2ZWwsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdmb290ZXInXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5uZXJJdGVyYXRvcihncm91cCkge1xuICAgICAgICBpZiAoIXRoaXMuX2lubmVySXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX2lubmVySXRlcmF0b3IgPSBnZXRJdGVyYXRvciQxKGdyb3VwLml0ZW1zLCB7XG4gICAgICAgICAgICAgICAgZGF0YUluZGV4OiB0aGlzLmRhdGFJbmRleCxcbiAgICAgICAgICAgICAgICBmb290ZXJzOiB0aGlzLm91dHB1dEZvb3RlcnMsXG4gICAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMubGV2ZWwgKyAxLFxuICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwSW5kZXg6IHRoaXMuY3VycmVudEdyb3VwSW5kZXhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9pbm5lckl0ZXJhdG9yO1xuICAgIH1cbiAgICBuZXh0RGF0YUl0ZW0oZ3JvdXApIHtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IkJDEgPSB0aGlzLmlubmVySXRlcmF0b3IoZ3JvdXApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpdGVyYXRvciQkMS5uZXh0KCk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQocmVzdWx0LnZhbHVlKSAmJiAhcmVzdWx0LmRvbmUgJiYgcmVzdWx0LnZhbHVlLnR5cGUgPT09IFwiZGF0YVwiKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFJbmRleCA9IHJlc3VsdC52YWx1ZS5pbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICFyZXN1bHQuZG9uZSA/IHJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5jdXJyZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmV4dEdyb3VwSXRlbSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLm5leHREYXRhSXRlbSh0aGlzLmN1cnJlbnQpO1xuICAgICAgICByZXR1cm4gaXRlbSA/IGl0ZW0gOiAodGhpcy5vdXRwdXRGb290ZXJzID8gdGhpcy5mb290ZXJJdGVtKCkgOiB0aGlzLm5leHRHcm91cEl0ZW0oKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBpdGVyYXRlZCBkYXRhIHJlY29yZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqL1xuICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YUluZGV4ICsgMTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEYXRhUmVzdWx0SXRlcmF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKHNvdXJjZSwgc2tpcCA9IDAsIGdyb3VwRm9vdGVycyA9IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLmdyb3VwRm9vdGVycyA9IGdyb3VwRm9vdGVycztcbiAgICAgICAgdGhpcy5zb3VyY2UgPSB0aGlzLnNvdXJjZSA/IHRoaXMuc291cmNlIDogW107XG4gICAgICAgIHRoaXMuaXNPYmplY3QgPSB0aGlzLmlzR3JpZERhdGFSZXN1bHQodGhpcy5zb3VyY2UpO1xuICAgIH1cbiAgICBpc0dyaWREYXRhUmVzdWx0KHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnRvdGFsICE9PSB1bmRlZmluZWQgJiYgc291cmNlLmRhdGEgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IHRvdGFsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc09iamVjdCA/IHRoaXMuc291cmNlLnRvdGFsIDogdGhpcy5zb3VyY2UubGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNPYmplY3QgPyB0aGlzLnNvdXJjZS5kYXRhIDogdGhpcy5zb3VyY2U7XG4gICAgfVxuICAgIG1hcChmbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLm1hcChmbik7XG4gICAgfVxuICAgIGZpbHRlcihmbikge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmZpbHRlcihmbik7XG4gICAgfVxuICAgIHJlZHVjZShmbiwgaW5pdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLnJlZHVjZShmbiwgaW5pdCk7XG4gICAgfVxuICAgIGZvckVhY2goZm4pIHtcbiAgICAgICAgdGhpcy5kYXRhLmZvckVhY2goZm4pO1xuICAgIH1cbiAgICBzb21lKGZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuc29tZShmbik7XG4gICAgfVxuICAgIFtpdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiBnZXRJdGVyYXRvciQxKHRoaXMuZGF0YSwge1xuICAgICAgICAgICAgZGF0YUluZGV4OiB0aGlzLnNraXAsXG4gICAgICAgICAgICBmb290ZXJzOiB0aGlzLmdyb3VwRm9vdGVycyxcbiAgICAgICAgICAgIGdyb3VwSW5kZXg6IHRoaXMuc2tpcFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9TdHJpbmcoKSB7IHJldHVybiB0aGlzLmRhdGEudG9TdHJpbmcoKTsgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGFDb2xsZWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihhY2Nlc3Nvcikge1xuICAgICAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XG4gICAgfVxuICAgIGdldCB0b3RhbCgpIHsgcmV0dXJuIHRoaXMuYWNjZXNzb3IoKS50b3RhbDsgfVxuICAgIGdldCBsZW5ndGgoKSB7IHJldHVybiB0aGlzLmFjY2Vzc29yKCkuZGF0YS5sZW5ndGg7IH1cbiAgICBnZXQgZmlyc3QoKSB7IHJldHVybiB0aGlzLmFjY2Vzc29yKCkuZGF0YVswXTsgfVxuICAgIGdldCBsYXN0KCkgeyByZXR1cm4gdGhpcy5hY2Nlc3NvcigpLmRhdGFbdGhpcy5sZW5ndGggLSAxXTsgfVxuICAgIGF0KGluZGV4KSB7XG4gICAgICAgIHJldHVybiBpdGVtQXQodGhpcy5hY2Nlc3NvcigpLmRhdGEsIGluZGV4KTtcbiAgICB9XG4gICAgbWFwKGZuKSB7IHJldHVybiB0aGlzLmFjY2Vzc29yKCkubWFwKGZuKTsgfVxuICAgIGZpbHRlcihmbikge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NvcigpLmZpbHRlcihmbik7XG4gICAgfVxuICAgIHJlZHVjZShmbiwgaW5pdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NvcigpLnJlZHVjZShmbiwgaW5pdCk7XG4gICAgfVxuICAgIGZvckVhY2goZm4pIHtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcigpLmZvckVhY2goZm4pO1xuICAgIH1cbiAgICBzb21lKGZuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yKCkuc29tZShmbik7XG4gICAgfVxuICAgIFtpdGVyYXRvcl0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yKClbaXRlcmF0b3JdKCk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkgeyByZXR1cm4gdGhpcy5hY2Nlc3NvcigpLnRvU3RyaW5nKCk7IH1cbn1cblxuLyogdHNsaW50OmRpc2FibGU6bm8taW5wdXQtcmVuYW1lICovXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2VsZWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihncmlkLCBjZCkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBjb2xsZWN0aW9uIHRoYXQgd2lsbCBzdG9yZSB0aGUgc2VsZWN0ZWQgaXRlbSBrZXlzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RlZEtleXMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGBzZWxlY3RlZEtleXNgIGNvbGxlY3Rpb24gaGFzIGJlZW4gdXBkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICB9XG4gICAgaW5pdCgpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodGhpcy5ncmlkLnJvd1NlbGVjdGVkKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGVkID0gKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkS2V5cy5pbmRleE9mKHRoaXMuZ2V0SXRlbUtleShyb3cpKSA+PSAwO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLmdyaWQuY2VsbFNlbGVjdGVkKSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNlbGxTZWxlY3RlZCA9IChyb3csIGNvbHVtbiwgY29sSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW5kZXIgPSB0aGlzLmdldFNlbGVjdGlvbkl0ZW0ocm93LCBjb2x1bW4sIGNvbEluZGV4KTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEtleXMuc29tZShpdGVtID0+IGl0ZW0uY29sdW1uS2V5ID09PSBjb250ZW5kZXIuY29sdW1uS2V5ICYmIGl0ZW0uaXRlbUtleSA9PT0gY29udGVuZGVyLml0ZW1LZXkpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtOiBjb250ZW5kZXJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFxuICAgICAgICAgICAgLnNlbGVjdGlvbkNoYW5nZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cyA9IFtdO1xuICAgIH1cbiAgICBnZXRJdGVtS2V5KHJvdykge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25LZXkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWxlY3Rpb25LZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93LmRhdGFJdGVtW3RoaXMuc2VsZWN0aW9uS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5zZWxlY3Rpb25LZXkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbktleShyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3cuaW5kZXg7XG4gICAgfVxuICAgIGdldFNlbGVjdGlvbkl0ZW0ocm93LCBjb2wsIGNvbEluZGV4KSB7XG4gICAgICAgIGNvbnN0IGl0ZW1JZGVudGlmaWVycyA9IHt9O1xuICAgICAgICBpdGVtSWRlbnRpZmllcnMuaXRlbUtleSA9IHRoaXMuZ2V0SXRlbUtleShyb3cpO1xuICAgICAgICBpZiAoIWlzUHJlc2VudChjb2wpICYmICFpc1ByZXNlbnQoY29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbUlkZW50aWZpZXJzO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbktleSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbHVtbktleSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIGl0ZW1JZGVudGlmaWVycy5jb2x1bW5LZXkgPSByb3cuZGF0YUl0ZW1bdGhpcy5jb2x1bW5LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbHVtbktleSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbUlkZW50aWZpZXJzLmNvbHVtbktleSA9IHRoaXMuY29sdW1uS2V5KGNvbCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBpdGVtSWRlbnRpZmllcnMuaXRlbUtleSxcbiAgICAgICAgICAgIGNvbHVtbktleTogaXRlbUlkZW50aWZpZXJzLmNvbHVtbktleSA/IGl0ZW1JZGVudGlmaWVycy5jb2x1bW5LZXkgOiBjb2xJbmRleFxuICAgICAgICB9O1xuICAgIH1cbiAgICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3Rpb24pIHtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3RlZFJvd3MpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5kZXNlbGVjdGVkUm93cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUtleSA9IHRoaXMuZ2V0SXRlbUtleShpdGVtKTtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLnNlbGVjdGVkS2V5cy5pbmRleE9mKGl0ZW1LZXkpO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuc2VsZWN0YWJsZVNldHRpbmdzLm1vZGUgPT09IFwic2luZ2xlXCIgJiYgdGhpcy5zZWxlY3RlZEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3RlZFJvd3MuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1LZXkgPSB0aGlzLmdldEl0ZW1LZXkoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRLZXlzLmluZGV4T2YoaXRlbUtleSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnB1c2goaXRlbUtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZWxlY3Rpb24uZGVzZWxlY3RlZENlbGxzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0aGlzLmdldENlbGxTZWxlY3Rpb25JdGVtSW5kZXgoaXRlbSk7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1JbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzLnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3RhYmxlU2V0dGluZ3MubW9kZSA9PT0gXCJzaW5nbGVcIiAmJiB0aGlzLnNlbGVjdGVkS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZWN0aW9uLnNlbGVjdGVkQ2VsbHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1JbmRleCA9IHRoaXMuZ2V0Q2VsbFNlbGVjdGlvbkl0ZW1JbmRleChpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkS2V5cy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXlzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEtleXMpO1xuICAgIH1cbiAgICBnZXRDZWxsU2VsZWN0aW9uSXRlbUluZGV4KGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRLZXlzLmZpbmRJbmRleChzZWxlY3RlZEl0ZW0gPT4gc2VsZWN0ZWRJdGVtLml0ZW1LZXkgPT09IGl0ZW0uaXRlbUtleSAmJiBzZWxlY3RlZEl0ZW0uY29sdW1uS2V5ID09PSBpdGVtLmNvbHVtbktleSk7XG4gICAgfVxufVxuU2VsZWN0aW9uLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHNlbGVjdGVkS2V5czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0aW9uS2V5OiBbeyB0eXBlOiBJbnB1dCwgYXJnczogW1wia2VuZG9HcmlkU2VsZWN0QnlcIixdIH1dLFxuICAgIGNvbHVtbktleTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWRLZXlzQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV1cbn07XG5cbmNvbnN0IHJlc2V0ID0gKC4uLmxpc3RzKSA9PiB7XG4gICAgbGV0IGRpZmYgPSBmYWxzZTtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBsaXN0cy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGNvbnN0IFtsaXN0LCBjb2x1bW5zXSA9IGxpc3RzW2lkeF07XG4gICAgICAgIGRpZmYgPSBkaWZmIHx8IGxpc3QubGVuZ3RoICE9PSBjb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgbGlzdC5yZXNldChjb2x1bW5zKTtcbiAgICB9XG4gICAgcmV0dXJuIGRpZmY7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbnNDb250YWluZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgICAgICAgdGhpcy5hbGxDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmxlYWZDb2x1bW5zID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmxvY2tlZENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMubm9uTG9ja2VkQ29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5sb2NrZWRMZWFmQ29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5ub25Mb2NrZWRMZWFmQ29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy50b3RhbExldmVscyA9IDA7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5sZWFmQ29sdW1uc1RvUmVuZGVyID0gW107XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1uc1RvUmVuZGVyID0gW107XG4gICAgICAgIHRoaXMubm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyID0gW107XG4gICAgICAgIHRoaXMuaGFzR3JvdXBIZWFkZXJDb2x1bW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNHcm91cEZvb3RlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmhhc0Zvb3RlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVubG9ja2VkV2lkdGggPSAwO1xuICAgIH1cbiAgICByZWZyZXNoKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50TGV2ZWxzID0gdGhpcy50b3RhbExldmVscztcbiAgICAgICAgY29uc3QgbGVhZkNvbHVtbnMkJDEgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3QgbG9ja2VkTGVhZkNvbHVtbnMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3Qgbm9uTG9ja2VkTGVhZkNvbHVtbnMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBub25Mb2NrZWRDb2x1bW5zID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGNvbnN0IGFsbENvbHVtbnMgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3QgbGVhZkNvbHVtbnNUb1JlbmRlciA9IG5ldyBBcnJheSgpO1xuICAgICAgICBjb25zdCBsb2NrZWRDb2x1bW5zVG9SZW5kZXIgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgY29uc3Qgbm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyID0gbmV3IEFycmF5KCk7XG4gICAgICAgIGxldCBoYXNHcm91cEhlYWRlckNvbHVtbiA9IGZhbHNlO1xuICAgICAgICBsZXQgaGFzR3JvdXBGb290ZXIgPSBmYWxzZTtcbiAgICAgICAgbGV0IGhhc0Zvb3RlciA9IGZhbHNlO1xuICAgICAgICBsZXQgdW5sb2NrZWRXaWR0aCA9IDA7XG4gICAgICAgIGxldCBsZWFmSW5kZXggPSAwO1xuICAgICAgICB0aGlzLnRvdGFsTGV2ZWxzID0gMDtcbiAgICAgICAgdGhpcy5jb2x1bW5zKCkuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyTGVhZkNvbHVtbnMgPSBjb2x1bW4uaXNMb2NrZWQgPT09IHRydWUgPyBsb2NrZWRMZWFmQ29sdW1ucyA6IG5vbkxvY2tlZExlYWZDb2x1bW5zO1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyQ29sdW1ucyA9IGNvbHVtbi5pc0xvY2tlZCA9PT0gdHJ1ZSA/IGxvY2tlZENvbHVtbnMgOiBub25Mb2NrZWRDb2x1bW5zO1xuICAgICAgICAgICAgY29uc3QgdG9SZW5kZXJDb250YWluZXIgPSBjb2x1bW4uaXNMb2NrZWQgPT09IHRydWUgPyBsb2NrZWRDb2x1bW5zVG9SZW5kZXIgOiBub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXI7XG4gICAgICAgICAgICBpZiAoIWlzQ29sdW1uR3JvdXBDb21wb25lbnQoY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckxlYWZDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICBsZWFmQ29sdW1ucyQkMS5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgbGVhZkNvbHVtbnNUb1JlbmRlci5wdXNoLmFwcGx5KGxlYWZDb2x1bW5zVG9SZW5kZXIsIGNvbHVtbnNUb1JlbmRlcihbY29sdW1uXSkpO1xuICAgICAgICAgICAgICAgIHRvUmVuZGVyQ29udGFpbmVyLnB1c2guYXBwbHkodG9SZW5kZXJDb250YWluZXIsIGNvbHVtbnNUb1JlbmRlcihbY29sdW1uXSkpO1xuICAgICAgICAgICAgICAgIGhhc0dyb3VwSGVhZGVyQ29sdW1uID0gaGFzR3JvdXBIZWFkZXJDb2x1bW4gfHwgc29tZUxlYWZDb2x1bW4obGVhZiA9PiBCb29sZWFuKGxlYWYuZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZVJlZiksIGNvbHVtbik7XG4gICAgICAgICAgICAgICAgaGFzR3JvdXBGb290ZXIgPSBoYXNHcm91cEZvb3RlciB8fCBzb21lTGVhZkNvbHVtbihsZWFmID0+IEJvb2xlYW4obGVhZi5ncm91cEZvb3RlclRlbXBsYXRlUmVmKSwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICBoYXNGb290ZXIgPSBoYXNGb290ZXIgfHwgc29tZUxlYWZDb2x1bW4obGVhZiA9PiBCb29sZWFuKGxlYWYuZm9vdGVyVGVtcGxhdGVSZWYpLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgIGlmICghY29sdW1uLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVubG9ja2VkV2lkdGggKz0gY29sdW1uLndpZHRoIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5jaGlsZENvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMubGVhZkluZGV4ID0gbGVhZkluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLmxlYWZJbmRleCA9IGxlYWZJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRhaW5lckNvbHVtbnMucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgYWxsQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICB0aGlzLnRvdGFsTGV2ZWxzID0gY29sdW1uLmxldmVsID4gdGhpcy50b3RhbExldmVscyA/IGNvbHVtbi5sZXZlbCA6IHRoaXMudG90YWxMZXZlbHM7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmhhc0dyb3VwSGVhZGVyQ29sdW1uID0gaGFzR3JvdXBIZWFkZXJDb2x1bW47XG4gICAgICAgIHRoaXMuaGFzR3JvdXBGb290ZXIgPSBoYXNHcm91cEZvb3RlcjtcbiAgICAgICAgdGhpcy5oYXNGb290ZXIgPSBoYXNGb290ZXI7XG4gICAgICAgIHRoaXMubGVhZkNvbHVtbnNUb1JlbmRlciA9IGxlYWZDb2x1bW5zVG9SZW5kZXI7XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1uc1RvUmVuZGVyID0gbG9ja2VkQ29sdW1uc1RvUmVuZGVyO1xuICAgICAgICB0aGlzLm5vbkxvY2tlZENvbHVtbnNUb1JlbmRlciA9IG5vbkxvY2tlZENvbHVtbnNUb1JlbmRlcjtcbiAgICAgICAgdGhpcy51bmxvY2tlZFdpZHRoID0gdW5sb2NrZWRXaWR0aDtcbiAgICAgICAgY29uc3QgY2hhbmdlcyA9IHJlc2V0KFt0aGlzLmxlYWZDb2x1bW5zLCBsZWFmQ29sdW1ucyQkMV0sIFt0aGlzLmxvY2tlZExlYWZDb2x1bW5zLCBsb2NrZWRMZWFmQ29sdW1uc10sIFt0aGlzLm5vbkxvY2tlZExlYWZDb2x1bW5zLCBub25Mb2NrZWRMZWFmQ29sdW1uc10sIFt0aGlzLmxvY2tlZENvbHVtbnMsIGxvY2tlZENvbHVtbnNdLCBbdGhpcy5hbGxDb2x1bW5zLCBhbGxDb2x1bW5zXSwgW3RoaXMubm9uTG9ja2VkQ29sdW1ucywgbm9uTG9ja2VkQ29sdW1uc10pIHx8IGN1cnJlbnRMZXZlbHMgIT09IHRoaXMudG90YWxMZXZlbHM7XG4gICAgICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xuICAgIH1cbn1cblxuY29uc3QgZm9yRWFjaENvbHVtbiA9IChsaXN0LCBjYWxsYmFjaykgPT4ge1xuICAgIGxpc3QuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGNvbHVtbik7XG4gICAgICAgIGlmIChjb2x1bW4uaXNDb2x1bW5Hcm91cCAmJiBjb2x1bW4uaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGZvckVhY2hDb2x1bW4oY29sdW1uLmNoaWxkcmVuQXJyYXksIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcbmNvbnN0IGZvckVhY2hMZXZlbCA9IChsaXN0LCBjYWxsYmFjaykgPT4ge1xuICAgIHNvcnRDb2x1bW5zKGxpc3QpXG4gICAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgY2FsbGJhY2soY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbi5pc0NvbHVtbkdyb3VwICYmIGNvbHVtbi5oYXNDaGlsZHJlbikge1xuICAgICAgICAgICAgZm9yRWFjaExldmVsKGNvbHVtbi5jaGlsZHJlbkFycmF5LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9KTtcbn07XG5jb25zdCBmaWx0ZXJIaWVyYXJjaHkgPSAobGlzdCwgcHJlZGljYXRlKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgc29ydENvbHVtbnMobGlzdClcbiAgICAgICAgLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICBpZiAocHJlZGljYXRlKGNvbHVtbikpIHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuJCQxID0gZmlsdGVySGllcmFyY2h5KGNvbHVtbi5jaGlsZHJlbkFycmF5LCBwcmVkaWNhdGUpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbiQkMS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29sdW1uLCAuLi5jaGlsZHJlbiQkMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWNvbHVtbi5pc1NwYW5Db2x1bW4gfHwgZmlsdGVySGllcmFyY2h5KGNvbHVtbi5jaGlsZHJlbkFycmF5LCBwcmVkaWNhdGUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2x1bW5MaXN0IHtcbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxuICAgIHN0YXRpYyBlbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2x1bW5MaXN0KG5ldyBRdWVyeUxpc3QoKSk7XG4gICAgfVxuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgZm9yRWFjaENvbHVtbih0aGlzLmNvbHVtbnMsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgZmlsdGVyKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3JFYWNoQ29sdW1uKHRoaXMuY29sdW1ucywgKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGNvbHVtbikpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb2x1bW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZmlsdGVySGllcmFyY2h5KHByZWRpY2F0ZSkge1xuICAgICAgICByZXR1cm4gZmlsdGVySGllcmFyY2h5KHRoaXMuY29sdW1ucy50b0FycmF5KCksIHByZWRpY2F0ZSk7XG4gICAgfVxuICAgIGZpbHRlclNvcnQoY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIGZvckVhY2hMZXZlbCh0aGlzLmNvbHVtbnMudG9BcnJheSgpLCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2soY29sdW1uKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICB0b0FycmF5KCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yRWFjaENvbHVtbih0aGlzLmNvbHVtbnMsIChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbHVtbik7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByb290Q29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy50b0FycmF5KCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBJbmZvU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbkxpc3QgPSBDb2x1bW5MaXN0LmVtcHR5O1xuICAgIH1cbiAgICBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIGV4cGFuZENvbHVtbnModGhpcy5fY29sdW1uTGlzdCgpLnRvQXJyYXkoKSkuZmlsdGVyKGlzQ29sdW1uQ29tcG9uZW50KTtcbiAgICB9XG4gICAgcmVnaXN0ZXJDb2x1bW5zQ29udGFpbmVyKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5fY29sdW1uTGlzdCA9IGNvbHVtbnM7XG4gICAgfVxuICAgIGZvcm1hdEZvckdyb3VwKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5Gb3JHcm91cChpdGVtKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbiA/IGNvbHVtbi5mb3JtYXQgOiBcIlwiO1xuICAgIH1cbiAgICBpc0dyb3VwYWJsZShncm91cEZpZWxkKSB7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5dID0gdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgPT09IGdyb3VwRmllbGQpO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gY29sdW1uLmdyb3VwYWJsZSA6IHRydWU7XG4gICAgfVxuICAgIGdyb3VwVGl0bGUoaXRlbSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbkZvckdyb3VwKGl0ZW0pO1xuICAgICAgICByZXR1cm4gY29sdW1uID8gKGNvbHVtbi50aXRsZSB8fCBjb2x1bW4uZmllbGQpIDogdGhpcy5ncm91cEZpZWxkKGl0ZW0pO1xuICAgIH1cbiAgICBncm91cEhlYWRlclRlbXBsYXRlKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5Gb3JHcm91cChpdGVtKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbiA/IGNvbHVtbi5ncm91cEhlYWRlclRlbXBsYXRlUmVmIHx8IGNvbHVtbi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlUmVmIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBncm91cEZpZWxkKGdyb3VwKSB7XG4gICAgICAgIHJldHVybiBncm91cC5kYXRhID8gZ3JvdXAuZGF0YS5maWVsZCA6IGdyb3VwLmZpZWxkO1xuICAgIH1cbiAgICBjb2x1bW5Gb3JHcm91cChncm91cCkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZ3JvdXBGaWVsZChncm91cCk7XG4gICAgICAgIGNvbnN0IFtjb2x1bW5dID0gdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDaGFuZ2VOb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgbm90aWZ5KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaXB0aW9uIHx8IHRoaXMuc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm5nWm9uZS5vblN0YWJsZVxuICAgICAgICAgICAgICAgIC5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNoYW5nZXMuZW1pdCgpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkNoYW5nZU5vdGlmaWNhdGlvblNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNoYW5nZU5vdGlmaWNhdGlvblNlcnZpY2UuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBuby1yZWNvcmRzIHRlbXBsYXRlIG9mIHRoZSBHcmlkLiBQcm92aWRlcyBhbiBvcHRpb24gdG8gY3VzdG9taXplIHRoZVxuICogYXBwZWFyYW5jZSBvZiB0aGUgaXRlbSB0aGF0IGlzIGRpc3BsYXllZCB3aGVuIG5vIGRhdGEgaXMgcHJlc2VudC4gVG8gZGVmaW5lIHRoZSBuby1yZWNvcmRzIHRlbXBsYXRlLFxuICogbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb0dyaWROb1JlY29yZHNUZW1wbGF0ZWAgZGlyZWN0aXZlIGluc2lkZSBgPGtlbmRvLWdyaWQ+YC5cbiAqXG4gKiA+IFdoZW4gdGhlIGxvY2tlZCBjb2x1bW5zIG9mIHRoZSBHcmlkIGFyZSBpbiB1c2UsIHRoZSB0ZW1wbGF0ZSBpcyBkaXNwbGF5ZWQgaW4gdGhlIG5vbi1sb2NrZWQgcGFydCBvZiB0aGUgY29udGVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICB0ZW1wbGF0ZTogYFxuICogICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZGF0YVwiPlxuICogICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlVuaXRQcmljZVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWROb1JlY29yZHNUZW1wbGF0ZT5cbiAqICAgICAgICAgICAgVGhlcmUgYXJlIG5vdCBwcm9kdWN0cy4gPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwicmVmcmVzaCgpXCI+Q2xpY2sgaGVyZSB0byByZWZyZXNoPC9hPi5cbiAqICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBkYXRhID0gW107XG4gKiAgICAgcHVibGljIHJlZnJlc2goKSB7XG4gKiAgICAgICB0aGlzLmRhdGEgPSBbe1xuICogICAgICAgICAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICogICAgICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgICAgICAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZSxcbiAqICAgICAgICAgICAgXCJDYXRlZ29yeVwiOiB7XG4gKiAgICAgICAgICAgICAgICBcIkNhdGVnb3J5SURcIjogMSxcbiAqICAgICAgICAgICAgICAgIFwiQ2F0ZWdvcnlOYW1lXCI6IFwiQmV2ZXJhZ2VzXCIsXG4gKiAgICAgICAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IFwiU29mdCBkcmlua3MsIGNvZmZlZXMsIHRlYXMsIGJlZXJzLCBhbmQgYWxlc1wiXG4gKiAgICAgICAgICAgIH1cbiAqICAgICAgICAgIH0sIHtcbiAqICAgICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlLFxuICogICAgICAgICAgICBcIkNhdGVnb3J5XCI6IHtcbiAqICAgICAgICAgICAgICAgIFwiQ2F0ZWdvcnlJRFwiOiAxLFxuICogICAgICAgICAgICAgICAgXCJDYXRlZ29yeU5hbWVcIjogXCJCZXZlcmFnZXNcIixcbiAqICAgICAgICAgICAgICAgIFwiRGVzY3JpcHRpb25cIjogXCJTb2Z0IGRyaW5rcywgY29mZmVlcywgdGVhcywgYmVlcnMsIGFuZCBhbGVzXCJcbiAqICAgICAgICAgICAgfVxuICogICAgICAgICAgfSwge1xuICogICAgICAgICAgICBcIlByb2R1Y3RJRFwiOiAzLFxuICogICAgICAgICAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQW5pc2VlZCBTeXJ1cFwiLFxuICogICAgICAgICAgICBcIlVuaXRQcmljZVwiOiAxMC4wMDAwLFxuICogICAgICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZSxcbiAqICAgICAgICAgICAgXCJDYXRlZ29yeVwiOiB7XG4gKiAgICAgICAgICAgICAgICBcIkNhdGVnb3J5SURcIjogMixcbiAqICAgICAgICAgICAgICAgIFwiQ2F0ZWdvcnlOYW1lXCI6IFwiQ29uZGltZW50c1wiLFxuICogICAgICAgICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiBcIlN3ZWV0IGFuZCBzYXZvcnkgc2F1Y2VzLCByZWxpc2hlcywgc3ByZWFkcywgYW5kIHNlYXNvbmluZ3NcIlxuICogICAgICAgICAgICB9XG4gKiAgICAgICAgfV07XG4gKlxuICogICAgIH1cbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgTm9SZWNvcmRzVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Ob1JlY29yZHNUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZE5vUmVjb3Jkc1RlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTm9SZWNvcmRzVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuY29uc3Qgc2V0ID0gdmFsdWUgPT4gcGFpciA9PiBwYWlyLmZvckVhY2goeCA9PiB4LnN0eWxlLmhlaWdodCA9IHZhbHVlKTtcbmNvbnN0IGNsZWFySGVpZ2h0ID0gcGFpcnMgPT4gcGFpcnNcbiAgICAuZmlsdGVyKChbbGVmdCwgcmlnaHRdKSA9PiBsZWZ0LnN0eWxlLmhlaWdodCB8fCByaWdodC5zdHlsZS5oZWlnaHQpXG4gICAgLmZvckVhY2goc2V0KFwiXCIpKTtcbmNvbnN0IHppcCQxID0gKGFycjEsIGFycjIpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBmb3IgKGxldCBpZHggPSAwLCBsZW4gPSBhcnIxLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgICAgICBpZiAoIWFycjJbaWR4XSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goW2FycjFbaWR4XSwgYXJyMltpZHhdXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuY29uc3Qgc2V0SGVpZ2h0ID0gaGVpZ2h0cyA9PiAocm93LCBpZHgpID0+IHNldChgJHtoZWlnaHRzW2lkeF0gKyAxfXB4YCkocm93KTtcbmNvbnN0IGdldEhlaWdodHMgPSByb3dzID0+IHJvd3MubWFwKChbbGVmdCwgcmlnaHRdKSA9PiB7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGVmdC5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3Qgb2Zmc2V0SGVpZ2h0MiA9IHJpZ2h0Lm9mZnNldEhlaWdodDtcbiAgICBpZiAoaGVpZ2h0IDwgb2Zmc2V0SGVpZ2h0Mikge1xuICAgICAgICByZXR1cm4gb2Zmc2V0SGVpZ2h0MjtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbn0pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHN5bmNSb3dzSGVpZ2h0ID0gKHRhYmxlMSwgdGFibGUyKSA9PiB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3Qgcm93cyA9IHppcCQxKHRhYmxlMS5yb3dzLCB0YWJsZTIucm93cyk7XG4gICAgY2xlYXJIZWlnaHQocm93cyk7XG4gICAgY29uc3QgaGVpZ2h0cyA9IGdldEhlaWdodHMocm93cyk7XG4gICAgW3RhYmxlMSwgdGFibGUyXS5mb3JFYWNoKHggPT4geC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnKTtcbiAgICByb3dzLmZvckVhY2goc2V0SGVpZ2h0KGhlaWdodHMpKTtcbiAgICBbdGFibGUxLCB0YWJsZTJdLmZvckVhY2goeCA9PiB4LnN0eWxlLmRpc3BsYXkgPSAnJyk7XG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgKHRhYmxlMS5jb250YWlucyhhY3RpdmVFbGVtZW50KSB8fCB0YWJsZTIuY29udGFpbnMoYWN0aXZlRWxlbWVudCkpKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzZXJ2aWNlIHRvIHNldCB0aGUgZmlsdGVyIGRlc2NyaXB0b3JcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmV1c2FibGVjdXN0b21maWx0ZXJzX2dyaWQgJX0pKS5cbiAqL1xuY2xhc3MgRmlsdGVyU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBmaWx0ZXIgZGVzY3JpcHRvcnMgaXMgc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jaGFuZ2VzID0gbmV3IFN1YmplY3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgZmlsdGVyIGRlc2NyaXB0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3J9IHZhbHVlIC0gVGhlIGZpbHRlciBkZXNjcmlwdG9yIHRoYXQgd2lsbCBiZSBzZXQuXG4gICAgICovXG4gICAgZmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcGFnZXIgdGVtcGxhdGUgd2hpY2ggaGVscHMgdG8gY3VzdG9taXplIHRoZSBwYWdlciBhcHBlYXJhbmNlIGluIHRoZSBHcmlkLiBUbyBkZWZpbmUgYSBwYWdlclxuICogdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9QYWdlclRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGA8a2VuZG8tZ3JpZD5gLlxuICpcbiAqIFRoZSB0ZW1wbGF0ZSBjb250ZXh0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZmllbGRzOlxuICogKiBgY3VycmVudFBhZ2VgJm1kYXNoO1RoZSBpbmRleCBvZiB0aGUgZGlzcGxheWVkIHBhZ2UuXG4gKiAqIGBwYWdlU2l6ZWAmbWRhc2g7VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGBwYWdlU2l6ZWAuXG4gKiAqIGBza2lwYCZtZGFzaDtUaGUgY3VycmVudCBza2lwIHZhbHVlLlxuICogKiBgdG90YWxgJm1kYXNoO1RoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3Jkcy5cbiAqICogYHRvdGFsUGFnZXNgJm1kYXNoO1RoZSB0b3RhbCBudW1iZXIgb2YgYXZhaWxhYmxlIHBhZ2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICA8a2VuZG8tZ3JpZFxuICogICAgICAgIFtrZW5kb0dyaWRCaW5kaW5nXT1cImdyaWREYXRhXCJcbiAqICAgICAgICBbcGFnZVNpemVdPVwiMVwiXG4gKiAgICAgICAgW3BhZ2VhYmxlXT1cInRydWVcIlxuICogICAgICA+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIklEXCIgd2lkdGg9XCI0MFwiPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJOYW1lXCIgd2lkdGg9XCIyNTBcIj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlByaWNlXCIgd2lkdGg9XCI4MFwiIGZvcm1hdD1cInswOmN9XCI+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICpcbiAqICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BhZ2VyVGVtcGxhdGUgbGV0LXRvdGFsUGFnZXM9XCJ0b3RhbFBhZ2VzXCIgbGV0LWN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIj5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+PC9rZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+XG4gKiAgICAgICAgICA8a2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zIFtidXR0b25Db3VudF09XCIxMFwiPjwva2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLW5leHQtYnV0dG9ucz48L2tlbmRvLXBhZ2VyLW5leHQtYnV0dG9ucz5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1pbmZvPjwva2VuZG8tcGFnZXItaW5mbz5cbiAqICAgICAgICAgIEN1cnJlbnQgcGFnZToge3tjdXJyZW50UGFnZX19XG4gKiAgICAgICA8L25nLXRlbXBsYXRlPlxuICpcbiAqICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBQYWdlclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuUGFnZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvUGFnZXJUZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhZ2VyVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFBERlNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNhdmVQREYgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuZHJhd1BERiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5leHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgc2F2ZShjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5lbWl0RXZlbnQodGhpcy5zYXZlUERGLCBjb21wb25lbnQpO1xuICAgIH1cbiAgICBkcmF3KGNvbXBvbmVudCwgcHJvbWlzZSkge1xuICAgICAgICB0aGlzLmVtaXRFdmVudCh0aGlzLmRyYXdQREYsIHsgY29tcG9uZW50LCBwcm9taXNlIH0pO1xuICAgIH1cbiAgICBlbWl0RXZlbnQoZW1pdHRlciwgYXJncykge1xuICAgICAgICBpZiAoZW1pdHRlci5vYnNlcnZlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NyZWF0aW5nIFBERiByZXF1aXJlcyBpbmNsdWRpbmcgdGhlIFBERk1vZHVsZSBhbmQgYWRkaW5nIHRoZSA8a2VuZG8tZ3JpZC1wZGY+IGNvbXBvbmVudC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblBERlNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYHBkZkV4cG9ydGAgZXZlbnQuXG4gKi9cbmNsYXNzIFBERkV4cG9ydEV2ZW50IGV4dGVuZHMgUHJldmVudGFibGVFdmVudCB7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTdXNwZW5kU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsID0gZmFsc2U7XG4gICAgfVxufVxuU3VzcGVuZFNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOiBvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXMgKi9cbmNvbnN0IGJvb3RzdHJhcFRvTWVkaWEgPSAobWVkaWEpID0+ICgoe1xuICAgIFwieHNcIjogXCIobWF4LXdpZHRoOiA1NzZweClcIixcbiAgICBcInNtXCI6IFwiKG1pbi13aWR0aDogNTc2cHgpXCIsXG4gICAgXCJtZFwiOiBcIihtaW4td2lkdGg6IDc2OHB4KVwiLFxuICAgIFwibGdcIjogXCIobWluLXdpZHRoOiA5OTJweClcIixcbiAgICBcInhsXCI6IFwiKG1pbi13aWR0aDogMTIwMHB4KVwiXG59KVttZWRpYV0gfHwgbWVkaWEpO1xuLyogdHNsaW50OmVuYWJsZTogb2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzICovXG5jb25zdCBicm93c2VyTWF0Y2hNZWRpYSA9IChtZWRpYSkgPT4gd2luZG93Lm1hdGNoTWVkaWEobWVkaWEpLm1hdGNoZXM7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUmVzcG9uc2l2ZVNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXRjaE1lZGlhID0gYnJvd3Nlck1hdGNoTWVkaWE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBtYXRjaGVzTWVkaWEobWVkaWEpIHtcbiAgICAgICAgcmV0dXJuICFtZWRpYSB8fCB0aGlzLm1hdGNoTWVkaWEoYm9vdHN0cmFwVG9NZWRpYShtZWRpYSkpO1xuICAgIH1cbn1cblJlc3BvbnNpdmVTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRXhjZWxTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5zYXZlVG9FeGNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5leHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgc2F2ZShjb21wb25lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuc2F2ZVRvRXhjZWwub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTYXZpbmcgZXhjZWwgcmVxdWlyZXMgaW5jbHVkaW5nIHRoZSBFeGNlbE1vZHVsZSBhbmQgYWRkaW5nIHRoZSA8a2VuZG8tZ3JpZC1leGNlbD4gY29tcG9uZW50LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYXZlVG9FeGNlbC5lbWl0KGNvbXBvbmVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5FeGNlbFNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgdG9vbGJhciB0ZW1wbGF0ZSBvZiB0aGUgR3JpZC5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBoYXMgdGhlIGZvbGxvd2luZyBmaWVsZDpcbiAqIC0gYHBvc2l0aW9uYCZtZGFzaDtUaGUgcG9zaXRpb24gYXQgd2hpY2ggdGhlIHRvb2xiYXIgdGVtcGxhdGUgaXMgcmVuZGVyZWQuIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlIFwidG9wXCIgYW5kIFwiYm90dG9tXCIuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8ZGl2IGNsYXNzPVwiZXhhbXBsZS1jb25maWdcIj5cbiAqICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwidG9wXCIgbmFtZT1cInBvc2l0aW9uXCIgY2xhc3M9XCJrLXJhZGlvXCIgdmFsdWU9XCJ0b3BcIiBjaGVja2VkIChjbGljayk9XCJwb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCIvPlxuICogICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwidG9wXCI+VG9wPC9sYWJlbD48YnIvPlxuICogICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJib3R0b21cIiBuYW1lPVwicG9zaXRpb25cIiBjbGFzcz1cImstcmFkaW9cIiB2YWx1ZT1cImJvdHRvbVwiIChjbGljayk9XCJwb3NpdGlvbkNoYW5nZSgkZXZlbnQpXCIvPlxuICogICAgICAgICA8bGFiZWwgY2xhc3M9XCJrLXJhZGlvLWxhYmVsXCIgZm9yPVwiYm90dG9tXCI+Qm90dG9tPC9sYWJlbD48YnIvPlxuICogICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgaWQ9XCJib3RoXCIgbmFtZT1cInBvc2l0aW9uXCIgdmFsdWU9XCJib3RoXCIgY2xhc3M9XCJrLXJhZGlvXCIgKGNsaWNrKT1cInBvc2l0aW9uQ2hhbmdlKCRldmVudClcIi8+XG4gKiAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBmb3I9XCJib3RoXCI+Qm90aDwvbGFiZWw+PGJyLz5cbiAqICAgICAgIDwvZGl2PlxuICogICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIiBzdHlsZT1cImhlaWdodDogMjAwcHhcIj5cbiAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZSBbcG9zaXRpb25dPVwicG9zaXRpb25cIiBsZXQtcG9zaXRpb249XCJwb3NpdGlvblwiPlxuICogICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25DbGljaygpXCIgY2xhc3M9XCJrLWJ1dHRvblwiPkN1c3RvbSBhY3Rpb248L2J1dHRvbj5cbiAqICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIj5cbiAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCI+XG4gKiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgcG9zaXRpb246ICd0b3AnIHwgJ2JvdHRvbScgfCAnYm90aCcgPSAndG9wJztcbiAqXG4gKiAgICAgcHVibGljIGdyaWREYXRhID0gW3tcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAqICAgICAgICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgICAgICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICpcbiAqICAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coXCJidXR0b24gd2FzIGNsaWNrZWRcIik7XG4gKiAgICAgfVxuICpcbiAqICAgICBwdWJsaWMgcG9zaXRpb25DaGFuZ2UoeyB0YXJnZXQgfSk6IHZvaWQge1xuICogICAgICAgIHRoaXMucG9zaXRpb24gPSB0YXJnZXQudmFsdWU7XG4gKiAgICAgfVxuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBUb29sYmFyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBcInRvcFwiO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcG9zaXRpb24gb2YgdGhlIHRvb2xiYXIgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyB0b29sYmFydGVtcGxhdGVfZ3JpZCAlfSkpLlxuICAgICAqXG4gICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICogLSBgdG9wYCZtZGFzaDtQb3NpdGlvbnMgdGhlIHRvb2xiYXIgYWJvdmUgdGhlIGdyb3VwIHBhbmVsIG9yIGhlYWRlci5cbiAgICAgKiAtIGBib3R0b21gJm1kYXNoO1Bvc2l0aW9ucyB0aGUgdG9vbGJhciBiZWxvdyB0aGUgcGFnZXIuXG4gICAgICogLSBgYm90aGAmbWRhc2g7RGlzcGxheXMgdHdvIHRvb2xiYXIgaW5zdGFuY2VzLiBQb3NpdGlvbnMgdGhlIGZpcnN0IG9uZSBhYm92ZVxuICAgICAqIHRoZSBncm91cCBwYW5lbCBvciBoZWFkZXIgYW5kIHRoZSBzZWNvbmQgb25lIGJlbG93IHRoZSBwYWdlci5cbiAgICAgKi9cbiAgICBzZXQgcG9zaXRpb24ocG9zaXRpb24pIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICB9XG4gICAgZ2V0IHBvc2l0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcG9zaXRpb247XG4gICAgfVxufVxuVG9vbGJhclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVG9vbGJhclRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5Ub29sYmFyVGVtcGxhdGVEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgcG9zaXRpb246IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbXCJwb3NpdGlvblwiLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxTeW5jU2VydmljZSB7XG4gICAgY29uc3RydWN0b3Iobmdab25lKSB7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmVsZW1lbnRzID0gW107XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5oZWFkZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuYm9keVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmNoYW5nZXMuc3Vic2NyaWJlKGFyZ3MgPT4gdGhpcy5zY3JvbGxMZWZ0KGFyZ3MpKSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRW1pdHRlcihlbCwgc291cmNlVHlwZSkge1xuICAgICAgICB0aGlzLnVucmVnaXN0ZXIoc291cmNlVHlwZSk7XG4gICAgICAgIHRoaXMuZWxlbWVudHMucHVzaCh7IGVsZW1lbnQ6IGVsLCBzb3VyY2VUeXBlIH0pO1xuICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gXCJib2R5XCIgfHwgc291cmNlVHlwZSA9PT0gXCJoZWFkZXJcIikge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9icyA9IGZyb21FdmVudChlbCwgXCJzY3JvbGxcIikucGlwZShtYXAoKHsgdGFyZ2V0OiB7IHNjcm9sbExlZnQgfSB9KSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VUeXBlXG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBvYnMucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4gKHguc2Nyb2xsTGVmdCA9PT0geS5zY3JvbGxMZWZ0KSksIGZpbHRlcih4ID0+ICF0aGlzLnNvdXJjZSB8fCB0aGlzLnNvdXJjZSA9PT0geC5zb3VyY2VUeXBlKSwgdGFwKHggPT4gdGhpcy5zb3VyY2UgPSB4LnNvdXJjZVR5cGUpKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB0aGlzLmNoYW5nZXMubmV4dCh4KSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLmFkZChvYnMucGlwZShmaWx0ZXIoeCA9PiB0aGlzLnNvdXJjZSAmJiB0aGlzLnNvdXJjZSAhPT0geC5zb3VyY2VUeXBlKSlcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNvdXJjZSA9IHVuZGVmaW5lZCkpO1xuICAgICAgICAgICAgICAgIGlmIChzb3VyY2VUeXBlID09PSBcImJvZHlcIikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvZHlTdWJzY3JpcHRpb24uYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlclN1YnNjcmlwdGlvbi5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBkZXN0cm95XG4gICAgICovXG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaGVhZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYm9keVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBzY3JvbGxMZWZ0KHsgc2Nyb2xsTGVmdCwgc291cmNlVHlwZSB9KSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHggPT4gc291cmNlVHlwZSAhPT0geC5zb3VyY2VUeXBlKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh7IGVsZW1lbnQgfSkgPT4gZWxlbWVudC5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1bnJlZ2lzdGVyKHNvdXJjZVR5cGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmVsZW1lbnRzLmZpbmRJbmRleCh4ID0+IHguc291cmNlVHlwZSA9PT0gc291cmNlVHlwZSk7XG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlVHlwZSA9PT0gXCJoZWFkZXJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChzb3VyY2VUeXBlID09PSBcImJvZHlcIikge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblNjcm9sbFN5bmNTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TY3JvbGxTeW5jU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUmVzaXplU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWVtYmVyLW9yZGVyaW5nXG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IHRoaXMuZGlzcGF0Y2hlci5hc09ic2VydmFibGUoKS5waXBlKHRocm90dGxlVGltZSgxMDApKTtcbiAgICB9XG4gICAgY29ubmVjdChyZXNpemVzKSB7XG4gICAgICAgIHRoaXMucmVzaXplU3Vic2NyaXB0aW9uLmFkZChyZXNpemVzLnN1YnNjcmliZSh0aGlzLmRpc3BhdGNoZXIpKTtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVzaXplU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuUmVzaXplU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzTG9ja2VkID0gY29sdW1uID0+IGNvbHVtbi5wYXJlbnQgPyBpc0xvY2tlZChjb2x1bW4ucGFyZW50KSA6ICEhY29sdW1uLmxvY2tlZDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCByZXNpemVBcmdzID0gKGNvbHVtbiwgZXh0cmEpID0+IE9iamVjdC5hc3NpZ24oe1xuICAgIGNvbHVtbnM6IGxlYWZDb2x1bW5zKFtjb2x1bW5dKSxcbiAgICBsb2NrZWQ6IGlzTG9ja2VkKGNvbHVtbilcbn0sIGV4dHJhKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtblJlc2l6aW5nU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy50YWJsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5iYXRjaCA9IG51bGw7XG4gICAgfVxuICAgIHN0YXJ0KGNvbHVtbikge1xuICAgICAgICB0aGlzLnRyYWNrQ29sdW1ucyhjb2x1bW4pO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gKHRoaXMuY29sdW1uLmlzQ29sdW1uR3JvdXAgPyBbY29sdW1uXSA6IFtdKVxuICAgICAgICAgICAgLmNvbmNhdChsZWFmQ29sdW1ucyhbY29sdW1uXSkpO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgICAgbG9ja2VkOiBpc0xvY2tlZCh0aGlzLmNvbHVtbiksXG4gICAgICAgICAgICB0eXBlOiAnc3RhcnQnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNpemVDb2x1bW5zKGRlbHRhUGVyY2VudCkge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSByZXNpemVBcmdzKHRoaXMuY29sdW1uLCB7XG4gICAgICAgICAgICBkZWx0YVBlcmNlbnQsXG4gICAgICAgICAgICB0eXBlOiAncmVzaXplQ29sdW1uJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoYWN0aW9uKTtcbiAgICB9XG4gICAgcmVzaXplVGFibGUoY29sdW1uLCBkZWx0YSkge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSByZXNpemVBcmdzKGNvbHVtbiwge1xuICAgICAgICAgICAgZGVsdGEsXG4gICAgICAgICAgICB0eXBlOiAncmVzaXplVGFibGUnXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChhY3Rpb24pO1xuICAgIH1cbiAgICByZXNpemVkQ29sdW1uKHN0YXRlJCQxKSB7XG4gICAgICAgIHRoaXMucmVzaXplZENvbHVtbnMucHVzaChzdGF0ZSQkMSk7XG4gICAgfVxuICAgIGVuZCgpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VzLmVtaXQoe1xuICAgICAgICAgICAgY29sdW1uczogW10sXG4gICAgICAgICAgICByZXNpemVkQ29sdW1uczogdGhpcy5yZXNpemVkQ29sdW1ucyxcbiAgICAgICAgICAgIHR5cGU6ICdlbmQnXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZWdpc3RlclRhYmxlKHRhYmxlTWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy50YWJsZXMucHVzaCh0YWJsZU1ldGFkYXRhKTtcbiAgICAgICAgY29uc3QgdW5yZWdpc3RlclRhYmxlID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50YWJsZXMuc3BsaWNlKHRoaXMudGFibGVzLmluZGV4T2YodGFibGVNZXRhZGF0YSksIDEpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdW5yZWdpc3RlclRhYmxlO1xuICAgIH1cbiAgICBtZWFzdXJlQ29sdW1ucyhpbmZvKSB7XG4gICAgICAgIGlmICh0aGlzLmJhdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmJhdGNoLnB1c2goLi4uaW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9GaXRCYXRjaChpbmZvLCAoKSA9PiB0aGlzLmVuZCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdXRvRml0KC4uLmNvbHVtbnMpIHtcbiAgICAgICAgY29uc3Qgbm9uTG9ja2VkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiAhY29sdW1uLmlzTG9ja2VkKTtcbiAgICAgICAgdGhpcy5hdXRvRml0U3RhcnQobm9uTG9ja2VkQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuYXV0b0ZpdEJhdGNoKHRoaXMuYmF0Y2gsICgpID0+IHtcbiAgICAgICAgICAgIGlmIChub25Mb2NrZWRDb2x1bW5zLmxlbmd0aCA8IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbG9ja2VkQ29sdW1ucyA9IGNvbHVtbnMuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uaXNMb2NrZWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b0ZpdFN0YXJ0KGxvY2tlZENvbHVtbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b0ZpdEJhdGNoKHRoaXMuYmF0Y2gsICgpID0+IHRoaXMuZW5kKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRyYWNrQ29sdW1ucyhjb2x1bW4pIHtcbiAgICAgICAgdGhpcy5yZXNpemVkQ29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB9XG4gICAgYXV0b0ZpdFN0YXJ0KGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5iYXRjaCA9IFtdO1xuICAgICAgICB0aGlzLnJlc2l6ZWRDb2x1bW5zID0gW107XG4gICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2tlZCA9IGNvbHVtbnNbMF0uaXNMb2NrZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5lbWl0KHtcbiAgICAgICAgICAgIHR5cGU6ICdzdGFydCcsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgbG9ja2VkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgICB0eXBlOiAndHJpZ2dlckF1dG9GaXQnLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGxvY2tlZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXV0b0ZpdEJhdGNoKGluZm8sIG9uQ29tcGxldGUpIHtcbiAgICAgICAgY29uc3QgbG9ja2VkID0gaW5mby5sZW5ndGggPiAwID8gaW5mb1swXS5jb2x1bW4uaXNMb2NrZWQgOiBmYWxzZTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMgPSB0aGlzLnRhYmxlc1xuICAgICAgICAgICAgLmZpbHRlcih0YWJsZSA9PiB0YWJsZS5sb2NrZWQgPT09IGxvY2tlZClcbiAgICAgICAgICAgIC5tYXAodGFibGUgPT4gdGFibGUuYXV0b0ZpdChpbmZvKSk7XG4gICAgICAgIHppcCguLi5vYnNlcnZhYmxlcylcbiAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHdpZHRocyA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgICAgICAgY29sdW1uczogaW5mby5tYXAoaSA9PiBpLmNvbHVtbiksXG4gICAgICAgICAgICAgICAgdHlwZTogJ2F1dG9GaXRDb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgd2lkdGhzLFxuICAgICAgICAgICAgICAgIGxvY2tlZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAob25Db21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYmF0Y2ggPSBudWxsO1xuICAgIH1cbn1cbkNvbHVtblJlc2l6aW5nU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNGaWx0ZXJNZW51ID0gKHNldHRpbmdzKSA9PiB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnICYmIHNldHRpbmdzLmluZGV4T2YoJ21lbnUnKSA+IC0xO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0ZpbHRlclJvdyA9IChzZXR0aW5ncykgPT4gc2V0dGluZ3MgPT09IHRydWUgfHwgKHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgJiYgc2V0dGluZ3MuaW5kZXhPZigncm93JykgPiAtMSk7XG5cbmNvbnN0IGNvbnRhaW5zJDEgPSAobm9kZSwgcHJlZGljYXRlKSA9PiB7XG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgICAgaWYgKHByZWRpY2F0ZShub2RlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYGNsb3NlYCBldmVudCBvZiB0aGUgZmlsdGVyIGFuZCBjb2x1bW4tbWVudSBwb3B1cC5cbiAqL1xuY2xhc3MgUG9wdXBDbG9zZUV2ZW50IGV4dGVuZHMgUHJldmVudGFibGVFdmVudCB7XG4gICAgY29uc3RydWN0b3IoZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm9yaWdpbmFsRXZlbnQgPSBlO1xuICAgIH1cbn1cbmNvbnN0IERFRkFVTFRfUE9QVVBfQ0xBU1MgPSAnay1ncmlkLWZpbHRlci1wb3B1cCc7XG4vKipcbiAqIFRoZSBzZXJ2aWNlIHRoYXQgaXMgdXNlZCBmb3IgdGhlIHBvcHVwcyBvZiB0aGUgZmlsdGVyIGFuZCBjb2x1bW4gbWVudXNcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcmV1c2FibGVjdXN0b21maWx0ZXJzX2dyaWQgJX0jdG9jLWZpbHRlci1tZW51LXdpdGgtcG9wdXApKS5cbiAqL1xuY2xhc3MgU2luZ2xlUG9wdXBTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcihwb3B1cFNlcnZpY2UsIHJlbmRlcmVyLCBuZ1pvbmUsIHNjcm9sbFN5bmNTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgZmlsdGVyIG9yIGNvbHVtbiBtZW51cyBhcmUgYWJvdXQgdG8gY2xvc2UgYmVjYXVzZSB0aGUgdXNlciBjbGlja2VkIG91dHNpZGUgdGhlaXIgcG9wdXBzLlxuICAgICAgICAgKiBVc2VkIHRvIHByZXZlbnQgdGhlIHBvcHVwIGZyb20gY2xvc2luZy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub25DbG9zZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gc2Nyb2xsU3luY1NlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5kZXN0cm95KCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb3BlbihhbmNob3IsIHRlbXBsYXRlLCBwb3B1cFJlZiwgcG9wdXBDbGFzcyA9IERFRkFVTFRfUE9QVVBfQ0xBU1MpIHtcbiAgICAgICAgY29uc3QgdG9nZ2xlID0gaXNQcmVzZW50KHBvcHVwUmVmKSAmJiB0aGlzLnBvcHVwUmVmID09PSBwb3B1cFJlZjtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIGlmICghdG9nZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgICAgIGFuY2hvckFsaWduOiB7IHZlcnRpY2FsOiAnYm90dG9tJywgaG9yaXpvbnRhbDogZGlyZWN0aW9uIH0sXG4gICAgICAgICAgICAgICAgcG9wdXBBbGlnbjogeyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9LFxuICAgICAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yLFxuICAgICAgICAgICAgICAgIHBvcHVwQ2xhc3M6IHBvcHVwQ2xhc3MsXG4gICAgICAgICAgICAgICAgY29udGVudDogdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcG9zaXRpb25Nb2RlOiBcImFic29sdXRlXCJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5wb3B1cFJlZi5wb3B1cEVsZW1lbnQsICdkaXInLCB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncnRsJyA6ICdsdHInKTtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoQ2xvc2UoYW5jaG9yKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3B1cFJlZjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmRldGFjaENsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLnBvcHVwUmVmID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGRldGFjaENsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVDbGljaykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0dGFjaENsb3NlKHNraXBFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuZGV0YWNoQ2xvc2UoKTtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5yZW1vdmVDbGljayA9IHRoaXMucmVuZGVyZXIubGlzdGVuKFwiZG9jdW1lbnRcIiwgXCJjbGlja1wiLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb250YWlucyQxKGUudGFyZ2V0LCB4ID0+IHRoaXMucG9wdXBSZWYucG9wdXBFbGVtZW50ID09PSB4IHx8IHggPT09IHNraXBFbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgUG9wdXBDbG9zZUV2ZW50KGUpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DbG9zZS5uZXh0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghYXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5TaW5nbGVQb3B1cFNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNpbmdsZVBvcHVwU2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFBvcHVwU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFNjcm9sbFN5bmNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qIHRzbGludDpkaXNhYmxlOiBuby1iaXR3aXNlICovXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgYXBwZW5kID0gKGVsZW1lbnQpID0+IHtcbiAgICBsZXQgYXBwZW5kZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAoIWFwcGVuZGVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgYXBwZW5kZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH07XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdldERvY3VtZW50ID0gZWxlbWVudCA9PiBlbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGdldFdpbmRvdyA9IGVsZW1lbnQgPT4gZWxlbWVudC5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG9mZnNldCA9IGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IHsgY2xpZW50VG9wLCBjbGllbnRMZWZ0IH0gPSBnZXREb2N1bWVudChlbGVtZW50KTtcbiAgICBjb25zdCB7IHBhZ2VZT2Zmc2V0LCBwYWdlWE9mZnNldCB9ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICAgIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogdG9wICsgcGFnZVlPZmZzZXQgLSBjbGllbnRUb3AsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyBwYWdlWE9mZnNldCAtIGNsaWVudExlZnRcbiAgICB9O1xufTtcbi8qKlxuICogQGhpZGRlblxuICogSWYgdGhlIHRhcmdldCBpcyBiZWZvcmUgdGhlIGRyYWdnYWJsZSBlbGVtZW50LCByZXR1cm5zIGB0cnVlYC5cbiAqXG4gKiBET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcgPSA0XG4gKi9cbmNvbnN0IGlzVGFyZ2V0QmVmb3JlID0gKGRyYWdnYWJsZSwgdGFyZ2V0KSA9PiAodGFyZ2V0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGRyYWdnYWJsZSkgJiA0KSAhPT0gMDtcbi8qKlxuICogQGhpZGRlblxuICogSWYgdGhlIGNvbnRhaW5lciBhbmQgdGhlIGVsZW1lbnQgYXJlIHRoZSBzYW1lXG4gKiBvciBpZiB0aGUgY29udGFpbmVyIGhvbGRzIChjb250YWlucykgdGhlIGVsZW1lbnQsIHJldHVybnMgYHRydWVgLlxuICpcbiAqIERPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSA9IDE2XG4gKi9cbmNvbnN0IGNvbnRhaW5zJDIgPSAoZWxlbWVudCwgY29udGFpbmVyKSA9PiBlbGVtZW50ID09PSBjb250YWluZXIgfHxcbiAgICAoY29udGFpbmVyLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGVsZW1lbnQpICYgMTYpICE9PSAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHBvc2l0aW9uID0gKHRhcmdldCwgYmVmb3JlKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0UmVjdCA9IG9mZnNldCh0YXJnZXQpO1xuICAgIGNvbnN0IHsgb2Zmc2V0V2lkdGgsIG9mZnNldEhlaWdodCB9ID0gdGFyZ2V0O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXRSZWN0LmxlZnQgKyAoYmVmb3JlID8gMCA6IG9mZnNldFdpZHRoKTtcbiAgICBjb25zdCB0b3AgPSB0YXJnZXRSZWN0LnRvcDtcbiAgICBjb25zdCBoZWlnaHQgPSBvZmZzZXRIZWlnaHQ7XG4gICAgcmV0dXJuIHsgbGVmdCwgdG9wLCBoZWlnaHQgfTtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEcmFnQW5kRHJvcFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXIgPSBbXTtcbiAgICAgICAgdGhpcy5sYXN0VGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gICAgYWRkKHRhcmdldCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyLnB1c2godGFyZ2V0KTtcbiAgICB9XG4gICAgcmVtb3ZlKHRhcmdldCkge1xuICAgICAgICB0aGlzLnJlZ2lzdGVyID0gdGhpcy5yZWdpc3Rlci5maWx0ZXIoY3VycmVudCA9PiBjdXJyZW50ICE9PSB0YXJnZXQpO1xuICAgIH1cbiAgICBub3RpZnlEcmFnKGRyYWdnYWJsZSwgZWxlbWVudCwgbW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldEZvcihlbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMubGFzdFRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgZHJhZ2dhYmxlLFxuICAgICAgICAgICAgbW91c2VFdmVudCxcbiAgICAgICAgICAgIHRhcmdldDogdGhpcy5sYXN0VGFyZ2V0LFxuICAgICAgICAgICAgdHlwZTogJ2xlYXZlJ1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VzLm5leHQoe1xuICAgICAgICAgICAgICAgIGRyYWdnYWJsZSxcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldCxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZW50ZXInXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxhc3RUYXJnZXQgPSB0YXJnZXQ7XG4gICAgfVxuICAgIG5vdGlmeURyb3AoZHJhZ2dhYmxlLCBtb3VzZUV2ZW50KSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KHtcbiAgICAgICAgICAgIGRyYWdnYWJsZSxcbiAgICAgICAgICAgIG1vdXNlRXZlbnQsXG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMubGFzdFRhcmdldCxcbiAgICAgICAgICAgIHR5cGU6ICdkcm9wJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sYXN0VGFyZ2V0ID0gbnVsbDtcbiAgICB9XG4gICAgdGFyZ2V0Rm9yKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY29tcGFyZXIgPSBjb250YWlucyQyLmJpbmQobnVsbCwgZWxlbWVudCk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyLmZpbmQoKHsgZWxlbWVudDogeyBuYXRpdmVFbGVtZW50IH0gfSkgPT4gY29tcGFyZXIobmF0aXZlRWxlbWVudCkpO1xuICAgIH1cbn1cbkRyYWdBbmREcm9wU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuY29uc3QgdXBkYXRlQ2xhc3MgPSAoZWxlbWVudCwgdmFsaWQpID0+IHtcbiAgICBjb25zdCBpY29uID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuay1pY29uJyk7XG4gICAgaWNvbi5jbGFzc05hbWUgPSBpY29uLmNsYXNzTmFtZVxuICAgICAgICAucmVwbGFjZSgvKHBsdXN8Y2FuY2VsKS8sIHZhbGlkID8gJ3BsdXMnIDogJ2NhbmNlbCcpO1xufTtcbmNvbnN0IHVwZGF0ZUxvY2sgPSAoZWxlbWVudCwgbG9ja2VkID0gbnVsbCkgPT4ge1xuICAgIGNvbnN0IGljb24gPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5rLWljb24nKVsxXTtcbiAgICBjb25zdCB2YWx1ZSA9IGxvY2tlZCA9PSBudWxsID8gJycgOiAobG9ja2VkID8gJ2staS1sb2NrJyA6ICdrLWktdW5sb2NrJyk7XG4gICAgaWNvbi5jbGFzc05hbWUgPSBpY29uLmNsYXNzTmFtZVxuICAgICAgICAucmVwbGFjZSgvKGstaS11bmxvY2t8ay1pLWxvY2spLywgJycpICsgYCAke3ZhbHVlfWA7XG59O1xuY29uc3QgZGVjb3JhdGUgPSAoZWxlbWVudCwgdGFyZ2V0KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpO1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gJ2staGVhZGVyIGstZHJhZy1jbHVlJztcbiAgICBlbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBlbGVtZW50LnN0eWxlLnpJbmRleCA9ICcyMDAwMCc7XG4gICAgZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9IHRhcmdldFN0eWxlcy5wYWRkaW5nTGVmdDtcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdUb3AgPSB0YXJnZXRTdHlsZXMucGFkZGluZ1RvcDtcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdCb3R0b20gPSB0YXJnZXRTdHlsZXMucGFkZGluZ0JvdHRvbTtcbiAgICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IHRhcmdldFN0eWxlcy5wYWRkaW5nUmlnaHQ7XG4gICAgZWxlbWVudC5zdHlsZS53aWR0aCA9IHRhcmdldFN0eWxlcy53aWR0aDtcbiAgICBlbGVtZW50LnN0eWxlLmhlaWdodCA9IHRhcmdldFN0eWxlcy5oZWlnaHQ7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYWdIaW50U2VydmljZSB7XG4gICAgY29uc3RydWN0b3Ioc2FudGl6ZXIpIHtcbiAgICAgICAgdGhpcy5zYW50aXplciA9IHNhbnRpemVyO1xuICAgIH1cbiAgICBjcmVhdGUoZG93biwgdGFyZ2V0LCB0aXRsZSkge1xuICAgICAgICB0aGlzLmluaXRDb29yZHMoZG93bik7XG4gICAgICAgIHRoaXMuZG9tID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgZGVjb3JhdGUodGhpcy5kb20sIHRhcmdldCk7XG4gICAgICAgIGNvbnN0IHNhZmVUaXRsZSA9IHRoaXMuc2FudGl6ZXIuc2FuaXRpemUoU2VjdXJpdHlDb250ZXh0LkhUTUwsIHRpdGxlKTtcbiAgICAgICAgdGhpcy5kb20uaW5uZXJIVE1MID0gYFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1kcmFnLXN0YXR1cyBrLWktY2FuY2VsIGstaWNvbi13aXRoLW1vZGlmaWVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pY29uLW1vZGlmaWVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgJHtzYWZlVGl0bGV9XG4gICAgICAgIGA7XG4gICAgfVxuICAgIGF0dGFjaCgpIHtcbiAgICAgICAgcmV0dXJuIGFwcGVuZCh0aGlzLmRvbSk7XG4gICAgfVxuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9tICYmIHRoaXMuZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIChmdW5jdGlvbiAoZWwpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWwpKTtcbiAgICAgICAgICAgIH0pKHRoaXMuZG9tKTsgLy8gaGFjayBmb3IgSUUgKyBwb2ludGVyIGV2ZW50cyFcbiAgICAgICAgICAgIHRoaXMuZG9tID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG93KCkge1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgICAgdGhpcy5kb20uc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH1cbiAgICBlbmFibGUoKSB7XG4gICAgICAgIHVwZGF0ZUNsYXNzKHRoaXMuZG9tLCB0cnVlKTtcbiAgICB9XG4gICAgZGlzYWJsZSgpIHtcbiAgICAgICAgdXBkYXRlQ2xhc3ModGhpcy5kb20sIGZhbHNlKTtcbiAgICB9XG4gICAgcmVtb3ZlTG9jaygpIHtcbiAgICAgICAgdXBkYXRlTG9jayh0aGlzLmRvbSk7XG4gICAgfVxuICAgIHRvZ2dsZUxvY2sobG9ja2VkKSB7XG4gICAgICAgIHVwZGF0ZUxvY2sodGhpcy5kb20sIGxvY2tlZCk7XG4gICAgfVxuICAgIG1vdmUobW92ZSkge1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS50b3AgPSB0aGlzLmluaXRpYWxUb3AgKyBtb3ZlLnBhZ2VZICsgJ3B4JztcbiAgICAgICAgdGhpcy5kb20uc3R5bGUubGVmdCA9IHRoaXMuaW5pdGlhbExlZnQgKyBtb3ZlLnBhZ2VYICsgJ3B4JztcbiAgICB9XG4gICAgaW5pdENvb3Jkcyhkb3duKSB7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSBvZmZzZXQoZG93bi5vcmlnaW5hbEV2ZW50LnRhcmdldCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRvcCA9IHRvcCAtIGRvd24ucGFnZVk7XG4gICAgICAgIHRoaXMuaW5pdGlhbExlZnQgPSBsZWZ0IC0gZG93bi5wYWdlWDtcbiAgICB9XG59XG5EcmFnSGludFNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyYWdIaW50U2VydmljZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERvbVNhbml0aXplciB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRHJvcEN1ZVNlcnZpY2Uge1xuICAgIGNyZWF0ZSgpIHtcbiAgICAgICAgdGhpcy5kb20gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICB0aGlzLmRvbS5jbGFzc05hbWUgPSAnay1ncm91cGluZy1kcm9wY2x1ZSc7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cbiAgICBhdHRhY2goKSB7XG4gICAgICAgIHJldHVybiBhcHBlbmQodGhpcy5kb20pO1xuICAgIH1cbiAgICByZW1vdmUoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbSAmJiB0aGlzLmRvbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMuZG9tKTtcbiAgICAgICAgICAgIHRoaXMuZG9tID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoaWRlKCkge1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgfVxuICAgIHBvc2l0aW9uKHsgbGVmdCwgdG9wLCBoZWlnaHQgfSkge1xuICAgICAgICB0aGlzLmRvbS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgdGhpcy5kb20uc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgdGhpcy5kb20uc3R5bGUudG9wID0gdG9wICsgJ3B4JztcbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmRvbS5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICAgIHRoaXMuZG9tLnN0eWxlLmxlZnQgPSBsZWZ0IC0gd2lkdGggKyAncHgnO1xuICAgIH1cbn1cbkRyb3BDdWVTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uUmVvcmRlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIHJlb3JkZXIoZSkge1xuICAgICAgICB0aGlzLmNoYW5nZXMuZW1pdChlKTtcbiAgICB9XG59XG5Db2x1bW5SZW9yZGVyU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgY29sdW1uUmVvcmRlcmAgZXZlbnQuXG4gKi9cbmNsYXNzIENvbHVtblJlb3JkZXJFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7IGNvbHVtbiwgbmV3SW5kZXgsIG9sZEluZGV4IH0pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMubmV3SW5kZXggPSBuZXdJbmRleDtcbiAgICAgICAgdGhpcy5vbGRJbmRleCA9IG9sZEluZGV4O1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE5hdmlnYXRpb25NZXRhZGF0YSB7XG4gICAgY29uc3RydWN0b3IoZGF0YVJvd3MsIGhlYWRlclJvd3MsIGlzVmlydHVhbCwgaGFzUGFnZXIsIGhhc0RldGFpbFRlbXBsYXRlLCBncmlkRWxlbWVudCwgdmlydHVhbENvbHVtbnMsIGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5kYXRhUm93cyA9IGRhdGFSb3dzO1xuICAgICAgICB0aGlzLmhlYWRlclJvd3MgPSBoZWFkZXJSb3dzO1xuICAgICAgICB0aGlzLmlzVmlydHVhbCA9IGlzVmlydHVhbDtcbiAgICAgICAgdGhpcy5oYXNQYWdlciA9IGhhc1BhZ2VyO1xuICAgICAgICB0aGlzLmhhc0RldGFpbFRlbXBsYXRlID0gaGFzRGV0YWlsVGVtcGxhdGU7XG4gICAgICAgIHRoaXMuZ3JpZEVsZW1lbnQgPSBncmlkRWxlbWVudDtcbiAgICAgICAgdGhpcy52aXJ0dWFsQ29sdW1ucyA9IHZpcnR1YWxDb2x1bW5zO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbWF4TG9naWNhbFJvd0luZGV4KCkge1xuICAgICAgICBjb25zdCBkYXRhUm93cyA9IHRoaXMuaGFzRGV0YWlsVGVtcGxhdGUgPyB0aGlzLmRhdGFSb3dzICogMiA6IHRoaXMuZGF0YVJvd3M7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlclJvd3MgKyBkYXRhUm93cyAtIDE7XG4gICAgfVxufVxuXG4vLyBJbmNyZW1lbnRlZCBlYWNoIHRpbWUgdGhlIHNlcnZpY2UgaXMgaW5zdGFudGlhdGVkLlxubGV0IHNlcXVlbmNlID0gMDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBJZFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnByZWZpeCA9IGBrLWdyaWQke3NlcXVlbmNlKyt9YDtcbiAgICB9XG4gICAgY2VsbElkKHJvd0luZGV4LCBjb2xJbmRleCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LXIke3Jvd0luZGV4fWMke2NvbEluZGV4fWA7XG4gICAgfVxuICAgIHNlbGVjdGlvbkNoZWNrYm94SWQoaXRlbUluZGV4KSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnByZWZpeH0tY2hlY2tib3gke2l0ZW1JbmRleH1gO1xuICAgIH1cbiAgICBzZWxlY3RBbGxDaGVja2JveElkKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5wcmVmaXh9LXNlbGVjdC1hbGxgO1xuICAgIH1cbn1cbklkU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSWRTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW107XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2x1bW5JbmZvU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5sb2NrZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY29sdW1uUmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lciA9IG5ldyBDb2x1bW5zQ29udGFpbmVyKCgpID0+IFtdKTtcbiAgICB9XG4gICAgZ2V0IGxvY2tlZExlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmxvY2tlZExlYWZDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbm9uTG9ja2VkTGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIubm9uTG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBpc0xvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgZ2V0IHRvdGFsTGV2ZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLnRvdGFsTGV2ZWxzO1xuICAgIH1cbiAgICBnZXQgbGVhZk5hbWVkQ29sdW1ucygpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGV4cGFuZENvbHVtbnModGhpcy5saXN0KCkuZmlsdGVyU29ydChjb2x1bW4gPT4gIWNvbHVtbi5pc0NvbHVtbkdyb3VwKSlcbiAgICAgICAgICAgIC5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5tYXRjaGVzTWVkaWEgJiYgY29sdW1uLmRpc3BsYXlUaXRsZSk7XG4gICAgICAgIHJldHVybiBvcmRlckJ5KGNvbHVtbnMsIFt7IGZpZWxkOiAnbG9ja2VkJywgZGlyOiAnZGVzYycgfV0pO1xuICAgIH1cbiAgICBnZXQgdW5sb2NrZWRSb290Q291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpc3QoKS5yb290Q29sdW1ucygpLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5sb2NrZWQgJiYgY29sdW1uLmlzVmlzaWJsZSkubGVuZ3RoO1xuICAgIH1cbiAgICBpbml0KGNvbHVtbnMsIGxpc3QpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyID0gY29sdW1ucztcbiAgICAgICAgdGhpcy5saXN0ID0gbGlzdDtcbiAgICB9XG4gICAgY2hhbmdlVmlzaWJpbGl0eShjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZS5lbWl0KGNvbHVtbnMpO1xuICAgIH1cbiAgICBjaGFuZ2VMb2NrZWQoY29sdW1ucykge1xuICAgICAgICB0aGlzLmxvY2tlZENoYW5nZS5lbWl0KGNvbHVtbnMpO1xuICAgIH1cbn1cbkNvbHVtbkluZm9TZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU29ydFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmNoYW5nZXMgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cbiAgICBzb3J0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlcy5uZXh0KHZhbHVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYGNvbHVtblZpc2liaWxpdHlDaGFuZ2VgIGV2ZW50LlxuICovXG5jbGFzcyBDb2x1bW5WaXNpYmlsaXR5Q2hhbmdlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgfVxufVxuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBjb2x1bW5Mb2NrZWRDaGFuZ2VgIGV2ZW50LlxuICovXG5jbGFzcyBDb2x1bW5Mb2NrZWRDaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbHVtbnMpIHtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBHUk9VUF9DRUxMX1dJRFRIID0gMzI7IC8vIHRoaXMgc2hvdWxkIGJlIHRoZSB2YWx1ZSBvZiBncm91cC1jZWxsIGluc2lkZSB0aGUgdGhlbWUhXG5cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBkZWZhdWx0VHJhY2tCeShpbmRleCwgaXRlbSkge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdkYXRhJyAmJiBpdGVtLmlzRWRpdGluZykge1xuICAgICAgICByZXR1cm4gaXRlbS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG59XG5cbmNvbnN0IGNyZWF0ZUNvbnRyb2wgPSAoc291cmNlKSA9PiAoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9IG5ldyBGb3JtQ29udHJvbChzb3VyY2Vba2V5XSk7XG4gICAgcmV0dXJuIGFjYztcbn07XG5jb25zdCB2YWxpZGF0ZUNvbHVtbnNGaWVsZCA9IChjb2x1bW5zKSA9PiBleHBhbmRDb2x1bW5zKGNvbHVtbnMudG9BcnJheSgpKVxuICAgIC5maWx0ZXIoaXNDb2x1bW5Db21wb25lbnQpXG4gICAgLmZpbHRlcigoeyBmaWVsZCB9KSA9PiAhaXNWYWxpZEZpZWxkTmFtZShmaWVsZCkpXG4gICAgLmZvckVhY2goKHsgZmllbGQgfSkgPT4gY29uc29sZS53YXJuKGBcbiAgICAgICAgICAgICAgICBHcmlkIGNvbHVtbiBmaWVsZCBuYW1lICcke2ZpZWxkfScgZG9lcyBub3QgbG9vayBsaWtlIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLlxuICAgICAgICAgICAgICAgIElkZW50aWZpZXJzIGNhbiBjb250YWluIG9ubHkgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBcIiRcIiBvciBcIl9cIiksIGFuZCBtYXkgbm90IHN0YXJ0IHdpdGggYSBkaWdpdC5cbiAgICAgICAgICAgICAgICBQbGVhc2UgdXNlIG9ubHkgdmFsaWQgaWRlbnRpZmllciBuYW1lcyB0byBlbnN1cmUgZXJyb3ItZnJlZSBvcGVyYXRpb24uXG4gICAgICAgICAgICBgKSk7XG5jb25zdCBoYW5kbGVFeHBhbmRDb2xsYXBzZVNlcnZpY2UgPSAoc2VydmljZSwgZXhwYW5kRW1pdHRlciwgY29sbGFwc2VFbWl0dGVyLCBtYXAkJDEpID0+IChzZXJ2aWNlLmNoYW5nZXMucGlwZShmaWx0ZXIoKHsgZGF0YUl0ZW0gfSkgPT4gaXNQcmVzZW50KGRhdGFJdGVtKSkpXG4gICAgLnN1YnNjcmliZSgoeCkgPT4geC5leHBhbmQgPyBleHBhbmRFbWl0dGVyLmVtaXQobWFwJCQxKHgpKSA6IGNvbGxhcHNlRW1pdHRlci5lbWl0KG1hcCQkMSh4KSkpKTtcbmNvbnN0IGlzSW5FZGl0ZWRDZWxsID0gKGVsZW1lbnQsIGdyaWRFbGVtZW50KSA9PiBjbG9zZXN0KGVsZW1lbnQsIG1hdGNoZXNDbGFzc2VzKCdrLWdyaWQtZWRpdC1jZWxsJykpICYmXG4gICAgY2xvc2VzdChlbGVtZW50LCBtYXRjaGVzTm9kZU5hbWUoJ2tlbmRvLWdyaWQnKSkgPT09IGdyaWRFbGVtZW50O1xuY29uc3QgybU0JDIgPSBFTVBUWV9DRUxMX0NPTlRFWFQ7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIEtlbmRvIFVJIEdyaWQgY29tcG9uZW50IGZvciBBbmd1bGFyLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImdyaWREYXRhXCI+XG4gKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdID0gcHJvZHVjdHM7XG4gKiB9XG4gKlxuICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogIH0sIHtcbiAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogIH1cbiAqIF07XG4gKiBgYGBcbiAqL1xuY2xhc3MgR3JpZENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioc3VwcG9ydFNlcnZpY2UsIHNlbGVjdGlvblNlcnZpY2UsIGNlbGxTZWxlY3Rpb25TZXJ2aWNlLCB3cmFwcGVyLCBncm91cEluZm9TZXJ2aWNlLCBncm91cHNTZXJ2aWNlLCBjaGFuZ2VOb3RpZmljYXRpb24sIGRldGFpbHNTZXJ2aWNlLCBlZGl0U2VydmljZSwgZmlsdGVyU2VydmljZSwgcGRmU2VydmljZSwgcmVzcG9uc2l2ZVNlcnZpY2UsIHJlbmRlcmVyLCBleGNlbFNlcnZpY2UsIG5nWm9uZSwgc2Nyb2xsU3luY1NlcnZpY2UsIGRvbUV2ZW50cywgY29sdW1uUmVzaXppbmdTZXJ2aWNlLCBjaGFuZ2VEZXRlY3RvclJlZiwgY29sdW1uUmVvcmRlclNlcnZpY2UsIGNvbHVtbkluZm9TZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgc29ydFNlcnZpY2UsIHNjcm9sbFJlcXVlc3RTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0U2VydmljZSA9IHN1cHBvcnRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlID0gY2VsbFNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IHdyYXBwZXI7XG4gICAgICAgIHRoaXMuZ3JvdXBJbmZvU2VydmljZSA9IGdyb3VwSW5mb1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZSA9IGdyb3Vwc1NlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uID0gY2hhbmdlTm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLmRldGFpbHNTZXJ2aWNlID0gZGV0YWlsc1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlID0gZmlsdGVyU2VydmljZTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlID0gcGRmU2VydmljZTtcbiAgICAgICAgdGhpcy5yZXNwb25zaXZlU2VydmljZSA9IHJlc3BvbnNpdmVTZXJ2aWNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlID0gZXhjZWxTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZSA9IHNjcm9sbFN5bmNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmRvbUV2ZW50cyA9IGRvbUV2ZW50cztcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemluZ1NlcnZpY2UgPSBjb2x1bW5SZXNpemluZ1NlcnZpY2U7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYgPSBjaGFuZ2VEZXRlY3RvclJlZjtcbiAgICAgICAgdGhpcy5jb2x1bW5SZW9yZGVyU2VydmljZSA9IGNvbHVtblJlb3JkZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlID0gY29sdW1uSW5mb1NlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5zb3J0U2VydmljZSA9IHNvcnRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNjcm9sbFJlcXVlc3RTZXJ2aWNlID0gc2Nyb2xsUmVxdWVzdFNlcnZpY2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBkYXRhIG9mIHRoZSBHcmlkLiBJZiBhbiBhcnJheSBpcyBwcm92aWRlZCwgdGhlIEdyaWQgYXV0b21hdGljYWxseSBnZXRzIHRoZSB0b3RhbCBjb3VudFxuICAgICAgICAgKiAoW21vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfZ3JpZCAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kYXRhID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBzY3JvbGwgbW9kZSB1c2VkIGJ5IHRoZSBHcmlkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICAgICAgICAgKiAgLSBgbm9uZWAmbWRhc2g7UmVuZGVycyBubyBzY3JvbGxiYXIuXG4gICAgICAgICAqICAtIGBzY3JvbGxhYmxlYCZtZGFzaDtUaGUgZGVmYXVsdCBzY3JvbGwgbW9kZS4gSXQgcmVxdWlyZXMgdGhlIHNldHRpbmcgb2YgdGhlIGBoZWlnaHRgIG9wdGlvbi5cbiAgICAgICAgICogIC0gYHZpcnR1YWxgJm1kYXNoO0Rpc3BsYXlzIG5vIHBhZ2VyIGFuZCByZW5kZXJzIGEgcG9ydGlvbiBvZiB0aGUgZGF0YSAob3B0aW1pemVkIHJlbmRlcmluZykgd2hpbGUgdGhlIHVzZXIgaXMgc2Nyb2xsaW5nIHRoZSBjb250ZW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zY3JvbGxhYmxlID0gJ3Njcm9sbGFibGUnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRW5hYmxlcyB0aGUgc2luZ2xlLXJvdyBbc2VsZWN0aW9uXSh7JSBzbHVnIHNlbGVjdGlvbl9ncmlkICV9KSBvZiB0aGUgR3JpZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBmdW5jdGlvbiB0aGF0IGRlZmluZXMgaG93IHRvIHRyYWNrIGNoYW5nZXMgZm9yIHRoZSBkYXRhIHJvd3MuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBHcmlkIHRyYWNrcyBjaGFuZ2VzIGJ5IHRoZSBpbmRleCBvZiB0aGUgZGF0YSBpdGVtLlxuICAgICAgICAgKiBFZGl0ZWQgcm93cyBhcmUgdHJhY2tlZCBieSByZWZlcmVuY2UuXG4gICAgICAgICAqIEluIHNvbWUgY2FzZXMsIHlvdSBtaWdodCBuZWVkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yLFxuICAgICAgICAgKiBmb3IgZXhhbXBsZSwgd2hlbiB5b3UgaW1wbGVtZW50IGVkaXRpbmcgd2l0aCBpbW11dGFibGUgZGF0YSBpdGVtcy5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyBob3cgdG8gdHJhY2sgaXRlbXMgb25seSBieSBpbmRleC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogYGBgdHNcbiAgICAgICAgICogaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gICAgICAgICAqIGltcG9ydCB7IEdyaWRJdGVtIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZ3JpZCc7XG4gICAgICAgICAqXG4gICAgICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICAgKiAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIiBbdHJhY2tCeV09XCJ0cmFja0J5XCI+XG4gICAgICAgICAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gICAgICAgICAqICAgIGBcbiAgICAgICAgICogfSlcbiAgICAgICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IHByb2R1Y3RzO1xuICAgICAgICAgKlxuICAgICAgICAgKiAgICBwdWJsaWMgdHJhY2tCeShpbmRleDogbnVtYmVyLCBpdGVtOiBHcmlkSXRlbSk6IGFueSB7XG4gICAgICAgICAqICAgICAgICBjb25zb2xlLmxvZyhpdGVtKTtcbiAgICAgICAgICogICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgICAgICogICAgfVxuICAgICAgICAgKiB9XG4gICAgICAgICAqXG4gICAgICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAgICAgICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAgICAgKiAgfSwge1xuICAgICAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgICAgICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAgICAgICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgICAgICogIH1cbiAgICAgICAgICogXTtcbiAgICAgICAgICogYGBgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRyYWNrQnkgPSBkZWZhdWx0VHJhY2tCeTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBncmlkIHdpbGwgcmVuZGVyIG9ubHkgdGhlIGNvbHVtbnMgaW4gdGhlIGN1cnJlbnQgdmlld3BvcnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZpcnR1YWxDb2x1bW5zID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSBbZmlsdGVyaW5nXSh7JSBzbHVnIGZpbHRlcmluZ19ncmlkICV9KSBvZiB0aGUgR3JpZCBjb2x1bW5zIHRoYXQgaGF2ZSB0aGVpciBgZmllbGRgIG9wdGlvbiBzZXQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuYWJsZXMgdGhlIFtzb3J0aW5nXSh7JSBzbHVnIHNvcnRpbmdfZ3JpZCAlfSkgb2YgdGhlIEdyaWQgY29sdW1ucyB0aGF0IGhhdmUgdGhlaXIgYGZpZWxkYCBvcHRpb24gc2V0LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29uZmlndXJlcyB0aGUgcGFnZXIgb2YgdGhlIEdyaWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwYWdpbmdfZ3JpZCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgYXZhaWxhYmxlIG9wdGlvbnMgYXJlOlxuICAgICAgICAgKiAtIGBidXR0b25Db3VudDogTnVtYmVyYCZtZGFzaDtTZXRzIHRoZSBtYXhpbXVtIG51bWVyaWMgYnV0dG9ucyBjb3VudCBiZWZvcmUgdGhlIGJ1dHRvbnMgYXJlIGNvbGxhcHNlZC5cbiAgICAgICAgICogLSBgaW5mbzogQm9vbGVhbmAmbWRhc2g7VG9nZ2xlcyB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzLlxuICAgICAgICAgKiAtIGB0eXBlOiBQYWdlclR5cGVgJm1kYXNoO0FjY2VwdHMgdGhlIGBudW1lcmljYCAoYnV0dG9ucyB3aXRoIG51bWJlcnMpIGFuZCBgaW5wdXRgIChpbnB1dCBmb3IgdHlwaW5nIHRoZSBwYWdlIG51bWJlcikgdmFsdWVzLlxuICAgICAgICAgKiAtIGBwYWdlU2l6ZXM6IEJvb2xlYW5gIG9yIGBBcnJheTxudW1iZXI+YCZtZGFzaDtTaG93cyBhIG1lbnUgZm9yIHNlbGVjdGluZyB0aGUgcGFnZSBzaXplLlxuICAgICAgICAgKiAtIGBwcmV2aW91c05leHQ6IEJvb2xlYW5gJm1kYXNoO1RvZ2dsZXMgdGhlICoqUHJldmlvdXMqKiBhbmQgKipOZXh0KiogYnV0dG9ucy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGFnZWFibGUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB1c2VyIGNhbiBncm91cCB0aGUgR3JpZCBieSBkcmFnZ2luZyB0aGUgY29sdW1uIGhlYWRlciBjZWxscy5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgZ3JvdXBpbmcgaXMgZGlzYWJsZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBncm91cGluZ2Jhc2ljc19ncmlkICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwYWJsZSA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgc2V0IHRvIGB0cnVlYCwgdGhlIHVzZXIgY2FuIHVzZSBkZWRpY2F0ZWQgc2hvcnRjdXRzIHRvIGludGVyYWN0IHdpdGggdGhlIEdyaWQuXG4gICAgICAgICAqIEJ5IGRlZmF1bHQsIG5hdmlnYXRpb24gaXMgZGlzYWJsZWQgYW5kIHRoZSBHcmlkIGNvbnRlbnQgaXMgYWNjZXNzaWJsZSBpbiB0aGUgbm9ybWFsIHRhYiBzZXF1ZW5jZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubmF2aWdhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgR3JpZCBjb2x1bW5zIHdpbGwgYmUgcmVzaXplZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gc28gdGhhdFxuICAgICAgICAgKiB0aGV5IGZpdCB0aGVpciBoZWFkZXJzIGFuZCByb3cgY29udGVudC4gRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgICAgICogQ29sdW1ucyB3aXRoIGBhdXRvU2l6ZWAgc2V0IHRvIGBmYWxzZWAgYXJlIGV4Y2x1ZGVkLlxuICAgICAgICAgKiBUbyBkeW5hbWljYWxseSB1cGRhdGUgdGhlIGNvbHVtbiB3aWR0aCB0byBtYXRjaCB0aGUgbmV3IGNvbnRlbnQsXG4gICAgICAgICAqIHJlZmVyIHRvIFt0aGlzIGV4YW1wbGVdKHslIHNsdWcgcmVzaXppbmdfY29sdW1uc19ncmlkICV9KS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXV0b1NpemUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSB1c2VyIGNhbiByZXNpemUgY29sdW1ucyBieSBkcmFnZ2luZyB0aGUgZWRnZXMgKHJlc2l6ZSBoYW5kbGVzKSBvZiB0aGVpciBoZWFkZXIgY2VsbHNcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZXNpemluZ19jb2x1bW5zX2dyaWQgJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucmVzaXphYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBzZXQgdG8gYHRydWVgLCB0aGUgdXNlciBjYW4gcmVvcmRlciBjb2x1bW5zIGJ5IGRyYWdnaW5nIHRoZWlyIGhlYWRlciBjZWxsc1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJlb3JkZXJpbmdfY29sdW1uc19ncmlkICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlb3JkZXJhYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGxvYWRpbmcgaW5kaWNhdG9yIG9mIHRoZSBHcmlkIHdpbGwgYmUgZGlzcGxheWVkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZGF0YWJpbmRpbmdfZ3JpZCAlfSkpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIGNvbHVtbiBtZW51IG9mIHRoZSBjb2x1bW5zIHdpbGwgYmUgZGlzcGxheWVkIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgY29sdW1ubWVudV9ncmlkICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbHVtbk1lbnUgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgaGVhZGVyIG9mIHRoZSBncmlkIHdpbGwgYmUgaGlkZGVuLiBUaGUgaGVhZGVyIGlzIHZpc2libGUgYnkgZGVmYXVsdC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBUaGUgaGVhZGVyIGluY2x1ZGVzIGNvbHVtbiBoZWFkZXJzIGFuZCB0aGUgW2ZpbHRlciByb3ddKHslIHNsdWcgZmlsdGVyaW5nX2dyaWQgJX0jdG9jLWZpbHRlci1yb3cpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5oaWRlSGVhZGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBHcmlkIGZpbHRlciBpcyBtb2RpZmllZCB0aHJvdWdoIHRoZSBVSS5cbiAgICAgICAgICogWW91IGhhdmUgdG8gaGFuZGxlIHRoZSBldmVudCB5b3Vyc2VsZiBhbmQgZmlsdGVyIHRoZSBkYXRhLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBwYWdlIG9mIHRoZSBHcmlkIGlzIGNoYW5nZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwYWdpbmdfZ3JpZCAlfSkpLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGV2ZW50IHlvdXJzZWxmIGFuZCBwYWdlIHRoZSBkYXRhLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgZ3JvdXBpbmcgb2YgdGhlIEdyaWQgaXMgY2hhbmdlZC5cbiAgICAgICAgICogWW91IGhhdmUgdG8gaGFuZGxlIHRoZSBldmVudCB5b3Vyc2VsZiBhbmQgZ3JvdXAgdGhlIGRhdGEgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBncm91cGluZ2Jhc2ljc19ncmlkICV9KSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdyb3VwQ2hhbmdlID0gbmV3IFpvbmVBd2FyZUV2ZW50RW1pdHRlcih0aGlzLm5nWm9uZSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBzb3J0aW5nIG9mIHRoZSBHcmlkIGlzIGNoYW5nZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzb3J0aW5nX2dyaWQgJX0pKS5cbiAgICAgICAgICogWW91IGhhdmUgdG8gaGFuZGxlIHRoZSBldmVudCB5b3Vyc2VsZiBhbmQgc29ydCB0aGUgZGF0YS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgc2VsZWN0cyBhIEdyaWQgcm93LlxuICAgICAgICAgKiBFbWl0cyB0aGUgW2BTZWxlY3Rpb25FdmVudGBdKHslIHNsdWcgYXBpX2dyaWRfc2VsZWN0aW9uZXZlbnQgJX0jdG9jLXNlbGVjdGlvbmNoYW5nZSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGRhdGEgc3RhdGUgb2YgdGhlIEdyaWQgaXMgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGF0YVN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBleHBhbmRzIGEgZ3JvdXAgaGVhZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ncm91cEV4cGFuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY29sbGFwc2VzIGEgZ3JvdXAgaGVhZGVyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ncm91cENvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBleHBhbmRzIGEgbWFzdGVyIHJvdy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGV0YWlsRXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjb2xsYXBzZXMgYSBtYXN0ZXIgcm93LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZXRhaWxDb2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKkVkaXQqKiBjb21tYW5kIGJ1dHRvbiB0byBlZGl0IGEgcm93XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9I3RvYy1lZGl0aW5nLXJlY29yZHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKkNhbmNlbCoqIGNvbW1hbmQgYnV0dG9uIHRvIGNsb3NlIGEgcm93XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9I3RvYy1jYW5jZWxsaW5nLWVkaXRpbmcpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlICoqU2F2ZSoqIGNvbW1hbmQgYnV0dG9uIHRvIHNhdmUgY2hhbmdlcyBpbiBhIHJvd1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfdGVtcGxhdGVfZm9ybXNfZ3JpZCAlfSN0b2Mtc2F2aW5nLXJlY29yZHMpKS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSAqKlJlbW92ZSoqIGNvbW1hbmQgYnV0dG9uIHRvIHJlbW92ZSBhIHJvd1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfdGVtcGxhdGVfZm9ybXNfZ3JpZCAlfSN0b2MtcmVtb3ZpbmctcmVjb3JkcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgKipBZGQqKiBjb21tYW5kIGJ1dHRvbiB0byBhZGQgYSBuZXcgcm93XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ190ZW1wbGF0ZV9mb3Jtc19ncmlkICV9I3RvYy1hZGRpbmctcmVjb3JkcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hZGQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGxlYXZlcyBhbiBlZGl0ZWQgY2VsbCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfaW5jZWxsX2dyaWQgJX0jdG9jLWJhc2ljLWNvbmNlcHRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNlbGxDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgY2VsbCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfaW5jZWxsX2dyaWQgJX0jdG9jLWJhc2ljLWNvbmNlcHRzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNlbGxDbGljayA9IG5ldyBab25lQXdhcmVFdmVudEVtaXR0ZXIodGhpcy5uZ1pvbmUpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlICoqRXhwb3J0IHRvIFBERioqIGNvbW1hbmQgYnV0dG9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wZGZFeHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgKipFeHBvcnQgdG8gRXhjZWwqKiBjb21tYW5kIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhjZWxFeHBvcnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyB0aGUgcmVzaXppbmcgb2YgdGhlIGNvbHVtbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplID0gbmV3IFpvbmVBd2FyZUV2ZW50RW1pdHRlcih0aGlzLm5nWm9uZSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNvbXBsZXRlcyB0aGUgcmVvcmRlcmluZyBvZiB0aGUgY29sdW1uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5SZW9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb2x1bW5zIGZyb20gdGhlIGNvbHVtbiBtZW51IG9yIGNvbHVtbiBjaG9vc2VyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjaGFuZ2VzIHRoZSBsb2NrZWQgc3RhdGUgb2YgdGhlIGNvbHVtbnMgZnJvbSB0aGUgY29sdW1uIG1lbnUgb3IgYnkgcmVvcmRlcmluZyB0aGUgY29sdW1ucy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1uTG9ja2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBzY3JvbGxzIHRvIHRoZSBsYXN0IHJlY29yZCBvbiB0aGUgcGFnZSBhbmQgZW5hYmxlcyBlbmRsZXNzIHNjcm9sbGluZ1xuICAgICAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHNjcm9sbG1tb2Rlc19ncmlkICV9I3RvYy1lbmRsZXNzLXNjcm9sbGluZykpLlxuICAgICAgICAgKiBZb3UgaGF2ZSB0byBoYW5kbGUgdGhlIGV2ZW50IHlvdXJzZWxmIGFuZCBwYWdlIHRoZSBkYXRhLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zY3JvbGxCb3R0b20gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBncmlkIGNvbnRlbnQgaXMgc2Nyb2xsZWQuXG4gICAgICAgICAqIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGUgZXZlbnQgaXMgdHJpZ2dlcmVkIG91dHNpZGUgdGhlIEFuZ3VsYXIgem9uZS4gRW50ZXIgdGhlIEFuZ3VsYXIgem9uZSBpZiB5b3UgbWFrZSBhbnkgY2hhbmdlcyB0aGF0IHJlcXVpcmUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29udGVudFNjcm9sbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEEgcXVlcnkgbGlzdCBvZiBhbGwgZGVjbGFyZWQgY29sdW1ucy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5mb290ZXIgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uRGlyZWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lciA9IG5ldyBDb2x1bW5zQ29udGFpbmVyKCgpID0+IHRoaXMuY29sdW1uTGlzdC5maWx0ZXJIaWVyYXJjaHkoY29sdW1uID0+IHtcbiAgICAgICAgICAgIGNvbHVtbi5tYXRjaGVzTWVkaWEgPSB0aGlzLm1hdGNoZXNNZWRpYShjb2x1bW4pO1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5pc1Zpc2libGU7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy52aWV3ID0gbmV3IERhdGFDb2xsZWN0aW9uKCgpID0+IG5ldyBEYXRhUmVzdWx0SXRlcmF0b3IodGhpcy5kYXRhLCB0aGlzLnNraXAsIHRoaXMuaGFzR3JvdXBGb290ZXJzKSk7XG4gICAgICAgIHRoaXMuc2hvdWxkR2VuZXJhdGVDb2x1bW5zID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc29ydCA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLl9ncm91cCA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLl9za2lwID0gMDtcbiAgICAgICAgdGhpcy5jYWNoZWRXaW5kb3dXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuX3Jvd1NlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2VsbFNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgdGhpcy5ydGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcm93Q2xhc3MgPSAoKSA9PiBudWxsO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblN1YnNjcmlwdGlvbiA9IGxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ydGwgPSBydGw7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZ3JvdXBJbmZvU2VydmljZS5yZWdpc3RlckNvbHVtbnNDb250YWluZXIoKCkgPT4gdGhpcy5jb2x1bW5MaXN0KTtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZS5pbml0KHRoaXMuY29sdW1uc0NvbnRhaW5lciwgKCkgPT4gdGhpcy5jb2x1bW5MaXN0KTtcbiAgICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5jb2x1bW5JbmZvU2VydmljZS52aXNpYmlsaXR5Q2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlLmVtaXQobmV3IENvbHVtblZpc2liaWxpdHlDaGFuZ2VFdmVudChjaGFuZ2VkKSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbkxvY2tlZENoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuY29sdW1uSW5mb1NlcnZpY2UubG9ja2VkQ2hhbmdlLnN1YnNjcmliZSgoY2hhbmdlZCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5Mb2NrZWRDaGFuZ2UuZW1pdChuZXcgQ29sdW1uTG9ja2VkQ2hhbmdlRXZlbnQoY2hhbmdlZCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5ncm91cEV4cGFuZENvbGxhcHNlU3Vic2NyaXB0aW9uID0gaGFuZGxlRXhwYW5kQ29sbGFwc2VTZXJ2aWNlKGdyb3Vwc1NlcnZpY2UsIHRoaXMuZ3JvdXBFeHBhbmQsIHRoaXMuZ3JvdXBDb2xsYXBzZSwgKHsgZGF0YUl0ZW06IGdyb3VwLCBpbmRleCB9KSA9PiAoeyBncm91cCwgZ3JvdXBJbmRleDogaW5kZXggfSkpO1xuICAgICAgICB0aGlzLmRldGFpbHNTZXJ2aWNlU3Vic2NyaXB0aW9uID0gaGFuZGxlRXhwYW5kQ29sbGFwc2VTZXJ2aWNlKGRldGFpbHNTZXJ2aWNlLCB0aGlzLmRldGFpbEV4cGFuZCwgdGhpcy5kZXRhaWxDb2xsYXBzZSwgYXJncyA9PiBhcmdzKTtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLmZpbHRlclNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uID0gdGhpcy5zb3J0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICAgIHRoaXMuc29ydENoYW5nZS5lbWl0KHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdHRhY2hTdGF0ZUNoYW5nZXNFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoRWRpdEhhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMuYXR0YWNoRG9tRXZlbnRIYW5kbGVycygpO1xuICAgICAgICB0aGlzLnBkZlN1YnNjcmlwdGlvbiA9IHRoaXMucGRmU2VydmljZS5leHBvcnRDbGljay5zdWJzY3JpYmUodGhpcy5lbWl0UERGRXhwb3J0RXZlbnQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZXhjZWxTdWJzY3JpcHRpb24gPSB0aGlzLmV4Y2VsU2VydmljZS5leHBvcnRDbGljay5zdWJzY3JpYmUodGhpcy5zYXZlQXNFeGNlbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29sdW1uUmVzaXplKCk7XG4gICAgICAgIHRoaXMuY29sdW1uTGlzdCA9IG5ldyBDb2x1bW5MaXN0KHRoaXMuY29sdW1ucyk7XG4gICAgICAgIHRoaXMuY29sdW1uUmVvcmRlclN1YnNjcmlwdGlvbiA9IHRoaXMuY29sdW1uUmVvcmRlclNlcnZpY2VcbiAgICAgICAgICAgIC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnJlb3JkZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuY29sdW1uUmFuZ2VDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLmNvbHVtblJhbmdlQ2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uQ29sdW1uUmFuZ2VDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIG51bWJlciBvZiByZWNvcmRzIHRvIGJlIHNraXBwZWQgYnkgdGhlIHBhZ2VyLlxuICAgICAqIFJlcXVpcmVkIGJ5IHRoZSBbcGFnaW5nXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9KSBmdW5jdGlvbmFsaXR5LlxuICAgICAqL1xuICAgIGdldCBza2lwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2tpcDtcbiAgICB9XG4gICAgc2V0IHNraXAodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3NraXAgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgZGVzY3JpcHRvcnMgYnkgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBzb3J0ZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzb3J0aW5nX2dyaWQgJX0pKS5cbiAgICAgKi9cbiAgICBzZXQgc29ydCh2YWx1ZSkge1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvcnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc29ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBkZXNjcmlwdG9ycyBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIGdyb3VwZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBncm91cGluZ2Jhc2ljc19ncmlkICV9KSkuXG4gICAgICovXG4gICAgc2V0IGdyb3VwKHZhbHVlKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5fZ3JvdXAgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKi9cbiAgICBnZXQgZ3JvdXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ncm91cDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzaG93VG9wVG9vbGJhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhclRlbXBsYXRlICYmIFsndG9wJywgJ2JvdGgnXS5pbmRleE9mKHRoaXMudG9vbGJhclRlbXBsYXRlLnBvc2l0aW9uKSA+IC0xO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHNob3dCb3R0b21Ub29sYmFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyVGVtcGxhdGUgJiYgWydib3R0b20nLCAnYm90aCddLmluZGV4T2YodGhpcy50b29sYmFyVGVtcGxhdGUucG9zaXRpb24pID4gLTE7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaXNMb2NrZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc2hvd1BhZ2VyKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNWaXJ0dWFsICYmIHRoaXMucGFnZWFibGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHNob3dHcm91cFBhbmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cGFibGUgJiYgdGhpcy5ncm91cGFibGUuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgZ3JvdXBhYmxlRW1wdHlUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cGFibGUuZW1wdHlUZXh0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG1hcnF1ZWVTZWxlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZW5hYmxlTWFycXVlZSB8fCB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlLmVuYWJsZU1hcnF1ZWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEFuIGFsaWFzIGZvciBgbmF2aWdhYmxlYCBmb3IgdXNlcnMgd2hvIG1pZ3JhdGUgZnJvbSBLZW5kbyBVSSBmb3IgalF1ZXJ5LlxuICAgICAqL1xuICAgIHNldCBuYXZpZ2F0YWJsZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLm5hdmlnYWJsZSA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG5hdmlnYXRhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2FibGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgYSBmdW5jdGlvbiB0aGF0IGlzIGV4ZWN1dGVkIGZvciBldmVyeSBkYXRhIHJvdyBpbiB0aGUgY29tcG9uZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IENvbXBvbmVudCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAgICAgKiBpbXBvcnQgeyBSb3dDbGFzc0FyZ3MgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcbiAgICAgKlxuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICAgKiAgICBzdHlsZXM6IFtgXG4gICAgICogICAgICAgIC5rLWdyaWQgdHIuZXZlbiB7IGJhY2tncm91bmQtY29sb3I6ICNmNDVjNDI7IH1cbiAgICAgKiAgICAgICAgLmstZ3JpZCB0ci5vZGQgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjNDFmNGRmOyB9XG4gICAgICogICAgYF0sXG4gICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIiBbcm93Q2xhc3NdPVwicm93Q2FsbGJhY2tcIj5cbiAgICAgKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICAgICAqICAgIGBcbiAgICAgKiB9KVxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IHByb2R1Y3RzO1xuICAgICAqXG4gICAgICogICAgcHVibGljIHJvd0NhbGxiYWNrKGNvbnRleHQ6IFJvd0NsYXNzQXJncykge1xuICAgICAqICAgICAgICBjb25zdCBpc0V2ZW4gPSBjb250ZXh0LmluZGV4ICUgMiA9PSAwO1xuICAgICAqICAgICAgICByZXR1cm4ge1xuICAgICAqICAgICAgICAgICAgZXZlbjogaXNFdmVuLFxuICAgICAqICAgICAgICAgICAgb2RkOiAhaXNFdmVuXG4gICAgICogICAgICAgIH07XG4gICAgICogICAgfVxuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAxLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gICAgICogIH0sIHtcbiAgICAgKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICAgICAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAgICAgKiAgfVxuICAgICAqIF07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgc2V0IHJvd0NsYXNzKGZuKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUgJiYgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvd0NsYXNzIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZm4pfS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yb3dDbGFzcyA9IGZuO1xuICAgIH1cbiAgICBnZXQgcm93Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dDbGFzcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIEJvb2xlYW4gZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBmb3IgZWFjaCBkYXRhIHJvdyBpbiB0aGUgY29tcG9uZW50XG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtc2VsZWN0ZWQtcm93cykpLlxuICAgICAqIERldGVybWluZXMgd2hldGhlciB0aGUgcm93IHdpbGwgYmUgc2VsZWN0ZWQuXG4gICAgICovXG4gICAgc2V0IHJvd1NlbGVjdGVkKGZuKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUgJiYgdHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJvd1NlbGVjdGVkIG11c3QgYmUgYSBmdW5jdGlvbiwgYnV0IHJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoZm4pfS5gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yb3dTZWxlY3RlZCA9IGZuO1xuICAgIH1cbiAgICBnZXQgcm93U2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dTZWxlY3RlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBhIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgYSBkYXRhIGNlbGwuXG4gICAgICogUmV0dXJucyBhbiBvYmplY3Qgd2l0aCBgc2VsZWN0ZWRgIGFuZCBgaXRlbWAgcHJvcGVydGllcy5cbiAgICAgKiBUaGUgY2VsbCBpcyBtYXJrZWQgYXMgc2VsZWN0ZWQgb25seSBpZiB0aGUgYHNlbGVjdGVkYCBwcm9wZXJ0eSBlcXVhbHMgYHRydWVgLlxuICAgICAqXG4gICAgICogVGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGZvciBlYWNoIGRhdGEgY2VsbCBhbmQgbWF5IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZVxuICAgICAqIGFzIHBhcnQgb2YgYSBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdyaWRfc2VsZWN0aW9uX2N1c3RvbSAlfXRvYy1zZXR0aW5nLXRoZS1zZWxlY3RlZC1jZWxscykpXG4gICAgICovXG4gICAgc2V0IGNlbGxTZWxlY3RlZChmbikge1xuICAgICAgICBpZiAoaXNEZXZNb2RlICYmIHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjZWxsU2VsZWN0ZWQgbXVzdCBiZSBhIGZ1bmN0aW9uLCBidXQgcmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShmbil9LmApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NlbGxTZWxlY3RlZCA9IGZuO1xuICAgIH1cbiAgICBnZXQgY2VsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2VsbFNlbGVjdGVkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgZm9jdXNlZCBjZWxsIChpZiBhbnkpLlxuICAgICAqL1xuICAgIGdldCBhY3RpdmVDZWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3RpdmVDZWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgZm9jdXNlZCByb3cgKGlmIGFueSkuXG4gICAgICovXG4gICAgZ2V0IGFjdGl2ZVJvdygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYWN0aXZlUm93O1xuICAgIH1cbiAgICBnZXQgZGlyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBsb2NrZWRDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBnZXQgdmlydHVhbENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmlydHVhbDtcbiAgICB9XG4gICAgZ2V0IG5vU2Nyb2xsYmFyQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbGJhcldpZHRoID09PSAwO1xuICAgIH1cbiAgICBnZXQgZGV0YWlsVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXN0b21EZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbURldGFpbFRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbFRlbXBsYXRlQ2hpbGRyZW4gPyB0aGlzLmRldGFpbFRlbXBsYXRlQ2hpbGRyZW4uZmlyc3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldCBkZXRhaWxUZW1wbGF0ZShkZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLl9jdXN0b21EZXRhaWxUZW1wbGF0ZSA9IGRldGFpbFRlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgbm9SZWNvcmRzVGVtcGxhdGUoKSB7XG4gICAgICAgIGlmICh0aGlzLl9jdXN0b21Ob1JlY29yZHNUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1c3RvbU5vUmVjb3Jkc1RlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vUmVjb3Jkc1RlbXBsYXRlQ2hpbGRyZW4gPyB0aGlzLm5vUmVjb3Jkc1RlbXBsYXRlQ2hpbGRyZW4uZmlyc3QgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHNldCBub1JlY29yZHNUZW1wbGF0ZShjdXN0b21Ob1JlY29yZHNUZW1wbGF0ZSkge1xuICAgICAgICB0aGlzLl9jdXN0b21Ob1JlY29yZHNUZW1wbGF0ZSA9IGN1c3RvbU5vUmVjb3Jkc1RlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgcGFnZXJUZW1wbGF0ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2N1c3RvbVBhZ2VyVGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXN0b21QYWdlclRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VyVGVtcGxhdGVDaGlsZHJlbiA/IHRoaXMucGFnZXJUZW1wbGF0ZUNoaWxkcmVuLmZpcnN0IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzZXQgcGFnZXJUZW1wbGF0ZShjdXN0b21QYWdlclRlbXBsYXRlKSB7XG4gICAgICAgIHRoaXMuX2N1c3RvbVBhZ2VyVGVtcGxhdGUgPSBjdXN0b21QYWdlclRlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgdG9vbGJhclRlbXBsYXRlKCkge1xuICAgICAgICBpZiAodGhpcy5fY3VzdG9tVG9vbGJhclRlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY3VzdG9tVG9vbGJhclRlbXBsYXRlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2xiYXJUZW1wbGF0ZUNoaWxkcmVuID8gdGhpcy50b29sYmFyVGVtcGxhdGVDaGlsZHJlbi5maXJzdCA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgc2V0IHRvb2xiYXJUZW1wbGF0ZShjdXN0b21Ub29sYmFyVGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5fY3VzdG9tVG9vbGJhclRlbXBsYXRlID0gY3VzdG9tVG9vbGJhclRlbXBsYXRlO1xuICAgIH1cbiAgICBnZXQgc2Nyb2xsYmFyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cHBvcnRTZXJ2aWNlLnNjcm9sbGJhcldpZHRoO1xuICAgIH1cbiAgICBnZXQgaGVhZGVyUGFkZGluZygpIHtcbiAgICAgICAgaWYgKGlzVW5pdmVyc2FsKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhZGRpbmcgPSBNYXRoLm1heCgwLCB0aGlzLnNjcm9sbGJhcldpZHRoIC0gMSkgKyAncHgnO1xuICAgICAgICBjb25zdCByaWdodCA9IHRoaXMucnRsID8gMCA6IHBhZGRpbmc7XG4gICAgICAgIGNvbnN0IGxlZnQgPSB0aGlzLnJ0bCA/IHBhZGRpbmcgOiAwO1xuICAgICAgICByZXR1cm4gYDAgJHtyaWdodH0gMCAke2xlZnR9YDtcbiAgICB9XG4gICAgZ2V0IGhhc0dyb3VwRm9vdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5oYXNHcm91cEZvb3RlcjtcbiAgICB9XG4gICAgZ2V0IHNob3dGb290ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIuaGFzRm9vdGVyO1xuICAgIH1cbiAgICBnZXQgc2hvd0dyb3VwRm9vdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBhYmxlICYmIHRoaXMuZ3JvdXBhYmxlLnNob3dGb290ZXI7XG4gICAgfVxuICAgIGdldCBhcmlhUm93Q291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsQ29sdW1uTGV2ZWxzICsgMSArIHRoaXMudmlldy50b3RhbDtcbiAgICB9XG4gICAgZ2V0IGFyaWFDb2xDb3VudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5sZWFmQ29sdW1uc1RvUmVuZGVyLmxlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGlzVmlydHVhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYWJsZSA9PT0gJ3ZpcnR1YWwnO1xuICAgIH1cbiAgICBnZXQgaXNTY3JvbGxhYmxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY3JvbGxhYmxlICE9PSAnbm9uZSc7XG4gICAgfVxuICAgIGdldCB2aXNpYmxlQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5hbGxDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbG9ja2VkQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5sb2NrZWRDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbm9uTG9ja2VkQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgbG9ja2VkTGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIubG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IGxlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmxlYWZDb2x1bW5zO1xuICAgIH1cbiAgICBnZXQgdG90YWxDb2x1bW5MZXZlbHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnNDb250YWluZXIudG90YWxMZXZlbHM7XG4gICAgfVxuICAgIGdldCBoZWFkZXJDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsQ29sdW1ucyAmJiAhdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydGluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRDb2x1bW5zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5vbkxvY2tlZENvbHVtbnM7XG4gICAgfVxuICAgIGdldCBoZWFkZXJMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMgJiYgIXRoaXMucGRmU2VydmljZS5leHBvcnRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxlYWZWaWV3cG9ydENvbHVtbnM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubm9uTG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBsb2NrZWRXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBDZWxsc1dpZHRoID0gdGhpcy5ncm91cC5sZW5ndGggKiBHUk9VUF9DRUxMX1dJRFRIO1xuICAgICAgICByZXR1cm4gZXhwYW5kQ29sdW1ucyh0aGlzLmxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKSkucmVkdWNlKChwcmV2LCBjdXJyKSA9PiBwcmV2ICsgKGN1cnIud2lkdGggfHwgMCksIGdyb3VwQ2VsbHNXaWR0aCk7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRXaWR0aCgpIHtcbiAgICAgICAgaWYgKCghdGhpcy5ydGwgJiYgdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGgpIHx8IHRoaXMudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy52aXJ0dWFsQ29sdW1ucyA/IHRoaXMuY29sdW1uc0NvbnRhaW5lci51bmxvY2tlZFdpZHRoIDpcbiAgICAgICAgICAgICAgICB0aGlzLmxlYWZWaWV3cG9ydENvbHVtbnMucmVkdWNlKChhY2MsIGNvbHVtbikgPT4gYWNjICsgKGNvbHVtbi53aWR0aCB8fCAwKSwgMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IHNlbGVjdGFibGVTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2VydmljZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5vcHRpb25zO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBjb2x1bW5NZW51VGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5jb2x1bW5NZW51VGVtcGxhdGVzLmZpcnN0O1xuICAgICAgICByZXR1cm4gdGVtcGxhdGUgPyB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IG51bGw7XG4gICAgfVxuICAgIGdldCB0b3RhbENvdW50KCkge1xuICAgICAgICBpZiAodGhpcy5pc1ZpcnR1YWwgfHwgIWlzUHJlc2VudCh0aGlzLnBhZ2VTaXplKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmlldy50b3RhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYWdlU2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXhwYW5kcyB0aGUgc3BlY2lmaWVkIG1hc3RlciByb3cgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBoaWVyYXJjaHlfZ3JpZCAlfSkpLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgdmVyc2lvbnMuXG4gICAgICogVGhlc2UgdmVyc2lvbnMgdHJhY2tlZCB0aGUgZXhwYW5kZWQgc3RhdGUgaW50ZXJuYWxseSB1c2luZyB0aGUgZGF0YSByb3cgaW5kZXguXG4gICAgICpcbiAgICAgKiBGb3IgbmV3IGRldmVsb3BtZW50LCB1c2UgdGhlIFtga2VuZG9HcmlkRGV0YWlsc0V4cGFuZEJ5YCBkaXJlY3RpdmVdKHslIHNsdWcgYXBpX2dyaWRfZXhwYW5kZGV0YWlsc2RpcmVjdGl2ZSAlfSlcbiAgICAgKiBvciBwcm92aWRlIGFuIGlzRGV0YWlsRXhwYW5kZWQgY2FsbGJhY2suIFNlZSBbQ29udHJvbGxpbmcgdGhlIEV4cGFuZGVkIFN0YXRlXSh7JSBzbHVnIG1hc3Rlcl9kZXRhaWxfZXhwYW5kZWRfc3RhdGVfZ3JpZCAlfSlcbiAgICAgKiBmb3IgZXhhbXBsZXMgb24gaG93IHRvIGNvbnRyb2wgdGhlIGV4cGFuZGVkIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGRhdGEgcm93IGluZGV4IG9mIHRoZSBtYXN0ZXIgcm93LlxuICAgICAqL1xuICAgIGV4cGFuZFJvdyhpbmRleCkge1xuICAgICAgICB0aGlzLnRvZ2dsZURldGFpbFJvd0xlZ2FjeShpbmRleCwgdHJ1ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbGxhcHNlcyB0aGUgc3BlY2lmaWVkIG1hc3RlciByb3cgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBoaWVyYXJjaHlfZ3JpZCAlfSkpLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgaXMgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgdmVyc2lvbnMuXG4gICAgICogVGhlc2UgdmVyc2lvbnMgdHJhY2tlZCB0aGUgZXhwYW5kZWQgc3RhdGUgaW50ZXJuYWxseSB1c2luZyB0aGUgZGF0YSByb3cgaW5kZXguXG4gICAgICpcbiAgICAgKiBGb3IgbmV3IGRldmVsb3BtZW50LCB1c2UgdGhlIFtga2VuZG9HcmlkRGV0YWlsc0V4cGFuZEJ5YCBkaXJlY3RpdmVdKHslIHNsdWcgYXBpX2dyaWRfZXhwYW5kZGV0YWlsc2RpcmVjdGl2ZSAlfSlcbiAgICAgKiBvciBwcm92aWRlIGFuIGlzRGV0YWlsRXhwYW5kZWQgY2FsbGJhY2suIFNlZSBbQ29udHJvbGxpbmcgdGhlIEV4cGFuZGVkIFN0YXRlXSh7JSBzbHVnIG1hc3Rlcl9kZXRhaWxfZXhwYW5kZWRfc3RhdGVfZ3JpZCAlfSlcbiAgICAgKiBmb3IgZXhhbXBsZXMgb24gaG93IHRvIGNvbnRyb2wgdGhlIGV4cGFuZGVkIHN0YXRlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGRhdGEgcm93IGluZGV4IG9mIHRoZSBtYXN0ZXIgcm93LlxuICAgICAqL1xuICAgIGNvbGxhcHNlUm93KGluZGV4KSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRGV0YWlsUm93TGVnYWN5KGluZGV4LCBmYWxzZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV4cGFuZHMgYSBncm91cCBoZWFkZXIgaXRlbSBmb3IgdGhlIGdpdmVuIGluZGV4LiBGb3IgZXhhbXBsZSxcbiAgICAgKiBgMF8xYCBleHBhbmRzIHRoZSBzZWNvbmQgaW5uZXIgZ3JvdXAgb2YgdGhlIGZpcnN0IG1hc3RlciBncm91cC5cbiAgICAgKlxuICAgICAqID4gKiBXaGVuIHlvdSB1c2UgdGhlIFtga2VuZG9HcmlkR3JvdXBCaW5kaW5nYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncm91cGJpbmRpbmdkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZSxcbiAgICAgKiA+IHRoZSBgZXhwYW5kR3JvdXBgIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkLlxuICAgICAqID4gKiBXaGVuIGEgR3JpZCBpcyBwYWdlYWJsZSwgdGhlIGluZGV4ZXMgb2YgdGhlIGdyb3VwcyBhcmUgb2Zmc2V0IGJ5IHRoZSBjdXJyZW50IEdyaWQgW2Bza2lwYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1za2lwKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleCAtIFRoZSB1bmRlcnNjb3JlIHNlcGFyYXRlZCBoaWVyYXJjaGljYWwgaW5kZXggb2YgdGhlIGdyb3VwLlxuICAgICAqL1xuICAgIGV4cGFuZEdyb3VwKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5ncm91cHNTZXJ2aWNlLmlzRXhwYW5kZWQoaW5kZXgpKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudG9nZ2xlUm93KGluZGV4LCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb2xsYXBzZXMgYSBncm91cCBoZWFkZXIgaXRlbSBmb3IgdGhlIGdpdmVuIGluZGV4LiBGb3IgZXhhbXBsZSxcbiAgICAgKiBgMF8xYCBjb2xsYXBzZXMgdGhlIHNlY29uZCBpbm5lciBncm91cCBvZiB0aGUgZmlyc3QgbWFzdGVyIGdyb3VwLlxuICAgICAqXG4gICAgICogPiAqIFdoZW4geW91IHVzZSB0aGUgW2BrZW5kb0dyaWRHcm91cEJpbmRpbmdgXSh7JSBzbHVnIGFwaV9ncmlkX2dyb3VwYmluZGluZ2RpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLFxuICAgICAqID4gdGhlIGBjb2xsYXBzZUdyb3VwYCBtZXRob2QgaXMgbm90IHN1cHBvcnRlZC5cbiAgICAgKiA+ICogV2hlbiBhIEdyaWQgaXMgcGFnZWFibGUsIHRoZSBpbmRleGVzIG9mIHRoZSBncm91cHMgYXJlIG9mZnNldCBieSB0aGUgY3VycmVudCBHcmlkIFtgc2tpcGBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2Mtc2tpcCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5kZXggLSBUaGUgdW5kZXJzY29yZSBzZXBhcmF0ZWQgaGllcmFyY2hpY2FsIGluZGV4IG9mIHRoZSBncm91cC5cbiAgICAgKi9cbiAgICBjb2xsYXBzZUdyb3VwKGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmdyb3Vwc1NlcnZpY2UuaXNFeHBhbmRlZChpbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZS50b2dnbGVSb3coaW5kZXgsIG51bGwpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZXNldEdyb3Vwc1N0YXRlKCkge1xuICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UucmVzZXQoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGV4cGFuZEdyb3VwQ2hpbGRyZW4oZ3JvdXBJbmRleCkge1xuICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UuZXhwYW5kQ2hpbGRyZW4oZ3JvdXBJbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkRhdGFDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXV0b0dlbmVyYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNoYW5nZU5vdGlmaWNhdGlvbi5ub3RpZnkoKTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlLmRhdGFDaGFuZ2VkLmVtaXQoKTtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmRlZmF1bHRTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3Rpb24ucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRTZWxlY3Rpb25TZXJ2aWNlKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbk1ldGFkYXRhKCk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZChcImRhdGFcIiwgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoICYmIGFueUNoYW5nZWQoW1wicGFnZVNpemVcIiwgXCJza2lwXCIsIFwic29ydFwiLCBcImdyb3VwXCJdLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VOb3RpZmljYXRpb24ubm90aWZ5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFueUNoYW5nZWQoW1wicGFnZVNpemVcIiwgXCJzY3JvbGxhYmxlXCIsICd2aXJ0dWFsQ29sdW1ucyddLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uTWV0YWRhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwidmlydHVhbENvbHVtbnNcIiwgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMudmlld3BvcnRDb2x1bW5zID0gdGhpcy5sZWFmVmlld3BvcnRDb2x1bW5zID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwiaGVpZ2h0XCIsIGNoYW5nZXMsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudCwgJ2hlaWdodCcsIGAke3RoaXMuaGVpZ2h0fXB4YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2hhbmdlZChcImZpbHRlcmFibGVcIiwgY2hhbmdlcykgJiYgdGhpcy5sb2NrZWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zeW5jSGVhZGVySGVpZ2h0KHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlDaGFuZ2VkKFtcImNvbHVtbk1lbnVcIiwgXCJzb3J0YWJsZVwiLCBcImZpbHRlcmFibGVcIl0sIGNoYW5nZXMsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZW51T3B0aW9ucyA9IHRoaXMuY29sdW1uTWVudSAmJiBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IEJvb2xlYW4odGhpcy5maWx0ZXJhYmxlKSxcbiAgICAgICAgICAgICAgICBzb3J0OiBCb29sZWFuKHRoaXMuc29ydGFibGUpXG4gICAgICAgICAgICB9LCB0aGlzLmNvbHVtbk1lbnUpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQ2hhbmdlZChcInNjcm9sbGFibGVcIiwgY2hhbmdlcykgJiYgdGhpcy5pc1Njcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuYXR0YWNoU2Nyb2xsU3luYygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwic2VsZWN0YWJsZVwiLCBjaGFuZ2VzKSAmJiB0aGlzLnNob3VsZFJlc2V0U2VsZWN0aW9uKGNoYW5nZXMuc2VsZWN0YWJsZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlZmF1bHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3Rpb24ucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uRGlyZWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25EaXJlY3RpdmUucmVzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuYXR0YWNoU2Nyb2xsU3luYygpO1xuICAgICAgICB0aGlzLmF0dGFjaEVsZW1lbnRFdmVudEhhbmRsZXJzKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbk1ldGFkYXRhKCk7XG4gICAgICAgIHRoaXMuYXBwbHlBdXRvU2l6ZSgpO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lci5yZWZyZXNoKCk7XG4gICAgICAgIHRoaXMudmVyaWZ5U2V0dGluZ3MoKTtcbiAgICAgICAgdGhpcy5pbml0U2VsZWN0aW9uU2VydmljZSgpO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuc2hvdWxkR2VuZXJhdGVDb2x1bW5zID0gIXRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgIHRoaXMuYXV0b0dlbmVyYXRlQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNvbHVtbkxpc3QgPSBuZXcgQ29sdW1uTGlzdCh0aGlzLmNvbHVtbnMpO1xuICAgICAgICB0aGlzLmNvbHVtbnNDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmNvbHVtbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy52ZXJpZnlTZXR0aW5ncygpKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pbml0KHRoaXMubmF2aWdhdGlvbk1ldGFkYXRhKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25TdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEV4cGFuZENvbGxhcHNlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwRXhwYW5kQ29sbGFwc2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXRhaWxzU2VydmljZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxzU2VydmljZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmVkaXRTZXJ2aWNlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGRmU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnBkZlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zb3J0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2x1bW5zQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leGNlbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGNlbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbnNDb250YWluZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lckNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXRhY2hFbGVtZW50RXZlbnRIYW5kbGVycykge1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hFbGVtZW50RXZlbnRIYW5kbGVycygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdFNlbGVjdGlvbi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY2VsbENsaWNrU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvb3RlckNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZSA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtblJlc2l6aW5nU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblJlc2l6aW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29sdW1uUmVvcmRlclN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5SZW9yZGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uVmlzaWJpbGl0eUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbkxvY2tlZENoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5Mb2NrZWRDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFbGVtZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2x1bW5SYW5nZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgYXR0YWNoU2Nyb2xsU3luYygpIHtcbiAgICAgICAgaWYgKGlzVW5pdmVyc2FsKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oZWFkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UucmVnaXN0ZXJFbWl0dGVyKHRoaXMuaGVhZGVyLm5hdGl2ZUVsZW1lbnQsIFwiaGVhZGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvb3Rlcikge1xuICAgICAgICAgICAgdGhpcy5mb290ZXJDaGFuZ2VTdWJzY3JpcHRpb24gPSBvYnNlcnZlKHRoaXMuZm9vdGVyKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoZm9vdGVycyA9PiBmb290ZXJzXG4gICAgICAgICAgICAgICAgLm1hcChmb290ZXIgPT4gZm9vdGVyLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLmZpbHRlcihpc1ByZXNlbnQpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goZWxlbWVudCA9PiB0aGlzLnNjcm9sbFN5bmNTZXJ2aWNlLnJlZ2lzdGVyRW1pdHRlcihlbGVtZW50LCBcImZvb3RlclwiKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN3aXRjaGVzIHRoZSBzcGVjaWZpZWQgdGFibGUgcm93IGluIHRoZSBlZGl0IG1vZGUgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWVkaXRpbmctcmVjb3JkcykpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4IC0gVGhlIGRhdGEgcm93IGluZGV4IHRoYXQgd2lsbCBiZSBzd2l0Y2hlZCBpbiB0aGUgZWRpdCBtb2RlLlxuICAgICAqIEBwYXJhbSBncm91cCAtIFRoZSBbYEZvcm1Hcm91cGBdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ2Zvcm1ncm91cGFwaSddIH19KVxuICAgICAqIHRoYXQgZGVzY3JpYmVzIHRoZSBlZGl0IGZvcm0uXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMgY29uZmlndXJpbmcgdGhlIGZvY3VzIHRhcmdldCBvbmNlIHRoZSBlZGl0b3Igb3BlbnMuXG4gICAgICovXG4gICAgZWRpdFJvdyhyb3dJbmRleCwgZ3JvdXAsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5lZGl0Um93KHJvd0luZGV4LCBncm91cCk7XG4gICAgICAgIGlmIChpc1ByZXNlbnQob3B0aW9ucykgJiYgb3B0aW9ucy5za2lwRm9jdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3cgPSBgdHJbZGF0YS1rZW5kby1ncmlkLWl0ZW0taW5kZXg9XCIke3Jvd0luZGV4fVwiXWA7XG4gICAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gb3B0aW9ucyAmJiBvcHRpb25zLmNvbHVtbkluZGV4O1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBpc05hTihjb2x1bW5JbmRleCkgPyByb3cgOiBgJHtyb3d9IHRkW2RhdGEta2VuZG8tZ3JpZC1jb2x1bW4taW5kZXg9XCIke2NvbHVtbkluZGV4fVwiXWA7XG4gICAgICAgIHRoaXMuZm9jdXNFZGl0RWxlbWVudCh0YXJnZXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGVkaXRvciBmb3IgYSBnaXZlbiByb3cgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWNhbmNlbGxpbmctZWRpdGluZykpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIHJvdyBpbmRleCB0aGF0IHdpbGwgYmUgc3dpdGNoZWQgb3V0IG9mIHRoZSBlZGl0IG1vZGUuIElmIG5vIGluZGV4IGlzIHByb3ZpZGVkLCBpdCBpcyBhc3N1bWVkXG4gICAgICogdGhhdCB0aGUgbmV3IGl0ZW0gZWRpdG9yIHdpbGwgYmUgY2xvc2VkLlxuICAgICAqL1xuICAgIGNsb3NlUm93KGluZGV4KSB7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY2xvc2UoaW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHJvdyBlZGl0b3IgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3RlbXBsYXRlX2Zvcm1zX2dyaWQgJX0jdG9jLWFkZGluZy1yZWNvcmRzKSkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZ3JvdXAgLSBUaGUgW2BGb3JtR3JvdXBgXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWydmb3JtZ3JvdXBhcGknXSB9fSkgdGhhdCBkZXNjcmliZXNcbiAgICAgKiB0aGUgZWRpdCBmb3JtLiBJZiBjYWxsZWQgd2l0aCBhIGRhdGEgaXRlbSwgaXQgd2lsbCBidWlsZCB0aGUgYEZvcm1Hcm91cGAgZnJvbSB0aGUgZGF0YSBpdGVtIGZpZWxkcy5cbiAgICAgKi9cbiAgICBhZGRSb3coZ3JvdXApIHtcbiAgICAgICAgY29uc3QgaXNGb3JtR3JvdXAgPSBncm91cCBpbnN0YW5jZW9mIEZvcm1Hcm91cDtcbiAgICAgICAgaWYgKCFpc0Zvcm1Hcm91cCkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoZ3JvdXApLnJlZHVjZShjcmVhdGVDb250cm9sKGdyb3VwKSwge30pOyAvLyBGb3JtQnVpbGRlcj9cbiAgICAgICAgICAgIGdyb3VwID0gbmV3IEZvcm1Hcm91cChmaWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYWRkUm93KGdyb3VwKTtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRFbGVtZW50KCcuay1ncmlkLWFkZC1yb3cnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHV0cyB0aGUgY2VsbCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgdGFibGUgcm93IGFuZCBjb2x1bW4gaW4gZWRpdCBtb2RlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHJvd0luZGV4IC0gVGhlIGRhdGEgcm93IGluZGV4IHRoYXQgd2lsbCBiZSBzd2l0Y2hlZCBpbiB0aGUgZWRpdCBtb2RlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ3xhbnl9IGNvbHVtbiAtIFRoZSBsZWFmIGNvbHVtbiBpbmRleCwgb3IgdGhlIGZpZWxkIG5hbWUgb3IgdGhlIGNvbHVtbiBpbnN0YW5jZSB0aGF0IHNob3VsZCBiZSBlZGl0ZWQuXG4gICAgICogQHBhcmFtIHtGb3JtR3JvdXB9IGdyb3VwIC0gVGhlIFtgRm9ybUdyb3VwYF0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnZm9ybWdyb3VwYXBpJ10gfX0pXG4gICAgICogdGhhdCBkZXNjcmliZXMgdGhlIGVkaXQgZm9ybS5cbiAgICAgKi9cbiAgICBlZGl0Q2VsbChyb3dJbmRleCwgY29sdW1uLCBncm91cCkge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29sdW1uSW5zdGFuY2UoY29sdW1uKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5lZGl0Q2VsbChyb3dJbmRleCwgaW5zdGFuY2UsIGdyb3VwKTtcbiAgICAgICAgdGhpcy5mb2N1c0VkaXRFbGVtZW50KCcuay1ncmlkLWVkaXQtY2VsbCcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDbG9zZXMgdGhlIGN1cnJlbnQgY2VsbCBpbiBlZGl0IG1vZGUgYW5kIGZpcmVzXG4gICAgICogdGhlIFtgY2VsbENsb3NlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1jZWxsY2xvc2UpIGV2ZW50LlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVkaXRlZCBjZWxsIHdhcyBjbG9zZWQuXG4gICAgICogQSBgZmFsc2VgIHZhbHVlIGluZGljYXRlcyB0aGF0IHRoZVxuICAgICAqIFtgY2VsbENsb3NlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1jZWxsY2xvc2UpIGV2ZW50IHdhcyBwcmV2ZW50ZWQuXG4gICAgICovXG4gICAgY2xvc2VDZWxsKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZWRpdFNlcnZpY2UuY2xvc2VDZWxsKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgY3VycmVudCBjZWxsIGluIGVkaXQgbW9kZS5cbiAgICAgKi9cbiAgICBjYW5jZWxDZWxsKCkge1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmNhbmNlbENlbGwoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIGEgcm93IG9yIGEgY2VsbCBpcyBjdXJyZW50bHkgZWRpdGVkLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gQSBmbGFnIHdoaWNoIGluZGljYXRlcyBpZiBhIHJvdyBvciBhIGNlbGwgaXMgY3VycmVudGx5IGVkaXRlZC5cbiAgICAgKi9cbiAgICBpc0VkaXRpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgZmxhZyB3aGljaCBpbmRpY2F0ZXMgaWYgYSBjZWxsIGlzIGN1cnJlbnRseSBlZGl0ZWQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBBIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIGEgY2VsbCBpcyBjdXJyZW50bHkgYmVpbmcgZWRpdGVkLlxuICAgICAqL1xuICAgIGlzRWRpdGluZ0NlbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGluZ0NlbGwoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhdGVzIHRoZSBQREYgZXhwb3J0IChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGRmZXhwb3J0X2dyaWQgJX0pKS5cbiAgICAgKi9cbiAgICBzYXZlQXNQREYoKSB7XG4gICAgICAgIHRoaXMucGRmU2VydmljZS5zYXZlKHRoaXMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHBvcnRzIHRoZSBHcmlkIGVsZW1lbnQgdG8gYSBEcmF3aW5nIFtgR3JvdXBgXSh7JSBzbHVnIGFwaV9rZW5kby1kcmF3aW5nX2dyb3VwICV9KSBieSB1c2luZyB0aGUgYGtlbmRvLWdyaWQtcGRmYCBjb21wb25lbnQgb3B0aW9ucy5cbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBkZmV4cG9ydF9ncmlkICV9I3RvYy1leHBvcnRpbmctbXVsdGlwbGUtZ3JpZHMtdG8tdGhlLXNhbWUtcGRmKSkuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSAtIEEgcHJvbWlzZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgd2l0aCB0aGUgRHJhd2luZyBgR3JvdXBgLlxuICAgICAqL1xuICAgIGRyYXdQREYoKSB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjcmVhdGVQcm9taXNlKCk7XG4gICAgICAgIHRoaXMucGRmU2VydmljZS5kcmF3KHRoaXMsIHByb21pc2UpO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhdGVzIHRoZSBFeGNlbCBleHBvcnQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBleGNlbGV4cG9ydF9ncmlkICV9KSkuXG4gICAgICovXG4gICAgc2F2ZUFzRXhjZWwoKSB7XG4gICAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmUodGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGxpZXMgdGhlIG1pbmltdW0gcG9zc2libGUgd2lkdGggZm9yIHRoZSBzcGVjaWZpZWQgY29sdW1uLFxuICAgICAqIHNvIHRoYXQgdGhlIHdob2xlIHRleHQgZml0cyB3aXRob3V0IHdyYXBwaW5nLiBUaGlzIG1ldGhvZCBleHBlY3RzIHRoZSBHcmlkXG4gICAgICogdG8gYmUgcmVzaXphYmxlIChzZXQgYHJlc2l6YWJsZWAgdG8gYHRydWVgKS5cbiAgICAgKiBNYWtlcyBzZW5zZSB0byBleGVjdXRlIHRoaXMgbWV0aG9kIG9ubHlcbiAgICAgKiBhZnRlciB0aGUgR3JpZCBpcyBhbHJlYWR5IHBvcHVsYXRlZCB3aXRoIGRhdGEuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAqICAgICAgICA8a2VuZG8tZ3JpZFxuICAgICAqICAgICAgICAgICAgI2dyaWRcbiAgICAgKiAgICAgICAgICAgIFtkYXRhXT1cImdyaWREYXRhXCJcbiAgICAgKiAgICAgICAgICAgIFtyZXNpemFibGVdPVwidHJ1ZVwiXG4gICAgICogICAgICAgICAgICBzdHlsZT1cImhlaWdodDogMzAwcHhcIj5cbiAgICAgKiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGU+XG4gICAgICogICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJrLWJ1dHRvblwiIChjbGljayk9XCJncmlkLmF1dG9GaXRDb2x1bW4oZ3JvdXBDb2x1bW4pXCI+XG4gICAgICogICAgICAgICAgICAgICAgICAgICBBdXRvLWZpdCB0aGUgZ3JvdXAgY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbi1ncm91cCAjZ3JvdXBDb2x1bW4gdGl0bGU9XCJQcm9kdWN0IEluZm9cIj5cbiAgICAgKiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgZmllbGQ9XCJQcm9kdWN0SURcIlxuICAgICAqICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiNTBcIlxuICAgICAqICAgICAgICAgICAgICAgICAgICBbbWluUmVzaXphYmxlV2lkdGhdPVwiMzBcIlxuICAgICAqICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIklEXCI+XG4gICAgICogICAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKlxuICAgICAqICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgICAgICBmaWVsZD1cIlByb2R1Y3ROYW1lXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAgICAgKiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbi1ncm91cD5cbiAgICAgKlxuICAgICAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgZmllbGQ9XCJVbml0UHJpY2VcIlxuICAgICAqICAgICAgICAgICAgICAgIHRpdGxlPVwiVW5pdCBQcmljZVwiXG4gICAgICogICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE4MFwiXG4gICAgICogICAgICAgICAgICAgICAgZmlsdGVyPVwibnVtZXJpY1wiXG4gICAgICogICAgICAgICAgICAgICAgZm9ybWF0PVwiezA6Y31cIj5cbiAgICAgKiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgKiAgICBgXG4gICAgICogfSlcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W10gPSBwcm9kdWN0cztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAqICB9LCB7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMixcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGF1dG9GaXRDb2x1bW4oY29sdW1uKSB7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXppbmdTZXJ2aWNlLmF1dG9GaXQoY29sdW1uKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRqdXN0cyB0aGUgd2lkdGggb2YgdGhlIHNwZWNpZmllZCBjb2x1bW5zIHRvIGZpdCB0aGUgZW50aXJlIGNvbnRlbnQsIGluY2x1ZGluZyBoZWFkZXJzLCB3aXRob3V0IHdyYXBwaW5nLlxuICAgICAqIElmIG5vIGNvbHVtbnMgYXJlIHNwZWNpZmllZCwgYGF1dG9GaXRDb2x1bW5zYCBpcyBhcHBsaWVkIHRvIGFsbCBjb2x1bW5zLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2QgcmVxdWlyZXMgdGhlIEdyaWQgdG8gYmUgcmVzaXphYmxlIChzZXQgYHJlc2l6YWJsZWAgdG8gYHRydWVgKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHNcbiAgICAgKiBfQENvbXBvbmVudCh7XG4gICAgICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICAgICAqICAgIHRlbXBsYXRlOiBgXG4gICAgICogICAgICA8a2VuZG8tZ3JpZFxuICAgICAqICAgICAgICAgICNncmlkXG4gICAgICogICAgICAgICAgW2RhdGFdPVwiZ3JpZERhdGFcIlxuICAgICAqICAgICAgICAgIFtyZXNpemFibGVdPVwidHJ1ZVwiXG4gICAgICogICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IDMwMHB4XCI+XG4gICAgICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cImdyaWQuYXV0b0ZpdENvbHVtbnMoW2ZpcnN0Q29sdW1uLCBsYXN0Q29sdW1uXSlcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgIEF1dG8tZml0IHRoZSBmaXJzdCBhbmQgbGFzdCBjb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJrLWJ1dHRvblwiIChjbGljayk9XCJncmlkLmF1dG9GaXRDb2x1bW5zKClcIj5cbiAgICAgKiAgICAgICAgICAgICAgICAgIEF1dG8tZml0IGFsbCBjb2x1bW5zXG4gICAgICogICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLWdyb3VwIHRpdGxlPVwiUHJvZHVjdCBJbmZvXCI+XG4gICAgICogICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgICAgI2ZpcnN0Q29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgICBmaWVsZD1cIlByb2R1Y3RJRFwiXG4gICAgICogICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiNTBcIlxuICAgICAqICAgICAgICAgICAgICAgICAgW21pblJlc2l6YWJsZVdpZHRoXT1cIjMwXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSURcIj5cbiAgICAgKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKlxuICAgICAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICAgIGZpZWxkPVwiUHJvZHVjdE5hbWVcIlxuICAgICAqICAgICAgICAgICAgICAgICAgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIlxuICAgICAqICAgICAgICAgICAgICAgICAgPlxuICAgICAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4tZ3JvdXA+XG4gICAgICpcbiAgICAgKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgI2xhc3RDb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgZmllbGQ9XCJVbml0UHJpY2VcIlxuICAgICAqICAgICAgICAgICAgICB0aXRsZT1cIlVuaXQgUHJpY2VcIlxuICAgICAqICAgICAgICAgICAgICBbd2lkdGhdPVwiMTgwXCJcbiAgICAgKiAgICAgICAgICAgICAgZmlsdGVyPVwibnVtZXJpY1wiXG4gICAgICogICAgICAgICAgICAgIGZvcm1hdD1cInswOmN9XCI+XG4gICAgICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKiAgICAgIDwva2VuZG8tZ3JpZD5cbiAgICAgKiAgICBgXG4gICAgICogfSlcbiAgICAgKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICAgICAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W10gPSBwcm9kdWN0cztcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBjb25zdCBwcm9kdWN0cyA9IFt7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICAgICAqICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gICAgICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICAgICAqICB9LCB7XG4gICAgICogICAgXCJQcm9kdWN0SURcIjogMixcbiAgICAgKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gICAgICogIH1cbiAgICAgKiBdO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGF1dG9GaXRDb2x1bW5zKGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgbGV0IGNvbHM7XG4gICAgICAgIGlmIChjb2x1bW5zIGluc3RhbmNlb2YgUXVlcnlMaXN0KSB7XG4gICAgICAgICAgICBjb2xzID0gY29sdW1ucy50b0FycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb2xzID0gY29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbHVtblJlc2l6aW5nU2VydmljZS5hdXRvRml0KC4uLmNvbHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbm90aWZ5UGFnZUNoYW5nZShzb3VyY2UsIGV2ZW50KSB7XG4gICAgICAgIGlmIChzb3VyY2UgPT09IFwibGlzdFwiICYmICF0aGlzLmlzVmlydHVhbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5vdGlmeVNjcm9sbEJvdHRvbSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc09ic2VydmVycyh0aGlzLnNjcm9sbEJvdHRvbSkpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnNjcm9sbEJvdHRvbS5lbWl0KHsgc2VuZGVyOiB0aGlzIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZm9jdXNFZGl0RWxlbWVudChjb250YWluZXJTZWxlY3Rvcikge1xuICAgICAgICBpZiAodGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNFbGVtZW50U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24gPSB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZXRFZGl0Rm9jdXMod3JhcHBlci5xdWVyeVNlbGVjdG9yKGNvbnRhaW5lclNlbGVjdG9yKSkgJiYgdGhpcy5pc0xvY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEVkaXRGb2N1cyh3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoYC5rLWdyaWQtY29udGVudCAke2NvbnRhaW5lclNlbGVjdG9yfWApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0VsZW1lbnRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBsYXN0IGFjdGl2ZSBvciB0aGUgZmlyc3QgY2VsbCBvZiB0aGUgR3JpZC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uQ2VsbH0gVGhlIGZvY3VzZWQgY2VsbC5cbiAgICAgKi9cbiAgICBmb2N1cygpIHtcbiAgICAgICAgdGhpcy5hc3NlcnROYXZpZ2FibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNDZWxsKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIGNlbGwgd2l0aCB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgY29sdW1uIGluZGV4LlxuICAgICAqXG4gICAgICogVGhlIHJvdyBpbmRleCBpcyBiYXNlZCBvbiB0aGUgbG9naWNhbCBzdHJ1Y3R1cmUgb2YgdGhlIEdyaWQgYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gdGhlIGRhdGEgaXRlbSBpbmRleDpcbiAgICAgKiAqIEhlYWRlciByb3dzIGFyZSBpbmNsdWRlZCwgc3RhcnRpbmcgYXQgaW5kZXggMC5cbiAgICAgKiAqIEdyb3VwIGhlYWRlcnMgYW5kIGZvb3RlcnMgYXJlIGluY2x1ZGVkLlxuICAgICAqICogVGhlIHJvdyBpbmRleGluZyBpcyBhYnNvbHV0ZSBhbmQgZG9lcyBub3QgY2hhbmdlIHdpdGggcGFnaW5nLlxuICAgICAqXG4gICAgICogSWYgdGhlIEdyaWQgaXMgY29uZmlndXJlZCBmb3Igc2Nyb2xsaW5nLCBpbmNsdWRpbmcgdmlydHVhbCBzY3JvbGxpbmcsIHRoZSBzY3JvbGwgcG9zaXRpb24gd2lsbCBiZSB1cGRhdGVkLlxuICAgICAqIElmIHRoZSByb3cgaXMgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgcGFnZSwgdGhlIG1ldGhvZCB3aWxsIGhhdmUgbm8gZWZmZWN0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJvd0luZGV4IC0gVGhlIGxvZ2ljYWwgcm93IGluZGV4IHRvIGZvY3VzLiBUaGUgdG9wIGhlYWRlciByb3cgaGFzIGFuIGluZGV4IDAuXG4gICAgICogQHBhcmFtIGNvbEluZGV4IC0gVGhlIGNvbHVtbiBpbmRleCB0byBmb2N1cy5cbiAgICAgKiBAcmV0dXJucyB7TmF2aWdhdGlvbkNlbGx9IFRoZSBmb2N1c2VkIGNlbGwuXG4gICAgICpcbiAgICAgKi9cbiAgICBmb2N1c0NlbGwocm93SW5kZXgsIGNvbEluZGV4KSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0TmF2aWdhYmxlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzQ2VsbChyb3dJbmRleCwgY29sSW5kZXgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIHRoZSBuZXh0IGNlbGwsIG9wdGlvbmFsbHkgd3JhcHBpbmcgdG8gdGhlIG5leHQgcm93LlxuICAgICAqXG4gICAgICogQHBhcmFtIHdyYXAgLSBBIEJvb2xlYW4gdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmb2N1cyB3aWxsIG1vdmUgdG8gdGhlIG5leHQgcm93LiBEZWZhdWx0cyB0byBgdHJ1ZWAuXG4gICAgICogQHJldHVybnMge05hdmlnYXRpb25DZWxsfSBUaGUgZm9jdXNlZCBjZWxsLiBJZiB0aGUgZm9jdXMgaXMgYWxyZWFkeSBvbiB0aGUgbGFzdCBjZWxsLCByZXR1cm5zIGBudWxsYC5cbiAgICAgKi9cbiAgICBmb2N1c05leHRDZWxsKHdyYXAgPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0TmF2aWdhYmxlKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzTmV4dENlbGwod3JhcCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgdGhlIHByZXZpb3VzIGNlbGwuIE9wdGlvbmFsbHkgd3JhcHMgdG8gdGhlIHByZXZpb3VzIHJvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB3cmFwIC0gQSBCb29sZWFuIHZhbHVlIHdoaWNoIGluZGljYXRlcyBpZiB0aGUgZm9jdXMgd2lsbCBtb3ZlIHRvIHRoZSBuZXh0IHJvdy4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgICAqIEByZXR1cm5zIHtOYXZpZ2F0aW9uQ2VsbH0gVGhlIGZvY3VzZWQgY2VsbC4gSWYgdGhlIGZvY3VzIGlzIGFscmVhZHkgb24gdGhlIGZpcnN0IGNlbGwsIHJldHVybnMgYG51bGxgLlxuICAgICAqL1xuICAgIGZvY3VzUHJldkNlbGwod3JhcCA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3NlcnROYXZpZ2FibGUoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZm9jdXNQcmV2Q2VsbCh3cmFwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byB0aGUgc3BlY2lmaWVkIHJvdyBhbmQgY29sdW1uXG4gICAgICovXG4gICAgc2Nyb2xsVG8ocmVxdWVzdCkge1xuICAgICAgICB0aGlzLnNjcm9sbFJlcXVlc3RTZXJ2aWNlLnNjcm9sbFRvKHJlcXVlc3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi5cbiAgICAgKiBUaGUgcmVvcmRlcmluZyBvZiBjb2x1bW5zIG9wZXJhdGVzIG9ubHkgb24gdGhlIGxldmVsXG4gICAgICogd2hpY2ggaXMgaW5mZXJyZWQgYnkgdGhlIHNvdXJjZSBjb2x1bW4uXG4gICAgICogRm9yIHRoZSBgcmVvcmRlckNvbHVtbmAgbWV0aG9kIHRvIHdvcmsgcHJvcGVybHksXG4gICAgICogdGhlIGBzb3VyY2VgIGNvbHVtbiBoYXMgdG8gYmUgdmlzaWJsZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29sdW1uQmFzZX0gc291cmNlIC0gVGhlIGNvbHVtbiB3aG9zZSBwb3NpdGlvbiB3aWxsIGJlIGNoYW5nZWQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGRlc3RJbmRleCAtIFRoZSBuZXcgcG9zaXRpb24gb2YgdGhlIGNvbHVtbi5cbiAgICAgKiBAcGFyYW0ge0NvbHVtblJlb3JkZXJDb25maWd9IG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHRzXG4gICAgICogX0BDb21wb25lbnQoe1xuICAgICAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAgICAgKiAgICB0ZW1wbGF0ZTogYFxuICAgICAqICAgICAgICA8a2VuZG8tZ3JpZFxuICAgICAqICAgICAgICAgICAgI2dyaWRcbiAgICAgKiAgICAgICAgICAgIFtkYXRhXT1cImdyaWREYXRhXCJcbiAgICAgKiAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJ0cnVlXCJcbiAgICAgKiAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiAzMDBweFwiPlxuICAgICAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCJcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJncmlkLnJlb3JkZXJDb2x1bW4oZ3JvdXBDb2x1bW4sIDIsIHsgYmVmb3JlOiB0cnVlIH0pXCI+XG4gICAgICogICAgICAgICAgICAgICAgICAgICBNb3ZlIHRoZSBncm91cCBjb2x1bW4gYmVmb3JlIHRoZSBsYXN0IG9uZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICogICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLWdyb3VwICNncm91cENvbHVtbiB0aXRsZT1cIlByb2R1Y3QgSW5mb1wiPlxuICAgICAqICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtblxuICAgICAqICAgICAgICAgICAgICAgICAgICBmaWVsZD1cIlByb2R1Y3RJRFwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCI1MFwiXG4gICAgICogICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiSURcIj5cbiAgICAgKiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqXG4gICAgICogICAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgICAgIGZpZWxkPVwiUHJvZHVjdE5hbWVcIlxuICAgICAqICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICAgICAqICAgICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gICAgICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uLWdyb3VwPlxuICAgICAqXG4gICAgICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5cbiAgICAgKiAgICAgICAgICAgICAgICBmaWVsZD1cIlVuaXRQcmljZVwiXG4gICAgICogICAgICAgICAgICAgICAgdGl0bGU9XCJVbml0IFByaWNlXCJcbiAgICAgKiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTgwXCJcbiAgICAgKiAgICAgICAgICAgICAgICBmb3JtYXQ9XCJ7MDpjfVwiPlxuICAgICAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAgICAgKlxuICAgICAqICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uXG4gICAgICogICAgICAgICAgICAgICAgZmllbGQ9XCJEaXNjb250aW51ZWRcIlxuICAgICAqICAgICAgICAgICAgICAgIHRpdGxlPVwiRGlzY29udGludWVkXCJcbiAgICAgKiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTAwXCI+XG4gICAgICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICAgICAqICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gICAgICogICAgYFxuICAgICAqIH0pXG4gICAgICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAgICAgKiAgICBwdWJsaWMgZ3JpZERhdGE6IGFueVtdID0gcHJvZHVjdHM7XG4gICAgICogfVxuICAgICAqXG4gICAgICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYWlcIixcbiAgICAgKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICAgICAqICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAgICAgKiAgfSwge1xuICAgICAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gICAgICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gICAgICogICAgXCJVbml0UHJpY2VcIjogMTkuMDAwMCxcbiAgICAgKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICAgICAqICB9XG4gICAgICogXTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByZW9yZGVyQ29sdW1uKHNvdXJjZSwgZGVzdEluZGV4LCBvcHRpb25zID0geyBiZWZvcmU6IGZhbHNlIH0pIHtcbiAgICAgICAgY29uc3QgY29sdW1uc0ZvckxldmVsID0gdGhpcy5jb2x1bW5zRm9yTGV2ZWwoc291cmNlLmxldmVsKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IGNvbHVtbnNGb3JMZXZlbFtkZXN0SW5kZXhdO1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxhc3ROb25Mb2NrZWQgPSB0YXJnZXQuaXNMb2NrZWQgJiZcbiAgICAgICAgICAgICFzb3VyY2UuaXNMb2NrZWQgJiZcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRDb2x1bW5zLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgaWYgKGxhc3ROb25Mb2NrZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTcGFuQ29sdW1uQ29tcG9uZW50KHRhcmdldCkgJiYgIW9wdGlvbnMuYmVmb3JlKSB7XG4gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQuY2hpbGRDb2x1bW5zLmxhc3Q7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW9yZGVyKHtcbiAgICAgICAgICAgIGJlZm9yZTogb3B0aW9ucy5iZWZvcmUsXG4gICAgICAgICAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGZ1bmN0aW9uIHdoaWNoIGRldGVybWluZXMgaWYgYSBzcGVjaWZpYyByb3cgaXMgZXhwYW5kZWQuXG4gICAgICovXG4gICAgc2V0IGlzRGV0YWlsRXhwYW5kZWQoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzU2VydmljZS51c2VyQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG4gICAgZ2V0IGlzRGV0YWlsRXhwYW5kZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRldGFpbHNTZXJ2aWNlLnVzZXJDYWxsYmFjaztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHJlb3JkZXIoeyB0YXJnZXQsIHNvdXJjZSwgYmVmb3JlLCBjaGFuZ2VDb250YWluZXIgfSkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uc0ZvckxldmVsID0gdGhpcy5jb2x1bW5zRm9yTGV2ZWwoc291cmNlLmxldmVsKTtcbiAgICAgICAgICAgIGxldCBuZXdJbmRleCA9IGNvbHVtbnNGb3JMZXZlbC5pbmRleE9mKHRhcmdldCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LnBhcmVudCAmJiB0YXJnZXQucGFyZW50LmlzU3BhbkNvbHVtbikge1xuICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gY29sdW1uc0ZvckxldmVsLmluZGV4T2YodGFyZ2V0LnBhcmVudCk7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBvbGRJbmRleCA9IGNvbHVtbnNGb3JMZXZlbC5pbmRleE9mKHNvdXJjZSk7XG4gICAgICAgICAgICBpZiAoY2hhbmdlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJlZm9yZSAmJiAwIDwgbmV3SW5kZXggJiYgb2xkSW5kZXggPCBuZXdJbmRleCkgeyAvLyBkcm9wcGVkIGJlZm9yZSB0aGUgZmlyc3Qgbm90IGxvY2tlZCBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgbmV3SW5kZXgtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWJlZm9yZSAmJiBvbGRJbmRleCA+IG5ld0luZGV4KSB7IC8vIGRyb3BwZWQgYWZ0ZXIgdGhlIGxhc3QgbG9ja2VkIGNvbHVtblxuICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgQ29sdW1uUmVvcmRlckV2ZW50KHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IHNvdXJjZSxcbiAgICAgICAgICAgICAgICBvbGRJbmRleDogb2xkSW5kZXgsXG4gICAgICAgICAgICAgICAgbmV3SW5kZXg6IG5ld0luZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uUmVvcmRlci5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2hhbmdlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5Mb2NrZWRDaGFuZ2UuZW1pdChuZXcgQ29sdW1uTG9ja2VkQ2hhbmdlRXZlbnQoW3NvdXJjZV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uSW5kaWNlcyh7IHNvdXJjZSwgdGFyZ2V0LCBiZWZvcmUgfSk7XG4gICAgICAgICAgICBpZiAoc291cmNlLmxvY2tlZCAhPT0gdGFyZ2V0LmxvY2tlZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5sb2NrZWQgPSB0YXJnZXQubG9ja2VkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zQ29udGFpbmVyLnJlZnJlc2goKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1cGRhdGVDb2x1bW5JbmRpY2VzKHsgc291cmNlLCB0YXJnZXQsIGJlZm9yZSB9KSB7XG4gICAgICAgIGNvbnN0IGV4cGFuZGVkQ29sdW1ucyA9IGV4cGFuZENvbHVtbnNXaXRoU3Bhbih0aGlzLmNvbHVtbnNGb3JMZXZlbChzb3VyY2UubGV2ZWwpKTtcbiAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uSW5kZXggPSBleHBhbmRlZENvbHVtbnMuaW5kZXhPZihzb3VyY2UpO1xuICAgICAgICBsZXQgbmV4dFNvdXJjZUluZGV4ID0gMDtcbiAgICAgICAgbGV0IG5leHRJbmRleCA9IDA7XG4gICAgICAgIGxldCB0b1NraXAgPSAxO1xuICAgICAgICAvLyBQb3NzaWJsZSBvbmx5IHdoZW4gY2FsbGVkIGZyb20gdGhlIEFQSS5cbiAgICAgICAgaWYgKHNvdXJjZS5pc1NwYW5Db2x1bW4pIHtcbiAgICAgICAgICAgIHRvU2tpcCArPSBzb3VyY2UuY2hpbGRDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlIChpIDwgZXhwYW5kZWRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IGV4cGFuZGVkQ29sdW1uc1tpXTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPT09IHRhcmdldCkge1xuICAgICAgICAgICAgICAgIG5leHRTb3VyY2VJbmRleCA9IGJlZm9yZSA/IG5leHRJbmRleCA6IG5leHRJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgbmV4dEluZGV4ID0gYmVmb3JlID8gbmV4dEluZGV4ICsgdG9Ta2lwIDogbmV4dEluZGV4O1xuICAgICAgICAgICAgICAgIGNvbHVtbi5vcmRlckluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChuZXh0U291cmNlSW5kZXggPT09IG5leHRJbmRleCArIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEluZGV4ICs9IHRvU2tpcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2x1bW4gPT09IHNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGkgKz0gdG9Ta2lwO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLm9yZGVySW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXh0SW5kZXgrKztcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSBzb3VyY2VDb2x1bW5JbmRleDsgaSA8IHNvdXJjZUNvbHVtbkluZGV4ICsgdG9Ta2lwOyBpKyspIHtcbiAgICAgICAgICAgIGV4cGFuZGVkQ29sdW1uc1tpXS5vcmRlckluZGV4ID0gbmV4dFNvdXJjZUluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51cGRhdGVJbmRpY2VzRm9yTGV2ZWwoc291cmNlLmxldmVsICsgMSk7XG4gICAgfVxuICAgIHVwZGF0ZUluZGljZXNGb3JMZXZlbChsZXZlbCkge1xuICAgICAgICBjb25zdCBjb2xzRm9yUGFyZW50TGV2ZWwgPSB0aGlzLmNvbHVtbnNGb3JMZXZlbChsZXZlbCAtIDEpO1xuICAgICAgICBjb25zdCBjb2xzRm9yTGV2ZWwgPSBbXTtcbiAgICAgICAgc29ydENvbHVtbnMoY29sc0ZvclBhcmVudExldmVsKS5mb3JFYWNoKChjKSA9PiB7XG4gICAgICAgICAgICBpZiAoYy5pc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgY29sc0ZvckxldmVsLnB1c2goLi4uYy5jaGlsZHJlbkFycmF5LnNvcnQoKGEsIGIpID0+IGEub3JkZXJJbmRleCAtIGIub3JkZXJJbmRleCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZXhwYW5kQ29sdW1uc1dpdGhTcGFuKGNvbHNGb3JMZXZlbCkubWFwKChjLCBpKSA9PiBjLm9yZGVySW5kZXggPSBpKTtcbiAgICAgICAgaWYgKGxldmVsIDwgdGhpcy5jb2x1bW5zQ29udGFpbmVyLnRvdGFsTGV2ZWxzKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUluZGljZXNGb3JMZXZlbChsZXZlbCArIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbHVtbnNGb3JMZXZlbChsZXZlbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyXG4gICAgICAgICAgICAuYWxsQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5sZXZlbCA9PT0gbGV2ZWwpO1xuICAgIH1cbiAgICBpbml0U2VsZWN0aW9uU2VydmljZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5uZ09uRGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jZWxsU2VsZWN0aW9uU2VydmljZS5uZ09uRGVzdHJveSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25EaXJlY3RpdmUgJiYgIWlzUHJlc2VudCh0aGlzLmRlZmF1bHRTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKHRoaXMsIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxTZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3RhYmxlWydjZWxsJ107XG4gICAgICAgIGNvbnN0IGFjdGl2ZVNlcnZpY2UgPSBjZWxsU2VsZWN0aW9uTW9kZSA/IHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UgOiB0aGlzLnNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIGNvbnN0IGluYWN0aXZlU2VydmljZSA9IGNlbGxTZWxlY3Rpb25Nb2RlID8gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlIDogdGhpcy5jZWxsU2VsZWN0aW9uU2VydmljZTtcbiAgICAgICAgaWYgKGluYWN0aXZlU2VydmljZS5hY3RpdmUpIHtcbiAgICAgICAgICAgIGluYWN0aXZlU2VydmljZS5uZ09uRGVzdHJveSgpO1xuICAgICAgICAgICAgYWN0aXZlU2VydmljZS5hZGRTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBpbmFjdGl2ZVNlcnZpY2UuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgYWN0aXZlU2VydmljZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBhY3RpdmVTZXJ2aWNlLmluaXQoe1xuICAgICAgICAgICAgY2VsbFNlbGVjdGVkOiBjZWxsU2VsZWN0aW9uTW9kZSA/IHRoaXMuY2VsbFNlbGVjdGVkIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgcm93U2VsZWN0ZWQ6IGNlbGxTZWxlY3Rpb25Nb2RlID8gdW5kZWZpbmVkIDogdGhpcy5yb3dTZWxlY3RlZCxcbiAgICAgICAgICAgIHNlbGVjdGFibGU6IHRoaXMuc2VsZWN0YWJsZSxcbiAgICAgICAgICAgIHZpZXc6IHRoaXMudmlldyxcbiAgICAgICAgICAgIGNvbHVtbnM6IGNlbGxTZWxlY3Rpb25Nb2RlID8gdGhpcy5jb2x1bW5MaXN0LnRvQXJyYXkoKSA6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkRpcmVjdGl2ZSAmJiAhdGhpcy5zZWxlY3RhYmxlU2V0dGluZ3MuZW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VsZWN0aW9uLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjZWxsU2VsZWN0aW9uTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TdWJzY3JpcHRpb24gPSB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRFZGl0Rm9jdXMoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UudHJ5Rm9jdXMoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sdW1uSW5zdGFuY2UoY29sdW1uKSB7XG4gICAgICAgIGxldCBpbnN0YW5jZTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb2x1bW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMuY29sdW1uc0NvbnRhaW5lci5sb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KClcbiAgICAgICAgICAgICAgICAuY29uY2F0KHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KCkpW2NvbHVtbl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy5jb2x1bW5MaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5maWVsZCA9PT0gY29sdW1uKVswXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gY29sdW1uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjb2x1bW4gJHtjb2x1bW59YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cbiAgICB2ZXJpZnlTZXR0aW5ncygpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBsb2NrZWQgPSB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCB8fCAodGhpcy5jb2x1bW5NZW51ICYmIHRoaXMuY29sdW1uTWVudS5sb2NrKTtcbiAgICAgICAgICAgIGlmIChsb2NrZWQgJiYgdGhpcy5kZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSGF2aW5nIGJvdGggZGV0YWlsIHRlbXBsYXRlIGFuZCBsb2NrZWQgY29sdW1ucyBpcyBub3Qgc3VwcG9ydGVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoICYmICF0aGlzLm5vbkxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgc2hvdWxkIGJlIGF0IGxlYXN0IG9uZSBub24tbG9ja2VkIGNvbHVtbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChsb2NrZWQgfHwgdGhpcy52aXJ0dWFsQ29sdW1ucykgJiYgZXhwYW5kQ29sdW1ucyh0aGlzLmNvbHVtbkxpc3QudG9BcnJheSgpKS5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4ud2lkdGggJiYgIWlzQ29sdW1uR3JvdXBDb21wb25lbnQoY29sdW1uKSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChsb2NrZWQgPyAnTG9ja2VkJyA6ICdWaXJ0dWFsJykgKyAnIGNvbHVtbnMgZmVhdHVyZSByZXF1aXJlcyBhbGwgY29sdW1ucyB0byBoYXZlIHNldCB3aWR0aC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsb2NrZWQgJiYgIXRoaXMuaXNTY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NrZWQgY29sdW1ucyBhcmUgb25seSBzdXBwb3J0ZWQgd2hlbiBzY3JvbGxpbmcgaXMgZW5hYmxlZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkxpc3QuZmlsdGVyKGlzQ29sdW1uR3JvdXBDb21wb25lbnQpLmZpbHRlcigoeCkgPT4gIXguaGFzQ2hpbGRyZW4pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1uR3JvdXBDb21wb25lbnQgc2hvdWxkIGNvbnRhaW4gQ29sdW1uQ29tcG9uZW50IG9yIENvbW1hbmRDb2x1bW5Db21wb25lbnQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5MaXN0LmZpbHRlcih4ID0+IHgubG9ja2VkICYmIHgucGFyZW50ICYmICF4LnBhcmVudC5pc0xvY2tlZCkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2NrZWQgY2hpbGQgY29sdW1ucyByZXF1aXJlIHRoZWlyIHBhcmVudCBjb2x1bW5zIHRvIGJlIGxvY2tlZC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICgodGhpcy5yb3dIZWlnaHQgfHwgdGhpcy5kZXRhaWxSb3dIZWlnaHQpICYmICF0aGlzLmlzVmlydHVhbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGhlaWdodCBhbmQgZGV0YWlsIHJvdyBoZWlnaHQgc2V0dGluZ3MgcmVxdWlyZSB2aXJ0dWFsIHNjcm9sbGluZyBtb2RlIHRvIGJlIGVuYWJsZWQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWxpZGF0ZUNvbHVtbnNGaWVsZCh0aGlzLmNvbHVtbkxpc3QpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF1dG9HZW5lcmF0ZUNvbHVtbnMoKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZEdlbmVyYXRlQ29sdW1ucyAmJiAhdGhpcy5jb2x1bW5zLmxlbmd0aCAmJiB0aGlzLnZpZXcubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnMucmVzZXQoT2JqZWN0LmtleXModGhpcy52aWV3LmF0KDApKS5tYXAoZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gPSBuZXcgQ29sdW1uQ29tcG9uZW50KCk7XG4gICAgICAgICAgICAgICAgY29sdW1uLmZpZWxkID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hTdGF0ZUNoYW5nZXNFbWl0dGVyKCkge1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlU3Vic2NyaXB0aW9uID1cbiAgICAgICAgICAgIG1lcmdlKHRoaXMucGFnZUNoYW5nZS5waXBlKG1hcCh4ID0+ICh7XG4gICAgICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlciwgZ3JvdXA6IHRoaXMuZ3JvdXAsIHNraXA6IHguc2tpcCwgc29ydDogdGhpcy5zb3J0LCB0YWtlOiB4LnRha2VcbiAgICAgICAgICAgIH0pKSksIHRoaXMuc29ydENoYW5nZS5waXBlKG1hcChzb3J0ID0+ICh7IGZpbHRlcjogdGhpcy5maWx0ZXIsIGdyb3VwOiB0aGlzLmdyb3VwLCBza2lwOiB0aGlzLnNraXAsIHNvcnQ6IHNvcnQsIHRha2U6IHRoaXMucGFnZVNpemUgfSkpKSwgdGhpcy5ncm91cENoYW5nZS5waXBlKG1hcChncm91cCA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIsIGdyb3VwOiBncm91cCwgc2tpcDogdGhpcy5za2lwLCBzb3J0OiB0aGlzLnNvcnQsIHRha2U6IHRoaXMucGFnZVNpemVcbiAgICAgICAgICAgIH0pKSksIHRoaXMuZmlsdGVyQ2hhbmdlLnBpcGUobWFwKGZpbHRlciQkMSA9PiAoe1xuICAgICAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyJCQxLCBncm91cDogdGhpcy5ncm91cCwgc2tpcDogMCwgc29ydDogdGhpcy5zb3J0LCB0YWtlOiB0aGlzLnBhZ2VTaXplXG4gICAgICAgICAgICB9KSkpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZUNlbGwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbENlbGwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTdGF0ZUNoYW5nZS5lbWl0KHgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuICAgIGF0dGFjaEVkaXRIYW5kbGVycygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVkaXRTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0U2VydmljZVN1YnNjcmlwdGlvbiA9IHRoaXMuZWRpdFNlcnZpY2VcbiAgICAgICAgICAgIC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmVtaXRDUlVERXZlbnQuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGVtaXRDUlVERXZlbnQoYXJncykge1xuICAgICAgICBjb25zdCB7IGFjdGlvbiwgcm93SW5kZXgsIGZvcm1Hcm91cCB9ID0gYXJncztcbiAgICAgICAgbGV0IGRhdGFJdGVtID0gdGhpcy52aWV3LmF0KHJvd0luZGV4IC0gdGhpcy5za2lwKTtcbiAgICAgICAgaWYgKGFjdGlvbiAhPT0gJ2FkZCcgJiYgIWRhdGFJdGVtKSB7XG4gICAgICAgICAgICBkYXRhSXRlbSA9IGZvcm1Hcm91cC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsb3NlQ2VsbCgpO1xuICAgICAgICBPYmplY3QuYXNzaWduKGFyZ3MsIHtcbiAgICAgICAgICAgIGRhdGFJdGVtOiBkYXRhSXRlbSxcbiAgICAgICAgICAgIHNlbmRlcjogdGhpc1xuICAgICAgICB9KTtcbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VkaXQnOlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2F2ZSc6XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjZWxsQ2xvc2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuY2VsbENsb3NlLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hEb21FdmVudEhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLmNlbGxDbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMuZG9tRXZlbnRzLmNlbGxDbGljay5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2VsbENsaWNrLmVtaXQoT2JqZWN0LmFzc2lnbih7IHNlbmRlcjogdGhpcyB9LCBhcmdzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhdHRhY2hFbGVtZW50RXZlbnRIYW5kbGVycygpIHtcbiAgICAgICAgaWYgKGlzVW5pdmVyc2FsKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGFyaWFSb290ID0gdGhpcy5hcmlhUm9vdC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXNpemVDaGVjayA9IHRoaXMucmVzaXplQ2hlY2suYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgcmVzaXplQ2hlY2spO1xuICAgICAgICAgICAgY29uc3Qgb3JpZW50YXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ29yaWVudGF0aW9uY2hhbmdlJywgcmVzaXplQ2hlY2spO1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRDbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdFNlcnZpY2Uuc2hvdWxkQ2xvc2VDZWxsKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWNsb3Nlc3QoYXJncy50YXJnZXQsIG1hdGNoZXNDbGFzc2VzKCdrLWFuaW1hdGlvbi1jb250YWluZXIgay1ncmlkLWlnbm9yZS1jbGljaycpKSAmJlxuICAgICAgICAgICAgICAgICAgICAhKGFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZXN0KGFjdGl2ZUVsZW1lbnQsIG1hdGNoZXNDbGFzc2VzKCdrLWFuaW1hdGlvbi1jb250YWluZXInKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0luRWRpdGVkQ2VsbChhY3RpdmVFbGVtZW50LCB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudCkpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmNsb3NlQ2VsbChhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHdpbmRvd0JsdXJTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ2JsdXInLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVFbGVtZW50ICYmICEobWF0Y2hlc05vZGVOYW1lKCdpbnB1dCcpKGFjdGl2ZUVsZW1lbnQpICYmIGFjdGl2ZUVsZW1lbnQudHlwZSA9PT0gJ2ZpbGUnICYmXG4gICAgICAgICAgICAgICAgICAgIGlzSW5FZGl0ZWRDZWxsKGFjdGl2ZUVsZW1lbnQsIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS5jbG9zZUNlbGwoYXJncyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLndpbmRvd0JsdXIuZW1pdChhcmdzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2xpY2tTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3cmFwcGVyLCAnY2xpY2snLCAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZG9tRXZlbnRzLmNsaWNrLmVtaXQoYXJncyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGtleWRvd25TdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3cmFwcGVyLCAna2V5ZG93bicsIChhcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMua2V5ZG93bi5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBmb2N1c0luIGFuZCBmb2N1c091dCBhcmUgcmVsYXRpdmUgdG8gdGhlIGVsZW1lbnQgd2l0aCBBUklBIHJvbGUgXCJncmlkXCJcbiAgICAgICAgICAgIGxldCBmb2N1c2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmb2N1c0luU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oYXJpYVJvb3QsICdmb2N1c2luJywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb2N1cy5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmICghZm9jdXNlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5mb2N1c0luLmVtaXQoYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNPdXRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3RlbihhcmlhUm9vdCwgJ2ZvY3Vzb3V0JywgKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0ID0gYXJncy5yZWxhdGVkVGFyZ2V0IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0c2lkZSA9ICFjbG9zZXN0KG5leHQsIChub2RlKSA9PiBub2RlID09PSBhcmlhUm9vdCk7XG4gICAgICAgICAgICAgICAgaWYgKG91dHNpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMuZm9jdXNPdXQuZW1pdChhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kZXRhY2hFbGVtZW50RXZlbnRIYW5kbGVycyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNpemVTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBvcmllbnRhdGlvblN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIGRvY3VtZW50Q2xpY2tTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICB3aW5kb3dCbHVyU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgY2xpY2tTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBrZXlkb3duU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgZm9jdXNJblN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIGZvY3VzT3V0U3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF0Y2hlc01lZGlhKGMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzcG9uc2l2ZVNlcnZpY2UubWF0Y2hlc01lZGlhKGMubWVkaWEpO1xuICAgIH1cbiAgICByZXNpemVDaGVjaygpIHtcbiAgICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoICE9PSB0aGlzLmNhY2hlZFdpbmRvd1dpZHRoKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFdpbmRvd1dpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICAgICAgICBsZXQgaGFzQ2hhbmdlcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5MaXN0LmZpbHRlckhpZXJhcmNoeShjb2x1bW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXNNZWRpYSA9IHRoaXMubWF0Y2hlc01lZGlhKGNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5tYXRjaGVzTWVkaWEgIT09IG1hdGNoZXNNZWRpYSkge1xuICAgICAgICAgICAgICAgICAgICBoYXNDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLm1hdGNoZXNNZWRpYSA9IG1hdGNoZXNNZWRpYTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5pc1Zpc2libGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChoYXNDaGFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBlbWl0UERGRXhwb3J0RXZlbnQoKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBuZXcgUERGRXhwb3J0RXZlbnQoKTtcbiAgICAgICAgdGhpcy5wZGZFeHBvcnQuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKCFhcmdzLmlzRGVmYXVsdFByZXZlbnRlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVBc1BERigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN5bmNIZWFkZXJIZWlnaHQob2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKCgpID0+IGlzUHJlc2VudCh0aGlzLmxvY2tlZEhlYWRlcikpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiBzeW5jUm93c0hlaWdodCh0aGlzLmxvY2tlZEhlYWRlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdLCB0aGlzLmhlYWRlci5uYXRpdmVFbGVtZW50LmNoaWxkcmVuWzBdKSk7XG4gICAgfVxuICAgIGNvbHVtbnNDb250YWluZXJDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uc0NvbnRhaW5lckNoYW5nZVN1YnNjcmlwdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnN5bmNIZWFkZXJIZWlnaHQodGhpcy5jb2x1bW5zQ29udGFpbmVyLmNoYW5nZXMucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5sb2NrZWRDb2x1bW5zLmxlbmd0aCA+IDApLCBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5uZ1pvbmUub25TdGFibGUuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlKDEpKSkpKTtcbiAgICB9XG4gICAgaGFuZGxlQ29sdW1uUmVzaXplKCkge1xuICAgICAgICBjb25zdCByZXNpemVzID0gdGhpcy5jb2x1bW5SZXNpemluZ1NlcnZpY2UuY2hhbmdlcztcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemluZ1N1YnNjcmlwdGlvbiA9IHJlc2l6ZXMucGlwZSh0YXAoZSA9PiB7XG4gICAgICAgICAgICBpZiAoZS50eXBlID09PSAnc3RhcnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudCwgJ2stZ3JpZC1jb2x1bW4tcmVzaXppbmcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGUudHlwZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LCAnay1ncmlkLWNvbHVtbi1yZXNpemluZycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgZmlsdGVyKGUgPT4gZS50eXBlID09PSAnc3RhcnQnKSwgc3dpdGNoTWFwKCgpID0+IHJlc2l6ZXMucGlwZShcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiByeGpzLW5vLXVuc2FmZS10YWtldW50aWxcbiAgICAgICAgdGFrZVVudGlsKHJlc2l6ZXMucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICd0cmlnZ2VyQXV0b0ZpdCcpKSksIGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ2VuZCcpKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMubm90aWZ5UmVzaXplLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBub3RpZnlSZXNpemUoZSkge1xuICAgICAgICBjb25zdCBhcmdzID0gZS5yZXNpemVkQ29sdW1uc1xuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGlzVHJ1dGh5KGl0ZW0uY29sdW1uLnJlc2l6YWJsZSkgJiYgIWl0ZW0uY29sdW1uLmlzQ29sdW1uR3JvdXApXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAgIGNvbHVtbjogaXRlbS5jb2x1bW4sXG4gICAgICAgICAgICBuZXdXaWR0aDogaXRlbS5jb2x1bW4ud2lkdGgsXG4gICAgICAgICAgICBvbGRXaWR0aDogaXRlbS5vbGRXaWR0aFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXplLmVtaXQoYXJncyk7XG4gICAgfVxuICAgIGFzc2VydE5hdmlnYWJsZSgpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLm5hdmlnYWJsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgR3JpZCBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBbbmF2aWdhYmxlXT1cInRydWVcIiB0byBjb250cm9sIGZvY3VzJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmF2aWdhdGlvbk1ldGFkYXRhKCkge1xuICAgICAgICBjb25zdCBpc1ZpcnR1YWwgPSB0aGlzLmlzVmlydHVhbDtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICBjb25zdCBkYXRhUm93cyA9IGlzVmlydHVhbCA/IHRoaXMudmlldy50b3RhbCA6IHBhZ2VTaXplO1xuICAgICAgICBjb25zdCBhZGRSb3dPZmZzZXQgPSB0aGlzLmVkaXRTZXJ2aWNlLmhhc05ld0l0ZW0gPyAxIDogMDtcbiAgICAgICAgY29uc3QgZmlsdGVyUm93T2Zmc2V0ID0gaGFzRmlsdGVyUm93KHRoaXMuZmlsdGVyYWJsZSkgPyAxIDogMDtcbiAgICAgICAgY29uc3QgaGVhZGVyUm93cyA9IHRoaXMudG90YWxDb2x1bW5MZXZlbHMgKyAxICsgZmlsdGVyUm93T2Zmc2V0ICsgYWRkUm93T2Zmc2V0O1xuICAgICAgICByZXR1cm4gbmV3IE5hdmlnYXRpb25NZXRhZGF0YShkYXRhUm93cywgaGVhZGVyUm93cywgaXNWaXJ0dWFsLCB0aGlzLnNob3dQYWdlciwgaXNQcmVzZW50KHRoaXMuZGV0YWlsVGVtcGxhdGUpLCB0aGlzLndyYXBwZXIsIHRoaXMudmlydHVhbENvbHVtbnMsIHRoaXMuY29sdW1uc0NvbnRhaW5lcik7XG4gICAgfVxuICAgIHVwZGF0ZU5hdmlnYXRpb25NZXRhZGF0YSgpIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5tZXRhZGF0YSA9IHRoaXMubmF2aWdhdGlvbk1ldGFkYXRhKCk7XG4gICAgfVxuICAgIGFwcGx5QXV0b1NpemUoKSB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKChjKSA9PiB0aGlzLmF1dG9TaXplID8gYy5hdXRvU2l6ZSAhPT0gZmFsc2UgOiBjLmF1dG9TaXplKTtcbiAgICAgICAgaWYgKGNvbHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoXyA9PiB0aGlzLmF1dG9GaXRDb2x1bW5zKGNvbHMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkNvbHVtblJhbmdlQ2hhbmdlKHJhbmdlKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29sdW1ucyA9IHRoaXMudmlld3BvcnRDb2x1bW5zID0gW107XG4gICAgICAgIGNvbnN0IGxlYWZWaWV3cG9ydENvbHVtbnMgPSB0aGlzLmNvbHVtbnNDb250YWluZXJcbiAgICAgICAgICAgIC5ub25Mb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KCkuc2xpY2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCArIDEpO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBsZWFmVmlld3BvcnRDb2x1bW5zLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSBsZWFmVmlld3BvcnRDb2x1bW5zW2lkeF07XG4gICAgICAgICAgICB3aGlsZSAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0b0FkZCA9IFtjb2x1bW5dO1xuICAgICAgICAgICAgd2hpbGUgKHRvQWRkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IHRvQWRkLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgdmlld3BvcnRDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uLmlzQ29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgdG9BZGQudW5zaGlmdC5hcHBseSh0b0FkZCwgY29sdW1uLmNoaWxkcmVuQXJyYXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxhc3RGcm9tR3JvdXAgPSB2aWV3cG9ydENvbHVtbnNbdmlld3BvcnRDb2x1bW5zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgY29sdW1uID0gbGVhZlZpZXdwb3J0Q29sdW1uc1tpZHhdO1xuICAgICAgICAgICAgd2hpbGUgKGNvbHVtbiAhPT0gbGFzdEZyb21Hcm91cCAmJiBpZHggPCBsZWFmVmlld3BvcnRDb2x1bW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlkeCsrO1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGxlYWZWaWV3cG9ydENvbHVtbnNbaWR4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocmFuZ2Uuc3RhcnQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdCA9IGxlYWZWaWV3cG9ydENvbHVtbnNbMF07XG4gICAgICAgICAgICBsZXQgb2Zmc2V0ID0gcmFuZ2Uub2Zmc2V0O1xuICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB2aWV3cG9ydENvbHVtbnNbMF07XG4gICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT09IGZpcnN0KSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0IC09IGN1cnJlbnQuaXNDb2x1bW5Hcm91cCA/IDAgOiBjdXJyZW50LndpZHRoO1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgY3VycmVudCA9IHZpZXdwb3J0Q29sdW1uc1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvdGFsTGV2ZWxzID0gdGhpcy5jb2x1bW5zQ29udGFpbmVyLnRvdGFsTGV2ZWxzO1xuICAgICAgICAgICAgICAgIGxldCBwcmV2aW91cztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPD0gdG90YWxMZXZlbHM7IGlkeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9mZnNldENvbHVtbiA9IGlkeCA8IHRvdGFsTGV2ZWxzID8gbmV3IENvbHVtbkdyb3VwQ29tcG9uZW50KHByZXZpb3VzKSA6IG5ldyBDb2x1bW5CYXNlJDEocHJldmlvdXMpO1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG9mZnNldENvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q29sdW1uLnRpdGxlID0gXCJcXHUwMEEwXCI7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldENvbHVtbi53aWR0aCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnRDb2x1bW5zLnVuc2hpZnQob2Zmc2V0Q29sdW1uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5sZWFmVmlld3BvcnRDb2x1bW5zID0gdmlld3BvcnRDb2x1bW5zLmZpbHRlcihjID0+ICFjLmlzQ29sdW1uR3JvdXApO1xuICAgIH1cbiAgICB0b2dnbGVEZXRhaWxSb3dMZWdhY3koaW5kZXgsIGV4cGFuZCkge1xuICAgICAgICBjb25zdCBoYXNDYWxsYmFjayA9IHR5cGVvZiB0aGlzLmlzRGV0YWlsRXhwYW5kZWQgPT09ICdmdW5jdGlvbic7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSAmJiBoYXNDYWxsYmFjaykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZXhwYW5kUm93IGFuZCBjb2xsYXBzZVJvdyBtZXRob2RzIHNob3VsZCBub3QgYmUgY2FsbGVkIHdoZW4gdXNpbmcgdGhlICcgK1xuICAgICAgICAgICAgICAgICdrZW5kb0dyaWREZXRhaWxzRXhwYW5kQnkgZGlyZWN0aXZlIG9yIHRoZSBpc0RldGFpbEV4cGFuZGVkIGNhbGxiYWNrLiAnICtcbiAgICAgICAgICAgICAgICAnVGhlc2UgbWV0aG9kcyBhcmUgcHJvdmlkZWQgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBsZWdhY3kgdmVyc2lvbnMuJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSAmJiBoYXNDYWxsYmFjaykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRldGFpbHNTZXJ2aWNlLmlzRXhwYW5kZWQoaW5kZXgsIG51bGwpICE9PSBleHBhbmQpIHtcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2UudG9nZ2xlUm93KGluZGV4LCBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzaG91bGRSZXNldFNlbGVjdGlvbihzZWxlY3RhYmxlQ2hhbmdlcykge1xuICAgICAgICBjb25zdCBwcmV2aW91c1ZhbHVlID0gc2VsZWN0YWJsZUNoYW5nZXMucHJldmlvdXNWYWx1ZTtcbiAgICAgICAgaWYgKCFwcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgICAvLyBTZWxlY3Rpb24gd2FzIGRpc2FibGVkLCBubyBuZWVkIHRvIHJlc2V0LlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHNlbGVjdGFibGVDaGFuZ2VzLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgaWYgKCFjdXJyZW50VmFsdWUgfHwgY3VycmVudFZhbHVlLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBTZWxlY3Rpb24gZGlzYWJsZWQsIHJlc2V0LlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXZpb3VzVmFsdWUuY2VsbCAhPT0gY3VycmVudFZhbHVlLmNlbGw7XG4gICAgfVxufVxuR3JpZENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0dyaWQnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBCcm93c2VyU3VwcG9ydFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENvbHVtbkluZm9TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBDZWxsU2VsZWN0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRGV0YWlsc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIEdyb3Vwc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIEdyb3VwSW5mb1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENoYW5nZU5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIEVkaXRTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBQREZTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTdXNwZW5kU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogQ0VMTF9DT05URVhULFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IMm1NCQyXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5ncmlkJ1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBSZXNwb25zaXZlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgUGFnZXJDb250ZXh0U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRXhjZWxTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTY3JvbGxTeW5jU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgUmVzaXplU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERvbUV2ZW50c1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENvbHVtblJlc2l6aW5nU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgU2luZ2xlUG9wdXBTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBEcmFnQW5kRHJvcFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIERyYWdIaW50U2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRHJvcEN1ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIENvbHVtblJlb3JkZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBOYXZpZ2F0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRm9jdXNSb290LFxuICAgICAgICAgICAgICAgICAgICBJZFNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFNjcm9sbFJlcXVlc3RTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICBTb3J0U2VydmljZVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkJyxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gU3R5bGVzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGtlbmRvLXRoZW1lLWRlZmF1bHRAdjIuNDYuMCBhbmQgZWFybGllci5cbiAgICAgICAgICAgICAgICAgICAgYCAgIC5rLWdyaWQgLmstZ3JpZC1hcmlhLXJvb3Qge1xuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgICAgICBmbGV4OiAxIDEgYXV0bztcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIH1cblxuICAgICAgICAuay1ncmlkIC5rLWZpbHRlci1yb3cgdGQge1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgICAgfWBcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIga2VuZG9HcmlkTG9jYWxpemVkTWVzc2FnZXNcbiAgICAgICAgICAgIGkxOG4tZ3JvdXBQYW5lbEVtcHR5PVwia2VuZG8uZ3JpZC5ncm91cFBhbmVsRW1wdHl8VGhlIGxhYmVsIHZpc2libGUgaW4gdGhlIEdyaWQgZ3JvdXAgcGFuZWwgd2hlbiBpdCBpcyBlbXB0eVwiXG4gICAgICAgICAgICBncm91cFBhbmVsRW1wdHk9XCJEcmFnIGEgY29sdW1uIGhlYWRlciBhbmQgZHJvcCBpdCBoZXJlIHRvIGdyb3VwIGJ5IHRoYXQgY29sdW1uXCJcblxuICAgICAgICAgICAgaTE4bi1ub1JlY29yZHM9XCJrZW5kby5ncmlkLm5vUmVjb3Jkc3xUaGUgbGFiZWwgdmlzaWJsZSBpbiB0aGUgR3JpZCB3aGVuIHRoZXJlIGFyZSBubyByZWNvcmRzXCJcbiAgICAgICAgICAgIG5vUmVjb3Jkcz1cIk5vIHJlY29yZHMgYXZhaWxhYmxlLlwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJGaXJzdFBhZ2U9XCJrZW5kby5ncmlkLnBhZ2VyRmlyc3RQYWdlfFRoZSBsYWJlbCBmb3IgdGhlIGZpcnN0IHBhZ2UgYnV0dG9uIGluIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJGaXJzdFBhZ2U9XCJHbyB0byB0aGUgZmlyc3QgcGFnZVwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJQcmV2aW91c1BhZ2U9XCJrZW5kby5ncmlkLnBhZ2VyUHJldmlvdXNQYWdlfFRoZSBsYWJlbCBmb3IgdGhlIHByZXZpb3VzIHBhZ2UgYnV0dG9uIGluIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJQcmV2aW91c1BhZ2U9XCJHbyB0byB0aGUgcHJldmlvdXMgcGFnZVwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJOZXh0UGFnZT1cImtlbmRvLmdyaWQucGFnZXJOZXh0UGFnZXxUaGUgbGFiZWwgZm9yIHRoZSBuZXh0IHBhZ2UgYnV0dG9uIGluIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJOZXh0UGFnZT1cIkdvIHRvIHRoZSBuZXh0IHBhZ2VcIlxuXG4gICAgICAgICAgICBpMThuLXBhZ2VyTGFzdFBhZ2U9XCJrZW5kby5ncmlkLnBhZ2VyTGFzdFBhZ2V8VGhlIGxhYmVsIGZvciB0aGUgbGFzdCBwYWdlIGJ1dHRvbiBpbiBHcmlkIHBhZ2VyXCJcbiAgICAgICAgICAgIHBhZ2VyTGFzdFBhZ2U9XCJHbyB0byB0aGUgbGFzdCBwYWdlXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlclBhZ2U9XCJrZW5kby5ncmlkLnBhZ2VyUGFnZXxUaGUgbGFiZWwgYmVmb3JlIHRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyIGluIHRoZSBHcmlkIHBhZ2VyXCJcbiAgICAgICAgICAgIHBhZ2VyUGFnZT1cIlBhZ2VcIlxuXG4gICAgICAgICAgICBpMThuLXBhZ2VyT2Y9XCJrZW5kby5ncmlkLnBhZ2VyT2Z8VGhlIGxhYmVsIGJlZm9yZSB0aGUgdG90YWwgcGFnZXMgbnVtYmVyIGluIHRoZSBHcmlkIHBhZ2VyXCJcbiAgICAgICAgICAgIHBhZ2VyT2Y9XCJvZlwiXG5cbiAgICAgICAgICAgIGkxOG4tcGFnZXJJdGVtcz1cImtlbmRvLmdyaWQucGFnZXJJdGVtc3xUaGUgbGFiZWwgYWZ0ZXIgdGhlIHRvdGFsIHBhZ2VzIG51bWJlciBpbiB0aGUgR3JpZCBwYWdlclwiXG4gICAgICAgICAgICBwYWdlckl0ZW1zPVwiaXRlbXNcIlxuXG4gICAgICAgICAgICBpMThuLXBhZ2VyUGFnZU51bWJlcklucHV0VGl0bGU9XCJrZW5kby5ncmlkLnBhZ2VyUGFnZU51bWJlcklucHV0VGl0bGV8VGhlIGxhYmVsIGZvciB0aGUgcGFnZXIgaW5wdXQgaW4gdGhlIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJQYWdlTnVtYmVySW5wdXRUaXRsZT1cIlBhZ2UgTnVtYmVyXCJcblxuICAgICAgICAgICAgaTE4bi1wYWdlckl0ZW1zUGVyUGFnZT1cImtlbmRvLmdyaWQucGFnZXJJdGVtc1BlclBhZ2V8VGhlIGxhYmVsIGZvciB0aGUgcGFnZSBzaXplIGNob29zZXIgaW4gdGhlIEdyaWQgcGFnZXJcIlxuICAgICAgICAgICAgcGFnZXJJdGVtc1BlclBhZ2U9XCJpdGVtcyBwZXIgcGFnZVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyPVwia2VuZG8uZ3JpZC5maWx0ZXJ8VGhlIGxhYmVsIG9mIHRoZSBmaWx0ZXIgY2VsbCBvciBpY29uXCJcbiAgICAgICAgICAgIGZpbHRlcj1cIkZpbHRlclwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyRXFPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyRXFPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgZXF1YWwgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckVxT3BlcmF0b3I9XCJJcyBlcXVhbCB0b1wiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyTm90RXFPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyTm90RXFPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgbm90IGVxdWFsIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJOb3RFcU9wZXJhdG9yPVwiSXMgbm90IGVxdWFsIHRvXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJJc051bGxPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVySXNOdWxsT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGlzIG51bGwgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlcklzTnVsbE9wZXJhdG9yPVwiSXMgbnVsbFwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVySXNOb3ROdWxsT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlcklzTm90TnVsbE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBpcyBub3QgbnVsbCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVySXNOb3ROdWxsT3BlcmF0b3I9XCJJcyBub3QgbnVsbFwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVySXNFbXB0eU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJJc0VtcHR5T3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGlzIGVtcHR5IGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJJc0VtcHR5T3BlcmF0b3I9XCJJcyBlbXB0eVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVySXNOb3RFbXB0eU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJJc05vdEVtcHR5T3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGlzIG5vdCBlbXB0eSBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVySXNOb3RFbXB0eU9wZXJhdG9yPVwiSXMgbm90IGVtcHR5XCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJTdGFydHNXaXRoT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgc3RhcnRzIHdpdGggZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvcj1cIlN0YXJ0cyB3aXRoXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJDb250YWluc09wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJDb250YWluc09wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBjb250YWlucyBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyQ29udGFpbnNPcGVyYXRvcj1cIkNvbnRhaW5zXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJOb3RDb250YWluc09wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJOb3RDb250YWluc09wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBkb2VzIG5vdCBjb250YWluIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJOb3RDb250YWluc09wZXJhdG9yPVwiRG9lcyBub3QgY29udGFpblwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyRW5kc1dpdGhPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyRW5kc1dpdGhPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgZW5kcyB3aXRoIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJFbmRzV2l0aE9wZXJhdG9yPVwiRW5kcyB3aXRoXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJHdGVPcGVyYXRvcj1cImtlbmRvLmdyaWQuZmlsdGVyR3RlT3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyR3RlT3BlcmF0b3I9XCJJcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG9cIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckd0T3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckd0T3BlcmF0b3J8VGhlIHRleHQgb2YgdGhlIGdyZWF0ZXIgdGhhbiBmaWx0ZXIgb3BlcmF0b3JcIlxuICAgICAgICAgICAgZmlsdGVyR3RPcGVyYXRvcj1cIklzIGdyZWF0ZXIgdGhhblwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyTHRlT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckx0ZU9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBsZXNzIHRoYW4gb3IgZXF1YWwgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckx0ZU9wZXJhdG9yPVwiSXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJMdE9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJMdE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBsZXNzIHRoYW4gZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckx0T3BlcmF0b3I9XCJJcyBsZXNzIHRoYW5cIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlcklzVHJ1ZT1cImtlbmRvLmdyaWQuZmlsdGVySXNUcnVlfFRoZSB0ZXh0IG9mIHRoZSBJc1RydWUgYm9vbGVhbiBmaWx0ZXIgb3B0aW9uXCJcbiAgICAgICAgICAgIGZpbHRlcklzVHJ1ZT1cIklzIFRydWVcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlcklzRmFsc2U9XCJrZW5kby5ncmlkLmZpbHRlcklzRmFsc2V8VGhlIHRleHQgb2YgdGhlIElzRmFsc2UgYm9vbGVhbiBmaWx0ZXIgb3B0aW9uXCJcbiAgICAgICAgICAgIGZpbHRlcklzRmFsc2U9XCJJcyBGYWxzZVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyQm9vbGVhbkFsbD1cImtlbmRvLmdyaWQuZmlsdGVyQm9vbGVhbkFsbHxUaGUgdGV4dCBvZiB0aGUgKEFsbCkgYm9vbGVhbiBmaWx0ZXIgb3B0aW9uXCJcbiAgICAgICAgICAgIGZpbHRlckJvb2xlYW5BbGw9XCIoQWxsKVwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyQWZ0ZXJPckVxdWFsT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckFmdGVyT3JFcXVhbE9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBhZnRlciBvciBlcXVhbCBkYXRlIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJBZnRlck9yRXF1YWxPcGVyYXRvcj1cIklzIGFmdGVyIG9yIGVxdWFsIHRvXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJBZnRlck9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJBZnRlck9wZXJhdG9yfFRoZSB0ZXh0IG9mIHRoZSBhZnRlciBkYXRlIGZpbHRlciBvcGVyYXRvclwiXG4gICAgICAgICAgICBmaWx0ZXJBZnRlck9wZXJhdG9yPVwiSXMgYWZ0ZXJcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckJlZm9yZU9wZXJhdG9yPVwia2VuZG8uZ3JpZC5maWx0ZXJCZWZvcmVPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgYmVmb3JlIGRhdGUgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckJlZm9yZU9wZXJhdG9yPVwiSXMgYmVmb3JlXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJCZWZvcmVPckVxdWFsT3BlcmF0b3I9XCJrZW5kby5ncmlkLmZpbHRlckJlZm9yZU9yRXF1YWxPcGVyYXRvcnxUaGUgdGV4dCBvZiB0aGUgYmVmb3JlIG9yIGVxdWFsIGRhdGUgZmlsdGVyIG9wZXJhdG9yXCJcbiAgICAgICAgICAgIGZpbHRlckJlZm9yZU9yRXF1YWxPcGVyYXRvcj1cIklzIGJlZm9yZSBvciBlcXVhbCB0b1wiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyRmlsdGVyQnV0dG9uPVwia2VuZG8uZ3JpZC5maWx0ZXJGaWx0ZXJCdXR0b258VGhlIHRleHQgb2YgdGhlIGZpbHRlciBidXR0b25cIlxuICAgICAgICAgICAgZmlsdGVyRmlsdGVyQnV0dG9uPVwiRmlsdGVyXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJDbGVhckJ1dHRvbj1cImtlbmRvLmdyaWQuZmlsdGVyQ2xlYXJCdXR0b258VGhlIHRleHQgb2YgdGhlIGNsZWFyIGZpbHRlciBidXR0b25cIlxuICAgICAgICAgICAgZmlsdGVyQ2xlYXJCdXR0b249XCJDbGVhclwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyQW5kTG9naWM9XCJrZW5kby5ncmlkLmZpbHRlckFuZExvZ2ljfFRoZSB0ZXh0IG9mIHRoZSBBbmQgZmlsdGVyIGxvZ2ljXCJcbiAgICAgICAgICAgIGZpbHRlckFuZExvZ2ljPVwiQW5kXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJPckxvZ2ljPVwia2VuZG8uZ3JpZC5maWx0ZXJPckxvZ2ljfFRoZSB0ZXh0IG9mIHRoZSBPciBmaWx0ZXIgbG9naWNcIlxuICAgICAgICAgICAgZmlsdGVyT3JMb2dpYz1cIk9yXCJcblxuICAgICAgICAgICAgaTE4bi1sb2FkaW5nPVwia2VuZG8uZ3JpZC5sb2FkaW5nfFRoZSBsb2FkaW5nIHRleHRcIlxuICAgICAgICAgICAgbG9hZGluZz1cIkxvYWRpbmdcIlxuXG4gICAgICAgICAgICBpMThuLWNvbHVtbk1lbnU9XCJrZW5kby5ncmlkLmNvbHVtbk1lbnV8VGhlIHRpdGxlIG9mIHRoZSBjb2x1bW4gbWVudSBpY29uXCJcbiAgICAgICAgICAgIGNvbHVtbk1lbnU9XCJDb2x1bW4gTWVudVwiXG5cbiAgICAgICAgICAgIGkxOG4tY29sdW1ucz1cImtlbmRvLmdyaWQuY29sdW1uc3xUaGUgdGV4dCBzaG93biBpbiB0aGUgY29sdW1uIG1lbnUgZm9yIHRoZSBjb2x1bW5zIGl0ZW1cIlxuICAgICAgICAgICAgY29sdW1ucz1cIkNvbHVtbnNcIlxuXG4gICAgICAgICAgICBpMThuLWxvY2s9XCJrZW5kby5ncmlkLmxvY2t8VGhlIHRleHQgc2hvd24gaW4gdGhlIGNvbHVtbiBtZW51IGZvciB0aGUgbG9jayBpdGVtXCJcbiAgICAgICAgICAgIGxvY2s9XCJMb2NrXCJcblxuICAgICAgICAgICAgaTE4bi11bmxvY2s9XCJrZW5kby5ncmlkLnVubG9ja3xUaGUgdGV4dCBzaG93biBpbiB0aGUgY29sdW1uIG1lbnUgZm9yIHRoZSB1bmxvY2sgaXRlbVwiXG4gICAgICAgICAgICB1bmxvY2s9XCJVbmxvY2tcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnRhYmxlPVwia2VuZG8uZ3JpZC5zb3J0YWJsZXxUaGUgbGFiZWwgb2YgdGhlIHNvcnQgaWNvblwiXG4gICAgICAgICAgICBzb3J0YWJsZT1cIlNvcnRhYmxlXCJcblxuICAgICAgICAgICAgaTE4bi1zb3J0QXNjZW5kaW5nPVwia2VuZG8uZ3JpZC5zb3J0QXNjZW5kaW5nfFRoZSB0ZXh0IHNob3duIGluIHRoZSBjb2x1bW4gbWVudSBmb3IgdGhlIHNvcnQgYXNjZW5kaW5nIGl0ZW1cIlxuICAgICAgICAgICAgc29ydEFzY2VuZGluZz1cIlNvcnQgQXNjZW5kaW5nXCJcblxuICAgICAgICAgICAgaTE4bi1zb3J0RGVzY2VuZGluZz1cImtlbmRvLmdyaWQuc29ydERlc2NlbmRpbmd8VGhlIHRleHQgc2hvd24gaW4gdGhlIGNvbHVtbiBtZW51IGZvciB0aGUgc29ydCBkZXNjZW5kaW5nIGl0ZW1cIlxuICAgICAgICAgICAgc29ydERlc2NlbmRpbmc9XCJTb3J0IERlc2NlbmRpbmdcIlxuXG4gICAgICAgICAgICBpMThuLXNvcnRlZEFzY2VuZGluZz1cImtlbmRvLmdyaWQuc29ydGVkQXNjZW5kaW5nfFRoZSBzdGF0dXMgYW5ub3VuY2VtZW50IHdoZW4gYSBjb2x1bW4gaXMgc29ydGVkIGFzY2VuZGluZ1wiXG4gICAgICAgICAgICBzb3J0ZWRBc2NlbmRpbmc9XCJTb3J0ZWQgQXNjZW5kaW5nXCJcblxuICAgICAgICAgICAgaTE4bi1zb3J0ZWREZXNjZW5kaW5nPVwia2VuZG8uZ3JpZC5zb3J0ZWREZXNjZW5kaW5nfFRoZSBzdGF0dXMgYW5ub3VuY2VtZW50IHdoZW4gYSBjb2x1bW4gaXMgc29ydGVkIGRlc2NlbmRpbmdcIlxuICAgICAgICAgICAgc29ydGVkRGVzY2VuZGluZz1cIlNvcnRlZCBEZXNjZW5kaW5nXCJcblxuICAgICAgICAgICAgaTE4bi1zb3J0ZWREZWZhdWx0PVwia2VuZG8uZ3JpZC5zb3J0ZWREZWZhdWx0fFRoZSBzdGF0dXMgYW5ub3VuY2VtZW50IHdoZW4gYSBjb2x1bW4gaXMgbm8gbG9uZ2VyIHNvcnRlZFwiXG4gICAgICAgICAgICBzb3J0ZWREZWZhdWx0PVwiTm90IFNvcnRlZFwiXG5cbiAgICAgICAgICAgIGkxOG4tY29sdW1uc0FwcGx5PVwia2VuZG8uZ3JpZC5jb2x1bW5zQXBwbHl8VGhlIHRleHQgc2hvd24gaW4gdGhlIGNvbHVtbiBtZW51IG9yIGNvbHVtbiBjaG9vc2VyIGZvciB0aGUgY29sdW1ucyBhcHBseSBidXR0b25cIlxuICAgICAgICAgICAgY29sdW1uc0FwcGx5PVwiQXBwbHlcIlxuXG4gICAgICAgICAgICBpMThuLWNvbHVtbnNSZXNldD1cImtlbmRvLmdyaWQuY29sdW1uc1Jlc2V0fFRoZSB0ZXh0IHNob3duIGluIHRoZSBjb2x1bW4gbWVudSBvciBjb2x1bW4gY2hvb3NlciBmb3IgdGhlIGNvbHVtbnMgcmVzZXQgYnV0dG9uXCJcbiAgICAgICAgICAgIGNvbHVtbnNSZXNldD1cIlJlc2V0XCJcblxuICAgICAgICAgICAgaTE4bi1kZXRhaWxFeHBhbmQ9XCJrZW5kby5ncmlkLmRldGFpbEV4cGFuZHxUaGUgdGl0bGUgb2YgdGhlIGV4cGFuZCBpY29uIG9mIGRldGFpbCByb3dzLlwiXG4gICAgICAgICAgICBkZXRhaWxFeHBhbmQ9XCJFeHBhbmQgRGV0YWlsc1wiXG5cbiAgICAgICAgICAgIGkxOG4tZGV0YWlsQ29sbGFwc2U9XCJrZW5kby5ncmlkLmRldGFpbENvbGxhcHNlfFRoZSB0aXRsZSBvZiB0aGUgY29sbGFwc2UgaWNvbiBvZiBkZXRhaWwgcm93cy5cIlxuICAgICAgICAgICAgZGV0YWlsQ29sbGFwc2U9XCJDb2xsYXBzZSBEZXRhaWxzXCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJEYXRlVG9kYXk9XCJrZW5kby5ncmlkLmZpbHRlckRhdGVUb2RheXxUaGUgdGV4dCBvZiB0aGUgVG9kYXkgYnV0dG9uIG9mIHRoZSBEYXRlIGZpbHRlci5cIlxuICAgICAgICAgICAgZmlsdGVyRGF0ZVRvZGF5PVwiVE9EQVlcIlxuXG4gICAgICAgICAgICBpMThuLWZpbHRlckRhdGVUb2dnbGU9XCJrZW5kby5ncmlkLmZpbHRlckRhdGVUb2dnbGV8VGhlIHRpdGxlIG9mIHRoZSBUb2dnbGUgYnV0dG9uIG9mIHRoZSBEYXRlIGZpbHRlci5cIlxuICAgICAgICAgICAgZmlsdGVyRGF0ZVRvZ2dsZT1cIlRvZ2dsZSBDYWxlbmRhclwiXG5cbiAgICAgICAgICAgIGkxOG4tZmlsdGVyTnVtZXJpY0RlY3JlbWVudD1cImtlbmRvLmdyaWQuZmlsdGVyTnVtZXJpY0RlY3JlbWVudHxUaGUgdGl0bGUgb2YgdGhlIERlY3JlbWVudCBidXR0b24gb2YgdGhlIE51bWVyaWMgZmlsdGVyLlwiXG4gICAgICAgICAgICBmaWx0ZXJOdW1lcmljRGVjcmVtZW50PVwiRGVjcmVtZW50XCJcblxuICAgICAgICAgICAgaTE4bi1maWx0ZXJOdW1lcmljSW5jcmVtZW50PVwia2VuZG8uZ3JpZC5maWx0ZXJOdW1lcmljSW5jcmVtZW50fFRoZSB0aXRsZSBvZiB0aGUgSW5jcmVtZW50IGJ1dHRvbiBvZiB0aGUgTnVtZXJpYyBmaWx0ZXIuXCJcbiAgICAgICAgICAgIGZpbHRlck51bWVyaWNJbmNyZW1lbnQ9XCJJbmNyZW1lbnRcIlxuICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8a2VuZG8tZ3JpZC10b29sYmFyICpuZ0lmPVwic2hvd1RvcFRvb2xiYXJcIiBwb3NpdGlvbj1cInRvcFwiPjwva2VuZG8tZ3JpZC10b29sYmFyPlxuICAgICAgICA8a2VuZG8tZ3JpZC1ncm91cC1wYW5lbFxuICAgICAgICAgICAgKm5nSWY9XCJzaG93R3JvdXBQYW5lbFwiXG4gICAgICAgICAgICBbdGV4dF09XCJncm91cGFibGVFbXB0eVRleHRcIlxuICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cImdyb3VwQ2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICA8L2tlbmRvLWdyaWQtZ3JvdXAtcGFuZWw+XG4gICAgICAgIDxkaXYgI2FyaWFSb290XG4gICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1hcmlhLXJvb3RcIlxuICAgICAgICAgICAgcm9sZT1cImdyaWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1yb3djb3VudF09XCJhcmlhUm93Q291bnRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1jb2xjb3VudF09XCJhcmlhQ29sQ291bnRcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzU2Nyb2xsYWJsZVwiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFoaWRlSGVhZGVyXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5wYWRkaW5nXT1cImhlYWRlclBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2NrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgI2xvY2tlZEhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1oZWFkZXItbG9ja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgW2xvY2tlZF09XCJ0cnVlXCIgcm9sZT1cInByZXNlbnRhdGlvblwiIFtzdHlsZS53aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGdyb3VwIGtlbmRvR3JpZENvbEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBrZW5kb0dyaWRIZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibG9ja2VkQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ29sdW1uTGV2ZWxzXT1cInRvdGFsQ29sdW1uTGV2ZWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydF09XCJzb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwYWJsZV09XCJzaG93R3JvdXBQYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jlb3JkZXJhYmxlXT1cInJlb3JkZXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImNvbHVtbk1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudVRlbXBsYXRlXT1cImNvbHVtbk1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsQ29sdW1uc0NvdW50XT1cImxlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgI2hlYWRlciBjbGFzcz1cImstZ3JpZC1oZWFkZXItd3JhcFwiIHJvbGU9XCJwcmVzZW50YXRpb25cIiBkYXRhLXNjcm9sbGFibGVcbiAgICAgICAgICAgICAgICAgICAgW2tlbmRvR3JpZFJlc2l6YWJsZUNvbnRhaW5lcl09XCJsb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbbG9ja2VkV2lkdGhdPVwibG9ja2VkV2lkdGggKyBzY3JvbGxiYXJXaWR0aCArIDJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIHJvbGU9XCJwcmVzZW50YXRpb25cIiBbc3R5bGUud2lkdGgucHhdPVwibm9uTG9ja2VkV2lkdGhcIiBbdmlydHVhbENvbHVtbnNdPVwidmlydHVhbENvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjb2xncm91cCBrZW5kb0dyaWRDb2xHcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImhlYWRlckxlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImlzTG9ja2VkID8gW10gOiBncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGtlbmRvR3JpZEhlYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXNpemFibGVdPVwicmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJoZWFkZXJDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxDb2x1bW5MZXZlbHNdPVwidG90YWxDb2x1bW5MZXZlbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBhYmxlXT1cInNob3dHcm91cFBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVvcmRlcmFibGVdPVwicmVvcmRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiaXNMb2NrZWQgPyBbXSA6IGdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51XT1cImNvbHVtbk1lbnVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudVRlbXBsYXRlXT1cImNvbHVtbk1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2tlZENvbHVtbnNDb3VudF09XCJsb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbnNDb3VudF09XCJsZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInZpcnR1YWxDb2x1bW5zXCIgY2xhc3M9XCJrLXdpZHRoLWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbnNDb250YWluZXIudW5sb2NrZWRXaWR0aFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGtlbmRvLWdyaWQtbGlzdFxuICAgICAgICAgICAgICAgIFtkYXRhXT1cInZpZXdcIlxuICAgICAgICAgICAgICAgIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbZGV0YWlsUm93SGVpZ2h0XT1cImRldGFpbFJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgW3RvdGFsXT1cInRvdGFsQ291bnRcIlxuICAgICAgICAgICAgICAgIFt0YWtlXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBhYmxlXT1cImdyb3VwYWJsZVwiXG4gICAgICAgICAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc0NvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbm9SZWNvcmRzVGVtcGxhdGVdPVwibm9SZWNvcmRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm5vdGlmeVBhZ2VDaGFuZ2UoJ2xpc3QnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgICAgICAgICAgIFtpc1ZpcnR1YWxdPVwiaXNWaXJ0dWFsXCJcbiAgICAgICAgICAgICAgICBbdmlydHVhbENvbHVtbnNdPVwidmlydHVhbENvbHVtbnNcIlxuICAgICAgICAgICAgICAgIChzY3JvbGxCb3R0b20pPVwibm90aWZ5U2Nyb2xsQm90dG9tKClcIlxuICAgICAgICAgICAgICAgIChjb250ZW50U2Nyb2xsKT1cImNvbnRlbnRTY3JvbGwuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZVxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZFNlbGVjdGlvbk1hcnF1ZWVcbiAgICAgICAgICAgICAgICBbZW5hYmxlRHJhZ109XCJtYXJxdWVlU2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2tlbmRvLWdyaWQtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGb290ZXJcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1ncmlkLWZvb3RlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnBhZGRpbmddPVwiaGVhZGVyUGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJsb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1mb290ZXItbG9ja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSByb2xlPVwicHJlc2VudGF0aW9uXCIgW2xvY2tlZF09XCJ0cnVlXCIgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJsb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbGdyb3VwPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRmb290IGtlbmRvR3JpZEZvb3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImxvY2tlZExlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwiYXJpYVJvd0NvdW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgIDwvZGl2PjxkaXYgI2Zvb3RlclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1mb290ZXItd3JhcFwiIGRhdGEtc2Nyb2xsYWJsZVxuICAgICAgICAgICAgICAgICAgICBba2VuZG9HcmlkUmVzaXphYmxlQ29udGFpbmVyXT1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2NrZWRXaWR0aF09XCJsb2NrZWRXaWR0aCArIHNjcm9sbGJhcldpZHRoICsgM1wiPlxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgcm9sZT1cInByZXNlbnRhdGlvblwiIFtzdHlsZS53aWR0aC5weF09XCJub25Mb2NrZWRXaWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvbGdyb3VwIGtlbmRvR3JpZENvbEdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibm9uTG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiaXNMb2NrZWQgPyBbXSA6IGdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGZvb3Qga2VuZG9HcmlkRm9vdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJhcmlhUm93Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiaXNMb2NrZWQgPyBbXSA6IGdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJub25Mb2NrZWRMZWFmQ29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvY2tlZENvbHVtbnNDb3VudF09XCJsb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWlzU2Nyb2xsYWJsZVwiPlxuICAgICAgICAgICAgPHRhYmxlIFtzdHlsZS50YWJsZS1sYXlvdXRdPVwicmVzaXphYmxlID8gJ2ZpeGVkJyA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgICAgICA8dGhlYWQga2VuZG9HcmlkSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVIZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cInJlc2l6YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwidmlzaWJsZUNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbdG90YWxDb2x1bW5MZXZlbHNdPVwidG90YWxDb2x1bW5MZXZlbHNcIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyb3VwYWJsZV09XCJzaG93R3JvdXBQYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgIFtyZW9yZGVyYWJsZV09XCJyZW9yZGVyYWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzb3J0XT1cInNvcnRcIlxuICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudV09XCJjb2x1bW5NZW51T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51VGVtcGxhdGVdPVwiY29sdW1uTWVudVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHkga2VuZG9HcmlkVGFibGVCb2R5XG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ2aWV3XCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBdPVwic2tpcFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImxlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbbm9SZWNvcmRzVGVtcGxhdGVdPVwibm9SZWNvcmRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0dyb3VwRm9vdGVyc109XCJzaG93R3JvdXBGb290ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3dDbGFzc109XCJyb3dDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZFNlbGVjdGlvbk1hcnF1ZWVcbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZURyYWddPVwibWFycXVlZVNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgPHRmb290IGtlbmRvR3JpZEZvb3RlclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dGb290ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwiYXJpYVJvd0NvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImxlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGtlbmRvR3JpZExvYWRpbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxrZW5kby1wYWdlclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93UGFnZXJcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cInBhZ2VyVGVtcGxhdGVcIlxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgIFt0b3RhbF09XCJ2aWV3LnRvdGFsXCJcbiAgICAgICAgICAgIFtza2lwXT1cInNraXBcIlxuICAgICAgICAgICAgW29wdGlvbnNdPVwicGFnZWFibGVcIlxuICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwibm90aWZ5UGFnZUNoYW5nZSgncGFnZXInLCAkZXZlbnQpXCI+XG4gICAgICAgIDwva2VuZG8tcGFnZXI+XG4gICAgICAgIDxrZW5kby1ncmlkLXRvb2xiYXIgKm5nSWY9XCJzaG93Qm90dG9tVG9vbGJhclwiIHBvc2l0aW9uPVwiYm90dG9tXCI+PC9rZW5kby1ncmlkLXRvb2xiYXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5HcmlkQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQnJvd3NlclN1cHBvcnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDZWxsU2VsZWN0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogR3JvdXBJbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBzU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRGV0YWlsc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVkaXRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQREZTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZXNwb25zaXZlU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBFeGNlbFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogU2Nyb2xsU3luY1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERvbUV2ZW50c1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlc2l6aW5nU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlb3JkZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5JbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNvcnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTY3JvbGxSZXF1ZXN0U2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuR3JpZENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBkYXRhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlU2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVpZ2h0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb3dIZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFJvd0hlaWdodDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2tpcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2Nyb2xsYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdHJhY2tCeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmlydHVhbENvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBuYXZpZ2FibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5hdmlnYXRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhdXRvU2l6ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93Q2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvd1NlbGVjdGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjZWxsU2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJlc2l6YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVvcmRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvYWRpbmc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbk1lbnU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhpZGVIZWFkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHBhZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBncm91cENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNvcnRDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBzZWxlY3Rpb25DaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBkYXRhU3RhdGVDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBncm91cEV4cGFuZDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdyb3VwQ29sbGFwc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBkZXRhaWxFeHBhbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBkZXRhaWxDb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGVkaXQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjYW5jZWw6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBzYXZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcmVtb3ZlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgYWRkOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbENsb3NlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY2VsbENsaWNrOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGRmRXhwb3J0OiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZXhjZWxFeHBvcnQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5SZXNpemU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5SZW9yZGVyOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sdW1uVmlzaWJpbGl0eUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbHVtbkxvY2tlZENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNjcm9sbEJvdHRvbTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbnRlbnRTY3JvbGw6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtDb2x1bW5CYXNlJDEsXSB9XSxcbiAgICBkaXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZCcsXSB9XSxcbiAgICBsb2NrZWRDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtbG9ja2VkY29sdW1ucycsXSB9XSxcbiAgICB2aXJ0dWFsQ2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLXZpcnR1YWwnLF0gfV0sXG4gICAgbm9TY3JvbGxiYXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLW5vLXNjcm9sbGJhcicsXSB9XSxcbiAgICBkZXRhaWxUZW1wbGF0ZUNoaWxkcmVuOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIG5vUmVjb3Jkc1RlbXBsYXRlQ2hpbGRyZW46IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW05vUmVjb3Jkc1RlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgcGFnZXJUZW1wbGF0ZUNoaWxkcmVuOiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtQYWdlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgdG9vbGJhclRlbXBsYXRlQ2hpbGRyZW46IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1Rvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGNvbHVtbk1lbnVUZW1wbGF0ZXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbk1lbnVUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dLFxuICAgIGxvY2tlZEhlYWRlcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJsb2NrZWRIZWFkZXJcIixdIH1dLFxuICAgIGhlYWRlcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJoZWFkZXJcIixdIH1dLFxuICAgIGZvb3RlcjogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbXCJmb290ZXJcIixdIH1dLFxuICAgIGFyaWFSb290OiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnYXJpYVJvb3QnLF0gfV0sXG4gICAgaXNEZXRhaWxFeHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB1cGRhdGUgPSAoYXJyLCBpZHgsIHZhbHVlKSA9PiAoW1xuICAgIC4uLmFyci5zbGljZSgwLCBpZHggKyAxKSxcbiAgICAuLi4oYXJyLnNsaWNlKGlkeCArIDEpLm1hcCh4ID0+IHggKyB2YWx1ZSkpXG5dKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBSb3dIZWlnaHRTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih0b3RhbCA9IDAsIHJvd0hlaWdodCwgZGV0YWlsUm93SGVpZ2h0KSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSByb3dIZWlnaHQ7XG4gICAgICAgIHRoaXMuZGV0YWlsUm93SGVpZ2h0ID0gZGV0YWlsUm93SGVpZ2h0O1xuICAgICAgICB0aGlzLm9mZnNldHMgPSBbXTtcbiAgICAgICAgdGhpcy5oZWlnaHRzID0gW107XG4gICAgICAgIGxldCBhZ2cgPSAwO1xuICAgICAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCB0b3RhbDsgaWR4KyspIHtcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0cy5wdXNoKGFnZyk7XG4gICAgICAgICAgICBhZ2cgKz0gcm93SGVpZ2h0O1xuICAgICAgICAgICAgdGhpcy5oZWlnaHRzLnB1c2gocm93SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoZWlnaHQocm93SW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0c1tyb3dJbmRleF07XG4gICAgfVxuICAgIGV4cGFuZERldGFpbChyb3dJbmRleCkge1xuICAgICAgICBpZiAodGhpcy5oZWlnaHQocm93SW5kZXgpID09PSB0aGlzLnJvd0hlaWdodCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3dIZWlnaHQocm93SW5kZXgsIHRoaXMuZGV0YWlsUm93SGVpZ2h0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb2xsYXBzZURldGFpbChyb3dJbmRleCkge1xuICAgICAgICBpZiAodGhpcy5oZWlnaHQocm93SW5kZXgpID4gdGhpcy5yb3dIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUm93SGVpZ2h0KHJvd0luZGV4LCB0aGlzLmRldGFpbFJvd0hlaWdodCAqIC0xKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc0V4cGFuZGVkKHJvd0luZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlaWdodChyb3dJbmRleCkgPiB0aGlzLnJvd0hlaWdodDtcbiAgICB9XG4gICAgaW5kZXgocG9zaXRpb24pIHtcbiAgICAgICAgaWYgKHBvc2l0aW9uIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLm9mZnNldHMucmVkdWNlKChwcmV2LCBjdXJyZW50LCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmV2ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgPT09IHBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlkeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnQgPiBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBpZHggLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKTsgLy8gdHNsaW50OmRpc2FibGUtbGluZTphbGlnblxuICAgICAgICByZXR1cm4gcmVzdWx0ID09PSB1bmRlZmluZWQgPyB0aGlzLnRvdGFsIC0gMSA6IHJlc3VsdDtcbiAgICB9XG4gICAgb2Zmc2V0KHJvd0luZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldHNbcm93SW5kZXhdO1xuICAgIH1cbiAgICB0b3RhbEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0cy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHByZXYgKyBjdXJyLCAwKTtcbiAgICB9XG4gICAgdXBkYXRlUm93SGVpZ2h0KHJvd0luZGV4LCB2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy50b3RhbCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaGVpZ2h0c1tyb3dJbmRleF0gKz0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLm9mZnNldHMgPSB1cGRhdGUodGhpcy5vZmZzZXRzLCByb3dJbmRleCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2Nyb2xsQWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihvZmZzZXQpIHtcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFBhZ2VBY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKHNraXAsIHRha2UkJDEpIHtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICAgICAgdGhpcy50YWtlID0gdGFrZSQkMTtcbiAgICB9XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2Nyb2xsQm90dG9tQWN0aW9uIHtcbn1cbmNvbnN0IFNDUk9MTF9CT1RUT01fVEhSRVNIT0xEID0gMjtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTY3JvbGxlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKHNjcm9sbE9ic2VydmFibGUpIHtcbiAgICAgICAgdGhpcy5zY3JvbGxPYnNlcnZhYmxlID0gc2Nyb2xsT2JzZXJ2YWJsZTtcbiAgICAgICAgdGhpcy5maXJzdExvYWRlZCA9IDA7XG4gICAgfVxuICAgIGNyZWF0ZShyb3dIZWlnaHRTZXJ2aWNlLCBza2lwLCB0YWtlJCQxLCB0b3RhbCkge1xuICAgICAgICB0aGlzLnJvd0hlaWdodFNlcnZpY2UgPSByb3dIZWlnaHRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gc2tpcDtcbiAgICAgICAgdGhpcy5sYXN0TG9hZGVkID0gc2tpcCArIHRha2UkJDE7XG4gICAgICAgIHRoaXMudGFrZSA9IHRha2UkJDE7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgdGhpcy5sYXN0U2Nyb2xsVG9wID0gMDtcbiAgICAgICAgY29uc3Qgc3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QobmV3IFNjcm9sbEFjdGlvbih0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KHNraXApKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLnNjcm9sbE9ic2VydmFibGUuc3Vic2NyaWJlKHggPT4gdGhpcy5vblNjcm9sbCh4LCBvYnNlcnZlcikpO1xuICAgICAgICB9KS5zdWJzY3JpYmUoeCA9PiBzdWJqZWN0Lm5leHQoeCkpO1xuICAgICAgICByZXR1cm4gc3ViamVjdDtcbiAgICB9XG4gICAgZGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25TY3JvbGwoeyBzY3JvbGxUb3AsIG9mZnNldEhlaWdodCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSwgb2JzZXJ2ZXIpIHtcbiAgICAgICAgaWYgKHRoaXMubGFzdFNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXAgPSB0aGlzLmxhc3RTY3JvbGxUb3AgPj0gc2Nyb2xsVG9wO1xuICAgICAgICB0aGlzLmxhc3RTY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgICAgIGxldCBmaXJzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChzY3JvbGxUb3ApO1xuICAgICAgICBsZXQgZmlyc3RJdGVtT2Zmc2V0ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLm9mZnNldChmaXJzdEl0ZW1JbmRleCk7XG4gICAgICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaW5kZXgoc2Nyb2xsVG9wICsgb2Zmc2V0SGVpZ2h0KTtcbiAgICAgICAgaWYgKCF1cCkge1xuICAgICAgICAgICAgaWYgKGxhc3RJdGVtSW5kZXggPj0gdGhpcy5sYXN0TG9hZGVkICYmIHRoaXMubGFzdExvYWRlZCA8IHRoaXMudG90YWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IChmaXJzdEl0ZW1JbmRleCArIHRoaXMudGFrZSkgLSB0aGlzLnRvdGFsO1xuICAgICAgICAgICAgICAgIGlmIChvdmVyZmxvdyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RJdGVtSW5kZXggPSBmaXJzdEl0ZW1JbmRleCAtIG92ZXJmbG93O1xuICAgICAgICAgICAgICAgICAgICBmaXJzdEl0ZW1PZmZzZXQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGZpcnN0SXRlbUluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdExvYWRlZCA9IGZpcnN0SXRlbUluZGV4O1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFNjcm9sbEFjdGlvbihmaXJzdEl0ZW1PZmZzZXQpKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dFRha2UgPSB0aGlzLmZpcnN0TG9hZGVkICsgdGhpcy50YWtlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdExvYWRlZCA9IE1hdGgubWluKG5leHRUYWtlLCB0aGlzLnRvdGFsKTtcbiAgICAgICAgICAgICAgICBuZXh0VGFrZSA9IG5leHRUYWtlID4gdGhpcy50b3RhbCA/IHRoaXMudG90YWwgLSB0aGlzLmZpcnN0TG9hZGVkIDogdGhpcy50YWtlO1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFBhZ2VBY3Rpb24odGhpcy5maXJzdExvYWRlZCwgdGhpcy50YWtlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdEJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcCA8IFNDUk9MTF9CT1RUT01fVEhSRVNIT0xEO1xuICAgICAgICAgICAgICAgIGlmIChhdEJvdHRvbSkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY3JvbGxCb3R0b21BY3Rpb24oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cCAmJiBmaXJzdEl0ZW1JbmRleCA8IHRoaXMuZmlyc3RMb2FkZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vblZpc2libGVCdWZmZXIgPSBNYXRoLmZsb29yKHRoaXMudGFrZSAqIDAuMyk7XG4gICAgICAgICAgICB0aGlzLmZpcnN0TG9hZGVkID0gTWF0aC5tYXgoZmlyc3RJdGVtSW5kZXggLSBub25WaXNpYmxlQnVmZmVyLCAwKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFNjcm9sbEFjdGlvbih0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KHRoaXMuZmlyc3RMb2FkZWQpKSk7XG4gICAgICAgICAgICB0aGlzLmxhc3RMb2FkZWQgPSBNYXRoLm1pbih0aGlzLmZpcnN0TG9hZGVkICsgdGhpcy50YWtlLCB0aGlzLnRvdGFsKTtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQobmV3IFBhZ2VBY3Rpb24odGhpcy5maXJzdExvYWRlZCwgdGhpcy50YWtlKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTk9OX0RBVEFfQ0VMTF9DTEFTU0VTID0gJ2staGllcmFyY2h5LWNlbGwgay1kZXRhaWwtY2VsbCBrLWdyb3VwLWNlbGwnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE5PTl9EQVRBX1JPV19DTEFTU0VTID0gJ2stZ3JvdXBpbmctcm93IGstZ3JvdXAtZm9vdGVyIGstZGV0YWlsLXJvdyBrLWdyaWQtbm9yZWNvcmRzJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBJR05PUkVfVEFSR0VUX0NMQVNTU0VTID0gJ2staWNvbic7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgSUdOT1JFX0NPTlRBSU5FUl9DTEFTU0VTID0gJ2std2lkZ2V0IGstZ3JpZC1pZ25vcmUtY2xpY2snO1xuXG5jb25zdCBlbGVtZW50QXQgPSAoaW5kZXgsIGVsZW1lbnRzLCBlbGVtZW50T2Zmc2V0KSA9PiB7XG4gICAgZm9yIChsZXQgaWR4ID0gMCwgZWxlbWVudElkeCA9IDA7IGlkeCA8IGVsZW1lbnRzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZWxlbWVudE9mZnNldChlbGVtZW50c1tpZHhdKTtcbiAgICAgICAgaWYgKGVsZW1lbnRJZHggPD0gaW5kZXggJiYgaW5kZXggPD0gZWxlbWVudElkeCArIG9mZnNldCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50c1tpZHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnRJZHggKz0gb2Zmc2V0O1xuICAgIH1cbn07XG5jb25zdCByb3dBdCA9IChpbmRleCwgcm93cykgPT4gZWxlbWVudEF0KGluZGV4LCByb3dzLCByb3cgPT4gcm93Lmhhc0F0dHJpYnV0ZSgnZGF0YS1rZW5kby1ncmlkLWl0ZW0taW5kZXgnKSA/IDEgOiAwKTtcbmNvbnN0IGNlbGxBdCA9IChpbmRleCwgY2VsbHMpID0+IGVsZW1lbnRBdChpbmRleCwgY2VsbHMsIGNlbGwgPT4gIWhhc0NsYXNzZXMoY2VsbCwgTk9OX0RBVEFfQ0VMTF9DTEFTU0VTKSA/IHBhcnNlSW50KGNlbGwuZ2V0QXR0cmlidXRlKCdjb2xTcGFuJyksIDEwKSB8fCAxIDogMCk7XG5jb25zdCBFTVBUWV9PQkpFQ1QgPSB7fTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBTQ1JPTExFUl9GQUNUT1JZX1RPS0VOID0gbmV3IEluamVjdGlvblRva2VuKCdncmlkLXNjcm9sbC1zZXJ2aWNlLWZhY3RvcnknKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBERUZBVUxUX1NDUk9MTEVSX0ZBQ1RPUlkob2JzZXJ2YWJsZSkge1xuICAgIHJldHVybiBuZXcgU2Nyb2xsZXJTZXJ2aWNlKG9ic2VydmFibGUpO1xufVxuY29uc3Qgd2hlZWxEZWx0YVkgPSAoZSkgPT4ge1xuICAgIGNvbnN0IGRlbHRhWSA9IGUud2hlZWxEZWx0YVk7XG4gICAgaWYgKGUud2hlZWxEZWx0YSAmJiAoZGVsdGFZID09PSB1bmRlZmluZWQgfHwgZGVsdGFZKSkge1xuICAgICAgICByZXR1cm4gZS53aGVlbERlbHRhO1xuICAgIH1cbiAgICBlbHNlIGlmIChlLmRldGFpbCAmJiBlLmF4aXMgPT09IGUuVkVSVElDQUxfQVhJUykge1xuICAgICAgICByZXR1cm4gKC1lLmRldGFpbCkgKiAxMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59O1xuY29uc3QgcHJldmVudExvY2tlZFNjcm9sbCA9IChhcmdzLCBlbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZGVsdGEgPSB3aGVlbERlbHRhWShhcmdzKTtcbiAgICBjb25zdCBzY3JvbGxUb3AgPSBlbGVtZW50LnNjcm9sbFRvcDtcbiAgICBjb25zdCBhbGxvd1Njcm9sbCA9IChzY3JvbGxUb3AgPT09IDAgJiYgMCA8IGRlbHRhKSB8fCAoZWxlbWVudC5zY3JvbGxIZWlnaHQgPD0gZWxlbWVudC5vZmZzZXRIZWlnaHQgKyBzY3JvbGxUb3AgJiYgZGVsdGEgPCAwKTtcbiAgICBpZiAoIWFsbG93U2Nyb2xsKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxufTtcbmNvbnN0IHRyYW5zbGF0ZVkgPSAocmVuZGVyZXIsIHZhbHVlKSA9PiBlbCA9PiByZW5kZXJlci5zZXRTdHlsZShlbCwgXCJ0cmFuc2Zvcm1cIiwgYHRyYW5zbGF0ZVkoJHt2YWx1ZX1weClgKTtcbmNvbnN0IG1heWJlTmF0aXZlRWxlbWVudCA9IGVsID0+IGVsID8gZWwubmF0aXZlRWxlbWVudCA6IG51bGw7XG5jb25zdCBoYXNTY3JvbGxiYXIgPSAoZWwsIHBhcmVudCkgPT4gZWwubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA+IHBhcmVudC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuY29uc3Qgc2V0SGVpZ2h0JDEgPSByZW5kZXJlciA9PiAoeyBlbCwgaGVpZ2h0IH0pID0+IHJlbmRlcmVyLnNldFN0eWxlKGVsLCBcImhlaWdodFwiLCBgJHtoZWlnaHR9cHhgKTtcbmNvbnN0IGJ1ZmZlclNpemUgPSAxO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHNjcm9sbGVyRmFjdG9yeSwgZGV0YWlsc1NlcnZpY2UsIGNoYW5nZU5vdGlmaWNhdGlvbiwgc3VzcGVuZFNlcnZpY2UsIGdyb3Vwc1NlcnZpY2UsIG5nWm9uZSwgcmVuZGVyZXIsIHNjcm9sbFN5bmNTZXJ2aWNlLCByZXNpemVTZXJ2aWNlLCBlZGl0U2VydmljZSwgc3VwcG9ydFNlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlLCBzY3JvbGxSZXF1ZXN0U2VydmljZSwgbG9jYWxpemF0aW9uLCBjb2x1bW5SZXNpemluZ1NlcnZpY2UsIGNoYW5nZURldGVjdG9yLCBwZGZTZXJ2aWNlLCBjb2x1bW5JbmZvKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uID0gY2hhbmdlTm90aWZpY2F0aW9uO1xuICAgICAgICB0aGlzLnN1c3BlbmRTZXJ2aWNlID0gc3VzcGVuZFNlcnZpY2U7XG4gICAgICAgIHRoaXMuZ3JvdXBzU2VydmljZSA9IGdyb3Vwc1NlcnZpY2U7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3luY1NlcnZpY2UgPSBzY3JvbGxTeW5jU2VydmljZTtcbiAgICAgICAgdGhpcy5yZXNpemVTZXJ2aWNlID0gcmVzaXplU2VydmljZTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnN1cHBvcnRTZXJ2aWNlID0gc3VwcG9ydFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY29sdW1uUmVzaXppbmdTZXJ2aWNlID0gY29sdW1uUmVzaXppbmdTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIHRoaXMucGRmU2VydmljZSA9IHBkZlNlcnZpY2U7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mbyA9IGNvbHVtbkluZm87XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gW107XG4gICAgICAgIHRoaXMuc2tpcCA9IDA7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IG5ldyBDb2x1bW5zQ29udGFpbmVyKCgpID0+IFtdKTtcbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudHJhY2tCeSA9IGRlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLmNvbnRlbnRTY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxCb3R0b20gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuY29sdW1uc1N0YXJ0SWR4ID0gMDtcbiAgICAgICAgdGhpcy5yZXNpemVTZW5zb3JzID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclNjcm9sbFRvcCA9IDA7XG4gICAgICAgIHRoaXMuc2Nyb2xsTGVmdCA9IDA7XG4gICAgICAgIHRoaXMucnRsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBzY3JvbGxlckZhY3RvcnkodGhpcy5kaXNwYXRjaGVyKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID1cbiAgICAgICAgICAgIGRldGFpbHNTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHggPT4gdGhpcy5kZXRhaWxFeHBhbmQoeCkpLmFkZChzY3JvbGxSZXF1ZXN0U2VydmljZS5yZXF1ZXN0cy5zdWJzY3JpYmUoeCA9PiB0aGlzLnNjcm9sbFRvKHgpKSk7XG4gICAgfVxuICAgIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgaG9zdFJvbGUoKSB7XG4gICAgICAgIHJldHVybiAncHJlc2VudGF0aW9uJztcbiAgICB9XG4gICAgZ2V0IHNob3dGb290ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwYWJsZSAmJiB0aGlzLmdyb3VwYWJsZS5zaG93Rm9vdGVyO1xuICAgIH1cbiAgICBnZXQgdG90YWxXaWR0aCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zLnVubG9ja2VkV2lkdGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMudW5sb2NrZWRXaWR0aDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgbG9ja2VkTGVhZkNvbHVtbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMubG9ja2VkTGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGdldCBub25Mb2NrZWRMZWFmQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5ub25Mb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IG5vbkxvY2tlZENvbHVtbnNUb1JlbmRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMgJiYgIXRoaXMucGRmU2VydmljZS5leHBvcnRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXdwb3J0Q29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ub25Mb2NrZWRMZWFmQ29sdW1ucztcbiAgICB9XG4gICAgZ2V0IGxlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmxlYWZDb2x1bW5zVG9SZW5kZXI7XG4gICAgfVxuICAgIGdldCBsb2NrZWRXaWR0aCgpIHtcbiAgICAgICAgY29uc3QgZ3JvdXBDZWxsc1dpZHRoID0gdGhpcy5ncm91cHMubGVuZ3RoICogR1JPVVBfQ0VMTF9XSURUSDtcbiAgICAgICAgcmV0dXJuIGV4cGFuZENvbHVtbnModGhpcy5sb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KCkpLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiArIChjdXJyLndpZHRoIHx8IDApLCBncm91cENlbGxzV2lkdGgpO1xuICAgIH1cbiAgICBnZXQgbm9uTG9ja2VkV2lkdGgoKSB7XG4gICAgICAgIGlmICgoIXRoaXMucnRsICYmIHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoKSB8fCB0aGlzLnZpcnR1YWxDb2x1bW5zKSB7XG4gICAgICAgICAgICByZXR1cm4gc3VtQ29sdW1uV2lkdGhzKGV4cGFuZENvbHVtbnModGhpcy5ub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXIudG9BcnJheSgpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZ2V0IGlzTG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5pbml0KCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5oYW5kbGVSb3dTeW5jLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmhhbmRsZVJvd05hdmlnYXRpb25Mb2NrZWQuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKG1lcmdlKHRoaXMuY29sdW1ucy5jaGFuZ2VzLCB0aGlzLnJlc2l6ZVNlcnZpY2UuY2hhbmdlcykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWaWV3cG9ydENvbHVtbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB0aGlzLnJ0bCA9IHJ0bCkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IGhhc0luaXRpYWxTa2lwID0gY2hhbmdlcy5za2lwICYmIGNoYW5nZXMuc2tpcC5maXJzdENoYW5nZSAmJiBjaGFuZ2VzLnNraXAuY3VycmVudFZhbHVlID4gMDtcbiAgICAgICAgaWYgKGhhc0luaXRpYWxTa2lwKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUluaXRpYWxTY3JvbGxUb1NraXAoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNDaGFuZ2VkKFwic2tpcFwiLCBjaGFuZ2VzKSAmJiAhdGhpcy5yZWJpbmQpIHtcbiAgICAgICAgICAgIHRoaXMuc2tpcFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQodGhpcy5za2lwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYW55Q2hhbmdlZChbXCJ0b3RhbFwiLCBcInRha2VcIl0sIGNoYW5nZXMpKSB7XG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlYmluZCA9IGZhbHNlO1xuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxDb2x1bW5zICYmICghdGhpcy52aWV3cG9ydENvbHVtbnMgfHwgdGhpcy52aWV3cG9ydFdpZHRoQ2hhbmdlKCkpKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVZpZXdwb3J0Q29sdW1ucygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tpcCAmJiB0aGlzLmlzVmlydHVhbCkge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KHRoaXMuc2tpcCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb25WaWV3cG9ydCgpO1xuICAgICAgICB0aGlzLmF0dGFjaENvbnRhaW5lclNjcm9sbCgpO1xuICAgICAgICB0aGlzLmluaXRSZXNpemVTZXJ2aWNlKCk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICAgICAgY29uc3QgaXNMb2NrZWQgPSB0aGlzLmlzTG9ja2VkO1xuICAgICAgICBpZiAoaXNMb2NrZWQgJiYgIXRoaXMuaGFzTG9ja2VkQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnN5bmNSb3dzSGVpZ2h0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNMb2NrZWRDb250YWluZXIgPSBpc0xvY2tlZDtcbiAgICB9XG4gICAgc3luY1Jvd3NIZWlnaHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvY2tlZENvbnRhaW5lcikge1xuICAgICAgICAgICAgc3luY1Jvd3NIZWlnaHQodGhpcy5sb2NrZWRUYWJsZS5uYXRpdmVFbGVtZW50LCB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXNpemVTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYW51cFNjcm9sbGVyKCk7XG4gICAgfVxuICAgIGluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1c3BlbmRTZXJ2aWNlLnNjcm9sbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZSA9IG5ldyBSb3dIZWlnaHRTZXJ2aWNlKHRoaXMudG90YWwsIHRoaXMucm93SGVpZ2h0LCB0aGlzLmRldGFpbFJvd0hlaWdodCk7XG4gICAgICAgIHRoaXMudG90YWxIZWlnaHQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UudG90YWxIZWlnaHQoKTtcbiAgICAgICAgaWYgKCFpc1VuaXZlcnNhbCgpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcih0aGlzLmNyZWF0ZVNjcm9sbGVyLmJpbmQodGhpcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvY2tlZFNjcm9sbCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnN1c3BlbmRTZXJ2aWNlLnNjcm9sbCkge1xuICAgICAgICAgICAgY29uc3QgbG9ja2VkU2Nyb2xsVG9wID0gdGhpcy5sb2NrZWRDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICBpZiAobG9ja2VkU2Nyb2xsVG9wICE9PSB0aGlzLmNvbnRhaW5lclNjcm9sbFRvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gdGhpcy5jb250YWluZXJTY3JvbGxUb3AgPSBsb2NrZWRTY3JvbGxUb3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgbG9ja2VkTW91c2V3aGVlbChhcmdzKSB7XG4gICAgICAgIGlmICghYXJncy5jdHJsS2V5KSB7XG4gICAgICAgICAgICBwcmV2ZW50TG9ja2VkU2Nyb2xsKGFyZ3MsIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsRGVsdGEgPSB3aGVlbERlbHRhWShhcmdzKTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC09IHNjcm9sbERlbHRhO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxvY2tlZEtleWRvd24oYXJncykge1xuICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLlBhZ2VEb3duIHx8IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5QYWdlVXApIHtcbiAgICAgICAgICAgIGNvbnN0IGRpciA9IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5QYWdlRG93biA/IDEgOiAtMTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxUb3AgKz0gZWxlbWVudC5vZmZzZXRIZWlnaHQgKiBkaXIgKiAwLjg7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGV0YWlsRXhwYW5kKHsgaW5kZXgsIGV4cGFuZCB9KSB7XG4gICAgICAgIGlmIChleHBhbmQpIHtcbiAgICAgICAgICAgIHRoaXMucm93SGVpZ2h0U2VydmljZS5leHBhbmREZXRhaWwoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLmNvbGxhcHNlRGV0YWlsKGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRvdGFsSGVpZ2h0ID0gdGhpcy5yb3dIZWlnaHRTZXJ2aWNlLnRvdGFsSGVpZ2h0KCk7XG4gICAgICAgIHRoaXMucmVzZXROYXZpZ2F0aW9uVmlld3BvcnQoKTtcbiAgICB9XG4gICAgYXR0YWNoQ29udGFpbmVyU2Nyb2xsKCkge1xuICAgICAgICBpZiAoaXNVbml2ZXJzYWwoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoZnJvbUV2ZW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnKS5waXBlKG1hcCgoZXZlbnQpID0+IGV2ZW50LnRhcmdldCksIGZpbHRlcigoKSA9PiAhdGhpcy5zdXNwZW5kU2VydmljZS5zY3JvbGwpLCB0YXAoKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25Db250YWluZXJTY3JvbGwodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDb2x1bW5TY3JvbGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93Vmlld3BvcnQgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnZpZXdwb3J0IHx8IEVNUFRZX09CSkVDVDtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5WaWV3cG9ydCA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY29sdW1uVmlld3BvcnQgfHwgRU1QVFlfT0JKRUNUO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGVudFNjcm9sbC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdDogdGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogdGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRSb3c6IHJvd1ZpZXdwb3J0LmZpcnN0SXRlbUluZGV4LFxuICAgICAgICAgICAgICAgICAgICBlbmRSb3c6IHJvd1ZpZXdwb3J0Lmxhc3RJdGVtSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1uOiBjb2x1bW5WaWV3cG9ydC5maXJzdEl0ZW1JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sdW1uOiBjb2x1bW5WaWV3cG9ydC5sYXN0SXRlbUluZGV4XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KSkuc3Vic2NyaWJlKHRoaXMuZGlzcGF0Y2hlcikpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zY3JvbGxTeW5jU2VydmljZS5yZWdpc3RlckVtaXR0ZXIodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCwgXCJib2R5XCIpO1xuICAgIH1cbiAgICBjcmVhdGVTY3JvbGxlcigpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwU2Nyb2xsZXIoKTtcbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZSA9IHRoaXMuc2Nyb2xsZXJcbiAgICAgICAgICAgIC5jcmVhdGUodGhpcy5yb3dIZWlnaHRTZXJ2aWNlLCB0aGlzLnNraXAsIHRoaXMudGFrZSwgdGhpcy50b3RhbCk7XG4gICAgICAgIHRoaXMuc2tpcFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjcm9sbGVyU3Vic2NyaXB0aW9uID0gb2JzZXJ2YWJsZS5waXBlKGZpbHRlcigoeCkgPT4geCBpbnN0YW5jZW9mIFBhZ2VBY3Rpb24pLCBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHRoaXMuc2tpcFNjcm9sbDtcbiAgICAgICAgICAgIHRoaXMuc2tpcFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuICF0ZW1wO1xuICAgICAgICB9KSwgdGFwKCgpID0+IHRoaXMucmViaW5kID0gdHJ1ZSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeCkpKTtcbiAgICAgICAgdGhpcy5zY3JvbGxlclN1YnNjcmlwdGlvbi5hZGQob2JzZXJ2YWJsZS5waXBlKGZpbHRlcigoeCkgPT4geCBpbnN0YW5jZW9mIFNjcm9sbEFjdGlvbikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuc2Nyb2xsLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zY3JvbGxlclN1YnNjcmlwdGlvbi5hZGQob2JzZXJ2YWJsZS5waXBlKGZpbHRlcigoeCkgPT4geCBpbnN0YW5jZW9mIFNjcm9sbEJvdHRvbUFjdGlvbikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuc2Nyb2xsQm90dG9tLmVtaXQoKSkpO1xuICAgIH1cbiAgICBzY3JvbGwoeyBvZmZzZXQgPSAwIH0pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgbWF5YmVOYXRpdmVFbGVtZW50KHRoaXMudGFibGUpLFxuICAgICAgICAgICAgICAgIG1heWJlTmF0aXZlRWxlbWVudCh0aGlzLmxvY2tlZFRhYmxlKVxuICAgICAgICAgICAgXS5maWx0ZXIoaXNQcmVzZW50KS5mb3JFYWNoKHRyYW5zbGF0ZVkodGhpcy5yZW5kZXJlciwgb2Zmc2V0KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldE5hdmlnYXRpb25WaWV3cG9ydCgpO1xuICAgIH1cbiAgICBvbkNvbnRhaW5lclNjcm9sbCh7IHNjcm9sbFRvcCB9KSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyU2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgICBpZiAodGhpcy5sb2NrZWRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHRoaXMubG9ja2VkQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUluaXRpYWxTY3JvbGxUb1NraXAoKSB7XG4gICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9ICgpID0+IHRoaXMuaXNWaXJ0dWFsICYmIHRoaXMuc2tpcCA+IDAgJiYgdGhpcy50b3RhbCA+IDA7XG4gICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuY2hhbmdlTm90aWZpY2F0aW9uLmNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcihzaG91bGRTY3JvbGwpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8oeyByb3c6IHRoaXMuc2tpcCB9KTtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlUm93U3luYygpIHtcbiAgICAgICAgY29uc3QgaXNMb2NrZWQgPSAoKSA9PiBpc1ByZXNlbnQodGhpcy5sb2NrZWRDb250YWluZXIpO1xuICAgICAgICBjb25zdCBvblN0YWJsZSA9ICgpID0+IHRoaXMubmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZSgxKSk7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLmNoYW5nZU5vdGlmaWNhdGlvbi5jaGFuZ2VzLCB0aGlzLmdyb3Vwc1NlcnZpY2UuY2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKGlzTG9ja2VkKSwgc3dpdGNoTWFwVG8ob25TdGFibGUoKSkpLCB0aGlzLmVkaXRTZXJ2aWNlLmNoYW5nZWQsIHRoaXMucmVzaXplU2VydmljZS5jaGFuZ2VzLCB0aGlzLmNvbHVtblJlc2l6aW5nU2VydmljZS5jaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShmaWx0ZXIoY2hhbmdlID0+IGNoYW5nZS50eXBlID09PSAnZW5kJykpLCB0aGlzLnN1cHBvcnRTZXJ2aWNlLmNoYW5nZXMpXG4gICAgICAgICAgICAucGlwZSh0YXAoKCkgPT4gdGhpcy5yZXNldE5hdmlnYXRpb25WaWV3cG9ydCgpKSwgZmlsdGVyKGlzTG9ja2VkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgdGhpcy5zeW5jUm93c0hlaWdodCgpO1xuICAgICAgICAgICAgdGhpcy5zeW5jQ29udGFpbmVySGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLmxvY2tlZENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wO1xuICAgICAgICAgICAgLy8gZml4ZXMgc2Nyb2xsIGxlZnQgcG9zaXRpb24gaW4gSUUgd2hlbiBlZGl0aW5nXG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTZW5zb3JzLmZvckVhY2goc2Vuc29yID0+IHNlbnNvci5hY2NlcHRTaXplKCkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaGFuZGxlUm93TmF2aWdhdGlvbkxvY2tlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiBpc1ByZXNlbnQodGhpcy5sb2NrZWRDb250YWluZXIpKSwgZGVsYXkoMTApKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aCA8PSBhcmdzLnByZXZDb2xJbmRleCAmJiBhcmdzLmNvbEluZGV4IDwgdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3RpdmVDZWxsO1xuICAgICAgICAgICAgICAgIGlmIChjZWxsICYmIGNlbGwuY29sSW5kZXggKyBjZWxsLmNvbFNwYW4gPCBhcmdzLnByZXZDb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNjcm9sbFRvVmlydHVhbFJvdyhpdGVtSW5kZXgpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmRldGFpbFRlbXBsYXRlKSkge1xuICAgICAgICAgICAgaXRlbUluZGV4ID0gTWF0aC5mbG9vcihpdGVtSW5kZXggLyAyKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZmZzZXQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2Uub2Zmc2V0KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wID0gb2Zmc2V0O1xuICAgICAgICB0aGlzLnJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCk7XG4gICAgfVxuICAgIHNjcm9sbFRvKHsgcm93LCBjb2x1bW4gfSkge1xuICAgICAgICBpZiAoaXNOdW1iZXIocm93KSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNWaXJ0dWFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpcnR1YWxSb3cocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSByb3dBdChyb3csIHRoaXMudGFibGUubmF0aXZlRWxlbWVudC5yb3dzKTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY29sdW1uKSkge1xuICAgICAgICAgICAgY29sdW1uIC09IHRoaXMubG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zLmxlYWZDb2x1bW5zVG9SZW5kZXI7XG4gICAgICAgICAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWR4ID0gMDsgaWR4IDwgY29sdW1uOyBpZHgrKykge1xuICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gY29sdW1uc1tpZHhdLndpZHRoIHx8IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0T2Zmc2V0ID0gdGhpcy5sb2NrZWRMZWFmQ29sdW1ucy5sZW5ndGggPyAwIDogdGhpcy5ncm91cHMubGVuZ3RoICogR1JPVVBfQ0VMTF9XSURUSCArICh0aGlzLmRldGFpbFRlbXBsYXRlICYmIGNvbHVtbiA+IDAgPyBHUk9VUF9DRUxMX1dJRFRIIDogMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5ub3JtYWxpemVTY3JvbGxMZWZ0KG9mZnNldCArIHN0YXJ0T2Zmc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbHVtbiA9PT0gMCAmJiB0aGlzLmRldGFpbFRlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gdGhpcy5ub3JtYWxpemVTY3JvbGxMZWZ0KDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RSb3cgPSByb3dBdCgwLCB0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQucm93cyk7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjZWxsQXQoY29sdW1uLCBmaXJzdFJvdy5jZWxscyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgPSB0aGlzLmVsZW1lbnRTY3JvbGxMZWZ0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJlc2V0TmF2aWdhdGlvblZpZXdwb3J0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVyIHx8ICF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmVuYWJsZWQgfHxcbiAgICAgICAgICAgICF0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm5lZWRzVmlld3BvcnQoKSB8fCB0aGlzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIG9mZnNldEhlaWdodCB9ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsQm90dG9tID0gc2Nyb2xsVG9wICsgb2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBmaXJzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChzY3JvbGxUb3ApO1xuICAgICAgICBsZXQgbGFzdEl0ZW1JbmRleCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pbmRleChzY3JvbGxCb3R0b20pO1xuICAgICAgICBjb25zdCBsYXN0SXRlbU9mZnNldCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQobGFzdEl0ZW1JbmRleCk7XG4gICAgICAgIGNvbnN0IGxhc3RJdGVtT3ZlcmZsb3dzID0gbGFzdEl0ZW1PZmZzZXQgKyB0aGlzLnJvd0hlaWdodCA+IHNjcm9sbEJvdHRvbTtcbiAgICAgICAgaWYgKGxhc3RJdGVtSW5kZXggPiAwICYmIGxhc3RJdGVtT3ZlcmZsb3dzKSB7XG4gICAgICAgICAgICBsYXN0SXRlbUluZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZpZXdwb3J0U3RhcnQgPSBmaXJzdEl0ZW1JbmRleDtcbiAgICAgICAgbGV0IHZpZXdwb3J0RW5kID0gbGFzdEl0ZW1JbmRleDtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmRldGFpbFRlbXBsYXRlKSkge1xuICAgICAgICAgICAgdmlld3BvcnRTdGFydCAqPSAyO1xuICAgICAgICAgICAgdmlld3BvcnRFbmQgKj0gMjtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbUhlaWdodCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5vZmZzZXQoZmlyc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgaWYgKGZpcnN0SXRlbUhlaWdodCArIHRoaXMucm93SGVpZ2h0IDwgc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAgICAgdmlld3BvcnRTdGFydCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW1IZWlnaHQgPSB0aGlzLnJvd0hlaWdodFNlcnZpY2UuaGVpZ2h0KGxhc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW1FeHBhbmRlZCA9IHRoaXMucm93SGVpZ2h0U2VydmljZS5pc0V4cGFuZGVkKGxhc3RJdGVtSW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW1EZXRhaWxPdmVyZmxvd3MgPSBsYXN0SXRlbU9mZnNldCArIGxhc3RJdGVtSGVpZ2h0ID4gc2Nyb2xsQm90dG9tO1xuICAgICAgICAgICAgaWYgKGxhc3RJdGVtRXhwYW5kZWQgJiYgIWxhc3RJdGVtRGV0YWlsT3ZlcmZsb3dzKSB7XG4gICAgICAgICAgICAgICAgdmlld3BvcnRFbmQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnNldFZpZXdwb3J0KHZpZXdwb3J0U3RhcnQsIHZpZXdwb3J0RW5kKTtcbiAgICB9XG4gICAgY2xlYW51cFNjcm9sbGVyKCkge1xuICAgICAgICBpZiAodGhpcy5zY3JvbGxlclN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNjcm9sbGVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbml0UmVzaXplU2VydmljZSgpIHtcbiAgICAgICAgdGhpcy5yZXNpemVTZXJ2aWNlLmNvbm5lY3QobWVyZ2UoLi4udGhpcy5yZXNpemVTZW5zb3JzLm1hcChzZW5zb3IgPT4gc2Vuc29yLnJlc2l6ZSkpKTtcbiAgICB9XG4gICAgc3luY0NvbnRhaW5lckhlaWdodCgpIHtcbiAgICAgICAgW21heWJlTmF0aXZlRWxlbWVudCh0aGlzLmxvY2tlZENvbnRhaW5lcildXG4gICAgICAgICAgICAuZmlsdGVyKGlzUHJlc2VudClcbiAgICAgICAgICAgIC5tYXAoZWwgPT4ge1xuICAgICAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaGFzU2Nyb2xsYmFyKHRoaXMudGFibGUsIHRoaXMuY29udGFpbmVyKSkge1xuICAgICAgICAgICAgICAgIGhlaWdodCAtPSB0aGlzLnN1cHBvcnRTZXJ2aWNlLnNjcm9sbGJhcldpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgZWwsIGhlaWdodCB9O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmZvckVhY2goc2V0SGVpZ2h0JDEodGhpcy5yZW5kZXJlcikpO1xuICAgIH1cbiAgICB1cGRhdGVWaWV3cG9ydENvbHVtbnMocmFuZ2UpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRoaXMuY29sdW1ucy5ub25Mb2NrZWRMZWFmQ29sdW1ucy50b0FycmF5KCk7XG4gICAgICAgIGxldCB7IHN0YXJ0SWR4LCBlbmRJZHgsIG9mZnNldCB9ID0gcmFuZ2UgfHwgdGhpcy5jYWxjdWxhdGVWaWV3cG9ydENvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1heCgwLCBzdGFydElkeCAtIGJ1ZmZlclNpemUpO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1pbihlbmRJZHggKyBidWZmZXJTaXplLCBjb2x1bW5zLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoc3RhcnQgPCBzdGFydElkeCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaWR4ID0gc3RhcnRJZHggLSAxOyBpZHggPj0gc3RhcnQ7IGlkeC0tKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0IC09IGNvbHVtbnNbaWR4XS53aWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgY3VycmVudENvbHVtbnMgPSBjb2x1bW5zLnNsaWNlKHN0YXJ0LCBlbmQgKyAxKTtcbiAgICAgICAgdGhpcy52aWV3cG9ydENvbHVtbnNXaWR0aCA9IGN1cnJlbnRDb2x1bW5zLnJlZHVjZSgodG90YWwsIGNvbHVtbikgPT4gdG90YWwgKyBjb2x1bW4ud2lkdGgsIDApO1xuICAgICAgICBpZiAoc3RhcnQgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBvZmZzZXRDb2x1bW4gPSBuZXcgQ29sdW1uQmFzZSQxKCk7XG4gICAgICAgICAgICBvZmZzZXRDb2x1bW4ud2lkdGggPSBvZmZzZXQ7XG4gICAgICAgICAgICBjdXJyZW50Q29sdW1ucy51bnNoaWZ0KG9mZnNldENvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3cG9ydENvbHVtbnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMudmlld3BvcnRDb2x1bW5zLnJlc2V0KGN1cnJlbnRDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhcnRJZHggPSBzdGFydDtcbiAgICAgICAgdGhpcy5jb2x1bW5zRW5kSWR4ID0gZW5kO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm8uY29sdW1uUmFuZ2VDaGFuZ2UuZW1pdCh7IHN0YXJ0LCBlbmQsIG9mZnNldCB9KTtcbiAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5WaWV3cG9ydChzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBoYW5kbGVDb2x1bW5TY3JvbGwoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHNjcm9sbExlZnQgPSBjb250YWluZXIuc2Nyb2xsTGVmdDtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsTGVmdCAhPT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5jYWxjdWxhdGVWaWV3cG9ydENvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29sdW1uVmlld3BvcnQocmFuZ2Uuc3RhcnRJZHgsIHJhbmdlLmVuZElkeCk7XG4gICAgICAgICAgICBpZiAocmFuZ2Uuc3RhcnRJZHggPCB0aGlzLmNvbHVtbnNTdGFydElkeCB8fCB0aGlzLmNvbHVtbnNFbmRJZHggPCByYW5nZS5lbmRJZHgpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmNvbHVtblVwZGF0ZUZyYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtblVwZGF0ZUZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmlld3BvcnRDb2x1bW5zKHJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZUNvbHVtblZpZXdwb3J0KHN0YXJ0SWR4LCBlbmRJZHgpIHtcbiAgICAgICAgY29uc3QgbG9ja2VkQ291bnQgPSB0aGlzLmxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aDtcbiAgICAgICAgY29uc3QgbGVhZkNvbHVtbnMkJDEgPSB0aGlzLm5vbkxvY2tlZExlYWZDb2x1bW5zLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRTdGFydCA9IGxvY2tlZENvdW50ICsgc3RhcnRJZHggKyAodGhpcy5kZXRhaWxUZW1wbGF0ZSAmJiBzdGFydElkeCA+IDAgPyAxIDogMCk7XG4gICAgICAgIGxldCB2aWV3cG9ydEVuZCA9IGxvY2tlZENvdW50ICsgZW5kSWR4ICsgKHRoaXMuZGV0YWlsVGVtcGxhdGUgPyAxIDogMCk7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxlYWZDb2x1bW5zJCQxLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGxlYWZDb2x1bW5zJCQxW2lkeF07XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzU3BhbkNvbHVtbikge1xuICAgICAgICAgICAgICAgIHZpZXdwb3J0RW5kICs9IGNvbHVtbi5jaGlsZENvbHVtbnMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uuc2V0Q29sdW1uVmlld3BvcnQodmlld3BvcnRTdGFydCwgdmlld3BvcnRFbmQpO1xuICAgIH1cbiAgICBjYWxjdWxhdGVWaWV3cG9ydENvbHVtbnMoKSB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCwgY2xpZW50V2lkdGggfSA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubm9uTG9ja2VkTGVhZkNvbHVtbnMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU2Nyb2xsTGVmdCA9IHRoaXMubm9ybWFsaXplU2Nyb2xsTGVmdChzY3JvbGxMZWZ0KTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRFbmQgPSBub3JtYWxpemVkU2Nyb2xsTGVmdCArIGNsaWVudFdpZHRoO1xuICAgICAgICBsZXQgc3RhcnRJZHg7XG4gICAgICAgIGxldCBlbmRJZHggPSAwO1xuICAgICAgICBsZXQgY3VycmVudCA9IDA7XG4gICAgICAgIGxldCBvZmZzZXQgPSAwO1xuICAgICAgICBsZXQgaWR4O1xuICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGNvbHVtbnMubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpZHhdO1xuICAgICAgICAgICAgY3VycmVudCArPSBjb2x1bW4ud2lkdGggfHwgMDtcbiAgICAgICAgICAgIGlmIChzdGFydElkeCA9PT0gdW5kZWZpbmVkICYmIGN1cnJlbnQgPiBub3JtYWxpemVkU2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SWR4ID0gaWR4O1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IGN1cnJlbnQgLSAoY29sdW1uLndpZHRoIHx8IDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN1cnJlbnQgPj0gdmlld3BvcnRFbmQpIHtcbiAgICAgICAgICAgICAgICBlbmRJZHggPSBpZHg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlbmRJZHggJiYgaWR4ID4gMCkge1xuICAgICAgICAgICAgZW5kSWR4ID0gY29sdW1ucy5sZW5ndGggLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXJ0SWR4LCBlbmRJZHgsIG9mZnNldCB9O1xuICAgIH1cbiAgICB2aWV3cG9ydFdpZHRoQ2hhbmdlKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50V2lkdGggPSB0aGlzLnZpZXdwb3J0Q29sdW1ucy50b0FycmF5KCkucmVkdWNlKCh0b3RhbCwgY29sdW1uKSA9PiB0b3RhbCArIGNvbHVtbi53aWR0aCwgMCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50V2lkdGggIT09IHRoaXMudmlld3BvcnRDb2x1bW5zV2lkdGg7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVNjcm9sbExlZnQocG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnRsID8gcnRsU2Nyb2xsUG9zaXRpb24ocG9zaXRpb24sIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3VwcG9ydFNlcnZpY2UucnRsU2Nyb2xsTGVmdCkgOiBwb3NpdGlvbjtcbiAgICB9XG4gICAgZWxlbWVudFNjcm9sbExlZnQoZWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5ydGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vcm1hbGl6ZVNjcm9sbExlZnQodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCAtIGVsZW1lbnQub2Zmc2V0TGVmdCAtIGVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgfVxufVxuTGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBTQ1JPTExFUl9GQUNUT1JZX1RPS0VOLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IERFRkFVTFRfU0NST0xMRVJfRkFDVE9SWVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtbGlzdCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNsb2NrZWRDb250YWluZXIgY2xhc3M9XCJrLWdyaWQtY29udGVudC1sb2NrZWRcIiByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvY2tlZFwiIFtzdHlsZS53aWR0aC5weF09XCJsb2NrZWRXaWR0aFwiXG4gICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgIGtleWRvd246IGxvY2tlZEtleWRvd24sXG4gICAgICAgICAgICBzY3JvbGw6IGxvY2tlZFNjcm9sbCxcbiAgICAgICAgICAgIG1vdXNld2hlZWw6IGxvY2tlZE1vdXNld2hlZWwsXG4gICAgICAgICAgICBET01Nb3VzZVNjcm9sbDogbG9ja2VkTW91c2V3aGVlbFxuICAgICAgICB9XCJcbiAgICAgICAgW3Njb3BlXT1cInRoaXNcIlxuICAgICAgICA+XG4gICAgICAgIDxkaXYgcm9sZT1cInByZXNlbnRhdGlvblwiIGNsYXNzPVwiay1ncmlkLXRhYmxlLXdyYXBcIj5cbiAgICAgICAgICAgIDx0YWJsZSBbbG9ja2VkXT1cInRydWVcIiAjbG9ja2VkVGFibGUgY2xhc3M9XCJrLWdyaWQtdGFibGVcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgW3N0eWxlLndpZHRoLnB4XT1cImxvY2tlZFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGNvbGdyb3VwIGtlbmRvR3JpZENvbEdyb3VwXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImxvY2tlZExlYWZDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPC9jb2xncm91cD5cbiAgICAgICAgICAgICAgICA8dGJvZHkga2VuZG9HcmlkVGFibGVCb2R5XG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIFtpc0xvY2tlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtub1JlY29yZHNUZXh0XT1cIicnXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbdG90YWxDb2x1bW5zQ291bnRdPVwibGVhZkNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dHcm91cEZvb3RlcnNdPVwic2hvd0Zvb3RlclwiXG4gICAgICAgICAgICAgICAgICAgIFtza2lwXT1cInNraXBcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3RyYWNrQnldPVwidHJhY2tCeVwiXG4gICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImZpbHRlcmFibGVcIlxuICAgICAgICAgICAgICAgICAgICBbcm93Q2xhc3NdPVwicm93Q2xhc3NcIj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgIDxrZW5kby1yZXNpemUtc2Vuc29yPjwva2VuZG8tcmVzaXplLXNlbnNvcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWhlaWdodC1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwidG90YWxIZWlnaHRcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+PGRpdiAjY29udGFpbmVyXG4gICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC1jb250ZW50IGstdmlydHVhbC1jb250ZW50XCJcbiAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIiB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgIFtrZW5kb0dyaWRSZXNpemFibGVDb250YWluZXJdPVwibG9ja2VkTGVhZkNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgIFtsb2NrZWRXaWR0aF09XCJsb2NrZWRXaWR0aCArIDFcIj5cbiAgICAgICAgPGRpdiByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJrLWdyaWQtdGFibGUtd3JhcFwiPlxuICAgICAgICAgICAgPHRhYmxlIFtzdHlsZS53aWR0aC5weF09XCJub25Mb2NrZWRXaWR0aFwiICN0YWJsZSBbdmlydHVhbENvbHVtbnNdPVwidmlydHVhbENvbHVtbnNcIlxuICAgICAgICAgICAgICBjbGFzcz1cImstZ3JpZC10YWJsZVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICA8Y29sZ3JvdXAga2VuZG9HcmlkQ29sR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICAgICAgICAgICAgICAgIFtncm91cHNdPVwiaXNMb2NrZWQgPyBbXSA6IGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cIm5vbkxvY2tlZENvbHVtbnNUb1JlbmRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXRhaWxUZW1wbGF0ZV09XCJkZXRhaWxUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwvY29sZ3JvdXA+XG4gICAgICAgICAgICAgICAgPHRib2R5IGtlbmRvR3JpZFRhYmxlQm9keVxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW3NraXBHcm91cERlY29yYXRpb25dPVwiaXNMb2NrZWRcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW2dyb3Vwc109XCJncm91cHNcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd0dyb3VwRm9vdGVyc109XCJzaG93Rm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibm9uTG9ja2VkQ29sdW1uc1RvUmVuZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbENvbHVtbnNdPVwibm9uTG9ja2VkTGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgICAgICBbZGV0YWlsVGVtcGxhdGVdPVwiZGV0YWlsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbm9SZWNvcmRzVGVtcGxhdGVdPVwibm9SZWNvcmRzVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbG9ja2VkQ29sdW1uc0NvdW50XT1cImxvY2tlZExlYWZDb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbnNDb3VudF09XCJsZWFmQ29sdW1ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICBbc2tpcF09XCJza2lwXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0cmFja0J5XT1cInRyYWNrQnlcIlxuICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Jvd0NsYXNzXT1cInJvd0NsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZpcnR1YWxDb2x1bW5zXT1cInZpcnR1YWxDb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgICA8a2VuZG8tcmVzaXplLXNlbnNvciAqbmdJZj1cImlzTG9ja2VkXCI+PC9rZW5kby1yZXNpemUtc2Vuc29yPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGtlbmRvLXJlc2l6ZS1zZW5zb3IgKm5nSWY9XCJpc0xvY2tlZCB8fCB2aXJ0dWFsQ29sdW1uc1wiPjwva2VuZG8tcmVzaXplLXNlbnNvcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstaGVpZ2h0LWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLmhlaWdodC5weF09XCJ0b3RhbEhlaWdodFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInZpcnR1YWxDb2x1bW5zXCIgY2xhc3M9XCJrLXdpZHRoLWNvbnRhaW5lclwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cInRvdGFsV2lkdGhcIj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImxvYWRpbmdcIiBrZW5kb0dyaWRMb2FkaW5nPlxuICAgIDwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTGlzdENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbU0NST0xMRVJfRkFDVE9SWV9UT0tFTixdIH1dIH0sXG4gICAgeyB0eXBlOiBEZXRhaWxzU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogU3VzcGVuZFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEdyb3Vwc1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBTY3JvbGxTeW5jU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVzaXplU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEJyb3dzZXJTdXBwb3J0U2VydmljZSB9LFxuICAgIHsgdHlwZTogTmF2aWdhdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNjcm9sbFJlcXVlc3RTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBQREZTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5JbmZvU2VydmljZSB9XG5dO1xuTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWdyaWQtY29udGFpbmVyXCIsXSB9XSxcbiAgICBob3N0Um9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImF0dHIucm9sZVwiLF0gfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3RhbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93SGVpZ2h0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxSb3dIZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRha2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNraXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBub1JlY29yZHNUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByb3dDbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9hZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdHJhY2tCeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmlydHVhbENvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGlzVmlydHVhbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29udGVudFNjcm9sbDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHBhZ2VDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBzY3JvbGxCb3R0b206IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb250YWluZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW1wiY29udGFpbmVyXCIsIHsgc3RhdGljOiB0cnVlIH0sXSB9XSxcbiAgICBsb2NrZWRDb250YWluZXI6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW1wibG9ja2VkQ29udGFpbmVyXCIsXSB9XSxcbiAgICBsb2NrZWRUYWJsZTogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbXCJsb2NrZWRUYWJsZVwiLF0gfV0sXG4gICAgdGFibGU6IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogW1widGFibGVcIixdIH1dLFxuICAgIHJlc2l6ZVNlbnNvcnM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogW1Jlc2l6ZVNlbnNvckNvbXBvbmVudCxdIH1dXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIGVuY2Fwc3VsYXRlcyB0aGUgaW4tbWVtb3J5IGhhbmRsaW5nIG9mIGRhdGEgb3BlcmF0aW9ucyBzdWNoIGFzIFtwYWdpbmddKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0pLFxuICogW3NvcnRpbmddKHslIHNsdWcgc29ydGluZ19ncmlkICV9KSwgYW5kIFtncm91cGluZ10oeyUgc2x1ZyBncm91cGluZ2Jhc2ljc19ncmlkICV9KVxuICogKFttb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlc10oeyUgc2x1ZyBhdXRvbWF0aWNvcGVyYXRpb25zX2dyaWQgJX0pKS5cbiAqL1xuY2xhc3MgRGF0YUJpbmRpbmdEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGNoYW5nZURldGVjdG9yLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgPSBsb2NhbERhdGFDaGFuZ2VzU2VydmljZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgICAgIHNraXA6IDBcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSBbXTtcbiAgICAgICAgaWYgKGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnJlYmluZC5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgcmVjb3JkcyB0aGF0IHdpbGwgYmUgc2tpcHBlZCBieSB0aGUgcGFnZXIuXG4gICAgICovXG4gICAgc2V0IHNraXAodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQodmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLnNraXAgPSB0aGlzLnN0YXRlLnNraXAgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGVzY3JpcHRvcnMgYnkgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBzb3J0ZWQuXG4gICAgICovXG4gICAgc2V0IHNvcnQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5ncmlkLnNvcnQgPSB0aGlzLnN0YXRlLnNvcnQgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGVzY3JpcHRvciBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIGZpbHRlcmVkLlxuICAgICAqL1xuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5ncmlkLmZpbHRlciA9IHRoaXMuc3RhdGUuZmlsdGVyID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHBhZ2Ugc2l6ZSB1c2VkIGJ5IHRoZSBHcmlkIHBhZ2VyLlxuICAgICAqL1xuICAgIHNldCBwYWdlU2l6ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmdyaWQucGFnZVNpemUgPSB0aGlzLnN0YXRlLnRha2UgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGRlc2NyaXB0b3JzIGJ5IHdoaWNoIHRoZSBkYXRhIHdpbGwgYmUgZ3JvdXBlZC5cbiAgICAgKi9cbiAgICBzZXQgZ3JvdXAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5ncmlkLmdyb3VwID0gdGhpcy5zdGF0ZS5ncm91cCA9IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgYXJyYXkgb2YgZGF0YSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gcG9wdWxhdGUgdGhlIEdyaWQuXG4gICAgICovXG4gICAgc2V0IGRhdGEodmFsdWUpIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbERhdGEgPSB2YWx1ZSB8fCBbXTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UuZGF0YSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZWQgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlTdGF0ZSh0aGlzLnN0YXRlKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZ3JpZFxuICAgICAgICAgICAgLmRhdGFTdGF0ZUNoYW5nZVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChhbnlDaGFuZ2VkKFtcInBhZ2VTaXplXCIsIFwic2tpcFwiLCBcInNvcnRcIiwgXCJncm91cFwiLCBcImZpbHRlclwiXSwgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMucmViaW5kKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVHcmlkRGF0YSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblN0YXRlQ2hhbmdlKHN0YXRlJCQxKSB7XG4gICAgICAgIHRoaXMuYXBwbHlTdGF0ZShzdGF0ZSQkMSk7XG4gICAgICAgIHRoaXMucmViaW5kKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByZWJpbmQoKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IHRoaXMub3JpZ2luYWxEYXRhO1xuICAgICAgICB0aGlzLnVwZGF0ZUdyaWREYXRhKCk7XG4gICAgICAgIHRoaXMubm90aWZ5RGF0YUNoYW5nZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBOb3RpZmllcyB0aGUgR3JpZCB0aGF0IGl0cyBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAqL1xuICAgIG5vdGlmeURhdGFDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5vbkRhdGFDaGFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuY2hhbmdlRGV0ZWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2VzcyhzdGF0ZSQkMSkge1xuICAgICAgICByZXR1cm4gcHJvY2Vzcyh0aGlzLm9yaWdpbmFsRGF0YSwgc3RhdGUkJDEpO1xuICAgIH1cbiAgICBhcHBseVN0YXRlKHsgc2tpcCwgdGFrZTogdGFrZSQkMSwgc29ydCwgZ3JvdXAsIGZpbHRlcjogZmlsdGVyJCQxIH0pIHtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRha2UkJDE7XG4gICAgICAgIHRoaXMuc29ydCA9IHNvcnQ7XG4gICAgICAgIHRoaXMuZ3JvdXAgPSBncm91cDtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBmaWx0ZXIkJDE7XG4gICAgfVxuICAgIHVwZGF0ZUdyaWREYXRhKCkge1xuICAgICAgICB0aGlzLmdyaWQuZGF0YSA9IHRoaXMucHJvY2Vzcyh0aGlzLnN0YXRlKTtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCA9IGZhbHNlO1xuICAgIH1cbn1cbkRhdGFCaW5kaW5nRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQmluZGluZ10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGFCaW5kaW5nRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlIH1cbl07XG5EYXRhQmluZGluZ0RpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBza2lwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VTaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YTogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFtcImtlbmRvR3JpZEJpbmRpbmdcIixdIH1dXG59O1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHdoaWNoIHN0b3JlcyB0aGUgcm93IHNlbGVjdGlvbiBzdGF0ZSBvZiB0aGUgR3JpZCBpbiBtZW1vcnlcbiAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc2VsZWN0aW9uX2dyaWQgJX0jdG9jLWR1cmluZy1kYXRhLW9wZXJhdGlvbnMpKS5cbiAqL1xuY2xhc3MgU2VsZWN0aW9uRGlyZWN0aXZlIGV4dGVuZHMgU2VsZWN0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihncmlkLCBjZCkge1xuICAgICAgICBzdXBlcihncmlkLCBjZCk7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5zZWxlY3RhYmxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGFibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25EaXJlY3RpdmUgPSB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLmRlc3Ryb3koKTtcbiAgICB9XG59XG5TZWxlY3Rpb25EaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRTZWxlY3RCeV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNlbGVjdGlvbkRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEdyaWRDb21wb25lbnQgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggY29udHJvbHMgdGhlIGV4cGFuZGVkIHN0YXRlIG9mIHRoZSBtYXN0ZXIgZGV0YWlsIHJvd3MuXG4gKi9cbmNsYXNzIEV4cGFuZERldGFpbHNEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQpIHtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGV4cGFuZGVkRGV0YWlsS2V5cyBhcmUgY2hhbmdlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgY29sbGVjdGlvbiB0aGF0IHdpbGwgc3RvcmUgdGhlIGV4cGFuZGVkIGtleXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkRGV0YWlsS2V5cyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBpdGVtcyBzaG91bGQgYmUgaW5pdGlhbGx5IGV4cGFuZGVkLlxuICAgICAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbml0aWFsbHlFeHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5pc0RldGFpbEV4cGFuZGVkID0gdGhpcy5pc0V4cGFuZGVkLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQobWVyZ2UodGhpcy5ncmlkLmRldGFpbEV4cGFuZC5waXBlKG1hcChlID0+IChPYmplY3QuYXNzaWduKHsgZXhwYW5kOiB0cnVlIH0sIGUpKSkpLCB0aGlzLmdyaWQuZGV0YWlsQ29sbGFwc2UucGlwZShtYXAoZSA9PiAoT2JqZWN0LmFzc2lnbih7IGV4cGFuZDogZmFsc2UgfSwgZSkpKSkpLnN1YnNjcmliZSh0aGlzLnRvZ2dsZVN0YXRlLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgaXRlbSBrZXkgdGhhdCB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgYGV4cGFuZGVkRGV0YWlsS2V5c2AgY29sbGVjdGlvbiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIG1hc3Rlcl9kZXRhaWxfZXhwYW5kZWRfc3RhdGVfZ3JpZCAlfSN0b2MtYnVpbHQtaW4tZGlyZWN0aXZlKSkuXG4gICAgICovXG4gICAgZ2V0IGV4cGFuZERldGFpbHNLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRCeTtcbiAgICB9XG4gICAgc2V0IGV4cGFuZERldGFpbHNLZXkoa2V5KSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRCeSA9IGdldHRlcihrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXhwYW5kQnkgPSBrZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQSBkZXByZWNhdGVkIGFsaWFzIGZvciBzZXR0aW5nIHRoZSBgZXhwYW5kRGV0YWlsc0tleWAgcHJvcGVydHkuXG4gICAgICovXG4gICAgZ2V0IGV4cGFuZERldGFpbEJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmREZXRhaWxzS2V5O1xuICAgIH1cbiAgICBzZXQgZXhwYW5kRGV0YWlsQnkoa2V5KSB7XG4gICAgICAgIHRoaXMuZXhwYW5kRGV0YWlsc0tleSA9IGtleTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBnZXQga2V5R2V0dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kQnkgfHwgZ2V0dGVyKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpc0V4cGFuZGVkKGFyZ3MpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5rZXlHZXR0ZXIoYXJncy5kYXRhSXRlbSk7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkRGV0YWlsS2V5cy5pbmRleE9mKGtleSkgPiAtMSA/ICF0aGlzLmluaXRpYWxseUV4cGFuZGVkIDogdGhpcy5pbml0aWFsbHlFeHBhbmRlZDtcbiAgICB9XG4gICAgdG9nZ2xlU3RhdGUoYXJncykge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmtleUdldHRlcihhcmdzLmRhdGFJdGVtKTtcbiAgICAgICAgaWYgKEJvb2xlYW4odGhpcy5pbml0aWFsbHlFeHBhbmRlZCkgIT09IGFyZ3MuZXhwYW5kKSB7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkRGV0YWlsS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzLmluZGV4T2Yoa2V5KTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWREZXRhaWxLZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHBhbmRlZERldGFpbEtleXNDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkRGV0YWlsS2V5cyk7XG4gICAgfVxufVxuRXhwYW5kRGV0YWlsc0RpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEV4cGFuZERldGFpbHNCeV0nLFxuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9HcmlkRXhwYW5kRGV0YWlsc0J5J1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FeHBhbmREZXRhaWxzRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9XG5dO1xuRXhwYW5kRGV0YWlsc0RpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBleHBhbmRlZERldGFpbEtleXNDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBleHBhbmREZXRhaWxzS2V5OiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydrZW5kb0dyaWRFeHBhbmREZXRhaWxzQnknLF0gfV0sXG4gICAgZXhwYW5kRGV0YWlsQnk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGV4cGFuZGVkRGV0YWlsS2V5czogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5pdGlhbGx5RXhwYW5kZWQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTWVzc2FnZXMgZXh0ZW5kcyBDb21wb25lbnRNZXNzYWdlcyB7XG59XG5NZXNzYWdlcy5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBncm91cFBhbmVsRW1wdHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vUmVjb3JkczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZXJGaXJzdFBhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyTGFzdFBhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VyUHJldmlvdXNQYWdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlck5leHRQYWdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlclBhZ2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZ2VySXRlbXNQZXJQYWdlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlck9mOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlckl0ZW1zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlclBhZ2VOdW1iZXJJbnB1dFRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckVxT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlck5vdEVxT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcklzTnVsbE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJJc05vdE51bGxPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVySXNFbXB0eU9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJJc05vdEVtcHR5T3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclN0YXJ0c1dpdGhPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQ29udGFpbnNPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyTm90Q29udGFpbnNPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyRW5kc1dpdGhPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyR3RlT3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckd0T3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckx0ZU9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJMdE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJJc1RydWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcklzRmFsc2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckJvb2xlYW5BbGw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckFmdGVyT3JFcXVhbE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJBZnRlck9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJCZWZvcmVPcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyQmVmb3JlT3JFcXVhbE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJGaWx0ZXJCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckNsZWFyQnV0dG9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJBbmRMb2dpYzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyT3JMb2dpYzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9hZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9jazogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdW5sb2NrOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydEFzY2VuZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydERlc2NlbmRpbmc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnRlZEFzY2VuZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGVkRGVzY2VuZGluZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydGVkRGVmYXVsdDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uc0FwcGx5OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zUmVzZXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbEV4cGFuZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsQ29sbGFwc2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlckRhdGVUb2RheTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyRGF0ZVRvZ2dsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyTnVtZXJpY0RlY3JlbWVudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyTnVtZXJpY0luY3JlbWVudDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSBleHRlbmRzIE1lc3NhZ2VzIHtcbiAgICBjb25zdHJ1Y3RvcihzZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgfVxufVxuTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTWVzc2FnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkTG9jYWxpemVkTWVzc2FnZXNdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGdsb2JhbGl6YXRpb25fZ3JpZCAlfSN0b2MtbG9jYWxpemF0aW9uKSkuXG4gKi9cbmNsYXNzIEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50IGV4dGVuZHMgTWVzc2FnZXMge1xuICAgIGNvbnN0cnVjdG9yKHNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5DdXN0b21NZXNzYWdlc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBNZXNzYWdlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtbWVzc2FnZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DdXN0b21NZXNzYWdlc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlclJvd0NvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJSb3dDbGFzcyA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlsdGVyTGFiZWwgPSB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ2ZpbHRlcicpO1xuICAgIH1cbn1cbkZpbHRlclJvd0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEZpbHRlclJvd10nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICA8dGRcbiAgICAgICAgIFtjbGFzcy5rLWdyb3VwLWNlbGxdPVwidHJ1ZVwiXG4gICAgICAgICAqbmdGb3I9XCJsZXQgZyBvZiBncm91cHNcIlxuICAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgPC90ZD5cbiAgICAgIDx0ZFxuICAgICAgICAgW2NsYXNzLmstaGllcmFyY2h5LWNlbGxdPVwidHJ1ZVwiXG4gICAgICAgICAqbmdJZj1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICA8L3RkPlxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiZmlsdGVyTGFiZWxcIlxuICAgICAgICAgIGtlbmRvR3JpZEZpbHRlckNlbGxcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXhcIlxuICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2NrZWRDb2x1bW5zQ291bnQgKyBjb2x1bW5JbmRleFwiXG4gICAgICA+PC90ZD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlclJvd0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkZpbHRlclJvd0NvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvZ2ljYWxSb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9ja2VkQ29sdW1uc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJSb3dDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1maWx0ZXItcm93JyxdIH1dXG59O1xuXG5jb25zdCBhcmVEaWZmZXJlbnQgPSAoYSwgYikgPT4gYS5maWVsZCAhPT0gYi5maWVsZCB8fCBhLm9wZXJhdG9yICE9PSBiLm9wZXJhdG9yIHx8IGEudmFsdWUgIT09IGIudmFsdWU7XG5jb25zdCBpc0NoYW5nZWQkMSA9IChhLCBiKSA9PiB7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZm9yIChsZXQgaWR4ID0gMCwgbGVuID0gYS5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICAgICAgY29uc3QgcHJldiA9IGFbaWR4XTtcbiAgICAgICAgY29uc3QgY3VyciA9IGJbaWR4XTtcbiAgICAgICAgaWYgKGlzQ29tcG9zaXRlRmlsdGVyRGVzY3JpcHRvcihwcmV2KSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICAgICAgICAgICAgaWYgKGRpZmZGaWx0ZXJzKHByZXYsIGN1cnJbaWR4XSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmVEaWZmZXJlbnQocHJldiwgY3VycikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5jb25zdCBjb3B5T2JqZWN0ID0gKG9iaikgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCBvYmopO1xuICAgIGlmIChvYmouY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgICBjb25zdCBwcm90byA9IG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKS5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3BlcnR5ICE9PSAnY29uc3RydWN0b3InICYmIHByb3RvLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtwcm9wZXJ0eV0gPSBvYmpbcHJvcGVydHldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5jb25zdCBjbG9uZUZpbHRlciA9IChmaWx0ZXIkJDEpID0+IGNvcHlPYmplY3QoZmlsdGVyJCQxKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9uZUZpbHRlcnMgPSAoZmlsdGVyJCQxKSA9PiB7XG4gICAgaWYgKCFmaWx0ZXIkJDEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yKGZpbHRlciQkMSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpbHRlcnM6IGNsb25lRmlsdGVycyhmaWx0ZXIkJDEuZmlsdGVycyksXG4gICAgICAgICAgICBsb2dpYzogZmlsdGVyJCQxLmxvZ2ljXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyJCQxKSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyJCQxLm1hcChjbG9uZUZpbHRlcnMpO1xuICAgIH1cbiAgICByZXR1cm4gY2xvbmVGaWx0ZXIoZmlsdGVyJCQxKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZGlmZkZpbHRlcnMgPSAoYSwgYikgPT4ge1xuICAgIGlmIChpc1ByZXNlbnQoYSkgJiYgIWlzUHJlc2VudChiKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFpc1ByZXNlbnQoYSkgJiYgaXNQcmVzZW50KGIpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gaXNQcmVzZW50KGEpICYmIGlzUHJlc2VudChiKSAmJiBpc0NoYW5nZWQkMShhLmZpbHRlcnMsIGIuZmlsdGVycyk7XG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dCA9IHt9O1xuICAgIH1cbiAgICBnZXQgZmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyO1xuICAgIH1cbiAgICBzZXQgZmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlciA9IGNsb25lRmlsdGVycyh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCB0ZW1wbGF0ZUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dC5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0LmZpbHRlciA9IHRoaXMuZmlsdGVyO1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tc3RyaW5nLWxpdGVyYWxcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0W1wiJGltcGxpY2l0XCJdID0gdGhpcy5maWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUNvbnRleHQ7XG4gICAgfVxuICAgIGdldCBoYXNUZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLmNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGVSZWYpO1xuICAgIH1cbiAgICBnZXQgaXNGaWx0ZXJhYmxlKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuY29sdW1uKSAmJiAhaXNOdWxsT3JFbXB0eVN0cmluZyh0aGlzLmNvbHVtbi5maWVsZCkgJiYgdGhpcy5jb2x1bW4uZmlsdGVyYWJsZTtcbiAgICB9XG59XG5GaWx0ZXJDZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRmlsdGVyQ2VsbF0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJpc0ZpbHRlcmFibGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImhhc1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBrZW5kb0ZpbHRlckNlbGxIb3N0IFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZmlsdGVyQ2VsbFRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5maWx0ZXJDZWxsVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInRlbXBsYXRlQ29udGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuRmlsdGVyQ2VsbENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IGxvY2FsaXplT3BlcmF0b3JzID0gb3BlcmF0b3JzID0+IGxvY2FsaXphdGlvbiA9PiBPYmplY3Qua2V5cyhvcGVyYXRvcnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nbb3BlcmF0b3JzW2tleV1dID0gbG9jYWxpemF0aW9uLmdldChrZXkpO1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7IC8vIHRzbGludDpkaXNhYmxlLWxpbmU6YWxpZ25cbmNvbnN0IG9wZXJhdG9yVGV4dHMgPSBsb2NhbGl6ZU9wZXJhdG9ycyh7XG4gICAgXCJmaWx0ZXJFcU9wZXJhdG9yXCI6IFwiZXFcIixcbiAgICBcImZpbHRlck5vdEVxT3BlcmF0b3JcIjogXCJuZXFcIixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG4gICAgXCJmaWx0ZXJHdGVPcGVyYXRvclwiOiBcImd0ZVwiLFxuICAgIFwiZmlsdGVyR3RPcGVyYXRvclwiOiBcImd0XCIsXG4gICAgXCJmaWx0ZXJMdGVPcGVyYXRvclwiOiBcImx0ZVwiLFxuICAgIFwiZmlsdGVyTHRPcGVyYXRvclwiOiBcImx0XCIsXG4gICAgXCJmaWx0ZXJJc051bGxPcGVyYXRvclwiOiBcImlzbnVsbFwiLFxuICAgIFwiZmlsdGVySXNOb3ROdWxsT3BlcmF0b3JcIjogXCJpc25vdG51bGxcIixcbiAgICBcImZpbHRlcklzRW1wdHlPcGVyYXRvclwiOiBcImlzZW1wdHlcIixcbiAgICBcImZpbHRlcklzTm90RW1wdHlPcGVyYXRvclwiOiBcImlzbm90ZW1wdHlcIixcbiAgICBcImZpbHRlckNvbnRhaW5zT3BlcmF0b3JcIjogXCJjb250YWluc1wiLFxuICAgIFwiZmlsdGVyTm90Q29udGFpbnNPcGVyYXRvclwiOiBcImRvZXNub3Rjb250YWluXCIsXG4gICAgXCJmaWx0ZXJTdGFydHNXaXRoT3BlcmF0b3JcIjogXCJzdGFydHN3aXRoXCIsXG4gICAgXCJmaWx0ZXJFbmRzV2l0aE9wZXJhdG9yXCI6IFwiZW5kc3dpdGhcIixcbiAgICBcImZpbHRlckFmdGVyT3JFcXVhbE9wZXJhdG9yXCI6IFwiYWZ0ZXItZXFcIixcbiAgICBcImZpbHRlckFmdGVyT3BlcmF0b3JcIjogXCJhZnRlclwiLFxuICAgIFwiZmlsdGVyQmVmb3JlT3JFcXVhbE9wZXJhdG9yXCI6IFwiYmVmb3JlLWVxXCIsXG4gICAgXCJmaWx0ZXJCZWZvcmVPcGVyYXRvclwiOiBcImJlZm9yZVwiXG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCB0b0pTT04gPSAoeHMpID0+IHhzLm1hcCh4ID0+IHgudG9KU09OKCkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gb3BlcmF0b3JUZXh0cyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMuX3RleHQgPSB0aGlzLm1lc3NhZ2VzW3RoaXMub3BlcmF0b3JdO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnJlZnJlc2hUZXh0LmJpbmQodGhpcykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBkcm9wLWRvd24gbGlzdC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBtZW1iZXJPZiBGaWx0ZXJPcGVyYXRvckJhc2VcbiAgICAgKi9cbiAgICBnZXQgdGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgc2V0IHRleHQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdGV4dCA9IGlzTnVsbE9yRW1wdHlTdHJpbmcodmFsdWUpID8gdGhpcy5tZXNzYWdlc1t0aGlzLm9wZXJhdG9yXSA6IHZhbHVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMub3BlcmF0b3JcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVmcmVzaFRleHQoKSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHRoaXMuX3RleHQgPT09IHRoaXMubWVzc2FnZXNbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBvcGVyYXRvclRleHRzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGV4dCA9IHRoaXMubWVzc2FnZXNbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgIH1cbiAgICB9XG59XG5GaWx0ZXJPcGVyYXRvckJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdGV4dDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IGluc2VydERlZmF1bHRGaWx0ZXIgPSAoaW5kZXgsIHJvb3RGaWx0ZXIsIGZpbHRlciQkMSkgPT4ge1xuICAgIHJvb3RGaWx0ZXIgPSAocm9vdEZpbHRlciB8fCB7IGZpbHRlcnM6IFtdLCBsb2dpYzogXCJhbmRcIiB9KTtcbiAgICByb290RmlsdGVyLmZpbHRlcnNbaW5kZXhdID0gZmlsdGVyJCQxO1xuICAgIHJldHVybiBmaWx0ZXIkJDE7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNldEZpbHRlciA9IChpbmRleCwgZmlsdGVyJCQxLCBmaWVsZCwgZGVmYXVsdE9wZXJhdG9yKSA9PiB7XG4gICAgaWYgKGlzUHJlc2VudChmaWx0ZXIkJDEpICYmIGlzUHJlc2VudChmaWx0ZXIkJDEuZmlsdGVycykgJiYgZmlsdGVyJCQxLmZpbHRlcnMubGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlciQkMS5maWx0ZXJzW2luZGV4XTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnNlcnREZWZhdWx0RmlsdGVyKGluZGV4LCBmaWx0ZXIkJDEsIHtcbiAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGRlZmF1bHRPcGVyYXRvclxuICAgICAgICB9KTtcbiAgICB9XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGxvZ2ljT3BlcmF0b3JzID0gKGxvY2FsaXphdGlvbikgPT4gW1xuICAgIHsgdGV4dDogbG9jYWxpemF0aW9uLmdldChcImZpbHRlckFuZExvZ2ljXCIpLCB2YWx1ZTogXCJhbmRcIiB9LFxuICAgIHsgdGV4dDogbG9jYWxpemF0aW9uLmdldChcImZpbHRlck9yTG9naWNcIiksIHZhbHVlOiBcIm9yXCIgfVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmbGF0dGVuID0gKGZpbHRlciQkMSkgPT4ge1xuICAgIGlmIChpc1ByZXNlbnQoZmlsdGVyJCQxLmZpbHRlcnMpKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIkJDEuZmlsdGVycy5yZWR1Y2UoKGFjYywgY3VycikgPT4gYWNjLmNvbmNhdChpc0NvbXBvc2l0ZUZpbHRlckRlc2NyaXB0b3IoY3VycikgPyBmbGF0dGVuKGN1cnIpIDogW2N1cnJdKSwgW10pO1xuICAgIH1cbiAgICByZXR1cm4gW107XG59O1xuY29uc3QgdHJpbUZpbHRlckJ5RmllbGQgPSAoZmlsdGVyJCQxLCBmaWVsZCkgPT4ge1xuICAgIGlmIChpc1ByZXNlbnQoZmlsdGVyJCQxKSAmJiBpc1ByZXNlbnQoZmlsdGVyJCQxLmZpbHRlcnMpKSB7XG4gICAgICAgIGZpbHRlciQkMS5maWx0ZXJzID0gZmlsdGVyJCQxLmZpbHRlcnMuZmlsdGVyKHggPT4ge1xuICAgICAgICAgICAgaWYgKGlzQ29tcG9zaXRlRmlsdGVyRGVzY3JpcHRvcih4KSkge1xuICAgICAgICAgICAgICAgIHRyaW1GaWx0ZXJCeUZpZWxkKHgsIGZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geC5maWx0ZXJzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB4LmZpZWxkICE9PSBmaWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBmaWx0ZXJzQnlGaWVsZCA9IChmaWx0ZXIkJDEsIGZpZWxkKSA9PiBmbGF0dGVuKGZpbHRlciQkMSB8fCB7fSkuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gZmllbGQpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZpbHRlckJ5RmllbGQgPSAoZmlsdGVyJCQxLCBmaWVsZCkgPT4ge1xuICAgIGxldCBbY3VycmVudEZpbHRlcl0gPSBmaWx0ZXJzQnlGaWVsZChmaWx0ZXIkJDEsIGZpZWxkKTtcbiAgICByZXR1cm4gY3VycmVudEZpbHRlcjtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcmVtb3ZlRmlsdGVyID0gKGZpbHRlciQkMSwgZmllbGQpID0+IHtcbiAgICB0cmltRmlsdGVyQnlGaWVsZChmaWx0ZXIkJDEsIGZpZWxkKTtcbiAgICByZXR1cm4gZmlsdGVyJCQxO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBsb2NhbGl6ZU9wZXJhdG9ycyQxID0gb3BlcmF0b3JzID0+IGxvY2FsaXphdGlvbiA9PiBPYmplY3Qua2V5cyhvcGVyYXRvcnMpLm1hcChrZXkgPT4gKHtcbiAgICB0ZXh0OiBsb2NhbGl6YXRpb24uZ2V0KGtleSksXG4gICAgdmFsdWU6IG9wZXJhdG9yc1trZXldXG59KSk7XG4vKipcbiAqIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHRoZSBmaWx0ZXItY2VsbCBjb21wb25lbnQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByZXVzYWJsZWN1c3RvbWZpbHRlcnNfZ3JpZCAlfSN0b2MtZmlsdGVyLXJvdykpLlxuICovXG5jbGFzcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSBmaWx0ZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLm9wZXJhdG9yTGlzdCA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBvcGVyYXRvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcnMubGVuZ3RoID8gdGhpcy5fb3BlcmF0b3JzIDogdGhpcy5kZWZhdWx0T3BlcmF0b3JzO1xuICAgIH1cbiAgICBzZXQgb3BlcmF0b3JzKHZhbHVlcykge1xuICAgICAgICB0aGlzLl9vcGVyYXRvcnMgPSB2YWx1ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMub3BlcmF0aW9uTGlzdFN1YnNjcmlwdGlvbiA9IG9ic2VydmUodGhpcy5vcGVyYXRvckxpc3QpXG4gICAgICAgICAgICAucGlwZShtYXAocSA9PiBxLnRvQXJyYXkoKSksIG1hcCh0b0pTT04pKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0geDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRpb25MaXN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdGlvbkxpc3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJCeUZpZWxkKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJCeUZpZWxkKHRoaXMuZmlsdGVyLCBmaWVsZCk7XG4gICAgfVxuICAgIGZpbHRlcnNCeUZpZWxkKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJzQnlGaWVsZCh0aGlzLmZpbHRlciwgZmllbGQpO1xuICAgIH1cbiAgICByZW1vdmVGaWx0ZXIoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUZpbHRlcih0aGlzLmZpbHRlciwgZmllbGQpO1xuICAgIH1cbiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyJCQxKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmZpbHRlciB8fCB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgIGxvZ2ljOiBcImFuZFwiXG4gICAgICAgIH07XG4gICAgICAgIGxldCBbY3VycmVudEZpbHRlcl0gPSBmbGF0dGVuKHJvb3QpLmZpbHRlcih4ID0+IHguZmllbGQgPT09IGZpbHRlciQkMS5maWVsZCk7XG4gICAgICAgIGlmICghaXNQcmVzZW50KGN1cnJlbnRGaWx0ZXIpKSB7XG4gICAgICAgICAgICByb290LmZpbHRlcnMucHVzaChmaWx0ZXIkJDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjdXJyZW50RmlsdGVyLCBmaWx0ZXIkJDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290O1xuICAgIH1cbiAgICBhcHBseUZpbHRlcihmaWx0ZXIkJDEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlcihmaWx0ZXIkJDEpO1xuICAgIH1cbn1cbkJhc2VGaWx0ZXJDZWxsQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwnLF0gfV0sXG4gICAgb3BlcmF0b3JMaXN0OiBbeyB0eXBlOiBDb250ZW50Q2hpbGRyZW4sIGFyZ3M6IFtGaWx0ZXJPcGVyYXRvckJhc2UsXSB9XVxufTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG5jb25zdCBudW1lcmljT3BlcmF0b3JzID0gbG9jYWxpemVPcGVyYXRvcnMkMSh7XG4gICAgXCJmaWx0ZXJFcU9wZXJhdG9yXCI6IFwiZXFcIixcbiAgICBcImZpbHRlck5vdEVxT3BlcmF0b3JcIjogXCJuZXFcIixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG4gICAgXCJmaWx0ZXJHdGVPcGVyYXRvclwiOiBcImd0ZVwiLFxuICAgIFwiZmlsdGVyR3RPcGVyYXRvclwiOiBcImd0XCIsXG4gICAgXCJmaWx0ZXJMdGVPcGVyYXRvclwiOiBcImx0ZVwiLFxuICAgIFwiZmlsdGVyTHRPcGVyYXRvclwiOiBcImx0XCIsXG4gICAgXCJmaWx0ZXJJc051bGxPcGVyYXRvclwiOiBcImlzbnVsbFwiLFxuICAgIFwiZmlsdGVySXNOb3ROdWxsT3BlcmF0b3JcIjogXCJpc25vdG51bGxcIlxufSk7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBiYXNlIG51bWVyaWMgZmlsdGVyIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgTnVtZXJpY0ZpbHRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VGaWx0ZXJDZWxsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yLiBEZWZhdWx0cyB0byBgZXFgLlxuICAgICAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcGVyYXRvciA9IFwiZXFcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCBpcyB1c2VkIHRvIGluY3JlbWVudCBvciBkZWNyZW1lbnQgdGhlIGNvbXBvbmVudCB2YWx1ZS5cbiAgICAgICAgICogQHR5cGUge251bWVyaWN9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnN0ZXAgPSAxO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHdoZXRoZXIgdGhlICoqVXAqKiBhbmQgKipEb3duKiogc3BpbiBidXR0b25zIHdpbGwgYmUgcmVuZGVyZWQuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zcGlubmVycyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wZXJhdG9ycyA9IG51bWVyaWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTcGVjaWZpZXMgdGhlIG51bWJlciBmb3JtYXQgdXNlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGZvY3VzZWQuXG4gICAgICogQnkgZGVmYXVsdCwgdGhlIGBjb2x1bW4uZm9ybWF0YCB2YWx1ZSBpcyB1c2VkIChpZiBzZXQpLlxuICAgICAqL1xuICAgIHNldCBmb3JtYXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZm9ybWF0ID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgbnVtYmVyIGZvcm1hdCB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgZm9jdXNlZC5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYGNvbHVtbi5mb3JtYXRgIHZhbHVlIGlzIHVzZWQgKGlmIHNldCkuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBmb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiAhaXNOdWxsT3JFbXB0eVN0cmluZyh0aGlzLl9mb3JtYXQpID8gdGhpcy5fZm9ybWF0IDogdGhpcy5jb2x1bW5Gb3JtYXQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIG9wZXJhdG9yIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudE9wZXJhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyID8gdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yIDogdGhpcy5vcGVyYXRvcjtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbkZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uICYmICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuY29sdW1uLmZvcm1hdCkgP1xuICAgICAgICAgICAgZXh0cmFjdEZvcm1hdCh0aGlzLmNvbHVtbi5mb3JtYXQpIDogXCJuMlwiO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wZXJhdG9ycyA9IG51bWVyaWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IHRvSlNPTih0aGlzLm9wZXJhdG9yTGlzdC50b0FycmF5KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuTnVtZXJpY0ZpbHRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzcGlubmVyczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGVjaW1hbHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG51bWVyaWMgZmlsdGVyIGNlbGwuXG4gKlxuICogQGV4YW1wbGVcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItY2VsbFxuICogICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGw+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICBgYGBcbiAqL1xuY2xhc3MgTnVtZXJpY0ZpbHRlckNlbGxDb21wb25lbnQgZXh0ZW5kcyBOdW1lcmljRmlsdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHRoZSBkZWxheSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGJlZm9yZSB0aGUgZmlsdGVyIHZhbHVlIGlzIHN1Ym1pdHRlZC5cbiAgICAgICAgICogQSB2YWx1ZSBvZiBgMGAgaW5kaWNhdGVzIG5vIGRlbGF5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgNTAwYC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlckRlbGF5ID0gNTAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZHJvcC1kb3duIGZpbHRlciBvcGVyYXRvcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbWVzc2FnZUZvcihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldChrZXkpO1xuICAgIH1cbn1cbk51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLWNlbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGxcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwic2hvd09wZXJhdG9yc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveFxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVySW5wdXRcbiAgICAgICAgICAgICAgICBbZmlsdGVyRGVsYXldPVwiZmlsdGVyRGVsYXlcIlxuICAgICAgICAgICAgICAgIFthdXRvQ29ycmVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlcj8udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbZGVjaW1hbHNdPVwiZGVjaW1hbHNcIlxuICAgICAgICAgICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyc1wiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3gtbWVzc2FnZXNcbiAgICAgICAgICAgICAgICAgICAgW2luY3JlbWVudF09XCJtZXNzYWdlRm9yKCdmaWx0ZXJOdW1lcmljSW5jcmVtZW50JylcIlxuICAgICAgICAgICAgICAgICAgICBbZGVjcmVtZW50XT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlck51bWVyaWNEZWNyZW1lbnQnKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3gtbWVzc2FnZXM+XG4gICAgICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbk51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuTnVtZXJpY0ZpbHRlckNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmlsdGVyRGVsYXk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dPcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVySW5wdXREaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlQWNjZXNzb3JzLCBuZ1pvbmUsIGVsZW1lbnQsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpbHRlckRlbGF5ID0gNTAwO1xuICAgICAgICB0aGlzLmNoYW5nZVJlcXVlc3RzID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvciA9IHZhbHVlQWNjZXNzb3JzWzBdO1xuICAgICAgICBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVTdGFydCA9IHJlbmRlcmVyLmxpc3RlbihlbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdjb21wb3NpdGlvbnN0YXJ0JywgKCkgPT4gdGhpcy5jb21wb3NpbmcgPSB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHVuc3Vic2NyaWJlRW5kID0gcmVuZGVyZXIubGlzdGVuKGVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NvbXBvc2l0aW9uZW5kJywgKCkgPT4gdGhpcy5jb21wb3NpbmcgPSBmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlRXZlbnRzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlU3RhcnQoKTtcbiAgICAgICAgICAgICAgICB1bnN1YnNjcmliZUVuZCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmFjY2Vzc29yLndyaXRlVmFsdWUodmFsdWUpO1xuICAgIH1cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5hY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKHZhbHVlKTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLmFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoeCA9PiB0aGlzLmZpbHRlckRlbGF5ID4gMCA/XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVJlcXVlc3RzLm5leHQoeCkgOlxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh4KSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlQ2hhbmdlcygpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChpc0NoYW5nZWQoJ2ZpbHRlckRlbGF5JywgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmVDaGFuZ2VzKCk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZUNoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNoYW5nZXMoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUV2ZW50cygpO1xuICAgIH1cbiAgICBzdWJzY3JpYmVDaGFuZ2VzKCkge1xuICAgICAgICB0aGlzLmNoYW5nZVJlcXVlc3RzU3Vic2NyaXB0aW9uID0gdGhpcy5jaGFuZ2VSZXF1ZXN0c1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZmlsdGVyRGVsYXkpLCBmaWx0ZXIoKCkgPT4gIXRoaXMuY29tcG9zaW5nKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeCA9PiB0aGlzLmNoYW5nZS5lbWl0KHgpKTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmVDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VSZXF1ZXN0c1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VSZXF1ZXN0c1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRmlsdGVySW5wdXREaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0ZpbHRlcklucHV0XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVySW5wdXREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBBcnJheSwgZGVjb3JhdG9yczogW3sgdHlwZTogU2VsZiB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW05HX1ZBTFVFX0FDQ0VTU09SLF0gfV0gfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH1cbl07XG5GaWx0ZXJJbnB1dERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWx0ZXJEZWxheTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmFsdWU6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBFTVBUWV9WQUxVRV9PUEVSQVRPUlMgPSBuZXcgU2V0KFsnaXNudWxsJywgJ2lzbm90bnVsbCcsICdpc2VtcHR5JywgJ2lzbm90ZW1wdHknXSk7XG5jb25zdCBpc0VtcHR5VmFsdWVPcGVyYXRvciA9IChvcGVyYXRvcikgPT4gRU1QVFlfVkFMVUVfT1BFUkFUT1JTLmhhcyhvcGVyYXRvcik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRmlsdGVySW5wdXRXcmFwcGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZpbHRlckNlbGxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoZmlsdGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMub3BlcmF0b3JzID0gW107XG4gICAgfVxuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRPcGVyYXRvcigpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyJCQxID0gdGhpcy5jdXJyZW50RmlsdGVyO1xuICAgICAgICBpZiAoIXRoaXMuX29wZXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVyYXRvciA9IGZpbHRlciQkMSA/IGZpbHRlciQkMS5vcGVyYXRvciA6IHRoaXMuZGVmYXVsdE9wZXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVyYXRvcjtcbiAgICB9XG4gICAgc2V0IGN1cnJlbnRPcGVyYXRvcih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9vcGVyYXRvciA9IHZhbHVlO1xuICAgICAgICBjb25zdCBlbXB0eVZhbHVlT3BlcmF0b3IgPSBpc0VtcHR5VmFsdWVPcGVyYXRvcih2YWx1ZSk7XG4gICAgICAgIHRoaXMuZmlsdGVySW5wdXREaXNhYmxlZCA9IGVtcHR5VmFsdWVPcGVyYXRvcjtcbiAgICAgICAgaWYgKGVtcHR5VmFsdWVPcGVyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5hcHBseU5vVmFsdWVGaWx0ZXIodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0JsYW5rKHZhbHVlKSAmJiBpc1ByZXNlbnQodGhpcy5jdXJyZW50RmlsdGVyKSkge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRGaWx0ZXIudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBkZWZhdWx0T3BlcmF0b3IoKSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eVN0cmluZyh0aGlzLl9kZWZhdWx0T3BlcmF0b3IpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdE9wZXJhdG9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3BlcmF0b3JzICYmIHRoaXMub3BlcmF0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzWzBdLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcImVxXCI7XG4gICAgfVxuICAgIHNldCBkZWZhdWx0T3BlcmF0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGVmYXVsdE9wZXJhdG9yID0gdmFsdWU7XG4gICAgfVxuICAgIHNldCBmaWx0ZXJJbnB1dERpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5wdXQuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgICB9XG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuaW5wdXQpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuaW5wdXQuY2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJJbnB1dERpc2FibGVkID0gaXNFbXB0eVZhbHVlT3BlcmF0b3IodGhpcy5jdXJyZW50T3BlcmF0b3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBpZiAodGhpcy5jaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5U3RyaW5nKHZhbHVlKSB8fCB0aGlzLmZpbHRlckJ5RmllbGQodGhpcy5jb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZShpc051bGxPckVtcHR5U3RyaW5nKHZhbHVlKSA/XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIodGhpcy5jb2x1bW4uZmllbGQpIDpcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuY3VycmVudE9wZXJhdG9yLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DbGVhcigpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZShudWxsKTtcbiAgICAgICAgdGhpcy5maWx0ZXJJbnB1dERpc2FibGVkID0gaXNFbXB0eVZhbHVlT3BlcmF0b3IodGhpcy5kZWZhdWx0T3BlcmF0b3IpO1xuICAgIH1cbiAgICBhcHBseU5vVmFsdWVGaWx0ZXIob3BlcmF0b3IpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UodGhpcy51cGRhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChpc0NoYW5nZWQoXCJmaWx0ZXJcIiwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLl9vcGVyYXRvciA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcklucHV0RGlzYWJsZWQgPSBpc0VtcHR5VmFsdWVPcGVyYXRvcih0aGlzLmN1cnJlbnRPcGVyYXRvcik7XG4gICAgICAgIH1cbiAgICB9XG59XG5GaWx0ZXJJbnB1dFdyYXBwZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5wdXQ6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0ZpbHRlcklucHV0RGlyZWN0aXZlLF0gfV0sXG4gICAgZGVmYXVsdE9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuY29uc3QgRU1QVFlfRklMVEVSX09QRVJBVE9SUyA9IFsnaXNudWxsJywgJ2lzbm90bnVsbCcsICdpc2VtcHR5JywgJ2lzbm90ZW1wdHknXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJDZWxsV3JhcHBlckNvbXBvbmVudCBleHRlbmRzIEZpbHRlcklucHV0V3JhcHBlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSkge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zaG93T3BlcmF0b3JzID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IG92ZXJyaWRlQmFzZUNsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHNob3dCdXR0b24oKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlciQkMSA9IHRoaXMuY3VycmVudEZpbHRlcjtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudChmaWx0ZXIkJDEpICYmICghaXNOdWxsT3JFbXB0eVN0cmluZyhmaWx0ZXIkJDEudmFsdWUpIHx8XG4gICAgICAgICAgICBFTVBUWV9GSUxURVJfT1BFUkFUT1JTLmluZGV4T2YoU3RyaW5nKGZpbHRlciQkMS5vcGVyYXRvcikpID49IDApO1xuICAgIH1cbiAgICBmaWx0ZXJDaGFuZ2UoZmlsdGVyJCQxKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyJCQxKTtcbiAgICB9XG59XG5GaWx0ZXJDZWxsV3JhcHBlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1jZWxsLW9wZXJhdG9yc1xuICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwic2hvd09wZXJhdG9yc1wiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcigpXCJcbiAgICAgICAgICAgIFtzaG93QnV0dG9uXT1cInNob3dCdXR0b25cIlxuICAgICAgICAgICAgWyh2YWx1ZSldPVwiY3VycmVudE9wZXJhdG9yXCI+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItY2VsbC1vcGVyYXRvcnM+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJDZWxsV3JhcHBlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZpbHRlclNlcnZpY2UgfVxuXTtcbkZpbHRlckNlbGxXcmFwcGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwtd3JhcHBlcicsXSB9XSxcbiAgICBvdmVycmlkZUJhc2VDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwnLF0gfV0sXG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlclxuY29uc3Qgc3RyaW5nT3BlcmF0b3JzID0gbG9jYWxpemVPcGVyYXRvcnMkMSh7XG4gICAgXCJmaWx0ZXJFcU9wZXJhdG9yXCI6IFwiZXFcIixcbiAgICBcImZpbHRlck5vdEVxT3BlcmF0b3JcIjogXCJuZXFcIixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG4gICAgXCJmaWx0ZXJDb250YWluc09wZXJhdG9yXCI6IFwiY29udGFpbnNcIixcbiAgICBcImZpbHRlck5vdENvbnRhaW5zT3BlcmF0b3JcIjogXCJkb2Vzbm90Y29udGFpblwiLFxuICAgIFwiZmlsdGVyU3RhcnRzV2l0aE9wZXJhdG9yXCI6IFwic3RhcnRzd2l0aFwiLFxuICAgIFwiZmlsdGVyRW5kc1dpdGhPcGVyYXRvclwiOiBcImVuZHN3aXRoXCIsXG4gICAgXCJmaWx0ZXJJc051bGxPcGVyYXRvclwiOiBcImlzbnVsbFwiLFxuICAgIFwiZmlsdGVySXNOb3ROdWxsT3BlcmF0b3JcIjogXCJpc25vdG51bGxcIixcbiAgICBcImZpbHRlcklzRW1wdHlPcGVyYXRvclwiOiBcImlzZW1wdHlcIixcbiAgICBcImZpbHRlcklzTm90RW1wdHlPcGVyYXRvclwiOiBcImlzbm90ZW1wdHlcIlxufSk7XG4vKipcbiAqIFJlcHJlc2VudHMgYSBiYXNlIHN0cmluZyBmaWx0ZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBTdHJpbmdGaWx0ZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlRmlsdGVyQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvci4gRGVmYXVsdHMgdG8gYGNvbnRhaW5zYC5cbiAgICAgICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3BlcmF0b3IgPSBcImNvbnRhaW5zXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKCh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgb3BlcmF0b3IgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50T3BlcmF0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRGaWx0ZXIgPyB0aGlzLmN1cnJlbnRGaWx0ZXIub3BlcmF0b3IgOiB0aGlzLm9wZXJhdG9yO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wZXJhdG9ycyA9IHN0cmluZ09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0gdG9KU09OKHRoaXMub3BlcmF0b3JMaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5TdHJpbmdGaWx0ZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc3RyaW5nLWZpbHRlciBjZWxsIGNvbXBvbmVudFxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2MtY29uZmlndXJhdGlvbi1jb21wb25lbnRzLWZvci1maWx0ZXItdGVtcGxhdGVzKSkuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgYGBgaHRtbC1uby1ydW5cbiAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdE5hbWVcIiB0aXRsZT1cIlByb2R1Y3QgTmFtZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLXN0cmluZy1maWx0ZXItY2VsbFxuICogICAgICAgICAgICAgIFtzaG93T3BlcmF0b3JzXT1cImZhbHNlXCJcbiAqICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gKiAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLWNlbGw+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICBgYGBcbiAqL1xuY2xhc3MgU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudCBleHRlbmRzIFN0cmluZ0ZpbHRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZXRlcm1pbmVzIHRoZSBkZWxheSB0aW1lIChpbiBtaWxsaXNlY29uZHMpIGJlZm9yZSB0aGUgZmlsdGVyIHZhbHVlIGlzIHN1Ym1pdHRlZC5cbiAgICAgICAgICogQSB2YWx1ZSBvZiBgMGAgaW5kaWNhdGVzIG5vIGRlbGF5LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgNTAwYC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlckRlbGF5ID0gNTAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZHJvcC1kb3duIGZpbHRlciBvcGVyYXRvcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgIH1cbn1cblN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1jZWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbZGVmYXVsdE9wZXJhdG9yXT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtzaG93T3BlcmF0b3JzXT1cInNob3dPcGVyYXRvcnNcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay10ZXh0Ym94XCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgICAgICBrZW5kb0ZpbHRlcklucHV0XG4gICAgICAgICAgICAgICAgW2ZpbHRlckRlbGF5XT1cImZpbHRlckRlbGF5XCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiIC8+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZpbHRlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmlsdGVyRGVsYXk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dPcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb21wb25lbnQgd2hpY2ggYWNjb21tb2RhdGVzIHRoZSBmaWx0ZXIgb3BlcmF0b3JzLlxuICovXG5jbGFzcyBGaWx0ZXJDZWxsT3BlcmF0b3JzQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY2xlYXJUZXh0ID0gJ0NsZWFyJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBmaWx0ZXIgb3BlcmF0b3JzIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgbGlzdCBvZiBvcGVyYXRvcnMgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zaG93T3BlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIG9wZXJhdG9yIGlzIHNlbGVjdGVkLlxuICAgICAgICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPHN0cmluZz59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgKipDbGVhcioqIGJ1dHRvbiBpcyBjbGlja2VkLlxuICAgICAgICAgKiBAdHlwZSB7RXZlbnRFbWl0dGVyPHt9Pn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY2xlYXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DaGFuZ2UoZGF0YUl0ZW0pIHtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGRhdGFJdGVtKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsZWFyQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuY2xlYXIuZW1pdCgpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjbGVhcktleWRvd24oYXJncykge1xuICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyIHx8IGFyZ3Mua2V5Q29kZSA9PT0gS2V5cy5TcGFjZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhci5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGRyb3Bkb3duS2V5ZG93bihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyICYmICF0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi50b2dnbGUodHJ1ZSk7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xlYXJUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyQ2xlYXJCdXR0b25cIikpO1xuICAgIH1cbn1cbkZpbHRlckNlbGxPcGVyYXRvcnNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZmlsdGVyLWNlbGwtb3BlcmF0b3JzJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0XG4gICAgICAgICAgICAjZHJvcGRvd25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd09wZXJhdG9yc1wiXG4gICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgIFtkYXRhXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBjbGFzcz1cImstZHJvcGRvd24tb3BlcmF0b3JcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cImstaS1maWx0ZXJcIlxuICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICBbcG9wdXBTZXR0aW5nc109XCJ7IHdpZHRoOiAnYXV0bycgfVwiXG4gICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiZHJvcGRvd25LZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnay1jbGVhci1idXR0b24tdmlzaWJsZSc6IHNob3dCdXR0b259XCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b24gay1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiY2xlYXJUZXh0XCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGVhckNsaWNrKClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwiY2xlYXJLZXlkb3duKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktZmlsdGVyLWNsZWFyXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlckNlbGxPcGVyYXRvcnNDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5GaWx0ZXJDZWxsT3BlcmF0b3JzQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwtb3BlcmF0b3InLF0gfV0sXG4gICAgZHJvcGRvd246IFt7IHR5cGU6IFZpZXdDaGlsZCwgYXJnczogWydkcm9wZG93bicsXSB9XSxcbiAgICBvcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dCdXR0b246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNob3dPcGVyYXRvcnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2YWx1ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNsZWFyOiBbeyB0eXBlOiBPdXRwdXQgfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlclxuY29uc3Qgc3RyaW5nT3BlcmF0b3JzJDEgPSBsb2NhbGl6ZU9wZXJhdG9ycyQxKHtcbiAgICBcImZpbHRlckNvbnRhaW5zT3BlcmF0b3JcIjogXCJjb250YWluc1wiLFxuICAgIFwiZmlsdGVyTm90Q29udGFpbnNPcGVyYXRvclwiOiBcImRvZXNub3Rjb250YWluXCIsXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9iamVjdC1saXRlcmFsLXNvcnQta2V5c1xuICAgIFwiZmlsdGVyRXFPcGVyYXRvclwiOiBcImVxXCIsXG4gICAgXCJmaWx0ZXJOb3RFcU9wZXJhdG9yXCI6IFwibmVxXCIsXG4gICAgXCJmaWx0ZXJTdGFydHNXaXRoT3BlcmF0b3JcIjogXCJzdGFydHN3aXRoXCIsXG4gICAgXCJmaWx0ZXJFbmRzV2l0aE9wZXJhdG9yXCI6IFwiZW5kc3dpdGhcIixcbiAgICBcImZpbHRlcklzTnVsbE9wZXJhdG9yXCI6IFwiaXNudWxsXCIsXG4gICAgXCJmaWx0ZXJJc05vdE51bGxPcGVyYXRvclwiOiBcImlzbm90bnVsbFwiLFxuICAgIFwiZmlsdGVySXNFbXB0eU9wZXJhdG9yXCI6IFwiaXNlbXB0eVwiLFxuICAgIFwiZmlsdGVySXNOb3RFbXB0eU9wZXJhdG9yXCI6IFwiaXNub3RlbXB0eVwiXG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBBdXRvQ29tcGxldGVGaWx0ZXJDZWxsQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZpbHRlckNlbGxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGNvbHVtbiwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5zaG93T3BlcmF0b3JzID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gc3RyaW5nT3BlcmF0b3JzJDEodGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICB9XG4gICAgc2V0IHZhbHVlRmllbGQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdmFsdWVGaWVsZCA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVGaWVsZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlRmllbGQgPyB0aGlzLl92YWx1ZUZpZWxkIDogdGhpcy5jb2x1bW4uZmllbGQ7XG4gICAgfVxuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlciA/IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA6IFwiY29udGFpbnNcIjtcbiAgICB9XG59XG5BdXRvQ29tcGxldGVGaWx0ZXJDZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWF1dG9jb21wbGV0ZS1maWx0ZXItY2VsbCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbFxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwic2hvd09wZXJhdG9yc1wiPlxuICAgICAgICAgICAgPGtlbmRvLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVySW5wdXRcbiAgICAgICAgICAgICAgICBbZGF0YV09XCJkYXRhXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJ2YWx1ZUZpZWxkXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlcj8udmFsdWVcIj5cbiAgICAgICAgICAgIDwva2VuZG8tYXV0b2NvbXBsZXRlPlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5Db21wb25lbnQgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZhbHVlRmllbGQ6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZTpuby1hY2Nlc3MtbWlzc2luZy1tZW1iZXJcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZpbHRlckNlbGxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gXCJlcVwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pdGVtcyA9IFtcbiAgICAgICAgICAgIHsgdGV4dDogdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVySXNUcnVlXCIpLCB2YWx1ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJJc0ZhbHNlXCIpLCB2YWx1ZTogZmFsc2UgfVxuICAgICAgICBdO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kZWZhdWx0SXRlbSA9IHsgdGV4dDogdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyQm9vbGVhbkFsbFwiKSwgdmFsdWU6IG51bGwgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIGdldCBjdXJyZW50RmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIG9wZXJhdG9yIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudE9wZXJhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RmlsdGVyID8gdGhpcy5jdXJyZW50RmlsdGVyLm9wZXJhdG9yIDogdGhpcy5vcGVyYXRvcjtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gICAgbG9jYWxpemF0aW9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLml0ZW1zID0gW1xuICAgICAgICAgICAgeyB0ZXh0OiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoXCJmaWx0ZXJJc1RydWVcIiksIHZhbHVlOiB0cnVlIH0sXG4gICAgICAgICAgICB7IHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmdldChcImZpbHRlcklzRmFsc2VcIiksIHZhbHVlOiBmYWxzZSB9XG4gICAgICAgIF07XG4gICAgICAgIHRoaXMuZGVmYXVsdEl0ZW0gPSB7IHRleHQ6IHRoaXMubG9jYWxpemF0aW9uLmdldChcImZpbHRlckJvb2xlYW5BbGxcIiksIHZhbHVlOiBudWxsIH07XG4gICAgfVxufVxuQm9vbGVhbkZpbHRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1maWx0ZXJjZWxsLWJvb2xlYW4nLF0gfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBCb29sZWFuIGZpbHRlci1jZWxsIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItY2VsbFxuICogICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLWNlbGw+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICBgYGBcbiAqL1xuY2xhc3MgQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQgZXh0ZW5kcyBCb29sZWFuRmlsdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBsb2NhbGl6YXRpb24sIGNkKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMuY2QgPSBjZDtcbiAgICB9XG4gICAgbG9jYWxpemF0aW9uQ2hhbmdlKCkge1xuICAgICAgICBzdXBlci5sb2NhbGl6YXRpb25DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG59XG5Cb29sZWFuRmlsdGVyQ2VsbENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1jZWxsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItd3JhcHBlci1jZWxsXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbc2hvd09wZXJhdG9yc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbZGVmYXVsdE9wZXJhdG9yXT1cIm9wZXJhdG9yXCI+XG4gICAgICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0XG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtkZWZhdWx0SXRlbV09XCJkZWZhdWx0SXRlbVwiXG4gICAgICAgICAgICAgICAgW2RhdGFdPVwiaXRlbXNcIlxuICAgICAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW3BvcHVwU2V0dGluZ3NdPVwieyB3aWR0aDogJ2F1dG8nIH1cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlcj8udmFsdWVcIj5cbiAgICAgICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG5jb25zdCBkYXRlT3BlcmF0b3JzID0gbG9jYWxpemVPcGVyYXRvcnMkMSh7XG4gICAgXCJmaWx0ZXJFcU9wZXJhdG9yXCI6IFwiZXFcIixcbiAgICBcImZpbHRlck5vdEVxT3BlcmF0b3JcIjogXCJuZXFcIixcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6b2JqZWN0LWxpdGVyYWwtc29ydC1rZXlzXG4gICAgXCJmaWx0ZXJBZnRlck9yRXF1YWxPcGVyYXRvclwiOiBcImd0ZVwiLFxuICAgIFwiZmlsdGVyQWZ0ZXJPcGVyYXRvclwiOiBcImd0XCIsXG4gICAgXCJmaWx0ZXJCZWZvcmVPckVxdWFsT3BlcmF0b3JcIjogXCJsdGVcIixcbiAgICBcImZpbHRlckJlZm9yZU9wZXJhdG9yXCI6IFwibHRcIixcbiAgICBcImZpbHRlcklzTnVsbE9wZXJhdG9yXCI6IFwiaXNudWxsXCIsXG4gICAgXCJmaWx0ZXJJc05vdE51bGxPcGVyYXRvclwiOiBcImlzbm90bnVsbFwiXG59KTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEYXRlRmlsdGVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUZpbHRlckNlbGxDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihmaWx0ZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3IuIERlZmF1bHRzIHRvIGBjb250YWluc2AuXG4gICAgICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9wZXJhdG9yID0gXCJndGVcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGFjdGl2ZSB2aWV3IHRoYXQgdGhlIGNhbGVuZGFyIGluaXRpYWxseSByZW5kZXJzLlxuICAgICAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYWN0aXZlIHZpZXcgaXMgYG1vbnRoYC5cbiAgICAgICAgICpcbiAgICAgICAgICogPiBZb3UgaGF2ZSB0byBzZXQgYGFjdGl2ZVZpZXdgIHdpdGhpbiB0aGUgYHRvcFZpZXdgLWBib3R0b21WaWV3YCByYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aXZlVmlldyA9IFwibW9udGhcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIGJvdHRvbW1vc3QgY2FsZW5kYXIgdmlldywgdG8gd2hpY2ggdGhlIHVzZXIgY2FuIG5hdmlnYXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5ib3R0b21WaWV3ID0gXCJtb250aFwiO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgdG9wbW9zdCBjYWxlbmRhciB2aWV3LCB0byB3aGljaCB0aGUgdXNlciBjYW4gbmF2aWdhdGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRvcFZpZXcgPSBcImNlbnR1cnlcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgd2hldGhlciB0byBkaXNwbGF5IGEgd2VlayBudW1iZXIgY29sdW1uIGluIHRoZSBgbW9udGhgIHZpZXcgb2YgdGhlIENhbGVuZGFyLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53ZWVrTnVtYmVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVmYXVsdE9wZXJhdG9ycyA9IGRhdGVPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7RmlsdGVyRGVzY3JpcHRvcn1cbiAgICAgKi9cbiAgICBnZXQgY3VycmVudEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyQnlGaWVsZCh0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgZGF0ZSBmb3JtYXQgdGhhdCBpcyB1c2VkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgZm9jdXNlZC5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgYGNvbHVtbi5mb3JtYXRgIHZhbHVlIGlzIHVzZWQgKGlmIHNldCkuXG4gICAgICovXG4gICAgc2V0IGZvcm1hdCh2YWx1ZSkge1xuICAgICAgICB0aGlzLl9mb3JtYXQgPSB2YWx1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBkYXRlIGZvcm1hdCB0aGF0IGlzIHVzZWQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCBmb2N1c2VkLlxuICAgICAqIEJ5IGRlZmF1bHQsIHRoZSBgY29sdW1uLmZvcm1hdGAgdmFsdWUgaXMgdXNlZCAoaWYgc2V0KS5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IGZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuX2Zvcm1hdCkgPyB0aGlzLl9mb3JtYXQgOiB0aGlzLmNvbHVtbkZvcm1hdDtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbkZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uICYmICFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuY29sdW1uLmZvcm1hdCkgP1xuICAgICAgICAgICAgZXh0cmFjdEZvcm1hdCh0aGlzLmNvbHVtbi5mb3JtYXQpIDogXCJkXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IGZpbHRlciBvcGVyYXRvciBmb3IgdGhlIGFzc29jaWF0ZWQgY29sdW1uIGZpZWxkLlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRPcGVyYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudEZpbHRlciA/IHRoaXMuY3VycmVudEZpbHRlci5vcGVyYXRvciA6IHRoaXMub3BlcmF0b3I7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICAgIGxvY2FsaXphdGlvbkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5kZWZhdWx0T3BlcmF0b3JzID0gZGF0ZU9wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0gdG9KU09OKHRoaXMub3BlcmF0b3JMaXN0LnRvQXJyYXkoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5EYXRlRmlsdGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcGVyYXRvcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1heDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9ybWF0UGxhY2Vob2xkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhY3RpdmVWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3R0b21WaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3BWaWV3OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3ZWVrTnVtYmVyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGF0ZS1maWx0ZXIgY2VsbCBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgYGBgaHRtbC1uby1ydW5cbiAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiT3JkZXJEYXRlXCIgdGl0bGU9XCJPcmRlciBEYXRlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtZGF0ZS1maWx0ZXItY2VsbFxuICogICAgICAgICAgICAgIFtzaG93T3BlcmF0b3JzXT1cImZhbHNlXCJcbiAqICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gKiAgICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1jZWxsPlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgYGBgXG4gKi9cbmNsYXNzIERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50IGV4dGVuZHMgRGF0ZUZpbHRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZmlsdGVyU2VydmljZSwgbG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKGZpbHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbik7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgZHJvcC1kb3duIGZpbHRlciBvcGVyYXRvcnMgd2lsbCBiZSBkaXNwbGF5ZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgICAgICogQHR5cGUge2Jvb2xlYW59XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNob3dPcGVyYXRvcnMgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbWVzc2FnZUZvcihrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldChrZXkpO1xuICAgIH1cbn1cbkRhdGVGaWx0ZXJDZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWRhdGUtZmlsdGVyLWNlbGwnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci13cmFwcGVyLWNlbGxcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0T3BlcmF0b3JdPVwib3BlcmF0b3JcIlxuICAgICAgICAgICAgW3Nob3dPcGVyYXRvcnNdPVwic2hvd09wZXJhdG9yc1wiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1kYXRlcGlja2VyXG4gICAgICAgICAgICAgICAga2VuZG9GaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICBbYm90dG9tVmlld109XCJib3R0b21WaWV3XCJcbiAgICAgICAgICAgICAgICBbdG9wVmlld109XCJ0b3BWaWV3XCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFt3ZWVrTnVtYmVyXT1cIndlZWtOdW1iZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxrZW5kby1kYXRlcGlja2VyLW1lc3NhZ2VzXG4gICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwibWVzc2FnZUZvcignZmlsdGVyRGF0ZVRvZ2dsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvZGF5XT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlckRhdGVUb2RheScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9rZW5kby1kYXRlcGlja2VyLW1lc3NhZ2VzPlxuICAgICAgICAgICAgPC9rZW5kby1kYXRlcGlja2VyPlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLXdyYXBwZXItY2VsbD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRhdGVGaWx0ZXJDZWxsQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuRGF0ZUZpbHRlckNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2hvd09wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2xHcm91cENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIH1cbiAgICBnZXQgY29sdW1uc1RvUmVuZGVyKCkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1RvUmVuZGVyKHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIHRyYWNrQnkoaW5kZXgsIF9pdGVtKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG59XG5Db2xHcm91cENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZENvbEdyb3VwXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidHJ1ZVwiPlxuICAgICAgICA8Y29sIFtjbGFzcy5rLWdyb3VwLWNvbF09XCJ0cnVlXCIgKm5nRm9yPVwibGV0IGcgb2YgZ3JvdXBzXCIgLz5cbiAgICAgICAgPGNvbCBbY2xhc3Muay1oaWVyYXJjaHktY29sXT1cInRydWVcIiAqbmdJZj1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiLz5cbiAgICAgICAgPGNvbCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnNUb1JlbmRlcjsgdHJhY2tCeTogdHJhY2tCeTtcIiBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCIvPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuQ29sR3JvdXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBMb2FkaW5nQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGxvYWRpbmdUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdsb2FkaW5nJyk7XG4gICAgfVxufVxuTG9hZGluZ0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZExvYWRpbmddJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cImstbG9hZGluZy10ZXh0XCI+e3sgbG9hZGluZ1RleHQgfX08L3NwYW4+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWxvYWRpbmctaW1hZ2VcIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstbG9hZGluZy1jb2xvclwiPjwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTG9hZGluZ0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkxvYWRpbmdDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWxvYWRpbmctbWFzaycsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJlc2l6YWJsZUNvbnRhaW5lckRpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZWwsIHJlbmRlcmVyLCByZXNpemVTZXJ2aWNlLCBncmlkKSB7XG4gICAgICAgIHRoaXMuZWwgPSBlbDtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnJlc2l6ZVNlcnZpY2UgPSByZXNpemVTZXJ2aWNlO1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgc2V0IGxvY2tlZFdpZHRoKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2xvY2tlZFdpZHRoID0gdmFsdWU7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0YWNoUmVzaXplKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldCBrZW5kb0dyaWRSZXNpemFibGVDb250YWluZXIoZW5hYmxlZCkge1xuICAgICAgICBjb25zdCByZWZyZXNoID0gZW5hYmxlZCAhPT0gdGhpcy5lbmFibGVkO1xuICAgICAgICB0aGlzLmVuYWJsZWQgPSBlbmFibGVkO1xuICAgICAgICBpZiAocmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5hdHRhY2hSZXNpemUoKTtcbiAgICAgICAgICAgIHRoaXMucmVzaXplKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhdHRhY2hSZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiAmJiAhdGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yZXNpemVTdWJzY3JpcHRpb24gJiYgdGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVN1YnNjcmlwdGlvbiA9IHRoaXMucmVzaXplU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQgJiYgdGhpcy5ncmlkLndyYXBwZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdyaWQud3JhcHBlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChjb250YWluZXJFbGVtZW50LmNsaWVudFdpZHRoIC0gdGhpcy5fbG9ja2VkV2lkdGgsIDApO1xuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlZCAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJ3aWR0aFwiLCB3aWR0aCArIFwicHhcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJ3aWR0aFwiLCBcIlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblJlc2l6YWJsZUNvbnRhaW5lckRpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFJlc2l6YWJsZUNvbnRhaW5lcl0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblJlc2l6YWJsZUNvbnRhaW5lckRpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogUmVzaXplU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblJlc2l6YWJsZUNvbnRhaW5lckRpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBsb2NrZWRXaWR0aDogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsnbG9ja2VkV2lkdGgnLF0gfV0sXG4gICAga2VuZG9HcmlkUmVzaXphYmxlQ29udGFpbmVyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3Iodmlld0NvbnRhaW5lclJlZikge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYgPSB2aWV3Q29udGFpbmVyUmVmO1xuICAgIH1cbiAgICBzZXQgdGVtcGxhdGVDb250ZXh0KGNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVWaWV3KCk7XG4gICAgICAgIGlmIChjb250ZXh0LnRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydGVkVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGV4dC50ZW1wbGF0ZVJlZiwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlVmlldygpO1xuICAgIH1cbiAgICByZW1vdmVWaWV3KCkge1xuICAgICAgICBpZiAodGhpcy5pbnNlcnRlZFZpZXdSZWYpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5yZW1vdmUodGhpcy52aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcy5pbnNlcnRlZFZpZXdSZWYpKTtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0ZWRWaWV3UmVmID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdbdGVtcGxhdGVDb250ZXh0XScgLy8gdHNsaW50OmRpc2FibGUtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiB9XG5dO1xuVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRlbXBsYXRlQ29udGV4dDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGb2N1c0dyb3VwIHtcbiAgICBjb25zdHJ1Y3Rvcihyb290KSB7XG4gICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICB0aGlzLnJvb3QucmVnaXN0ZXJHcm91cCh0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGZvY3VzYWJsZUNoaWxkcmVuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maWx0ZXIoZWwgPT4gZWwuY2FuRm9jdXMoKSk7XG4gICAgfVxuICAgIGdldCBpc0FjdGl2ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5yb290LnVucmVnaXN0ZXJHcm91cCh0aGlzKTtcbiAgICB9XG4gICAgcmVnaXN0ZXJFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy51bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgdGhpcy5jaGlsZHJlbi5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgICB1bnJlZ2lzdGVyRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuLmZpbHRlcihmID0+IGYgIT09IGVsZW1lbnQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCBpbmRpY2F0ZXMgaWYgdGhlIGdyb3VwIHdpbGwgcmVjZWl2ZSBmb2N1cyB3aGVuIHRoZSBjZWxsIGlzIGZvY3VzZWQuXG4gICAgICogUmVxdWlyZXMgYSBzaW5nbGUgXCJzaW1wbGVcIiBmb2N1c2FibGUgZWxlbWVudCBzdWNoIGFzIGEgYnV0dG9uIG9yIGEgY2hlY2tib3guXG4gICAgICovXG4gICAgaXNOYXZpZ2FibGUoKSB7XG4gICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IHRoaXMuZm9jdXNhYmxlQ2hpbGRyZW47XG4gICAgICAgIHJldHVybiBmb2N1c2FibGUubGVuZ3RoID09PSAxICYmIGZvY3VzYWJsZVswXS5pc05hdmlnYWJsZSgpO1xuICAgIH1cbiAgICBjYW5Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9jdXNhYmxlQ2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgZm9jdXMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNhbkZvY3VzKCkgJiYgIXRoaXMuaGFzRm9jdXMoKSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2FibGVDaGlsZHJlblswXS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFjdGl2YXRlKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVN0YXRlKHRydWUpO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVN0YXRlKGZhbHNlKTtcbiAgICB9XG4gICAgaGFzRm9jdXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLnJlZHVjZSgoZm9jdXNlZCwgZWxlbWVudCkgPT4gZm9jdXNlZCB8fCBlbGVtZW50Lmhhc0ZvY3VzKCksIGZhbHNlKTtcbiAgICB9XG4gICAgdG9nZ2xlU3RhdGUoYWN0aXZlKSB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSAhPT0gYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGFjdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChmID0+IGYudG9nZ2xlKGFjdGl2ZSkpO1xuICAgICAgICB9XG4gICAgfVxufVxuRm9jdXNHcm91cC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRm9jdXNHcm91cC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZvY3VzUm9vdCB9XG5dO1xuXG5sZXQgaWQgPSAwO1xuZnVuY3Rpb24gbmV4dElkKCkge1xuICAgIHJldHVybiBpZCsrO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvZ2ljYWxDZWxsRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcihmb2N1c0dyb3VwLCBlbGVtZW50LCBjb2x1bW5JbmZvU2VydmljZSwgaWRTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSwgcmVuZGVyZXIsIHpvbmUsIGNlbGxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNHcm91cCA9IGZvY3VzR3JvdXA7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UgPSBjb2x1bW5JbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5pZFNlcnZpY2UgPSBpZFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuYXZpZ2F0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIHRoaXMubG9naWNhbFNsYXZlQ2VsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbFNwYW4gPSAxO1xuICAgICAgICB0aGlzLnJvd1NwYW4gPSAxO1xuICAgICAgICB0aGlzLmRhdGFSb3dJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLmRldGFpbEV4cGFuZENlbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy51aWQgPSBuZXh0SWQoKTtcbiAgICB9XG4gICAgZ2V0IGlkKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9naWNhbFNsYXZlQ2VsbCAmJiB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pZFNlcnZpY2UuY2VsbElkKHRoaXMubG9naWNhbFJvd0luZGV4LCB0aGlzLmxvZ2ljYWxDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGFyaWFDb2xJbmRleCgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9naWNhbFNsYXZlQ2VsbCB8fCB0aGlzLmxvZ2ljYWxDb2xJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naWNhbENvbEluZGV4ICsgMTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ2hhbmdlID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoZSkgPT4gdGhpcy5vbk5hdmlnYXRpb25DaGFuZ2UoZSkpO1xuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5lbmFibGVkIHx8IHRoaXMubG9naWNhbENvbEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDb250ZXh0LmZvY3VzR3JvdXAgPSB0aGlzLmZvY3VzR3JvdXA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3Rlck5vQ2hhbmdlcygpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNoYW5nZXMpO1xuICAgICAgICBpZiAoKGtleXMubGVuZ3RoID09PSAxICYmIGtleXNbMF0gPT09ICdncm91cEl0ZW0nKSB8fCB0aGlzLmxvZ2ljYWxDb2xJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBncm91cEl0ZW0gY2hhbmdlcyBhcyB0aGUgcmVmZXJlbmNlIGlzIG5vdCBzdGFibGVcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleENoYW5nZSA9IGNoYW5nZXMubG9naWNhbENvbEluZGV4O1xuICAgICAgICBjb25zdCByb3dJbmRleENoYW5nZSA9IGNoYW5nZXMubG9naWNhbFJvd0luZGV4O1xuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4Q2hhbmdlICYmICFpbmRleENoYW5nZS5pc0ZpcnN0Q2hhbmdlKCkgPyBpbmRleENoYW5nZS5wcmV2aW91c1ZhbHVlIDogdGhpcy5sb2dpY2FsQ29sSW5kZXg7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93SW5kZXhDaGFuZ2UgJiYgIXJvd0luZGV4Q2hhbmdlLmlzRmlyc3RDaGFuZ2UoKSA/IHJvd0luZGV4Q2hhbmdlLnByZXZpb3VzVmFsdWUgOiB0aGlzLmxvZ2ljYWxSb3dJbmRleDtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS51bnJlZ2lzdGVyQ2VsbChpbmRleCwgcm93SW5kZXgsIHRoaXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb25DaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNoYW5nZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UudW5yZWdpc3RlckNlbGwodGhpcy5sb2dpY2FsQ29sSW5kZXgsIHRoaXMubG9naWNhbFJvd0luZGV4LCB0aGlzKTtcbiAgICB9XG4gICAgb25OYXZpZ2F0aW9uQ2hhbmdlKGUpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlID0gdGhpcy5sb2dpY2FsQ29sSW5kZXggPT09IGUuY29sSW5kZXggJiYgdGhpcy5sb2dpY2FsUm93SW5kZXggPT09IGUucm93SW5kZXg7XG4gICAgICAgIGNvbnN0IHdhc0FjdGl2ZSA9IHRoaXMubG9naWNhbENvbEluZGV4ID09PSBlLnByZXZDb2xJbmRleCAmJiB0aGlzLmxvZ2ljYWxSb3dJbmRleCA9PT0gZS5wcmV2Um93SW5kZXg7XG4gICAgICAgIGlmIChhY3RpdmUgfHwgd2FzQWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVFbGVtZW50KCkge1xuICAgICAgICBjb25zdCBlbCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShlbCwgJ3RhYkluZGV4JywgdGhpcy5pc0ZvY3VzYWJsZSgpICYmICF0aGlzLmxvZ2ljYWxTbGF2ZUNlbGwgPyAnMCcgOiAnLTEnKTtcbiAgICAgICAgaWYgKHRoaXMuaXNGb2N1c2VkKCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzR3JvdXAuaXNOYXZpZ2FibGUoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNHcm91cC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvZ2ljYWxTbGF2ZUNlbGwgJiYgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hdXRvRm9jdXNDZWxsKHRoaXMubG9naWNhbENvbEluZGV4LCB0aGlzLmxvZ2ljYWxDb2xJbmRleCArIHRoaXMuY29sU3BhbiAtIDEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWljcm90YXNrKCgpID0+IHRoaXMuaXNGb2N1c2VkKCkgJiYgZWwuZm9jdXMoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWwsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWwsICdrLXN0YXRlLWZvY3VzZWQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBtaWNyb3Rhc2soY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IFByb21pc2UucmVzb2x2ZShudWxsKS50aGVuKGNhbGxiYWNrKSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyQ2hhbmdlcygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmxvZ2ljYWxTbGF2ZUNlbGwpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVnaXN0ZXJDZWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZ2lzdGVyTm9DaGFuZ2VzKCkge1xuICAgICAgICBpZiAoIXRoaXMubG9naWNhbFNsYXZlQ2VsbCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZWdpc3RlckNlbGxPbkN1cnJlbnRSb3codGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaXNGb2N1c2FibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmlzQ2VsbEZvY3VzYWJsZSh0aGlzKTtcbiAgICB9XG4gICAgaXNGb2N1c2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pc0NlbGxGb2N1c2VkKHRoaXMpO1xuICAgIH1cbn1cbkxvZ2ljYWxDZWxsRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRm9jdXNHcm91cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlcHM6IFtGb2N1c1Jvb3RdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ2xhc3M6IEZvY3VzR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkTG9naWNhbENlbGxdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2dpY2FsQ2VsbERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEZvY3VzR3JvdXAgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJZFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogdW5kZWZpbmVkLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW0NFTExfQ09OVEVYVCxdIH1dIH1cbl07XG5Mb2dpY2FsQ2VsbERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBsb2dpY2FsQ29sSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvZ2ljYWxSb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFNsYXZlQ2VsbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sSW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbFNwYW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvd1NwYW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwSXRlbTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YVJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhSXRlbTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGV0YWlsRXhwYW5kQ2VsbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuaWQnLF0gfV0sXG4gICAgYXJpYUNvbEluZGV4OiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmFyaWEtY29saW5kZXgnLF0gfV1cbn07XG5cbmxldCBpZCQxID0gMDtcbmZ1bmN0aW9uIG5leHRJZCQxKCkge1xuICAgIHJldHVybiBpZCQxKys7XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9naWNhbFJvd0RpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoaWRTZXJ2aWNlLCBuYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaWRTZXJ2aWNlID0gaWRTZXJ2aWNlO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSBuYXZpZ2F0aW9uO1xuICAgICAgICB0aGlzLmxvZ2ljYWxTbGF2ZVJvdyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvZ2ljYWxTbGF2ZUNlbGxzQ291bnQgPSAwO1xuICAgICAgICB0aGlzLmRhdGFSb3dJbmRleCA9IC0xO1xuICAgICAgICB0aGlzLnVpZCA9IG5leHRJZCQxKCk7XG4gICAgfVxuICAgIGdldCBob3N0Um9sZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9naWNhbFNsYXZlUm93ID8gJ3ByZXNlbnRhdGlvbicgOiAncm93JztcbiAgICB9XG4gICAgZ2V0IGFyaWFSb3dJbmRleCgpIHtcbiAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbi5lbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2dpY2FsUm93SW5kZXggKyAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBhcmlhT3ducygpIHtcbiAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb24uZW5hYmxlZCB8fCB0aGlzLmxvZ2ljYWxTbGF2ZVJvdyB8fCB0aGlzLmxvZ2ljYWxTbGF2ZUNlbGxzQ291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaWRzID0gW107XG4gICAgICAgIGNvbnN0IHRvdGFsID0gdGhpcy5sb2dpY2FsQ2VsbHNDb3VudCArIHRoaXMubG9naWNhbFNsYXZlQ2VsbHNDb3VudDtcbiAgICAgICAgZm9yIChsZXQgY2VsbEluZGV4ID0gdGhpcy5sb2dpY2FsQ2VsbHNDb3VudDsgY2VsbEluZGV4IDwgdG90YWw7IGNlbGxJbmRleCsrKSB7XG4gICAgICAgICAgICBpZHMucHVzaCh0aGlzLmlkU2VydmljZS5jZWxsSWQodGhpcy5sb2dpY2FsUm93SW5kZXgsIGNlbGxJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpZHMuam9pbignICcpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmICghdGhpcy5uYXZpZ2F0aW9uLmVuYWJsZWQgfHwgdGhpcy5sb2dpY2FsU2xhdmVSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleENoYW5nZSA9IGNoYW5nZXMubG9naWNhbFJvd0luZGV4O1xuICAgICAgICBjb25zdCBsb2dpY2FsU2xhdmVSb3dDaGFuZ2UgPSBjaGFuZ2VzLmxvZ2ljYWxTbGF2ZVJvdztcbiAgICAgICAgaWYgKGluZGV4Q2hhbmdlIHx8IGxvZ2ljYWxTbGF2ZVJvd0NoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleENoYW5nZSAmJiAhaW5kZXhDaGFuZ2UuaXNGaXJzdENoYW5nZSgpID8gaW5kZXhDaGFuZ2UucHJldmlvdXNWYWx1ZSA6IHRoaXMubG9naWNhbFJvd0luZGV4O1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLnVucmVnaXN0ZXJSb3coaW5kZXgsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uLnJlZ2lzdGVyUm93KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGFueUNoYW5nZWQoWydkYXRhUm93SW5kZXgnLCAnZGF0YUl0ZW0nXSwgY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbi51cGRhdGVSb3codGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbi51bnJlZ2lzdGVyUm93KHRoaXMubG9naWNhbFJvd0luZGV4LCB0aGlzKTtcbiAgICB9XG59XG5Mb2dpY2FsUm93RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkTG9naWNhbFJvd10nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxvZ2ljYWxSb3dEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBJZFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH1cbl07XG5Mb2dpY2FsUm93RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGxvZ2ljYWxSb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFNsYXZlUm93OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2dpY2FsQ2VsbHNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbG9naWNhbFNsYXZlQ2VsbHNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGF0YVJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhSXRlbTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaG9zdFJvbGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIucm9sZScsXSB9XSxcbiAgICBhcmlhUm93SW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1yb3dpbmRleCcsXSB9XSxcbiAgICBhcmlhT3duczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLW93bnMnLF0gfV1cbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOnBpcGUtbmFtaW5nICovXG5jb25zdCBGT1JNQVRfUkVHRVggPSAvXFx7XFxkKzo/Lztcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWVsZEFjY2Vzc29yUGlwZSB7XG4gICAgY29uc3RydWN0b3IoaW50bFNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5pbnRsU2VydmljZSA9IGludGxTZXJ2aWNlO1xuICAgIH1cbiAgICB0cmFuc2Zvcm0oZGF0YUl0ZW0sIGZpZWxkTmFtZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghaXNOdWxsT3JFbXB0eVN0cmluZyhmaWVsZE5hbWUpKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGdldHRlcihmaWVsZE5hbWUpKGRhdGFJdGVtKTtcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JFbXB0eVN0cmluZyhmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0VmFsdWUoZm9ybWF0LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFJdGVtO1xuICAgIH1cbiAgICBmb3JtYXRWYWx1ZShmb3JtYXQsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGludGwgPSB0aGlzLmludGxTZXJ2aWNlO1xuICAgICAgICBpZiAoaXNTdHJpbmcoZm9ybWF0KSAmJiBmb3JtYXQubWF0Y2goRk9STUFUX1JFR0VYKSkge1xuICAgICAgICAgICAgcmV0dXJuIGludGwuZm9ybWF0KGZvcm1hdCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnRsLnRvU3RyaW5nKHZhbHVlLCBmb3JtYXQpO1xuICAgIH1cbn1cbkZpZWxkQWNjZXNzb3JQaXBlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBQaXBlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIG5hbWU6ICd2YWx1ZU9mJyxcbiAgICAgICAgICAgICAgICBwdXJlOiBmYWxzZVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWVsZEFjY2Vzc29yUGlwZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEludGxTZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjb2x1bW5zVG9SZXNpemUgPSAoeyBjb2x1bW5zIH0pID0+IE1hdGgubWF4KDEsIHJlc2l6YWJsZUNvbHVtbnMoY29sdW1ucykubGVuZ3RoKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCByb3cgPSBzZWxlY3RvciA9PiBlbGVtZW50ID0+IGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGVhZGVyUm93ID0gaW5kZXggPT4gZWxlbWVudCA9PiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoZWFkPnRyJylbaW5kZXhdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNlbGwgPSAoaW5kZXgsIHNlbGVjdG9yID0gJ3RkJykgPT4gZWxlbWVudCA9PiBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCR7c2VsZWN0b3J9Om5vdCguay1ncm91cC1jZWxsKTpub3QoLmstaGllcmFyY2h5LWNlbGwpYClbaW5kZXhdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG9mZnNldFdpZHRoID0gZWxlbWVudCA9PiBlbGVtZW50Lm9mZnNldFdpZHRoO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHBpcGUgPSAoLi4uZm5zKSA9PiBkYXRhID0+IGZucy5yZWR1Y2UoKHN0YXRlJCQxLCBmbikgPT4gc3RhdGUkJDEgPyBmbihzdGF0ZSQkMSkgOiAwLCBkYXRhKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBUYWJsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgcmVuZGVyZXIsIHNlcnZpY2UsIHpvbmUsIGNkcikge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZpcnN0UmVzaXplID0gZmFsc2U7XG4gICAgfVxuICAgIGdldCBtaW5XaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RSZXNpemUgPyAwIDogbnVsbDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IG9icyA9IHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLmNoYW5nZXMucGlwZShmaWx0ZXIoZSA9PiB0aGlzLmxvY2tlZCA9PT0gZS5sb2NrZWQpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSBvYnMucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICdzdGFydCcpLCB0YXAodGhpcy5pbml0U3RhdGUuYmluZCh0aGlzKSksIG1hcChjb2x1bW5zVG9SZXNpemUpLCBzd2l0Y2hNYXAoKHRha2UkJDEpID0+IG9icy5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Jlc2l6ZVRhYmxlJyksIG1hcChlID0+IGUuZGVsdGEpLCBidWZmZXJDb3VudCh0YWtlJCQxKSkpKS5zdWJzY3JpYmUodGhpcy5yZXNpemUuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuYXV0b0ZpdFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZVxuICAgICAgICAgICAgLnJlZ2lzdGVyVGFibGUoe1xuICAgICAgICAgICAgYXV0b0ZpdDogdGhpcy5hdXRvRml0T2JzZXJ2YWJsZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgbG9ja2VkOiB0aGlzLmxvY2tlZFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hdXRvRml0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9GaXRTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b0ZpdFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdFN0YXRlKCkge1xuICAgICAgICB0aGlzLmZpcnN0UmVzaXplID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnZpcnR1YWxDb2x1bW5zIHx8IHRoaXMubG9ja2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpbmFsV2lkdGggPSBvZmZzZXRXaWR0aCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVzaXplKGRlbHRhcykge1xuICAgICAgICBpZiAoIXRoaXMudmlydHVhbENvbHVtbnMgfHwgdGhpcy5sb2NrZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gZGVsdGFzLnJlZHVjZSgoc3VtLCBpdGVtKSA9PiBzdW0gKyBpdGVtLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5vcmlnaW5hbFdpZHRoICsgZGVsdGE7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnd2lkdGgnLCB3aWR0aCArICdweCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgYXV0b0ZpdE9ic2VydmFibGUoY29sdW1uSW5mbykge1xuICAgICAgICByZXR1cm4gT2JzZXJ2YWJsZS5jcmVhdGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnay1hdXRvZml0dGluZycpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB3aWR0aHMgPSBjb2x1bW5JbmZvLm1hcCh0aGlzLm1lYXN1cmVDb2x1bW4uYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2stYXV0b2ZpdHRpbmcnKTtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHdpZHRocyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1lYXN1cmVDb2x1bW4oaW5mbykge1xuICAgICAgICBjb25zdCBkb20gPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gcGlwZShoZWFkZXJSb3coaW5mby5sZXZlbCksIGNlbGwoaW5mby5oZWFkZXJJbmRleCwgJ3RoJyksIG9mZnNldFdpZHRoKShkb20pO1xuICAgICAgICBsZXQgZGF0YSA9IDA7XG4gICAgICAgIGlmICghaW5mby5pc1BhcmVudFNwYW4gfHwgKGluZm8uaXNQYXJlbnRTcGFuICYmIGluZm8uaXNMYXN0SW5TcGFuKSkge1xuICAgICAgICAgICAgZGF0YSA9IHBpcGUocm93KCd0Ym9keT50cjpub3QoLmstZ3JvdXBpbmctcm93KTpub3QoLmstZ3JpZC1ub3JlY29yZHMpJyksIGNlbGwoaW5mby5pbmRleCksIG9mZnNldFdpZHRoKShkb20pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IHBpcGUocm93KCd0Zm9vdD50cicpLCBjZWxsKGluZm8uaW5kZXgpLCBvZmZzZXRXaWR0aCkoZG9tKTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGhlYWRlciwgZGF0YSwgZm9vdGVyKTtcbiAgICB9XG59XG5UYWJsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAndGFibGUnIC8vIHRzbGludDpkaXNhYmxlLWxpbmU6ZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRhYmxlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblRhYmxlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGxvY2tlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdmlydHVhbENvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbldpZHRoOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5taW4td2lkdGgnLF0gfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyA9IFtcbiAgICBDb2x1bW5Db21wb25lbnQsXG4gICAgQ29sdW1uR3JvdXBDb21wb25lbnQsXG4gICAgTG9naWNhbENlbGxEaXJlY3RpdmUsXG4gICAgTG9naWNhbFJvd0RpcmVjdGl2ZSxcbiAgICBGb2N1c2FibGVEaXJlY3RpdmUsXG4gICAgRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgQ29sR3JvdXBDb21wb25lbnQsXG4gICAgUmVzaXphYmxlQ29udGFpbmVyRGlyZWN0aXZlLFxuICAgIFRlbXBsYXRlQ29udGV4dERpcmVjdGl2ZSxcbiAgICBGaWVsZEFjY2Vzc29yUGlwZSxcbiAgICBEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBTcGFuQ29sdW1uQ29tcG9uZW50LFxuICAgIFRhYmxlRGlyZWN0aXZlLFxuICAgIExvYWRpbmdDb21wb25lbnRcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU2hhcmVkTW9kdWxlIHtcbiAgICBzdGF0aWMgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIENvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgICAgIFNwYW5Db2x1bW5Db21wb25lbnQsXG4gICAgICAgICAgICBDb2x1bW5Hcm91cENvbXBvbmVudCxcbiAgICAgICAgICAgIEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgRGV0YWlsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBGb2N1c2FibGVEaXJlY3RpdmVcbiAgICAgICAgXTtcbiAgICB9XG59XG5TaGFyZWRNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2V4cG9ydGVkTW9kdWxlc10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcywgRHJhZ2dhYmxlTW9kdWxlLCBFdmVudHNNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYENvbnRhaW5zYCAoKipDb250YWlucyoqKSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIENvbnRhaW5zRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImNvbnRhaW5zXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbkNvbnRhaW5zRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29udGFpbnNGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItY29udGFpbnMtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db250YWluc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBEb2VzTm90Q29udGFpbmAgKCoqRG9lcyBub3QgY29udGFpbioqKSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIERvZXNOb3RDb250YWluRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImRvZXNub3Rjb250YWluXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbkRvZXNOb3RDb250YWluRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRG9lc05vdENvbnRhaW5GaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItbm90LWNvbnRhaW5zLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRG9lc05vdENvbnRhaW5GaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgRW5kc1dpdGhgICgqKkVuZHMgd2l0aCoqKSBzdHJpbmcgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBFbmRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJlbmRzd2l0aFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5FbmRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEVuZHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRW5kc1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgRXF1YWxgICgqKklzIGVxdWFsIHRvKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgRXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiZXFcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuRXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFcXVhbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkVxdWFsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYElzRW1wdHlgICgqKklzIGVtcHR5KiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgSXNFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJpc2VtcHR5XCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbklzRW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJc0VtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWlzZW1wdHktb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Jc0VtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYElzTm90RW1wdHlgICgqKklzIG5vdCBlbXB0eSoqKSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIElzTm90RW1wdHlGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiaXNub3RlbXB0eVwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5Jc05vdEVtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSXNOb3RFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1pc25vdGVtcHR5LW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSXNOb3RFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBJc05vdE51bGxgICgqKklzIG5vdCBudWxsKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgSXNOb3ROdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcImlzbm90bnVsbFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5Jc05vdE51bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBJc05vdE51bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSXNOb3ROdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYElzTnVsbGAgKCoqSXMgbnVsbCoqKSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIElzTnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJpc251bGxcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuSXNOdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gSXNOdWxsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbklzTnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBOb3RFcXVhbGAgKCoqSXMgbm90IGVxdWFsIHRvKiopIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwibmVxXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbk5vdEVxdWFsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgU3RhcnRzV2l0aGAgKCoqU3RhcnRzIHdpdGgqKikgZmlsdGVyIG9wZXJhdG9yLlxuICpcbiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcywgcmVmZXIgdG86XG4gKiAqIFtTZXR0aW5nIHRoZSBkZWZhdWx0IGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLWRlZmF1bHQtZmlsdGVyLW9wZXJhdG9yKVxuICogKiBbU2V0dGluZyB0aGUgb3JkZXIgb2YgdGhlIGZpbHRlciBvcGVyYXRvcnNdKHslIHNsdWcgYnVpbHRpbmZpbHRlcnRlbXBsYXRlX2dyaWQgJX0jdG9jLXNldHRpbmctdGhlLW9yZGVyLW9mLXRoZS1maWx0ZXItb3BlcmF0b3JzKVxuICovXG5jbGFzcyBTdGFydHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJPcGVyYXRvckJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikgeyBzdXBlcihcInN0YXJ0c3dpdGhcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuU3RhcnRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFN0YXJ0c1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN0YXJ0c1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGBHcmVhdGVyYCAoKipJcyBncmVhdGVyIHRoYW4qKikgbnVtZXJpYyBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIEdyZWF0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiZ3RcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuR3JlYXRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdyZWF0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3InLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5HcmVhdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYEdyZWF0ZXJPckVxdWFsVG9gICgqKklzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byoqKSBudW1lcmljIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgR3JlYXRlck9yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJndGVcIiwgbG9jYWxpemF0aW9uKTsgfVxufVxuR3JlYXRlck9yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEdyZWF0ZXJPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JlYXRlck9yRXF1YWxUb0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgYExlc3NgICgqKklzIGxlc3MgdGhhbioqKSBudW1lcmljIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgTGVzc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJsdFwiLCBsb2NhbGl6YXRpb24pOyB9XG59XG5MZXNzRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTGVzc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1sdC1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxlc3NGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGBMZXNzT3JFcXVhbFRvYCAoKipJcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8qKikgbnVtZXJpYyBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIExlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwibHRlXCIsIGxvY2FsaXphdGlvbik7IH1cbn1cbkxlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBMZXNzT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkxlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLypcbiAqIFJlcHJlc2VudHMgdGhlIGBHcmVhdGVyYCAoKipJcyBhZnRlcioqKSBkYXRlIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgQWZ0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiYWZ0ZXJcIiwgbG9jYWxpemF0aW9uKTsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogXCJndFwiXG4gICAgICAgIH07XG4gICAgfVxufVxuQWZ0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZnRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWZpbHRlci1hZnRlci1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkFmdGVyRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBgR3JlYXRlck9yRXF1YWxUb2AgKCoqSXMgYWZ0ZXIgb3IgZXF1YWwgdG8qKikgZGF0ZSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIEFmdGVyRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiYWZ0ZXItZXFcIiwgbG9jYWxpemF0aW9uKTsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogXCJndGVcIlxuICAgICAgICB9O1xuICAgIH1cbn1cbkFmdGVyRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBGaWx0ZXJPcGVyYXRvckJhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBBZnRlckVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWFmdGVyLWVxLW9wZXJhdG9yJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQWZ0ZXJFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG4vKlxuICogUmVwcmVzZW50cyB0aGUgYExlc3NPckVxdWFsVG9gICgqKklzIGJlZm9yZSBvciBlcXVhbCB0byoqKSBkYXRlIGZpbHRlciBvcGVyYXRvci5cbiAqXG4gKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogKiBbU2V0dGluZyB0aGUgZGVmYXVsdCBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1kZWZhdWx0LWZpbHRlci1vcGVyYXRvcilcbiAqICogW1NldHRpbmcgdGhlIG9yZGVyIG9mIHRoZSBmaWx0ZXIgb3BlcmF0b3JzXSh7JSBzbHVnIGJ1aWx0aW5maWx0ZXJ0ZW1wbGF0ZV9ncmlkICV9I3RvYy1zZXR0aW5nLXRoZS1vcmRlci1vZi10aGUtZmlsdGVyLW9wZXJhdG9ycylcbiAqL1xuY2xhc3MgQmVmb3JlRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCBleHRlbmRzIEZpbHRlck9wZXJhdG9yQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7IHN1cGVyKFwiYmVmb3JlLWVxXCIsIGxvY2FsaXphdGlvbik7IH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dDogdGhpcy50ZXh0LFxuICAgICAgICAgICAgdmFsdWU6IFwibHRlXCJcbiAgICAgICAgfTtcbiAgICB9XG59XG5CZWZvcmVFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEZpbHRlck9wZXJhdG9yQmFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJlZm9yZUVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWJlZm9yZS1lcS1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJlZm9yZUVxRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5cbi8qXG4gKiBSZXByZXNlbnRzIHRoZSBgTGVzcyB0aGVuYCAoKipJcyBiZWZvcmUqKikgZGF0ZSBmaWx0ZXIgb3BlcmF0b3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzLCByZWZlciB0bzpcbiAqICogW1NldHRpbmcgdGhlIGRlZmF1bHQgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtZGVmYXVsdC1maWx0ZXItb3BlcmF0b3IpXG4gKiAqIFtTZXR0aW5nIHRoZSBvcmRlciBvZiB0aGUgZmlsdGVyIG9wZXJhdG9yc10oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2Mtc2V0dGluZy10aGUtb3JkZXItb2YtdGhlLWZpbHRlci1vcGVyYXRvcnMpXG4gKi9cbmNsYXNzIEJlZm9yZUZpbHRlck9wZXJhdG9yQ29tcG9uZW50IGV4dGVuZHMgRmlsdGVyT3BlcmF0b3JCYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHsgc3VwZXIoXCJiZWZvcmVcIiwgbG9jYWxpemF0aW9uKTsgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRleHQsXG4gICAgICAgICAgICB2YWx1ZTogXCJsdFwiXG4gICAgICAgIH07XG4gICAgfVxufVxuQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogRmlsdGVyT3BlcmF0b3JCYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZmlsdGVyLWJlZm9yZS1vcGVyYXRvcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJlZm9yZUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG5jb25zdCBGSUxURVJfT1BFUkFUT1JTID0gW1xuICAgIEZpbHRlckNlbGxPcGVyYXRvcnNDb21wb25lbnQsXG4gICAgQ29udGFpbnNGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBEb2VzTm90Q29udGFpbkZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEVuZHNXaXRoRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgRXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBJc0VtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgSXNOb3RFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIElzTm90TnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIElzTnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIE5vdEVxdWFsRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgU3RhcnRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEdyZWF0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBHcmVhdGVyT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsXG4gICAgTGVzc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIExlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBBZnRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEFmdGVyRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCxcbiAgICBCZWZvcmVFcUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LFxuICAgIEJlZm9yZUZpbHRlck9wZXJhdG9yQ29tcG9uZW50XG5dO1xuY29uc3QgaW1wb3J0ZWRNb2R1bGVzID0gW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIERyb3BEb3duTGlzdE1vZHVsZSxcbiAgICBBdXRvQ29tcGxldGVNb2R1bGUsXG4gICAgSW5wdXRzTW9kdWxlLFxuICAgIERhdGVQaWNrZXJNb2R1bGUsXG4gICAgUG9wdXBNb2R1bGUsXG4gICAgU2hhcmVkTW9kdWxlXG5dO1xuY29uc3QgQ09NUE9ORU5UUyA9IFtcbiAgICBGaWx0ZXJJbnB1dERpcmVjdGl2ZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTaGFyZWRGaWx0ZXJNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uRklMVEVSX09QRVJBVE9SU1xuICAgICAgICBdO1xuICAgIH1cbn1cblNoYXJlZEZpbHRlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbRklMVEVSX09QRVJBVE9SUywgQ09NUE9ORU5UU10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0ZJTFRFUl9PUEVSQVRPUlMsIGltcG9ydGVkTW9kdWxlcywgQ09NUE9ORU5UU10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogWy4uLmltcG9ydGVkTW9kdWxlc11cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlckhvc3REaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIHJlc29sdmVyKSB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgICAgIHRoaXMucmVzb2x2ZXIgPSByZXNvbHZlcjtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gdGhpcy5ob3N0LmNyZWF0ZUNvbXBvbmVudCh0aGlzLnJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KHRoaXMuY29tcG9uZW50VHlwZSgpKSk7XG4gICAgICAgIHRoaXMuaW5pdENvbXBvbmVudCh7XG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlclxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGFueUNoYW5nZWQoW1wiY29sdW1uXCIsIFwiZmlsdGVyXCJdLCBjaGFuZ2VzKSkge1xuICAgICAgICAgICAgdGhpcy5pbml0Q29tcG9uZW50KHtcbiAgICAgICAgICAgICAgICBjb2x1bW46IHRoaXMuY29sdW1uLFxuICAgICAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRDb21wb25lbnQoeyBjb2x1bW4sIGZpbHRlcjogZmlsdGVyJCQxIH0pIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UuY29sdW1uID0gY29sdW1uO1xuICAgICAgICBpbnN0YW5jZS5maWx0ZXIgPSBmaWx0ZXIkJDE7XG4gICAgfVxufVxuRmlsdGVySG9zdERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICpcbiAqID4gTGlzdCB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgaW4gdGhlIEdyaWRNb2R1bGUgYXMgYGVudHJ5Q29tcG9uZW50c2AuXG4gKi9cbmNvbnN0IGZpbHRlckNvbXBvbmVudEZhY3RvcnkgPSAodHlwZSkgPT4gKHtcbiAgICBcImJvb2xlYW5cIjogQm9vbGVhbkZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgXCJkYXRlXCI6IERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIFwibnVtZXJpY1wiOiBOdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICBcInRleHRcIjogU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudFxufVt0eXBlXSk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJDZWxsSG9zdERpcmVjdGl2ZSBleHRlbmRzIEZpbHRlckhvc3REaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGhvc3QsIHJlc29sdmVyKSB7XG4gICAgICAgIHN1cGVyKGhvc3QsIHJlc29sdmVyKTtcbiAgICB9XG4gICAgY29tcG9uZW50VHlwZSgpIHtcbiAgICAgICAgaWYgKCFpc051bGxPckVtcHR5U3RyaW5nKHRoaXMuY29sdW1uLmZpbHRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJDb21wb25lbnRGYWN0b3J5KHRoaXMuY29sdW1uLmZpbHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQ7XG4gICAgfVxufVxuRmlsdGVyQ2VsbEhvc3REaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0ZpbHRlckNlbGxIb3N0XSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRmlsdGVyQ2VsbEhvc3REaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBWaWV3Q29udGFpbmVyUmVmIH0sXG4gICAgeyB0eXBlOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIgfVxuXTtcblxuY29uc3QgSU5URVJOQUxfQ09NUE9ORU5UUyA9IFtcbiAgICBGaWx0ZXJSb3dDb21wb25lbnQsXG4gICAgRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICBGaWx0ZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgU3RyaW5nRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICBOdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICBBdXRvQ29tcGxldGVGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIEJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIEZpbHRlckNlbGxIb3N0RGlyZWN0aXZlLFxuICAgIEZpbHRlckNlbGxXcmFwcGVyQ29tcG9uZW50LFxuICAgIERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50XG5dO1xuY29uc3QgRU5UUllfQ09NUE9ORU5UUyA9IFtcbiAgICBTdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIE51bWVyaWNGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIEJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgIERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50XG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJvd0ZpbHRlck1vZHVsZSB7XG4gICAgc3RhdGljIGV4cG9ydHMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBGaWx0ZXJSb3dDb21wb25lbnQsXG4gICAgICAgICAgICBGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgICAgICAgICAgRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgRmlsdGVyQ2VsbE9wZXJhdG9yc0NvbXBvbmVudCxcbiAgICAgICAgICAgIFN0cmluZ0ZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgICAgICAgICBOdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICAgICAgICAgIEF1dG9Db21wbGV0ZUZpbHRlckNlbGxDb21wb25lbnQsXG4gICAgICAgICAgICBCb29sZWFuRmlsdGVyQ2VsbENvbXBvbmVudCxcbiAgICAgICAgICAgIERhdGVGaWx0ZXJDZWxsQ29tcG9uZW50LFxuICAgICAgICAgICAgU2hhcmVkRmlsdGVyTW9kdWxlLmV4cG9ydHMoKVxuICAgICAgICBdO1xuICAgIH1cbn1cblJvd0ZpbHRlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbSU5URVJOQUxfQ09NUE9ORU5UU10sXG4gICAgICAgICAgICAgICAgZW50cnlDb21wb25lbnRzOiBFTlRSWV9DT01QT05FTlRTLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtJTlRFUk5BTF9DT01QT05FTlRTLCBTaGFyZWRGaWx0ZXJNb2R1bGVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtTaGFyZWRGaWx0ZXJNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBub3JtYWxpemVTZXR0aW5ncyA9ICh7IGJ1dHRvbkNvdW50ID0gMTAsIGluZm8gPSB0cnVlLCB0eXBlID0gJ251bWVyaWMnLCBwYWdlU2l6ZXMgPSBmYWxzZSwgcHJldmlvdXNOZXh0ID0gdHJ1ZSB9KSA9PiAoe1xuICAgIGJ1dHRvbkNvdW50LFxuICAgIGluZm8sXG4gICAgcGFnZVNpemVzOiBwYWdlU2l6ZXMgPT09IHRydWUgPyBbNSwgMTAsIDIwXSA6IHBhZ2VTaXplcyxcbiAgICBwcmV2aW91c05leHQsXG4gICAgdHlwZVxufSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgbm9ybWFsaXplID0gKHNldHRpbmdzKSA9PiBub3JtYWxpemVTZXR0aW5ncyhzZXR0aW5ncyA9PT0gdHJ1ZSA/IHt9IDogc2V0dGluZ3MpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBhZ2VyQ29udGV4dCkge1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dCA9IHBhZ2VyQ29udGV4dDtcbiAgICAgICAgdGhpcy50b3RhbCA9IDA7XG4gICAgICAgIHRoaXMuc2tpcCA9IDE7XG4gICAgICAgIHRoaXMucGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IG5vcm1hbGl6ZSh7fSk7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dCA9IHt9O1xuICAgIH1cbiAgICBzZXQgb3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gbm9ybWFsaXplKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHBhZ2VyV3JhcENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGdyaWRQYWdlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHdpZGdldENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IHRvdGFsUGFnZXMoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoKHRoaXMudG90YWwgfHwgMCkgLyB0aGlzLnBhZ2VTaXplKTtcbiAgICB9XG4gICAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5za2lwIHx8IDApIC8gdGhpcy5wYWdlU2l6ZSkgKyAxO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDb250ZXh0KCkge1xuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5fdGVtcGxhdGVDb250ZXh0O1xuICAgICAgICBjb250ZXh0LnRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsUGFnZXM7XG4gICAgICAgIGNvbnRleHQudG90YWwgPSB0aGlzLnRvdGFsO1xuICAgICAgICBjb250ZXh0LnNraXAgPSB0aGlzLnNraXA7XG4gICAgICAgIGNvbnRleHQucGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICBjb250ZXh0LmN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnBhZ2VyQ29udGV4dC5wYWdlQ2hhbmdlLnN1YnNjcmliZSh0aGlzLmNoYW5nZVBhZ2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGFueUNoYW5nZWQoWydwYWdlU2l6ZScsICdza2lwJywgJ3RvdGFsJ10sIGNoYW5nZXMsIGZhbHNlKSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlckNvbnRleHQubm90aWZ5Q2hhbmdlcyh7XG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICAgICAgc2tpcDogdGhpcy5za2lwLFxuICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLnRvdGFsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hhbmdlUGFnZShldmVudCkge1xuICAgICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxufVxuUGFnZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXBhZ2VyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidGVtcGxhdGVDb250ZXh0XCI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPGtlbmRvLXBhZ2VyLXByZXYtYnV0dG9ucyAqbmdJZj1cInNldHRpbmdzLnByZXZpb3VzTmV4dFwiPjwva2VuZG8tcGFnZXItcHJldi1idXR0b25zPlxuICAgICAgICAgICAgPGtlbmRvLXBhZ2VyLW51bWVyaWMtYnV0dG9uc1xuICAgICAgICAgICAgICAgICpuZ0lmPVwic2V0dGluZ3MudHlwZSA9PT0gJ251bWVyaWMnXCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQ291bnRdPVwic2V0dGluZ3MuYnV0dG9uQ291bnRcIj5cbiAgICAgICAgICAgIDwva2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zPlxuICAgICAgICAgICAgPGtlbmRvLXBhZ2VyLWlucHV0ICpuZ0lmPVwic2V0dGluZ3MudHlwZSA9PT0gJ2lucHV0J1wiPjwva2VuZG8tcGFnZXItaW5wdXQ+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItbmV4dC1idXR0b25zICpuZ0lmPVwic2V0dGluZ3MucHJldmlvdXNOZXh0XCI+PC9rZW5kby1wYWdlci1uZXh0LWJ1dHRvbnM+XG4gICAgICAgICAgICA8a2VuZG8tcGFnZXItaW5mbyAqbmdJZj0nc2V0dGluZ3MuaW5mbyc+PC9rZW5kby1wYWdlci1pbmZvPlxuICAgICAgICAgICAgPGtlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXMgKm5nSWY9XCJzZXR0aW5ncy5wYWdlU2l6ZXNcIiBbcGFnZVNpemVzXT1cInNldHRpbmdzLnBhZ2VTaXplc1wiPjwva2VuZG8tcGFnZXItcGFnZS1zaXplcz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH1cbl07XG5QYWdlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0b3RhbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2tpcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcGFnZVNpemU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9wdGlvbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwYWdlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgcGFnZXJXcmFwQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstcGFnZXItd3JhcCcsXSB9XSxcbiAgICBncmlkUGFnZXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLXBhZ2VyJyxdIH1dLFxuICAgIHdpZGdldENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFBhZ2VyRWxlbWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dCA9IHBhZ2VyQ29udGV4dDtcbiAgICAgICAgdGhpcy5jZCA9IGNkO1xuICAgICAgICB0aGlzLnRvdGFsID0gdGhpcy5wYWdlckNvbnRleHQudG90YWw7XG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMucGFnZXJDb250ZXh0LnNraXA7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSB0aGlzLnBhZ2VyQ29udGV4dC5wYWdlU2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJFbGVtZW50Q29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRQYWdlKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5za2lwIHx8IDApIC8gdGhpcy5wYWdlU2l6ZSkgKyAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgICAqIEBtZW1iZXJPZiBQYWdlckVsZW1lbnRDb21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgdG90YWxQYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCgodGhpcy50b3RhbCB8fCAwKSAvIHRoaXMucGFnZVNpemUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKlxuICAgICAqIEBtZW1iZXJPZiBQYWdlckVsZW1lbnRDb21wb25lbnRcbiAgICAgKi9cbiAgICB0ZXh0Rm9yKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlXG4gICAgICpcbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJFbGVtZW50Q29tcG9uZW50XG4gICAgICovXG4gICAgY2hhbmdlUGFnZShwYWdlKSB7XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0LmNoYW5nZVBhZ2UocGFnZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQG1lbWJlck9mIFBhZ2VyRWxlbWVudENvbXBvbmVudFxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLnBhZ2VyQ29udGV4dC5jaGFuZ2VzLnN1YnNjcmliZSh0aGlzLm9uQ2hhbmdlcy5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkLm1hcmtGb3JDaGVjaygpKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG4vKipcbiAqIERpc3BsYXlzIGJ1dHRvbnMgZm9yIG5hdmlnYXRpbmcgdG8gdGhlIGZpcnN0IGFuZCB0byB0aGUgcHJldmlvdXMgcGFnZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9I3RvYy1wYWdlci10ZW1wbGF0ZXMpKS5cbiAqL1xuY2xhc3MgUGFnZXJQcmV2QnV0dG9uc0NvbXBvbmVudCBleHRlbmRzIFBhZ2VyRWxlbWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKSB7XG4gICAgICAgIHN1cGVyKGxvY2FsaXphdGlvbiwgcGFnZXJDb250ZXh0LCBjZCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBQYWdlclByZXZCdXR0b25zQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50UGFnZSA9PT0gMSB8fCAhdGhpcy50b3RhbDtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJQcmV2QnV0dG9uc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItcHJldi1idXR0b25zJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcigncGFnZXJGaXJzdFBhZ2UnKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY3VycmVudFBhZ2UgIT09IDEgPyBjaGFuZ2VQYWdlKDApIDogZmFsc2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdrLWxpbmsnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXBhZ2VyLW5hdic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stc3RhdGUtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnay1wYWdlci1maXJzdCc6IHRydWVcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dEZvcigncGFnZXJGaXJzdFBhZ2UnKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnay1pY29uJzp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnay1pLXNlZWstdyc6IHRydWVcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW3RpdGxlXT1cInRleHRGb3IoJ3BhZ2VyUHJldmlvdXNQYWdlJylcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImN1cnJlbnRQYWdlICE9PSAxID8gY2hhbmdlUGFnZShjdXJyZW50UGFnZS0yKSA6IGZhbHNlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnay1saW5rJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnay1wYWdlci1uYXYnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXN0YXRlLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJyc6IHRydWVcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dEZvcigncGFnZXJQcmV2aW91c1BhZ2UnKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnay1pY29uJzp0cnVlLFxuICAgICAgICAgICAgICAgICAgICAnay1pLWFycm93LXcnOiB0cnVlXG4gICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYWdlclByZXZCdXR0b25zQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUGFnZXJDb250ZXh0U2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblxuLy8gdHNsaW50OmRpc2FibGU6IG5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlclxuLyoqXG4gKiBEaXNwbGF5cyBidXR0b25zIGZvciBuYXZpZ2F0aW5nIHRvIHRoZSBuZXh0IGFuZCB0byB0aGUgbGFzdCBwYWdlIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGFnaW5nX2dyaWQgJX0jdG9jLXBhZ2VyLXRlbXBsYXRlKSkuXG4gKi9cbmNsYXNzIFBhZ2VyTmV4dEJ1dHRvbnNDb21wb25lbnQgZXh0ZW5kcyBQYWdlckVsZW1lbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgcGFnZXJDb250ZXh0LCBjZCkge1xuICAgICAgICBzdXBlcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICpcbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFBhZ2UgPT09IHRoaXMudG90YWxQYWdlcyB8fCAhdGhpcy50b3RhbDtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItbmV4dC1idXR0b25zJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcigncGFnZXJOZXh0UGFnZScpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSAhPT0gdG90YWxQYWdlcyA/IGNoYW5nZVBhZ2UoY3VycmVudFBhZ2UpIDogZmFsc2VcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICdrLWxpbmsnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXBhZ2VyLW5hdic6IHRydWUsXG4gICAgICAgICAgICAgICAgJ2stc3RhdGUtZGlzYWJsZWQnOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAnJzogdHJ1ZVxuICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgPHNwYW4gW2F0dHIuYXJpYS1sYWJlbF09XCJ0ZXh0Rm9yKCdwYWdlck5leHRQYWdlJylcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2staWNvbic6dHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2staS1hcnJvdy1lJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8YSAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcigncGFnZXJMYXN0UGFnZScpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjdXJyZW50UGFnZSAhPT0gdG90YWxQYWdlcyA/IGNoYW5nZVBhZ2UodG90YWxQYWdlcy0xKSA6IGZhbHNlXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAnay1saW5rJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAnay1wYWdlci1uYXYnOiB0cnVlLFxuICAgICAgICAgICAgICAgICdrLXN0YXRlLWRpc2FibGVkJzogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgJ2stcGFnZXItbGFzdCc6IHRydWVcbiAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDxzcGFuIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dEZvcigncGFnZXJMYXN0UGFnZScpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICdrLWljb24nOnRydWUsXG4gICAgICAgICAgICAgICAgICAgICdrLWktc2Vlay1lJzogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5cbi8qKlxuICogRGlzcGxheXMgbnVtZXJpYyBidXR0b25zIHRvIGVuYWJsZSBuYXZpZ2F0aW9uIGJldHdlZW4gdGhlIHBhZ2VzLlxuICovXG5jbGFzcyBQYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50IGV4dGVuZHMgUGFnZXJFbGVtZW50Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGNkLCBwYWdlckNvbnRleHQpIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKTtcbiAgICAgICAgdGhpcy5wYWdlckNvbnRleHQgPSBwYWdlckNvbnRleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtudW1iZXJbXX1cbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJOdW1lcmljQnV0dG9uc0NvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBidXR0b25zKCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgICAgIGZvciAobGV0IGlkeCA9IHRoaXMuc3RhcnQ7IGlkeCA8PSB0aGlzLmVuZDsgaWR4KyspIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlkeCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBlbmQoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbigodGhpcy5zdGFydCArIHRoaXMuYnV0dG9uQ291bnQpIC0gMSwgdGhpcy50b3RhbFBhZ2VzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzdGFydCgpIHtcbiAgICAgICAgY29uc3QgcGFnZSA9IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvdW50ID0gdGhpcy5idXR0b25Db3VudDtcbiAgICAgICAgaWYgKHBhZ2UgPiBidXR0b25Db3VudCkge1xuICAgICAgICAgICAgY29uc3QgcmVtaW5kZXIgPSAocGFnZSAlIGJ1dHRvbkNvdW50KTtcbiAgICAgICAgICAgIHJldHVybiAocmVtaW5kZXIgPT09IDApID8gKHBhZ2UgLSBidXR0b25Db3VudCkgKyAxIDogKHBhZ2UgLSByZW1pbmRlcikgKyAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcGFnZUxhYmVsKG51bSkge1xuICAgICAgICBjb25zdCBwYWdlVGV4dCA9IHRoaXMudGV4dEZvcigncGFnZXJQYWdlJyk7XG4gICAgICAgIGlmIChwYWdlVGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhZ2VUZXh0ICsgJyAnICsgbnVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW0udG9TdHJpbmcoKTtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJOdW1lcmljQnV0dG9uc0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgIDx1bCBbbmdDbGFzc109XCJ7J2stcGFnZXItbnVtYmVycyc6IHRydWUsICdrLXJlc2V0JzogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cInN0YXJ0ID4gMVwiPlxuICAgICAgICAgICAgICAgIDxhICBjbGFzcz1cImstbGlua1wiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwicGFnZUxhYmVsKHN0YXJ0IC0gMSlcIlxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiI1wiXG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFnZShzdGFydCAtIDIpXCI+Li4uPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgbnVtIG9mIGJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8YSAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInBhZ2VMYWJlbChudW0pXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnay1saW5rJzogdHJ1ZSwgJ2stc3RhdGUtc2VsZWN0ZWQnOmN1cnJlbnRQYWdlID09IG51bX1cIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlUGFnZShudW0gLSAxKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e251bX19XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaSAqbmdJZj1cImVuZCA8IHRvdGFsUGFnZXNcIj5cbiAgICAgICAgICAgICAgICA8YSAgY2xhc3M9XCJrLWxpbmtcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInBhZ2VMYWJlbChlbmQgKyAxKVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjaGFuZ2VQYWdlKGVuZClcIj4uLi48L2E+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFnZXJOdW1lcmljQnV0dG9uc0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH1cbl07XG5QYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGJ1dHRvbkNvdW50OiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBEaXNwbGF5cyBhbiBpbnB1dCBlbGVtZW50IHdoaWNoIGFsbG93cyB0aGUgdHlwaW5nIGFuZCByZW5kZXJpbmcgb2YgcGFnZSBudW1iZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICA8a2VuZG8tZ3JpZFxuICogICAgICAgIFtrZW5kb0dyaWRCaW5kaW5nXT1cImdyaWREYXRhXCJcbiAqICAgICAgICBbcGFnZVNpemVdPVwiMVwiXG4gKiAgICAgICAgW3BhZ2VhYmxlXT1cInRydWVcIlxuICogICAgICA+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIklEXCIgd2lkdGg9XCI0MFwiPlxuICogICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJOYW1lXCIgd2lkdGg9XCIyNTBcIj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlByaWNlXCIgd2lkdGg9XCI4MFwiIGZvcm1hdD1cInswOmN9XCI+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICpcbiAqICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1BhZ2VyVGVtcGxhdGUgbGV0LXRvdGFsUGFnZXM9XCJ0b3RhbFBhZ2VzXCIgbGV0LWN1cnJlbnRQYWdlPVwiY3VycmVudFBhZ2VcIj5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+PC9rZW5kby1wYWdlci1wcmV2LWJ1dHRvbnM+XG4gKiAgICAgICAgICA8a2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zIFtidXR0b25Db3VudF09XCIxMFwiPjwva2VuZG8tcGFnZXItbnVtZXJpYy1idXR0b25zPlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLW5leHQtYnV0dG9ucz48L2tlbmRvLXBhZ2VyLW5leHQtYnV0dG9ucz5cbiAqICAgICAgICAgIDxrZW5kby1wYWdlci1pbnB1dD48L2tlbmRvLXBhZ2VyLWlucHV0PlxuICogICAgICAgICAgPGtlbmRvLXBhZ2VyLWluZm8+PC9rZW5kby1wYWdlci1pbmZvPlxuICogICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqXG4gKiAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBncmlkRGF0YSA9IFt7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDAsXG4gKiAgICAgICAgIFwiRGlzY29udGludWVkXCI6IGZhbHNlXG4gKiAgICAgICB9LCB7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFuZ1wiLFxuICogICAgICAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgICAgICBcIkRpc2NvbnRpbnVlZFwiOiB0cnVlXG4gKiAgICAgICB9XG4gKiAgICAgXTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgUGFnZXJJbnB1dENvbXBvbmVudCBleHRlbmRzIFBhZ2VyRWxlbWVudENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIHpvbmUsIGNkKSB7XG4gICAgICAgIHN1cGVyKGxvY2FsaXphdGlvbiwgcGFnZXJDb250ZXh0LCBjZCk7XG4gICAgICAgIHRoaXMucGFnZXJDb250ZXh0ID0gcGFnZXJDb250ZXh0O1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAgICAgICAgICpcbiAgICAgICAgICogQG1lbWJlck9mIFBhZ2VySW5wdXRDb21wb25lbnRcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlS2V5RG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IGluY29taW5nVmFsdWUgPSB0aGlzLm51bWVyaWNJbnB1dC52YWx1ZSB8fCB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5FbnRlcikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGluY29taW5nVmFsdWUgIT09IHRoaXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlUGFnZShpbmNvbWluZ1ZhbHVlIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAgICAgICAqXG4gICAgICAgICAqIEBtZW1iZXJPZiBQYWdlcklucHV0Q29tcG9uZW50XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhhbmRsZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5udW1lcmljSW5wdXQudmFsdWU7XG4gICAgICAgICAgICBpZiAoIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm51bWVyaWNJbnB1dC53cml0ZVZhbHVlKHRoaXMuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0VmFsdWUgIT09IHRoaXMuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaW5wdXRWYWx1ZSAtIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhc1BhZ2VzID8gdGhpcy5jdXJyZW50UGFnZSA6IDA7XG4gICAgfVxuICAgIGdldCBoYXNQYWdlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWxQYWdlcyAhPT0gMDtcbiAgICB9XG4gICAgb25DaGFuZ2VzKHsgdG90YWwsIHNraXAsIHBhZ2VTaXplIH0pIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICB0aGlzLnNraXAgPSBza2lwO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJJbnB1dENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItaW5wdXQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgIDxzcGFuIFtuZ0NsYXNzXT1cInsnay1wYWdlci1pbnB1dCc6IHRydWUsICdrLWxhYmVsJzogdHJ1ZX1cIj5cbiAgICAgICAge3t0ZXh0Rm9yKCdwYWdlclBhZ2UnKX19XG4gICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveFxuICAgICAgICAgICAgW3NwaW5uZXJzXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtkZWNpbWFsc109XCIwXCJcbiAgICAgICAgICAgIGZvcm1hdD1cIm4wXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaGFzUGFnZXNcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImN1cnJlbnRcIlxuICAgICAgICAgICAgW21pbl09XCJoYXNQYWdlcyA/IDEgOiAwXCJcbiAgICAgICAgICAgIFttYXhdPVwidG90YWxQYWdlc1wiXG4gICAgICAgICAgICBbYXV0b0NvcnJlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwidGV4dEZvcigncGFnZXJQYWdlTnVtYmVySW5wdXRUaXRsZScpXCJcbiAgICAgICAgICAgIFtrZW5kb0V2ZW50c091dHNpZGVBbmd1bGFyXT1cIntcbiAgICAgICAgICAgICAgICBrZXlkb3duOiBoYW5kbGVLZXlEb3duLFxuICAgICAgICAgICAgICAgIGZvY3Vzb3V0OiBoYW5kbGVCbHVyXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICA8L2tlbmRvLW51bWVyaWN0ZXh0Ym94PlxuICAgICAgICB7e3RleHRGb3IoJ3BhZ2VyT2YnKX19IHt7dG90YWxQYWdlc319XG4gICAgIDwvc3Bhbj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhZ2VySW5wdXRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5QYWdlcklucHV0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIG51bWVyaWNJbnB1dDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbTnVtZXJpY1RleHRCb3hDb21wb25lbnQsXSB9XVxufTtcblxuLy8gdHNsaW50OmRpc2FibGU6bm8tYWNjZXNzLW1pc3NpbmctbWVtYmVyXG4vKipcbiAqIERpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHBhZ2UgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9I3RvYy1wYWdlci10ZW1wbGF0ZXMpKS5cbiAqL1xuY2xhc3MgUGFnZXJJbmZvQ29tcG9uZW50IGV4dGVuZHMgUGFnZXJFbGVtZW50Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGNkLCBwYWdlckNvbnRleHQpIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uLCBwYWdlckNvbnRleHQsIGNkKTtcbiAgICAgICAgdGhpcy5wYWdlckNvbnRleHQgPSBwYWdlckNvbnRleHQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtudW1iZXJ9XG4gICAgICogQG1lbWJlck9mIFBhZ2VySW5mb0NvbXBvbmVudFxuICAgICAqL1xuICAgIGdldCBtYXhJdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge251bWJlcn1cbiAgICAgKiBAbWVtYmVyT2YgUGFnZXJJbmZvQ29tcG9uZW50XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRQYWdlVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG90YWwgP1xuICAgICAgICAgICAgKHRoaXMuY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxIDpcbiAgICAgICAgICAgIDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqIEB0eXBlIHtib29sZWFufVxuICAgICAqIEBtZW1iZXJPZiBQYWdlckluZm9Db21wb25lbnRcbiAgICAgKi9cbiAgICBnZXQgY2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG9uQ2hhbmdlcyh7IHRvdGFsLCBza2lwLCBwYWdlU2l6ZSB9KSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbn1cblBhZ2VySW5mb0NvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcGFnZXItaW5mbycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGB7e2N1cnJlbnRQYWdlVGV4dH19IC0ge3ttYXhJdGVtc319IHt7dGV4dEZvcigncGFnZXJPZicpfX0ge3t0b3RhbH19IHt7dGV4dEZvcigncGFnZXJJdGVtcycpfX1gXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhZ2VySW5mb0NvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgeyB0eXBlOiBQYWdlckNvbnRleHRTZXJ2aWNlIH1cbl07XG5QYWdlckluZm9Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFtcImNsYXNzLmstcGFnZXItaW5mb1wiLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1sYWJlbFwiLF0gfV1cbn07XG5cbi8vIHRzbGludDpkaXNhYmxlOm5vLWFjY2Vzcy1taXNzaW5nLW1lbWJlclxuLyoqXG4gKiBEaXNwbGF5cyBhIGRyb3AtZG93biBsaXN0IGZvciB0aGUgcGFnZSBzaXplIHNlbGVjdGlvbiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHBhZ2luZ19ncmlkICV9I3RvYy1wYWdlci10ZW1wbGF0ZXMpKS5cbiAqL1xuY2xhc3MgUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQgZXh0ZW5kcyBQYWdlckVsZW1lbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgY2QsIHBhZ2VyQ29udGV4dCkge1xuICAgICAgICBzdXBlcihsb2NhbGl6YXRpb24sIHBhZ2VyQ29udGV4dCwgY2QpO1xuICAgICAgICB0aGlzLnBhZ2VyQ29udGV4dCA9IHBhZ2VyQ29udGV4dDtcbiAgICAgICAgdGhpcy5fcGFnZVNpemVzID0gW107XG4gICAgfVxuICAgIGdldCBwYWdlU2l6ZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYWdlU2l6ZXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBwYWdlIHNpemVzIGNvbGxlY3Rpb24uIENhbiBiZSBhbiBBcnJheSBvZiBudW1iZXJzIGFuZC9vciBQYWdlU2l6ZUl0ZW0gb2JqZWN0cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgdHMtcHJldmlld1xuICAgICAqIF9AQ29tcG9uZW50KHtcbiAgICAgKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gICAgICogICAgdGVtcGxhdGU6IGBcbiAgICAgKiAgICAgICAgPGtlbmRvLWdyaWQgW2tlbmRvR3JpZEJpbmRpbmddPVwiZ3JpZERhdGFcIiBbaGVpZ2h0XT1cIjIwMFwiXG4gICAgICogICAgICAgICAgIFtwYWdlYWJsZV09XCJ0cnVlXCJcbiAgICAgKiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiPlxuICAgICAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvUGFnZXJUZW1wbGF0ZSBsZXQtdG90YWxQYWdlcz1cInRvdGFsUGFnZXNcIiBsZXQtY3VycmVudFBhZ2U9XCJjdXJyZW50UGFnZVwiPlxuICAgICAqICAgICAgICAgICAgICAgIDxrZW5kby1wYWdlci1wYWdlLXNpemVzIFtwYWdlU2l6ZXNdPVwicGFnZXNpemVzXCI+PC9rZW5kby1wYWdlci1wYWdlLXNpemVzPlxuICAgICAqICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICAgICAqICAgIGBcbiAgICAgKiB9KVxuICAgICAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gICAgICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXSA9IHByb2R1Y3RzO1xuICAgICAqICAgIHB1YmxpYyBwYWdlU2l6ZSA9IDI7XG4gICAgICogICAgcHVibGljIHBhZ2VzaXplcyA9IFt7dGV4dDogJ09uZScsIHZhbHVlOiAxfSwge3RleHQ6ICdUd28nLCB2YWx1ZTogMn0sIHt0ZXh0OiAnQWxsJywgdmFsdWUgOiAnYWxsJ31dO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAgICAgKiAgICdQcm9kdWN0SUQnIDogMSxcbiAgICAgKiAgICdQcm9kdWN0TmFtZScgOiBcIkNoYWlcIixcbiAgICAgKiAgICdTdXBwbGllcklEJyA6IDEsXG4gICAgICogICAnQ2F0ZWdvcnlJRCcgOiAxLFxuICAgICAqICAgJ1F1YW50aXR5UGVyVW5pdCcgOiBcIjEwIGJveGVzIHggMjAgYmFnc1wiLFxuICAgICAqICAgJ1VuaXRQcmljZScgOiAxOC4wMDAwLFxuICAgICAqICAgJ1VuaXRzSW5TdG9jaycgOiAzOSxcbiAgICAgKiAgICdVbml0c09uT3JkZXInIDogMCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMTAsXG4gICAgICogICAnRGlzY29udGludWVkJyA6IGZhbHNlXG4gICAgICpcbiAgICAgKiB9LCB7XG4gICAgICogICAnUHJvZHVjdElEJyA6IDIsXG4gICAgICogICAnUHJvZHVjdE5hbWUnIDogXCJDaGFuZ1wiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMSxcbiAgICAgKiAgICdDYXRlZ29yeUlEJyA6IDEsXG4gICAgICogICAnUXVhbnRpdHlQZXJVbml0JyA6IFwiMjQgLSAxMiBveiBib3R0bGVzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDE5LjAwMDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDE3LFxuICAgICAqICAgJ1VuaXRzT25PcmRlcicgOiA0MCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMjUsXG4gICAgICogICAnRGlzY29udGludWVkJyA6IGZhbHNlXG4gICAgICogfSwge1xuICAgICAqICAgJ1Byb2R1Y3RJRCcgOiAzLFxuICAgICAqICAgJ1Byb2R1Y3ROYW1lJyA6IFwiQW5pc2VlZCBTeXJ1cFwiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMSxcbiAgICAgKiAgICdDYXRlZ29yeUlEJyA6IDIsXG4gICAgICogICAnUXVhbnRpdHlQZXJVbml0JyA6IFwiMTIgLSA1NTAgbWwgYm90dGxlc1wiLFxuICAgICAqICAgJ1VuaXRQcmljZScgOiAxMC4wMDAwLFxuICAgICAqICAgJ1VuaXRzSW5TdG9jaycgOiAxMyxcbiAgICAgKiAgICdVbml0c09uT3JkZXInIDogNzAsXG4gICAgICogICAnUmVvcmRlckxldmVsJyA6IDI1LFxuICAgICAqICAgJ0Rpc2NvbnRpbnVlZCcgOiBmYWxzZVxuICAgICAqIH0sIHtcbiAgICAgKiAgICdQcm9kdWN0SUQnIDogNCxcbiAgICAgKiAgICdQcm9kdWN0TmFtZScgOiBcIkNoZWYgQW50b25cXCdzIENhanVuIFNlYXNvbmluZ1wiLFxuICAgICAqICAgJ1N1cHBsaWVySUQnIDogMixcbiAgICAgKiAgJ0NhdGVnb3J5SUQnIDogMixcbiAgICAgKiAgICdRdWFudGl0eVBlclVuaXQnIDogXCI0OCAtIDYgb3ogamFyc1wiLFxuICAgICAqICAgJ1VuaXRQcmljZScgOiAyMi4wMDAwLFxuICAgICAqICAgJ1VuaXRzSW5TdG9jaycgOiA1MyxcbiAgICAgKiAgICdVbml0c09uT3JkZXInIDogMCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMCxcbiAgICAgKiAgICdEaXNjb250aW51ZWQnIDogZmFsc2VcbiAgICAgKiB9LCB7XG4gICAgICogICAnUHJvZHVjdElEJyA6IDUsXG4gICAgICogICAnUHJvZHVjdE5hbWUnIDogXCJDaGVmIEFudG9uXFwncyBHdW1ibyBNaXhcIixcbiAgICAgKiAgICdTdXBwbGllcklEJyA6IDIsXG4gICAgICogICAnQ2F0ZWdvcnlJRCcgOiAyLFxuICAgICAqICAgJ1F1YW50aXR5UGVyVW5pdCcgOiBcIjM2IGJveGVzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDIxLjM1MDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDAsXG4gICAgICogICAnVW5pdHNPbk9yZGVyJyA6IDAsXG4gICAgICogICAnUmVvcmRlckxldmVsJyA6IDAsXG4gICAgICogICAnRGlzY29udGludWVkJyA6IHRydWVcbiAgICAgKiB9LCB7XG4gICAgICogICAnUHJvZHVjdElEJyA6IDYsXG4gICAgICogICAnUHJvZHVjdE5hbWUnIDogXCJHcmFuZG1hXFwncyBCb3lzZW5iZXJyeSBTcHJlYWRcIixcbiAgICAgKiAgICdTdXBwbGllcklEJyA6IDMsXG4gICAgICogICAnQ2F0ZWdvcnlJRCcgOiAyLFxuICAgICAqICAgJ1F1YW50aXR5UGVyVW5pdCcgOiBcIjEyIC0gOCBveiBqYXJzXCIsXG4gICAgICogICAnVW5pdFByaWNlJyA6IDI1LjAwMDAsXG4gICAgICogICAnVW5pdHNJblN0b2NrJyA6IDEyMCxcbiAgICAgKiAgICdVbml0c09uT3JkZXInIDogMCxcbiAgICAgKiAgICdSZW9yZGVyTGV2ZWwnIDogMjUsXG4gICAgICogICAnRGlzY29udGludWVkJyA6IGZhbHNlXG4gICAgICogfV07XG4gICAgICogYGBgXG4gICAgICovXG4gICAgc2V0IHBhZ2VTaXplcyhwYWdlU2l6ZXMpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZEl0ZW1zID0gW107XG4gICAgICAgIHBhZ2VTaXplcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZEl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wYWdlU2l6ZXMgPSBub3JtYWxpemVkSXRlbXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKlxuICAgICAqIEByZWFkb25seVxuICAgICAqL1xuICAgIGdldCBjbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqXG4gICAgICogQHJlYWRvbmx5XG4gICAgICovXG4gICAgZ2V0IHNob3dJbml0aWFsUGFnZVNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VTaXplc1xuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS52YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gTnVtYmVyKHRoaXMucGFnZVNpemUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudG90YWwgPT09IE51bWJlcih0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5sZW5ndGggPT09IDA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwYWdlU2l6ZUNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICAgICAgdGhpcy5wYWdlckNvbnRleHQuY2hhbmdlUGFnZVNpemUodGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXRWYWx1ZShwYWdlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgcGFnZS52YWx1ZSA9PT0gJ251bWJlcicgPyBwYWdlLnZhbHVlIDogdGhpcy50b3RhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldFNlbGVjdGVkU3RhdGUocGFnZSkge1xuICAgICAgICBpZiAodHlwZW9mIHBhZ2UudmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFnZS52YWx1ZSA9PT0gdGhpcy5wYWdlU2l6ZSA/IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZVNpemUgPT09IHRoaXMudG90YWw7XG4gICAgfVxuICAgIG9uQ2hhbmdlcyh7IHRvdGFsLCBza2lwLCBwYWdlU2l6ZSB9KSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IHR5cGVvZiBwYWdlU2l6ZSA9PT0gJ251bWJlcicgPyBwYWdlU2l6ZSA6IHRoaXMudG90YWw7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXBhZ2VyLXBhZ2Utc2l6ZXMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxzZWxlY3QgI3NlbGVjdFxuICAgICAgICAgICAgKGNoYW5nZSk9XCJwYWdlU2l6ZUNoYW5nZShzZWxlY3QudmFsdWUpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidGV4dEZvcigncGFnZXJJdGVtc1BlclBhZ2UnKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiAqbmdJZj1cInNob3dJbml0aWFsUGFnZVNpemVcIiBbdmFsdWVdPVwicGFnZVNpemVcIj57e3BhZ2VTaXplfX08L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZVNpemVzXCIgW3ZhbHVlXT1cImdldFZhbHVlKHBhZ2UpXCIgW3NlbGVjdGVkXT1cImdldFNlbGVjdGVkU3RhdGUocGFnZSlcIj5cbiAgICAgICAgICAgICAgICB7e3BhZ2VbJ3RleHQnXX19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIHt7IHRleHRGb3IoJ3BhZ2VySXRlbXNQZXJQYWdlJykgfX1cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhZ2VyUGFnZVNpemVzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IFBhZ2VyQ29udGV4dFNlcnZpY2UgfVxuXTtcblBhZ2VyUGFnZVNpemVzQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHBhZ2VTaXplczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1wYWdlci1zaXplcycsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstbGFiZWwnLF0gfV1cbn07XG5cbmNvbnN0IGltcG9ydGVkTW9kdWxlcyQxID0gW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBJbnB1dHNNb2R1bGUsXG4gICAgU2hhcmVkTW9kdWxlXG5dO1xuY29uc3QgSU5URVJOQUxfQ09NUE9ORU5UUyQxID0gW1xuICAgIFBhZ2VyQ29tcG9uZW50LFxuICAgIFBhZ2VyUHJldkJ1dHRvbnNDb21wb25lbnQsXG4gICAgUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudCxcbiAgICBQYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50LFxuICAgIFBhZ2VySW5wdXRDb21wb25lbnQsXG4gICAgUGFnZXJJbmZvQ29tcG9uZW50LFxuICAgIFBhZ2VyUGFnZVNpemVzQ29tcG9uZW50LFxuICAgIFBhZ2VyVGVtcGxhdGVEaXJlY3RpdmVcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUGFnZXJNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgUGFnZXJDb21wb25lbnQsXG4gICAgICAgICAgICBQYWdlclByZXZCdXR0b25zQ29tcG9uZW50LFxuICAgICAgICAgICAgUGFnZXJOZXh0QnV0dG9uc0NvbXBvbmVudCxcbiAgICAgICAgICAgIFBhZ2VyTnVtZXJpY0J1dHRvbnNDb21wb25lbnQsXG4gICAgICAgICAgICBQYWdlcklucHV0Q29tcG9uZW50LFxuICAgICAgICAgICAgUGFnZXJJbmZvQ29tcG9uZW50LFxuICAgICAgICAgICAgUGFnZXJQYWdlU2l6ZXNDb21wb25lbnQsXG4gICAgICAgICAgICBQYWdlclRlbXBsYXRlRGlyZWN0aXZlXG4gICAgICAgIF07XG4gICAgfVxufVxuUGFnZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0lOVEVSTkFMX0NPTVBPTkVOVFMkMV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0lOVEVSTkFMX0NPTVBPTkVOVFMkMV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogWy4uLmltcG9ydGVkTW9kdWxlcyQxXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBIZWFkZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGdyb3Vwc1NlcnZpY2UsIGdyb3VwSW5mb1NlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlID0gZ3JvdXBzU2VydmljZTtcbiAgICAgICAgdGhpcy5ncm91cEluZm9TZXJ2aWNlID0gZ3JvdXBJbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5za2lwR3JvdXBEZWNvcmF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzRGV0YWlscyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvdGFsQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGdldCBncm91cEl0ZW1DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gdGhpcy5ncm91cHNTZXJ2aWNlLmlzRXhwYW5kZWQodGhpcy5pdGVtLmluZGV4KTtcbiAgICB9XG4gICAgcHJlZml4R3JvdXBDZWxsKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBBcnJheShpdGVtLmxldmVsKTtcbiAgICB9XG4gICAgdG9nZ2xlR3JvdXAoaXRlbSkge1xuICAgICAgICB0aGlzLmdyb3Vwc1NlcnZpY2UudG9nZ2xlUm93KGl0ZW0uaW5kZXgsIGl0ZW0uZGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ3JvdXBTcGFuKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgZ3JvdXBDb3VudCA9ICh0aGlzLmdyb3VwcyB8fCBbXSkubGVuZ3RoO1xuICAgICAgICBjb25zdCBkZXRhaWxPZmZzZXQgPSB0aGlzLmhhc0RldGFpbHMgPyAxIDogMDtcbiAgICAgICAgaWYgKHRoaXMuaGFzR3JvdXBIZWFkZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybiBncm91cENvdW50ICsgMSArIGRldGFpbE9mZnNldCAtIGl0ZW0ubGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNvbHVtbkNvdW50ID0gY29sdW1uc1NwYW4odGhpcy5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHRoaXMuc2tpcEdyb3VwRGVjb3JhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbHVtbkNvdW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncm91cENvdW50ICsgY29sdW1uQ291bnQgKyBkZXRhaWxPZmZzZXQgLSBpdGVtLmxldmVsO1xuICAgIH1cbiAgICBsb2dpY2FsQ29sU3BhbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2tpcEdyb3VwRGVjb3JhdGlvbiA/IDEgOiB0aGlzLnRvdGFsQ29sdW1uc0NvdW50O1xuICAgIH1cbiAgICBhcmlhUm9sZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2tpcEdyb3VwRGVjb3JhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuICdwcmVzZW50YXRpb24nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnZ3JpZGNlbGwnO1xuICAgIH1cbiAgICBmb3JtYXRGb3JHcm91cChpdGVtKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwSW5mb1NlcnZpY2UuZm9ybWF0Rm9yR3JvdXAoaXRlbSk7XG4gICAgfVxuICAgIGdyb3VwVGl0bGUoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEluZm9TZXJ2aWNlLmdyb3VwVGl0bGUoaXRlbSk7XG4gICAgfVxuICAgIGdyb3VwSGVhZGVyVGVtcGxhdGUoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cEluZm9TZXJ2aWNlLmdyb3VwSGVhZGVyVGVtcGxhdGUoaXRlbSk7XG4gICAgfVxufVxuR3JvdXBIZWFkZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRHcm91cEhlYWRlcl0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2tpcEdyb3VwRGVjb3JhdGlvblwiPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1ncm91cC1jZWxsXCJcbiAgICAgICAgICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZyBvZiBwcmVmaXhHcm91cENlbGwoaXRlbSlcIj48L3RkPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJncm91cFNwYW4oaXRlbSlcIiAqbmdJZj1cIiEoc2tpcEdyb3VwRGVjb3JhdGlvbiAmJiBoYXNHcm91cEhlYWRlckNvbHVtbilcIlxuICAgICAgICAgICAgW2F0dHIucm9sZV09XCJhcmlhUm9sZSgpXCJcbiAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxuICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGxcbiAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4XCJcbiAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbF09XCJza2lwR3JvdXBEZWNvcmF0aW9uXCJcbiAgICAgICAgICAgIFtncm91cEl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICBbY29sU3Bhbl09XCJsb2dpY2FsQ29sU3BhbigpXCI+XG4gICAgICAgICAgICA8cCBjbGFzcz1cImstcmVzZXRcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIXNraXBHcm91cERlY29yYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cInRvZ2dsZUdyb3VwKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2staS1jb2xsYXBzZSc6IGlzRXhwYW5kZWQsICdrLWktZXhwYW5kJzogIWlzRXhwYW5kZWQgfVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWdyb3VwSGVhZGVyVGVtcGxhdGUoaXRlbSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3tncm91cFRpdGxlKGl0ZW0pfX06IHt7aXRlbS5kYXRhIHwgdmFsdWVPZjpcInZhbHVlXCI6IGZvcm1hdEZvckdyb3VwKGl0ZW0pfX1cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogZ3JvdXBIZWFkZXJUZW1wbGF0ZShpdGVtKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogaXRlbS5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXM6IGl0ZW0uZGF0YT8uYWdncmVnYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5kYXRhPy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogaXRlbS5kYXRhPy5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZDogaXNFeHBhbmRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0uZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzR3JvdXBIZWFkZXJDb2x1bW5cIj5cbiAgICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyb3VwSGVhZGVyQ29sdW1uczsgbGV0IGluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4XCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImluZGV4ICsgMVwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZUNlbGxdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIFtncm91cEl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2NvbFNwYW5dPVwiMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5ncm91cEhlYWRlckNvbHVtblRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXM6IGl0ZW0uZGF0YT8uYWdncmVnYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmRhdGE/LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGl0ZW0uZGF0YT8uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaXRlbS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbS5kYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkdyb3VwSGVhZGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JvdXBzU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBJbmZvU2VydmljZSB9XG5dO1xuR3JvdXBIZWFkZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgcm93SW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvZ2ljYWxSb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2tpcEdyb3VwRGVjb3JhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGFzRGV0YWlsczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdG90YWxDb2x1bW5zQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGhhc0dyb3VwSGVhZGVyQ29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEhlYWRlckNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGdyb3VwczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBJdGVtQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JvdXBpbmctcm93JyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRHJvcFRhcmdldERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2VydmljZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICAgICAgdGhpcy5lbnRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5sZWF2ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5kcm9wID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UuYWRkKHRoaXMpO1xuICAgICAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5zZXJ2aWNlLmNoYW5nZXMucGlwZShmaWx0ZXIoKHsgdGFyZ2V0IH0pID0+IHRhcmdldCA9PT0gdGhpcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGNoYW5nZXMucGlwZShmaWx0ZXIoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnbGVhdmUnKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxlYXZlLm5leHQodGhpcy5ldmVudEFyZ3MoZSkpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoY2hhbmdlcy5waXBlKGZpbHRlcigoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdlbnRlcicpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIHRoaXMuZW50ZXIubmV4dCh0aGlzLmV2ZW50QXJncyhlKSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChjaGFuZ2VzLnBpcGUoZmlsdGVyKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ2Ryb3AnKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRyb3AubmV4dCh0aGlzLmV2ZW50QXJncyhlKSk7XG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV2ZW50QXJncyhlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICBtb3VzZUV2ZW50OiBlLm1vdXNlRXZlbnQsXG4gICAgICAgICAgICBkcmFnZ2FibGU6IGUuZHJhZ2dhYmxlXG4gICAgICAgIH07XG4gICAgfVxufVxuRHJvcFRhcmdldERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJvcFRhcmdldF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyb3BUYXJnZXREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBEcmFnQW5kRHJvcFNlcnZpY2UgfVxuXTtcbkRyb3BUYXJnZXREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29udGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZW50ZXI6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBsZWF2ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGRyb3A6IFt7IHR5cGU6IE91dHB1dCB9XVxufTtcblxuY29uc3Qgd2l0aG91dEZpZWxkID0gKHsgZmllbGQgfSkgPT4gaXNOdWxsT3JFbXB0eVN0cmluZyhmaWVsZCk7XG5jb25zdCBhbHJlYWR5R3JvdXBlZCA9ICh7IGdyb3VwcywgZmllbGQgfSkgPT4gZ3JvdXBzLnNvbWUoZ3JvdXAgPT4gZ3JvdXAuZmllbGQgPT09IGZpZWxkKTtcbmNvbnN0IG92ZXJTYW1lVGFyZ2V0ID0gKHsgdGFyZ2V0LCBmaWVsZCB9KSA9PiB0YXJnZXQuZmllbGQgPT09IGZpZWxkO1xuY29uc3Qgb3Zlckxhc3RUYXJnZXQgPSAoeyB0YXJnZXQgfSkgPT4gdGFyZ2V0Lmxhc3RUYXJnZXQ7XG5jb25zdCBpc0xhc3RHcm91cCA9ICh7IGdyb3VwcywgZmllbGQgfSkgPT4gZ3JvdXBzLm1hcChncm91cCA9PiBncm91cC5maWVsZCkuaW5kZXhPZihmaWVsZCkgPT09IGdyb3Vwcy5sZW5ndGggLSAxO1xuY29uc3QgaXNOb3RHcm91cGFibGUgPSAoZ3JvdXBzU2VydmljZSkgPT4gKHsgZmllbGQgfSkgPT4gIWdyb3Vwc1NlcnZpY2UuaXNHcm91cGFibGUoZmllbGQpO1xuY29uc3QgY29sdW1uUnVsZXMgPSAoZ3JvdXBTZXJ2aWNlKSA9PiBvcih3aXRob3V0RmllbGQsIGFscmVhZHlHcm91cGVkLCBpc05vdEdyb3VwYWJsZShncm91cFNlcnZpY2UpKTtcbmNvbnN0IGluZGljYXRvclJ1bGVzID0gb3Iob3ZlclNhbWVUYXJnZXQsIGFuZChvdmVyTGFzdFRhcmdldCwgaXNMYXN0R3JvdXApKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBHcm91cFBhbmVsQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihoaW50LCBjdWUsIGdyb3VwSW5mb1NlcnZpY2UsIGxvY2FsaXphdGlvbiwgY2QpIHtcbiAgICAgICAgdGhpcy5oaW50ID0gaGludDtcbiAgICAgICAgdGhpcy5jdWUgPSBjdWU7XG4gICAgICAgIHRoaXMuZ3JvdXBJbmZvU2VydmljZSA9IGdyb3VwSW5mb1NlcnZpY2U7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIHRoaXMuY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLmRyb3BUYXJnZXRzID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLmdyb3VwVGl0bGVzID0gW107XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICBnZXQgZ3JvdXBIZWFkZXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNldCB0ZXh0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZW1wdHlUZXh0ID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbXB0eVRleHQgPyB0aGlzLmVtcHR5VGV4dCA6IHRoaXMubG9jYWxpemF0aW9uLmdldCgnZ3JvdXBQYW5lbEVtcHR5Jyk7XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKG9ic2VydmUodGhpcy5kcm9wVGFyZ2V0cylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5hdHRhY2hUYXJnZXRzLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmxvY2FsaXphdGlvbi5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNkLm1hcmtGb3JDaGVjaygpKSk7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFRpdGxlcyA9IHRoaXMuZ3JvdXBzLm1hcChncm91cCA9PiB0aGlzLmdyb3VwSW5mb1NlcnZpY2UuZ3JvdXBUaXRsZShncm91cCkpO1xuICAgICAgICBpZiAoY3VycmVudFRpdGxlcy5sZW5ndGggIT09IHRoaXMuZ3JvdXBUaXRsZXMubGVuZ3RoIHx8IGN1cnJlbnRUaXRsZXMuc29tZSgoY3VycmVudCwgaWR4KSA9PiBjdXJyZW50ICE9PSB0aGlzLmdyb3VwVGl0bGVzW2lkeF0pKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwVGl0bGVzID0gY3VycmVudFRpdGxlcztcbiAgICAgICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YXJnZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlyZWN0aW9uQ2hhbmdlKGdyb3VwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5ncm91cHMuZmluZEluZGV4KHggPT4geC5maWVsZCA9PT0gZ3JvdXAuZmllbGQpO1xuICAgICAgICBjb25zdCBncm91cHMgPSBbLi4udGhpcy5ncm91cHMuc2xpY2UoMCwgaW5kZXgpLCBncm91cCwgLi4udGhpcy5ncm91cHMuc2xpY2UoaW5kZXggKyAxKV07XG4gICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoZ3JvdXBzKTtcbiAgICB9XG4gICAgaW5zZXJ0KGZpZWxkLCBpbmRleCkge1xuICAgICAgICBjb25zdCBncm91cHMgPSB0aGlzLmdyb3Vwcy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSBmaWVsZCk7XG4gICAgICAgIGlmIChncm91cHMubGVuZ3RoIHx8IHRoaXMuZ3JvdXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdChbLi4uZ3JvdXBzLnNsaWNlKDAsIGluZGV4KSwgeyBmaWVsZDogZmllbGQgfSwgLi4uZ3JvdXBzLnNsaWNlKGluZGV4KV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlbW92ZShncm91cCkge1xuICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KHRoaXMuZ3JvdXBzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IGdyb3VwLmZpZWxkKSk7XG4gICAgfVxuICAgIGNhbkRyb3AoZHJhZ2dhYmxlLCB0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgaXNJbmRpY2F0b3IgPSBkcmFnZ2FibGUudHlwZSA9PT0gJ2dyb3VwSW5kaWNhdG9yJztcbiAgICAgICAgY29uc3QgcnVsZXMgPSBpc0luZGljYXRvclxuICAgICAgICAgICAgPyBpbmRpY2F0b3JSdWxlc1xuICAgICAgICAgICAgOiBjb2x1bW5SdWxlcyh0aGlzLmdyb3VwSW5mb1NlcnZpY2UpO1xuICAgICAgICByZXR1cm4gIXJ1bGVzKHtcbiAgICAgICAgICAgIGZpZWxkOiBkcmFnZ2FibGUuZmllbGQsXG4gICAgICAgICAgICBncm91cHM6IHRoaXMuZ3JvdXBzLFxuICAgICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhdHRhY2hUYXJnZXRzKCkge1xuICAgICAgICBpZiAodGhpcy50YXJnZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YXJnZXRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGNvbnN0IGVudGVyU3RyZWFtID0gdGhpcy5kcm9wVGFyZ2V0c1xuICAgICAgICAgICAgLnJlZHVjZSgoYWNjLCB0YXJnZXQpID0+IG1lcmdlKGFjYywgdGFyZ2V0LmVudGVyKSwgZnJvbShbXSkpO1xuICAgICAgICBjb25zdCBsZWF2ZVN0cmVhbSA9IHRoaXMuZHJvcFRhcmdldHNcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgdGFyZ2V0KSA9PiBtZXJnZShhY2MsIHRhcmdldC5sZWF2ZSksIGZyb20oW10pKTtcbiAgICAgICAgY29uc3QgZHJvcFN0cmVhbSA9IHRoaXMuZHJvcFRhcmdldHNcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFjYywgdGFyZ2V0KSA9PiBtZXJnZShhY2MsIHRhcmdldC5kcm9wKSwgZnJvbShbXSkpO1xuICAgICAgICB0aGlzLnRhcmdldFN1YnNjcmlwdGlvbi5hZGQoZW50ZXJTdHJlYW0ucGlwZSh0YXAoXyA9PiB0aGlzLmhpbnQucmVtb3ZlTG9jaygpKSwgZmlsdGVyKCh7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pID0+IHRoaXMuY2FuRHJvcChkcmFnZ2FibGUuY29udGV4dCwgdGFyZ2V0LmNvbnRleHQpKSwgdGFwKHRoaXMuZW50ZXIuYmluZCh0aGlzKSksIHN3aXRjaE1hcFRvKGRyb3BTdHJlYW0ucGlwZSh0YWtlVW50aWwobGVhdmVTdHJlYW0ucGlwZSh0YXAodGhpcy5sZWF2ZS5iaW5kKHRoaXMpKSkpKSkpLnN1YnNjcmliZSh0aGlzLmRyb3AuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICBlbnRlcih7IGRyYWdnYWJsZSwgdGFyZ2V0IH0pIHtcbiAgICAgICAgdGhpcy5oaW50LmVuYWJsZSgpO1xuICAgICAgICBsZXQgYmVmb3JlID0gdGFyZ2V0LmNvbnRleHQubGFzdFRhcmdldCB8fCBpc1RhcmdldEJlZm9yZShkcmFnZ2FibGUuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0YXJnZXQuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uLnJ0bCkge1xuICAgICAgICAgICAgYmVmb3JlID0gIWJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1ZS5wb3NpdGlvbihwb3NpdGlvbih0YXJnZXQuZWxlbWVudC5uYXRpdmVFbGVtZW50LCBiZWZvcmUpKTtcbiAgICB9XG4gICAgbGVhdmUoKSB7XG4gICAgICAgIHRoaXMuaGludC5kaXNhYmxlKCk7XG4gICAgICAgIHRoaXMuY3VlLmhpZGUoKTtcbiAgICB9XG4gICAgZHJvcCh7IHRhcmdldCwgZHJhZ2dhYmxlIH0pIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBkcmFnZ2FibGUuY29udGV4dC5maWVsZDtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRyb3BUYXJnZXRzLnRvQXJyYXkoKS5pbmRleE9mKHRhcmdldCk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KGZpZWxkLCBpbmRleCk7XG4gICAgfVxufVxuR3JvdXBQYW5lbENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1ncm91cC1wYW5lbCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImdyb3Vwcy5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstaW5kaWNhdG9yLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2NvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICBsYXN0VGFyZ2V0OiB0cnVlXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAga2VuZG9Ecm9wVGFyZ2V0PlxuICAgICAgICAgICAgICAgIHt7IHRleHQgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cHM7IGxldCBpbmRleCA9IGluZGV4O1wiXG4gICAgICAgICAgICBjbGFzcz1cImstaW5kaWNhdG9yLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbY29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgZmllbGQ6IGdyb3VwLmZpZWxkXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGtlbmRvRHJvcFRhcmdldD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZUNvbHVtblxuICAgICAgICAgICAgICAgIFtlbmFibGVEcmFnXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGdyb3VwLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZ3JvdXBJbmRpY2F0b3InLFxuICAgICAgICAgICAgICAgICAgICBoaW50OiAgZ3JvdXBUaXRsZXNbaW5kZXhdXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAga2VuZG9Hcm91cEluZGljYXRvclxuICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgW2dyb3VwXT1cImdyb3VwXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBUaXRsZV09XCJncm91cFRpdGxlc1tpbmRleF1cIlxuICAgICAgICAgICAgICAgIChkaXJlY3Rpb25DaGFuZ2UpPVwiZGlyZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImstaW5kaWNhdG9yLWNvbnRhaW5lclwiXG4gICAgICAgICAgICAqbmdJZj1cImdyb3Vwcy5sZW5ndGggIT09IDBcIlxuICAgICAgICAgICAgW2NvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIGxhc3RUYXJnZXQ6IHRydWVcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAga2VuZG9Ecm9wVGFyZ2V0PiZuYnNwOzwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuR3JvdXBQYW5lbENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYWdIaW50U2VydmljZSB9LFxuICAgIHsgdHlwZTogRHJvcEN1ZVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEdyb3VwSW5mb1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5Hcm91cFBhbmVsQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdyb3VwSGVhZGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbXCJjbGFzcy5rLWdyb3VwaW5nLWhlYWRlclwiLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1ncm91cGluZy1oZWFkZXItZmxleFwiLF0gfV0sXG4gICAgdGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkcm9wVGFyZ2V0czogW3sgdHlwZTogVmlld0NoaWxkcmVuLCBhcmdzOiBbRHJvcFRhcmdldERpcmVjdGl2ZSxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgR3JvdXBJbmRpY2F0b3JDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5yZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIGdldCBncm91cEluZGljYXRvckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAuZGlyID8gdGhpcy5ncm91cC5kaXIgOiBcImFzY1wiO1xuICAgIH1cbiAgICB0b2dnbGVEaXJlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgZGlyOiB0aGlzLmRpciA9PT0gXCJhc2NcIiA/IFwiZGVzY1wiIDogXCJhc2NcIixcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdyb3VwLmZpZWxkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJlbW92ZURlc2NyaXB0b3IoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlLmVtaXQoe1xuICAgICAgICAgICAgZGlyOiB0aGlzLmdyb3VwLmRpcixcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdyb3VwLmZpZWxkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuR3JvdXBJbmRpY2F0b3JDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyb3VwSW5kaWNhdG9yXScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImstbGlua1wiIHRhYmluZGV4PVwiLTFcIiAoY2xpY2spPVwidG9nZ2xlRGlyZWN0aW9uKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1pLXNvcnQtYXNjLXNtXT1cImRpciA9PT0gJ2FzYydcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLWktc29ydC1kZXNjLXNtXT1cImRpciA9PT0gJ2Rlc2MnXCI+PC9zcGFuPlxuICAgICAgICAgICAge3tncm91cFRpdGxlfX08L2E+XG4gICAgICAgIDxhIGNsYXNzPVwiay1idXR0b24gay1idXR0b24taWNvbiBrLWJhcmVcIiB0YWJpbmRleD1cIi0xXCIgKGNsaWNrKT1cInJlbW92ZURlc2NyaXB0b3IoKVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWdyb3VwLWRlbGV0ZVwiPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkdyb3VwSW5kaWNhdG9yQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGRpcmVjdGlvbkNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHJlbW92ZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGdyb3VwOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cFRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cEluZGljYXRvckNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1ncm91cC1pbmRpY2F0b3JcIixdIH1dXG59O1xuXG4vLyBUT0RPXG4vLyB0c2xpbnQ6ZGlzYWJsZTpyeGpzLW5vLXVuc2FmZS10YWtldW50aWxcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBwcmV2ZW50T25EYmxDbGljayA9IHJlbGVhc2UgPT4gbW91c2VEb3duID0+IG9mKG1vdXNlRG93bikucGlwZShkZWxheSgxNTApLCB0YWtlVW50aWwocmVsZWFzZSkpO1xuY29uc3QgaGFzQ2xhc3MgPSBjbGFzc05hbWUgPT4gZWwgPT4gbmV3IFJlZ0V4cChgKF58ICkke2NsYXNzTmFtZX0oIHwkKWApLnRlc3QoZWwuY2xhc3NOYW1lKTtcbmNvbnN0IGlzRGVsZXRlQnV0dG9uID0gb3IoaGFzQ2xhc3MoXCJrLWktZ3JvdXAtZGVsZXRlXCIpLCBoYXNDbGFzcyhcImstYnV0dG9uLWljb25cIikpO1xuY29uc3QgaXNTb3J0SWNvbiA9IG9yKGhhc0NsYXNzKFwiay1pLXNvcnQtYXNjLXNtXCIpLCBoYXNDbGFzcyhcImstaS1zb3J0LWRlc2Mtc21cIikpO1xuY29uc3Qgc2tpcEJ1dHRvbnMgPSBhbmQobm90KGlzRGVsZXRlQnV0dG9uKSwgbm90KGlzU29ydEljb24pLCBub3QoaXNGb2N1c2FibGVXaXRoVGFiS2V5KSwgbm90KG1hdGNoZXNOb2RlTmFtZShcImxhYmVsXCIpKSk7XG5jb25zdCBlbGVtZW50VW5kZXJDdXJzb3IgPSAoeyBjbGllbnRYLCBjbGllbnRZIH0pID0+IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoY2xpZW50WCwgY2xpZW50WSk7XG5jb25zdCBoaWRlVGhlblNob3cgPSAoZWxlbWVudCwgY29udCkgPT4ge1xuICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICBjb25zdCByZXN1bHQgPSBjb250KCk7XG4gICAgZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEcmFnZ2FibGVDb2x1bW5EaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGRyYWdnYWJsZSwgZWxlbWVudCwgem9uZSwgc2VydmljZSwgaGludCwgY3VlLCBuYXYsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuZHJhZ2dhYmxlID0gZHJhZ2dhYmxlO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnpvbmUgPSB6b25lO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB0aGlzLmhpbnQgPSBoaW50O1xuICAgICAgICB0aGlzLmN1ZSA9IGN1ZTtcbiAgICAgICAgdGhpcy5uYXYgPSBuYXY7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0ge307XG4gICAgICAgIHRoaXMuZHJhZyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIH1cbiAgICBzZXQgZW5hYmxlRHJhZyhlbmFibGVkKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICAgIHRoaXMudXBkYXRlVG91Y2hBY3Rpb24oKTtcbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZDtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZHJhZ2dhYmxlLmtlbmRvUHJlc3MucGlwZShmaWx0ZXIoXyA9PiB0aGlzLmVuYWJsZWQpLCBmaWx0ZXIoKHsgb3JpZ2luYWxFdmVudDogeyB0YXJnZXQgfSB9KSA9PiB0YXJnZXQgPT09IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50IHx8IHNraXBCdXR0b25zKHRhcmdldCkpLCB0YXAoKGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRXZlbnQgPSBlLm9yaWdpbmFsRXZlbnQ7XG4gICAgICAgICAgICBpZiAoIWUuaXNUb3VjaCkge1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmF2Lm5hdmlnYXRlVG8ob3JpZ2luYWxFdmVudC50YXJnZXQpO1xuICAgICAgICB9KSwgc3dpdGNoTWFwKHByZXZlbnRPbkRibENsaWNrKHRoaXMuZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZSkpLCB0YXAoZG93biA9PiB7XG4gICAgICAgICAgICB0aGlzLmhpbnQuY3JlYXRlKGRvd24sIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCB0aGlzLmNvbnRleHQuaGludCk7XG4gICAgICAgICAgICB0aGlzLmN1ZS5jcmVhdGUoKTtcbiAgICAgICAgfSksIHN3aXRjaE1hcChkb3duID0+IHRoaXMuZHJhZ2dhYmxlLmtlbmRvRHJhZy5waXBlKHRhcCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGUuaXNUb3VjaCkge1xuICAgICAgICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSwgdGFwKHRoaXMuaGludC5hdHRhY2goKSksIHRhcCh0aGlzLmN1ZS5hdHRhY2goKSksIHRha2VVbnRpbCh0aGlzLmRyYWdnYWJsZS5rZW5kb1JlbGVhc2UpLCBtYXAobW92ZSA9PiAoeyBtb3ZlLCBkb3duIH0pKSkpLCB0YXAodGhpcy5wZXJmb3JtRHJhZy5iaW5kKHRoaXMpKSwgc3dpdGNoTWFwVG8odGhpcy5kcmFnZ2FibGUua2VuZG9SZWxlYXNlKSkuc3Vic2NyaWJlKHRoaXMuZHJvcC5iaW5kKHRoaXMpKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJvcCh1cEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGludC5yZW1vdmUoKTtcbiAgICAgICAgdGhpcy5jdWUucmVtb3ZlKCk7XG4gICAgICAgIHRoaXMuc2VydmljZS5ub3RpZnlEcm9wKHRoaXMsIHVwRXZlbnQpO1xuICAgIH1cbiAgICBwZXJmb3JtRHJhZyh7IG1vdmUgfSkge1xuICAgICAgICB0aGlzLmhpbnQubW92ZShtb3ZlKTtcbiAgICAgICAgY29uc3QgY3Vyc29yRWxlbWVudCA9IHRoaXMuZWxlbWVudFVuZGVyQ3Vyc29yKG1vdmUpO1xuICAgICAgICBpZiAoY3Vyc29yRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlLm5vdGlmeURyYWcodGhpcywgY3Vyc29yRWxlbWVudCwgbW92ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kcmFnLmVtaXQoe1xuICAgICAgICAgICAgZHJhZ2dhYmxlOiB0aGlzLFxuICAgICAgICAgICAgbW91c2VFdmVudDogbW92ZVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxlbWVudFVuZGVyQ3Vyc29yKG1vdXNlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5oaW50LmhpZGUoKTtcbiAgICAgICAgbGV0IHRhcmdldCA9IGVsZW1lbnRVbmRlckN1cnNvcihtb3VzZUV2ZW50KTtcbiAgICAgICAgaWYgKHRhcmdldCAmJiAvay1ncm91cGluZy1kcm9wY2x1ZS8udGVzdCh0YXJnZXQuY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgdGFyZ2V0ID0gaGlkZVRoZW5TaG93KHRhcmdldCwgZWxlbWVudFVuZGVyQ3Vyc29yLmJpbmQodGhpcywgbW91c2VFdmVudCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGludC5zaG93KCk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuICAgIHVwZGF0ZVRvdWNoQWN0aW9uKCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd0b3VjaC1hY3Rpb24nLCB0aGlzLmVuYWJsZWQgPyAnbm9uZScgOiAnJyk7XG4gICAgfVxufVxuRHJhZ2dhYmxlQ29sdW1uRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9EcmFnZ2FibGVDb2x1bW5dJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmFnZ2FibGVDb2x1bW5EaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEcmFnZ2FibGVEaXJlY3RpdmUsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEhvc3QgfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogRHJhZ0FuZERyb3BTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEcmFnSGludFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERyb3BDdWVTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOYXZpZ2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH1cbl07XG5EcmFnZ2FibGVDb2x1bW5EaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29udGV4dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZW5hYmxlRHJhZzogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZHJhZzogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWRyYWdnYWJsZS1oZWFkZXInLF0gfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkID0gW1xuICAgIERyYWdnYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgICBEcm9wVGFyZ2V0RGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYWdBbmREcm9wTW9kdWxlIHtcbn1cbkRyYWdBbmREcm9wTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtleHBvcnRlZF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMkMSA9IFtcbiAgICBHcm91cEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBHcm91cEhlYWRlckNvbXBvbmVudCxcbiAgICBHcm91cFBhbmVsQ29tcG9uZW50LFxuICAgIEdyb3VwSW5kaWNhdG9yQ29tcG9uZW50XG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyb3VwTW9kdWxlIHtcbiAgICBzdGF0aWMgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBHcm91cEhlYWRlckNvbHVtblRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgR3JvdXBGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZVxuICAgICAgICBdO1xuICAgIH1cbn1cbkdyb3VwTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtleHBvcnRlZE1vZHVsZXMkMV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcyQxXSxcbiAgICAgICAgICAgICAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBTaGFyZWRNb2R1bGUsIERyYWdBbmREcm9wTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgREVGQVVMVFMgPSB7XG4gICAgYWxsb3dVbnNvcnQ6IHRydWUsXG4gICAgbW9kZTogJ3NpbmdsZScsXG4gICAgc2hvd0luZGV4ZXM6IHRydWUsXG4gICAgaW5pdGlhbERpcmVjdGlvbjogJ2FzYydcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3Qgbm9ybWFsaXplJDEgPSAoLi4uc2V0dGluZ3MpID0+IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRTLCAuLi5zZXR0aW5ncyk7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBoYXNGaWx0ZXIgPSAoc2V0dGluZ3MsIGNvbHVtbikgPT4gc2V0dGluZ3MuZmlsdGVyICE9PSBmYWxzZSAmJiBjb2x1bW4uZmllbGQgJiYgY29sdW1uLmZpbHRlcmFibGU7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzU29ydCA9IChzZXR0aW5ncywgY29sdW1uKSA9PiBzZXR0aW5ncy5zb3J0ICE9PSBmYWxzZSAmJiBjb2x1bW4uZmllbGQgJiYgY29sdW1uLnNvcnRhYmxlO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhhc0xvY2sgPSAoc2V0dGluZ3MsIGNvbHVtbikgPT4gc2V0dGluZ3MubG9jayAmJiBjb2x1bW4ubG9ja2FibGUgJiYgIShjb2x1bW4ucGFyZW50ICYmICFjb2x1bW4ucGFyZW50LmlzU3BhbkNvbHVtbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzQ29sdW1uQ2hvb3NlciA9IChzZXR0aW5ncykgPT4gc2V0dGluZ3MuY29sdW1uQ2hvb3NlciAhPT0gZmFsc2U7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzSXRlbXMgPSAoc2V0dGluZ3MsIGNvbHVtbikgPT4gaGFzQ29sdW1uQ2hvb3NlcihzZXR0aW5ncykgfHwgaGFzTG9jayhzZXR0aW5ncywgY29sdW1uKSB8fCBoYXNTb3J0KHNldHRpbmdzLCBjb2x1bW4pIHx8IGhhc0ZpbHRlcihzZXR0aW5ncywgY29sdW1uKTtcblxuY29uc3QgbWVyZ2VPYmplY3RzID0gKC4uLmFyZ3MpID0+IE9iamVjdC5hc3NpZ24uYXBwbHkobnVsbCwgW3t9XS5jb25jYXQoYXJncykpO1xuY29uc3QgZGlyZWN0aW9ucyA9IGluaXRpYWxEaXJlY3Rpb24gPT4gaW5pdGlhbERpcmVjdGlvbiA9PT0gXCJhc2NcIiA/IFtcImFzY1wiLCBcImRlc2NcIl0gOiBbXCJkZXNjXCIsIFwiYXNjXCJdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzUm9vdExldmVsID0gKHsgcGFyZW50IH0pID0+ICFpc1RydXRoeShwYXJlbnQpO1xuY29uc3Qgb2ZDb2x1bW5UeXBlID0gKHsgZHJhZ2dhYmxlIH0pID0+IFsnY29sdW1uJywgJ2NvbHVtbkdyb3VwJ11cbiAgICAuaW5kZXhPZihkcmFnZ2FibGUuY29udGV4dC50eXBlKSA+PSAwO1xuY29uc3Qgbm90U2FtZUVsZW1lbnQgPSAoeyBkcmFnZ2FibGUsIHRhcmdldCB9KSA9PiBkcmFnZ2FibGUuZWxlbWVudC5uYXRpdmVFbGVtZW50ICE9PSB0YXJnZXQuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuY29uc3QgaW5TYW1lUGFyZW50ID0gKHgsIHkpID0+IHgucGFyZW50ID09PSB5LnBhcmVudCB8fFxuICAgIChpc0luU3BhbkNvbHVtbih5KSAmJiBpblNhbWVQYXJlbnQoeCwgeS5wYXJlbnQpKTtcbmNvbnN0IHNhbWVQYXJlbnQgPSAoeyBkcmFnZ2FibGUsIHRhcmdldCB9KSA9PiBpblNhbWVQYXJlbnQoZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLCB0YXJnZXQuY29udGV4dC5jb2x1bW4pO1xuY29uc3QgbGFzdE5vbkxvY2tlZCA9ICh7IGRyYWdnYWJsZSB9KSA9PiAhaXNUcnV0aHkoZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLmxvY2tlZCkgJiZcbiAgICBpc1Jvb3RMZXZlbChkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4pICYmXG4gICAgZHJhZ2dhYmxlLmNvbnRleHQubGFzdENvbHVtbjtcbmNvbnN0IG5vdEluU3BhbkNvbHVtbiA9ICh7IGRyYWdnYWJsZSB9KSA9PiAhaXNJblNwYW5Db2x1bW4oZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uKTtcbmNvbnN0IHJlb3JkZXJhYmxlID0gKHsgZHJhZ2dhYmxlIH0pID0+IGRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbi5yZW9yZGVyYWJsZTtcbmNvbnN0IGxvY2thYmxlID0gKHsgZHJhZ2dhYmxlLCB0YXJnZXQgfSkgPT4gZHJhZ2dhYmxlLmNvbnRleHQuY29sdW1uLmxvY2thYmxlICE9PSBmYWxzZSB8fFxuICAgIGRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbi5pc0xvY2tlZCA9PT0gdGFyZ2V0LmNvbnRleHQuY29sdW1uLmlzTG9ja2VkO1xuY29uc3QgcnVsZXMgPSBhbmQob2ZDb2x1bW5UeXBlLCByZW9yZGVyYWJsZSwgbm90SW5TcGFuQ29sdW1uLCBub3RTYW1lRWxlbWVudCwgc2FtZVBhcmVudCwgbm90KGxhc3ROb25Mb2NrZWQpLCBsb2NrYWJsZSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgSGVhZGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihwb3B1cFNlcnZpY2UsIGhpbnQsIGN1ZSwgcmVvcmRlclNlcnZpY2UsIGlkU2VydmljZSwgc29ydFNlcnZpY2UsIGxvY2FsaXphdGlvbiwgY2QpIHtcbiAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UgPSBwb3B1cFNlcnZpY2U7XG4gICAgICAgIHRoaXMuaGludCA9IGhpbnQ7XG4gICAgICAgIHRoaXMuY3VlID0gY3VlO1xuICAgICAgICB0aGlzLnJlb3JkZXJTZXJ2aWNlID0gcmVvcmRlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuaWRTZXJ2aWNlID0gaWRTZXJ2aWNlO1xuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlID0gc29ydFNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLnNvcnQgPSBuZXcgQXJyYXkoKTtcbiAgICAgICAgdGhpcy5zb3J0YWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmdyb3VwYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvY2tlZENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMucmVzaXphYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVvcmRlcmFibGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb2x1bW5NZW51ID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG90YWxDb2x1bW5zQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnNvcnRlZEZpZWxkcyA9IHt9O1xuICAgICAgICB0aGlzLmRyb3BUYXJnZXRzID0gbmV3IFF1ZXJ5TGlzdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9XG4gICAgZ2V0IGhlYWRlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc2Nyb2xsYWJsZTtcbiAgICB9XG4gICAgZ2V0IHNvcnRhYmxlTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5nZXQoJ3NvcnRhYmxlJyk7XG4gICAgfVxuICAgIC8vIE51bWJlciBvZiB1bmxvY2tlZCBjb2x1bW5zIGluIHRoZSBuZXh0IHRhYmxlLCBpZiBhbnlcbiAgICBnZXQgdW5sb2NrZWRDb2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsQ29sdW1uc0NvdW50IC0gdGhpcy5sb2NrZWRDb2x1bW5zQ291bnQgLSB0aGlzLmNvbHVtbnMubGVuZ3RoO1xuICAgIH1cbiAgICBzb3J0Q29sdW1uKGNvbHVtbikge1xuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlLnNvcnQodGhpcy50b2dnbGVTb3J0KGNvbHVtbikpO1xuICAgIH1cbiAgICBvblNvcnRDbGljayhjb2x1bW4sIGV2ZW50LCBsaW5rKSB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgaWYgKGNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZiAmJiB0YXJnZXQgIT09IGxpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0ZvY3VzYWJsZVBhcmVudCA9IEJvb2xlYW4oY2xvc2VzdEluU2NvcGUodGFyZ2V0LCBpc0ZvY3VzYWJsZSwgbGluaykpO1xuICAgICAgICAgICAgaWYgKGhhc0ZvY3VzYWJsZVBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBzb3J0IHdoZW4gY2xpY2tpbmcgZm9jdXNhYmxlIHRlbXBsYXRlIGVsZW1lbnRzLlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvcnRDb2x1bW4oY29sdW1uKTtcbiAgICB9XG4gICAgb25IZWFkZXJLZXlkb3duKGNvbHVtbiwgYXJncykge1xuICAgICAgICBpZiAoIXRoaXMuc29ydGFibGUgfHwgYXJncy5kZWZhdWx0UHJldmVudGVkIHx8IGNvbHVtbi5zb3J0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5rZXlDb2RlID09PSBLZXlzLkVudGVyICYmIGlzUHJlc2VudChjb2x1bW4uZmllbGQpKSB7XG4gICAgICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlLnNvcnQodGhpcy50b2dnbGVTb3J0KGNvbHVtbikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNob3dTb3J0TnVtYmVyaW5nKGNvbHVtbikge1xuICAgICAgICBjb25zdCB7IHNob3dJbmRleGVzIH0gPSBub3JtYWxpemUkMSh0aGlzLnNvcnRhYmxlKTtcbiAgICAgICAgcmV0dXJuIHNob3dJbmRleGVzXG4gICAgICAgICAgICAmJiB0aGlzLnNvcnRcbiAgICAgICAgICAgICYmIHRoaXMuc29ydC5maWx0ZXIoKHsgZGlyIH0pID0+IGlzUHJlc2VudChkaXIpKS5sZW5ndGggPiAxXG4gICAgICAgICAgICAmJiB0aGlzLnNvcnRPcmRlcihjb2x1bW4uZmllbGQpID4gMDtcbiAgICB9XG4gICAgc29ydE9yZGVyKGZpZWxkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvcnRcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgZGlyIH0pID0+IGlzUHJlc2VudChkaXIpKVxuICAgICAgICAgICAgLmZpbmRJbmRleCh4ID0+IHguZmllbGQgPT09IGZpZWxkKVxuICAgICAgICAgICAgKyAxO1xuICAgIH1cbiAgICBzb3J0SWNvbihmaWVsZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSQkMSA9IHRoaXMuc29ydERlc2NyaXB0b3IoZmllbGQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ2staWNvbic6IGlzUHJlc2VudChzdGF0ZSQkMS5kaXIpLFxuICAgICAgICAgICAgJ2staS1zb3J0LWRlc2Mtc20nOiBzdGF0ZSQkMS5kaXIgPT09IFwiZGVzY1wiLFxuICAgICAgICAgICAgJ2staS1zb3J0LWFzYy1zbSc6IHN0YXRlJCQxLmRpciA9PT0gXCJhc2NcIlxuICAgICAgICB9O1xuICAgIH1cbiAgICBzb3J0U3RhdGUoY29sdW1uKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1NvcnRhYmxlKGNvbHVtbikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZSQkMSA9IHRoaXMuc29ydERlc2NyaXB0b3IoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgaWYgKHN0YXRlJCQxLmRpciA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgIHJldHVybiAnYXNjZW5kaW5nJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdGUkJDEuZGlyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgIHJldHVybiAnZGVzY2VuZGluZyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc29ydFN0YXR1cyhjb2x1bW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvcnRlZEZpZWxkc1tjb2x1bW4uZmllbGRdIHx8ICF0aGlzLmlzU29ydGFibGUoY29sdW1uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBtc2cgPSAnc29ydGVkRGVmYXVsdCc7XG4gICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5zb3J0RGVzY3JpcHRvcihjb2x1bW4uZmllbGQpO1xuICAgICAgICBpZiAoc3RhdGUkJDEuZGlyID09PSAnYXNjJykge1xuICAgICAgICAgICAgbXNnID0gJ3NvcnRlZEFzY2VuZGluZyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUkJDEuZGlyID09PSAnZGVzYycpIHtcbiAgICAgICAgICAgIG1zZyA9ICdzb3J0ZWREZXNjZW5kaW5nJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KG1zZyk7XG4gICAgfVxuICAgIHRvZ2dsZVNvcnQoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IHsgYWxsb3dVbnNvcnQsIG1vZGUsIGluaXRpYWxEaXJlY3Rpb24gfSA9IG5vcm1hbGl6ZSQxKHRoaXMuc29ydGFibGUsIGNvbHVtbi5zb3J0YWJsZSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLnRvZ2dsZURpcmVjdGlvbihjb2x1bW4uZmllbGQsIGFsbG93VW5zb3J0LCBpbml0aWFsRGlyZWN0aW9uKTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gW2Rlc2NyaXB0b3JdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbLi4udGhpcy5zb3J0LmZpbHRlcihkZXNjID0+IGRlc2MuZmllbGQgIT09IGNvbHVtbi5maWVsZCksIGRlc2NyaXB0b3JdO1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChvYnNlcnZlKHRoaXMuZHJvcFRhcmdldHMpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuYXR0YWNoVGFyZ2V0cy5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgdGhpcy5fbGVhZkNvbHVtbnMgPSBjb2x1bW5zVG9SZW5kZXIodGhpcy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoeCA9PiAhaXNDb2x1bW5Hcm91cENvbXBvbmVudCh4KSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgY29uc3Qgc29ydENoYW5nZSA9IGNoYW5nZXMuc29ydDtcbiAgICAgICAgaWYgKHNvcnRDaGFuZ2UgJiYgIXNvcnRDaGFuZ2UuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICBzb3J0Q2hhbmdlLmN1cnJlbnRWYWx1ZS5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0ZWRGaWVsZHNbY2hhbmdlLmZpZWxkXSA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXNcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBvcHVwU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFNlcnZpY2UuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHNlbGVjdEFsbENoZWNrYm94SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkU2VydmljZS5zZWxlY3RBbGxDaGVja2JveElkKCk7XG4gICAgfVxuICAgIGlzRmlyc3RPblJvdyhjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgIGNvbnN0IGlzVGFpbGluZyA9IChjKSA9PiBjICYmXG4gICAgICAgICAgICAodGhpcy5jb2x1bW5zRm9yTGV2ZWwoYy5sZXZlbCkuaW5kZXhPZihjKSA+IDAgfHwgaXNUYWlsaW5nKGMucGFyZW50KSk7XG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gMCAmJiAhdGhpcy5ncm91cHMubGVuZ3RoICYmICF0aGlzLmRldGFpbFRlbXBsYXRlICYmIGlzVGFpbGluZyhjb2x1bW4ucGFyZW50KTtcbiAgICB9XG4gICAgbG9naWNhbENvbHVtbkluZGV4KGNvbHVtbikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGNvbHVtbi5sZWFmSW5kZXg7XG4gICAgICAgIGlmIChpc1ByZXNlbnQoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggKyAoaXNQcmVzZW50KHRoaXMuZGV0YWlsVGVtcGxhdGUpID8gMSA6IDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgZ2V0IHNob3dGaWx0ZXJNZW51KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sdW1uTWVudSAmJiBoYXNGaWx0ZXJNZW51KHRoaXMuZmlsdGVyYWJsZSk7XG4gICAgfVxuICAgIGdldCBzaG93RmlsdGVyUm93KCkge1xuICAgICAgICByZXR1cm4gaGFzRmlsdGVyUm93KHRoaXMuZmlsdGVyYWJsZSk7XG4gICAgfVxuICAgIHNob3dDb2x1bW5NZW51KGNvbHVtbikge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5NZW51ICYmIGNvbHVtbi5jb2x1bW5NZW51ICYmXG4gICAgICAgICAgICAodGhpcy5jb2x1bW5NZW51VGVtcGxhdGUgfHwgY29sdW1uLmNvbHVtbk1lbnVUZW1wbGF0ZXMubGVuZ3RoIHx8IGhhc0l0ZW1zKHRoaXMuY29sdW1uTWVudSwgY29sdW1uKSk7XG4gICAgfVxuICAgIGlzRmlsdGVyYWJsZShjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuICFpc051bGxPckVtcHR5U3RyaW5nKGNvbHVtbi5maWVsZCkgJiYgY29sdW1uLmZpbHRlcmFibGUgPT09IHRydWU7XG4gICAgfVxuICAgIGNhbkRyb3AoZHJhZ2dhYmxlLCB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVvcmRlcmFibGUgJiYgcnVsZXMoeyBkcmFnZ2FibGUsIHRhcmdldCB9KTtcbiAgICB9XG4gICAgc2hvdWxkQWN0aXZhdGUoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGNhblJlb3JkZXIgPSB0aGlzLnJlb3JkZXJhYmxlICYmIGNvbHVtbi5yZW9yZGVyYWJsZTtcbiAgICAgICAgaWYgKCFjYW5SZW9yZGVyICYmICFpc0NvbHVtbkNvbXBvbmVudChjb2x1bW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JvdXBhYmxlID0gdGhpcy5ncm91cGFibGUgJiYgaXNDb2x1bW5Db21wb25lbnQoY29sdW1uKSAmJiBjb2x1bW4uZ3JvdXBhYmxlICE9PSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGdyb3VwYWJsZSB8fCBjYW5SZW9yZGVyO1xuICAgIH1cbiAgICBpc1NvcnRhYmxlKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gIWlzTnVsbE9yRW1wdHlTdHJpbmcoY29sdW1uLmZpZWxkKVxuICAgICAgICAgICAgJiYgaXNUcnV0aHkodGhpcy5zb3J0YWJsZSkgJiYgaXNUcnV0aHkoY29sdW1uLnNvcnRhYmxlKTtcbiAgICB9XG4gICAgaXNDaGVja2JveENvbHVtbihjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGlzQ2hlY2tib3hDb2x1bW4oY29sdW1uKSAmJiAhY29sdW1uLnRlbXBsYXRlUmVmO1xuICAgIH1cbiAgICB0cmFja0J5SW5kZXgoaW5kZXgsIF9pdGVtKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgdG9nZ2xlRGlyZWN0aW9uKGZpZWxkLCBhbGxvd1Vuc29ydCwgaW5pdGlhbERpcmVjdGlvbikge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5zb3J0RGVzY3JpcHRvcihmaWVsZCk7XG4gICAgICAgIGNvbnN0IFtmaXJzdCwgc2Vjb25kXSA9IGRpcmVjdGlvbnMoaW5pdGlhbERpcmVjdGlvbik7XG4gICAgICAgIGxldCBkaXIgPSBmaXJzdDtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IuZGlyID09PSBmaXJzdCkge1xuICAgICAgICAgICAgZGlyID0gc2Vjb25kO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRlc2NyaXB0b3IuZGlyID09PSBzZWNvbmQgJiYgYWxsb3dVbnNvcnQpIHtcbiAgICAgICAgICAgIGRpciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkaXIsIGZpZWxkIH07XG4gICAgfVxuICAgIGNvbHVtbnNGb3JMZXZlbChsZXZlbCkge1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmxldmVsID09PSBsZXZlbCkgOiBbXTtcbiAgICAgICAgcmV0dXJuIHNvcnRDb2x1bW5zKGNvbHVtbnNUb1JlbmRlcihjb2x1bW5zKSk7XG4gICAgfVxuICAgIGlzQ29sdW1uR3JvdXBDb21wb25lbnQoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBpc0NvbHVtbkdyb3VwQ29tcG9uZW50KGNvbHVtbik7XG4gICAgfVxuICAgIGdldCBjb2x1bW5MZXZlbHMoKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJyYXkoKHRoaXMudG90YWxDb2x1bW5MZXZlbHMgfHwgMCkgKyAxKTtcbiAgICB9XG4gICAgc29ydERlc2NyaXB0b3IoZmllbGQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ydC5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZCA9PT0gZmllbGQpIHx8IHsgZmllbGQgfTtcbiAgICB9XG4gICAgZ2V0IGxlYWZDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVhZkNvbHVtbnM7XG4gICAgfVxuICAgIGF0dGFjaFRhcmdldHMoKSB7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhcmdldFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgY29uc3QgZW50ZXJTdHJlYW0gPSBtZXJnZSguLi50aGlzLmRyb3BUYXJnZXRzLm1hcCh0YXJnZXQgPT4gdGFyZ2V0LmVudGVyKSk7XG4gICAgICAgIGNvbnN0IGxlYXZlU3RyZWFtID0gbWVyZ2UoLi4udGhpcy5kcm9wVGFyZ2V0cy5tYXAodGFyZ2V0ID0+IHRhcmdldC5sZWF2ZSkpO1xuICAgICAgICBjb25zdCBkcm9wU3RyZWFtID0gbWVyZ2UoLi4udGhpcy5kcm9wVGFyZ2V0cy5tYXAodGFyZ2V0ID0+IHRhcmdldC5kcm9wKSk7XG4gICAgICAgIHRoaXMudGFyZ2V0U3Vic2NyaXB0aW9uLmFkZChlbnRlclN0cmVhbS5waXBlKHRhcCgoeyB0YXJnZXQsIGRyYWdnYWJsZSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZHJhZ2dhYmxlLmNvbnRleHQudHlwZSA9PT0gJ2dyb3VwSW5kaWNhdG9yJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRhcmdldExvY2tlZCA9IGlzVHJ1dGh5KHRhcmdldC5jb250ZXh0LmNvbHVtbi5pc0xvY2tlZCk7XG4gICAgICAgICAgICBjb25zdCBkcmFnZ2FibGVMb2NrZWQgPSBpc1RydXRoeShkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4uaXNMb2NrZWQpO1xuICAgICAgICAgICAgaWYgKHRoaXMubG9ja2VkQ29sdW1uc0NvdW50ID4gMCB8fCB0YXJnZXRMb2NrZWQgfHwgZHJhZ2dhYmxlTG9ja2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaW50LnRvZ2dsZUxvY2sodGFyZ2V0TG9ja2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGZpbHRlcigoeyBkcmFnZ2FibGUsIHRhcmdldCB9KSA9PiB0aGlzLmNhbkRyb3AoZHJhZ2dhYmxlLCB0YXJnZXQpKSwgc3dpdGNoTWFwKHRoaXMudHJhY2tNb3ZlLmJpbmQodGhpcywgbGVhdmVTdHJlYW0sIGRyb3BTdHJlYW0pKSwgbWFwKChlKSA9PiBtZXJnZU9iamVjdHMoZSwgeyBiZWZvcmU6IHRoaXMuY2FsY3VsYXRlQmVmb3JlKGUpLCBjaGFuZ2VDb250YWluZXI6IGUuY2hhbmdlQ29udGFpbmVyIH0pKSwgbWFwKHRoaXMubm9ybWFsaXplVGFyZ2V0LmJpbmQodGhpcykpLCB0YXAodGhpcy5lbnRlci5iaW5kKHRoaXMpKSwgc3dpdGNoTWFwKChhcmdzKSA9PiBkcm9wU3RyZWFtLnBpcGUobWFwKCgpID0+IGFyZ3MpLCB0YWtlVW50aWwobGVhdmVTdHJlYW0ucGlwZSh0YXAodGhpcy5sZWF2ZS5iaW5kKHRoaXMpKSkpKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuZHJvcC5iaW5kKHRoaXMpKSk7XG4gICAgfVxuICAgIG5vcm1hbGl6ZVRhcmdldChlKSB7XG4gICAgICAgIGxldCB0YXJnZXQgPSBlLnRhcmdldDtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LmNvbnRleHQuY29sdW1uLnBhcmVudDtcbiAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSB0aGlzLmRyb3BUYXJnZXRzLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0U3BhbiA9IGFyci5maW5kKHQgPT4gdC5jb250ZXh0LmNvbHVtbi5wYXJlbnQgPT09IHBhcmVudCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKGZpcnN0U3Bhbik7XG4gICAgICAgICAgICBjb25zdCBhZGp1c3QgPSBlLmJlZm9yZSA/IDAgOiBwYXJlbnQuY2hpbGRDb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB0YXJnZXQgPSBhcnJbaW5kZXggKyBhZGp1c3RdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXJnZU9iamVjdHMoZSwgeyB0YXJnZXQgfSk7XG4gICAgfVxuICAgIHRyYWNrTW92ZShsZWF2ZVN0cmVhbSwgZHJvcFN0cmVhbSwgZSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBlLnRhcmdldC5jb250ZXh0LmNvbHVtbjtcbiAgICAgICAgY29uc3QgbGV2ZWxDb2x1bW5zID0gdGhpcy5jb2x1bW5zRm9yTGV2ZWwoY29sdW1uLmxldmVsKTtcbiAgICAgICAgY29uc3QgaW5kZXggPSBsZXZlbENvbHVtbnMuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICBjb25zdCBpc0ZpcnN0ID0gKGNvbHVtbi5sb2NrZWQgPyBpbmRleCA9PT0gbGV2ZWxDb2x1bW5zLmxlbmd0aCAtIDEgOiBpbmRleCA9PT0gMCk7XG4gICAgICAgIGNvbnN0IGNoYW5nZWQgPSBlLmRyYWdnYWJsZS5jb250ZXh0LmNvbHVtbi5pc0xvY2tlZCAhPT0gY29sdW1uLmlzTG9ja2VkO1xuICAgICAgICBpZiAoY2hhbmdlZCAmJiBpc0ZpcnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZS5kcmFnZ2FibGUuZHJhZ1xuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbChsZWF2ZVN0cmVhbSksIHRha2VVbnRpbChkcm9wU3RyZWFtKSwgbWFwKCh7IG1vdXNlRXZlbnQgfSkgPT4gbWVyZ2VPYmplY3RzKHsgY2hhbmdlQ29udGFpbmVyOiB0cnVlIH0sIGUsIHsgbW91c2VFdmVudCB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZihtZXJnZU9iamVjdHMoeyBjaGFuZ2VDb250YWluZXI6IGNoYW5nZWQgfSwgZSkpO1xuICAgIH1cbiAgICBjYWxjdWxhdGVCZWZvcmUoeyBkcmFnZ2FibGUsIHRhcmdldCwgbW91c2VFdmVudCwgY2hhbmdlQ29udGFpbmVyID0gZmFsc2UgfSkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gdGFyZ2V0LmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgbGV0IGJlZm9yZSA9IGZhbHNlO1xuICAgICAgICBpZiAoY2hhbmdlQ29udGFpbmVyKSB7XG4gICAgICAgICAgICBjb25zdCB7IGxlZnQgfSA9IG9mZnNldCh0YXJnZXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbGZXaWR0aCA9IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgICAgICAgY29uc3QgbWlkZGxlID0gbGVmdCArIGhhbGZXaWR0aDtcbiAgICAgICAgICAgIGJlZm9yZSA9IG1pZGRsZSA+IG1vdXNlRXZlbnQucGFnZVg7XG4gICAgICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb24ucnRsKSB7XG4gICAgICAgICAgICAgICAgYmVmb3JlID0gIWJlZm9yZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGJlZm9yZSA9IGlzVGFyZ2V0QmVmb3JlKGRyYWdnYWJsZS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIHRhcmdldEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBiZWZvcmU7XG4gICAgfVxuICAgIGVudGVyKHsgdGFyZ2V0LCBiZWZvcmUgfSkge1xuICAgICAgICB0aGlzLmhpbnQuZW5hYmxlKCk7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbi5ydGwpIHtcbiAgICAgICAgICAgIGJlZm9yZSA9ICFiZWZvcmU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdWUucG9zaXRpb24ocG9zaXRpb24odGFyZ2V0LmVsZW1lbnQubmF0aXZlRWxlbWVudCwgYmVmb3JlKSk7XG4gICAgfVxuICAgIGxlYXZlKCkge1xuICAgICAgICB0aGlzLmhpbnQuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmN1ZS5oaWRlKCk7XG4gICAgfVxuICAgIGRyb3AoeyBkcmFnZ2FibGUsIHRhcmdldCwgYmVmb3JlLCBjaGFuZ2VDb250YWluZXIgfSkge1xuICAgICAgICB0aGlzLnJlb3JkZXJTZXJ2aWNlLnJlb3JkZXIoe1xuICAgICAgICAgICAgYmVmb3JlLFxuICAgICAgICAgICAgY2hhbmdlQ29udGFpbmVyLFxuICAgICAgICAgICAgc291cmNlOiBkcmFnZ2FibGUuY29udGV4dC5jb2x1bW4sXG4gICAgICAgICAgICB0YXJnZXQ6IHRhcmdldC5jb250ZXh0LmNvbHVtblxuICAgICAgICB9KTtcbiAgICB9XG59XG5IZWFkZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRIZWFkZXJdJyxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IFtgXG4gICAgICAgIC5rLWNvbHVtbi1yZXNpemVyIHtcbiAgICAgICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTtcbiAgICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAwJTtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIHdpZHRoOiAuNWVtO1xuICAgICAgICB9XG4gICAgYF0sXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwidHJ1ZVwiPlxuICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGkgb2YgY29sdW1uTGV2ZWxzOyBsZXQgbGV2ZWxJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxldmVsSW5kZXhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJ1bmxvY2tlZENvbHVtbnNDb3VudFwiPlxuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWdyb3VwLWNlbGwgay1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDx0aCBjbGFzcz1cImstaGllcmFyY2h5LWNlbGwgay1oZWFkZXJcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxldmVsSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29sdW1uIFtuZ0Zvck9mXT1cImNvbHVtbnNGb3JMZXZlbChsZXZlbEluZGV4KVwiIFtuZ0ZvclRyYWNrQnldPVwidHJhY2tCeUluZGV4XCIgbGV0LWNvbHVtbkluZGV4PVwiaW5kZXhcIiBsZXQtbGFzdD1cImxhc3RcIj5cbiAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGwgW2xvZ2ljYWxSb3dJbmRleF09XCJsZXZlbEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2dpY2FsQ29sdW1uSW5kZXgoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Jvd1NwYW5dPVwiY29sdW1uLnJvd3NwYW4odG90YWxDb2x1bW5MZXZlbHMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cImNvbHVtbmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJzb3J0U3RhdGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uSGVhZGVyS2V5ZG93bihjb2x1bW4sICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBrZW5kb0Ryb3BUYXJnZXRcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVcbiAgICAgICAgICAgICAgICAgICAga2VuZG9EcmFnZ2FibGVDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgW2VuYWJsZURyYWddPVwic2hvdWxkQWN0aXZhdGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGludDogY29sdW1uLnRpdGxlIHx8IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDb2x1bW46IGxhc3QgJiYgY29sdW1uSW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Muay1maWx0ZXJhYmxlXT1cIihzaG93RmlsdGVyTWVudSAmJiBpc0ZpbHRlcmFibGUoY29sdW1uKSkgfHwgc2hvd0NvbHVtbk1lbnUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWZpcnN0XT1cImlzRmlyc3RPblJvdyhjb2x1bW4sIGNvbHVtbkluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5oZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5oZWFkZXJTdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY29sdW1uLnJvd3NwYW4odG90YWxDb2x1bW5MZXZlbHMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiPlxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItbWVudVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RmlsdGVyTWVudSAmJiBpc0ZpbHRlcmFibGUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbi1tZW51ICpuZ0lmPVwic2hvd0NvbHVtbk1lbnUoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2V0dGluZ3NdPVwiY29sdW1uTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uTWVudVRlbXBsYXRlXT1cImNvbHVtbk1lbnVUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydF09XCJzb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNTb3J0YWJsZShjb2x1bW4pXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbi5sZWFmSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPnt7Y29sdW1uLmRpc3BsYXlUaXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzU29ydGFibGUoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gI2xpbmsgY2xhc3M9XCJrLWxpbmtcIiAoY2xpY2spPVwib25Tb3J0Q2xpY2soY29sdW1uLCAkZXZlbnQsIGxpbmspXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW4ubGVhZkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIWNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZlwiPnt7Y29sdW1uLmRpc3BsYXlUaXRsZX19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbYXR0ci5hcmlhLWxhYmVsXT1cInNvcnRhYmxlTGFiZWxcIiBbbmdDbGFzc109XCJzb3J0SWNvbihjb2x1bW4uZmllbGQpXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd1NvcnROdW1iZXJpbmcoY29sdW1uKVwiIGNsYXNzPVwiay1zb3J0LW9yZGVyXCI+e3tzb3J0T3JkZXIoY29sdW1uLmZpZWxkKX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gcm9sZT1cInN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstc29ydC1zdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC0xMDAwMHB4O1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cInNvcnRTdGF0dXMoY29sdW1uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNDaGVja2JveENvbHVtbihjb2x1bW4pICYmICFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWYgJiYgY29sdW1uLnNob3dTZWxlY3RBbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuaWRdPVwic2VsZWN0QWxsQ2hlY2tib3hJZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRTZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstY2hlY2tib3gtbGFiZWxcIiBbYXR0ci5mb3JdPVwic2VsZWN0QWxsQ2hlY2tib3hJZCgpXCI+PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4ga2VuZG9HcmlkQ29sdW1uSGFuZGxlXG4gICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWNvbHVtbi1yZXNpemVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVzaXphYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiaXNDb2x1bW5Hcm91cENvbXBvbmVudChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGwgW2xvZ2ljYWxSb3dJbmRleF09XCJsZXZlbEluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2dpY2FsQ29sdW1uSW5kZXgoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3dTcGFuXT1cImNvbHVtbi5yb3dzcGFuKHRvdGFsQ29sdW1uTGV2ZWxzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2xTcGFuXT1cImNvbHVtbi5jb2xzcGFuXCJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9Ecm9wVGFyZ2V0XG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVEcmFnXT1cInNob3VsZEFjdGl2YXRlKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBbY29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnY29sdW1uR3JvdXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBoaW50OiBjb2x1bW4udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q29sdW1uOiBsYXN0ICYmIGNvbHVtbkluZGV4ID09PSAwXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImstaGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstZmlyc3RdPVwiaXNGaXJzdE9uUm93KGNvbHVtbiwgY29sdW1uSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstZmlsdGVyYWJsZV09XCJzaG93Q29sdW1uTWVudShjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sdW1uLmhlYWRlckNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sdW1uLmhlYWRlclN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJjb2x1bW4ucm93c3Bhbih0b3RhbENvbHVtbkxldmVscylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbi5jb2xzcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4tbWVudSAqbmdJZj1cInNob3dDb2x1bW5NZW51KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdGFuZGFsb25lXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2V0dGluZ3NdPVwiY29sdW1uTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5NZW51VGVtcGxhdGVdPVwiY29sdW1uTWVudVRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uLW1lbnU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGNvbHVtbi5oZWFkZXJUZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IGxvY2tlZENvbHVtbnNDb3VudCArIGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFjb2x1bW4uaGVhZGVyVGVtcGxhdGVSZWZcIj57e2NvbHVtbi5kaXNwbGF5VGl0bGV9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBrZW5kb0dyaWRDb2x1bW5IYW5kbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0RyYWdnYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1jb2x1bW4tcmVzaXplclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZXNpemFibGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciAqbmdJZj1cInNob3dGaWx0ZXJSb3dcIlxuICAgICAgICAgICAga2VuZG9HcmlkRmlsdGVyUm93XG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwibGVhZkNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgW2RldGFpbFRlbXBsYXRlXT1cImRldGFpbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbG9ja2VkQ29sdW1uc0NvdW50XT1cImxvY2tlZENvbHVtbnNDb3VudFwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJ0b3RhbENvbHVtbkxldmVscyArIDFcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJ1bmxvY2tlZENvbHVtbnNDb3VudFwiXG4gICAgICAgID48L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5IZWFkZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBTaW5nbGVQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IERyYWdIaW50U2VydmljZSB9LFxuICAgIHsgdHlwZTogRHJvcEN1ZVNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtblJlb3JkZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBJZFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFNvcnRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuSGVhZGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRvdGFsQ29sdW1uTGV2ZWxzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzY3JvbGxhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNvcnRhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvY2tlZENvbHVtbnNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVzaXphYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZW9yZGVyYWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudVRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0b3RhbENvbHVtbnNDb3VudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1oZWFkZXInLF0gfV0sXG4gICAgZHJvcFRhcmdldHM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogW0Ryb3BUYXJnZXREaXJlY3RpdmUsXSB9XVxufTtcblxuLy8gVE9ET1xuLy8gdHNsaW50OmRpc2FibGU6cnhqcy1uby11bnNhZmUtdGFrZXVudGlsXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgZnJvbVBlcmNlbnRhZ2UgPSAodmFsdWUsIHBlcmNlbnQpID0+IHtcbiAgICBjb25zdCBzaWduID0gcGVyY2VudCA8IDAgPyAtMSA6IDE7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgoTWF0aC5hYnMocGVyY2VudCkgLyAxMDApICogdmFsdWUpICogc2lnbjtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdG9QZXJjZW50YWdlID0gKHZhbHVlLCB3aG9sZSkgPT4gKHZhbHVlIC8gd2hvbGUpICogMTAwO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGhlYWRlcldpZHRoID0gKGhhbmRsZSkgPT4gaGFuZGxlLm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBhbGxMZWFmQ29sdW1ucyA9IGNvbHVtbnMgPT4gZXhwYW5kQ29sdW1ucyhjb2x1bW5zKVxuICAgIC5maWx0ZXIoYyA9PiAhYy5pc0NvbHVtbkdyb3VwKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBzdG9wUHJvcGFnYXRpb24gPSAoeyBvcmlnaW5hbEV2ZW50OiBldmVudCB9KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY3JlYXRlTW92ZVN0cmVhbSA9IChzZXJ2aWNlLCBkcmFnZ2FibGUpID0+IG1vdXNlRG93biA9PiBkcmFnZ2FibGUua2VuZG9EcmFnLnBpcGUodGFrZVVudGlsKGRyYWdnYWJsZS5rZW5kb1JlbGVhc2UucGlwZSh0YXAoKCkgPT4gc2VydmljZS5lbmQoKSkpKSwgbWFwKCh7IHBhZ2VYIH0pID0+ICh7XG4gICAgb3JpZ2luYWxYOiBtb3VzZURvd24ucGFnZVgsXG4gICAgcGFnZVhcbn0pKSk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgcHJldmVudE9uRGJsQ2xpY2skMSA9IHJlbGVhc2UgPT4gbW91c2VEb3duID0+IG9mKG1vdXNlRG93bikucGlwZShkZWxheSgxNTApLCB0YWtlVW50aWwocmVsZWFzZSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGlzSW5TcGFuQ29sdW1uJDEgPSBjb2x1bW4gPT4gISEoY29sdW1uLnBhcmVudCAmJiBjb2x1bW4ucGFyZW50LmlzU3BhbkNvbHVtbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiBDYWxjdWxhdGVzIHRoZSBjb2x1bW4gaW5kZXguIElmIHRoZSBjb2x1bW4gaXMgc3RhdGVkIGluIGBTcGFuQ29sdW1uYCxcbiAqIHRoZSBpbmRleCBmb3IgYWxsIGNoaWxkIGNvbHVtbnMgZXF1YWxzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgY2hpbGQuXG4gKi9cbmNvbnN0IGluZGV4T2YgPSAodGFyZ2V0LCBsaXN0KSA9PiB7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICBsZXQgaWdub3JlID0gMDtcbiAgICBsZXQgc2tpcCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgbGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGxpc3RbaW5kZXhdO1xuICAgICAgICBjb25zdCBpc1BhcmVudFNwYW5Db2x1bW4gPSBpc0luU3BhbkNvbHVtbiQxKGN1cnJlbnQpO1xuICAgICAgICBpZiAoY3VycmVudCA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGlnbm9yZS0tIDw9IDApICYmIGlzUGFyZW50U3BhbkNvbHVtbikge1xuICAgICAgICAgICAgaWdub3JlID0gY3VycmVudC5wYXJlbnQuY2hpbGRDb2x1bW5zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBza2lwICs9IGlnbm9yZTtcbiAgICAgICAgfVxuICAgICAgICBpbmRleCsrO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXggLSBza2lwO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBDb2x1bW5IYW5kbGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKGRyYWdnYWJsZSwgZWxlbWVudCwgc2VydmljZSwgem9uZSwgY2RyLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMuY2RyID0gY2RyO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdGhpcy5ydGwgPSBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtbi5yZXNpemFibGUgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIH1cbiAgICBnZXQgbGVmdFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gaXNUcnV0aHkodGhpcy5ydGwpID8gMCA6IG51bGw7XG4gICAgfVxuICAgIGdldCByaWdodFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gaXNUcnV0aHkodGhpcy5ydGwpID8gbnVsbCA6IDA7XG4gICAgfVxuICAgIGF1dG9GaXQoKSB7XG4gICAgICAgIGNvbnN0IGFsbExlYWZzID0gYWxsTGVhZkNvbHVtbnModGhpcy5jb2x1bW5zKTtcbiAgICAgICAgY29uc3QgY3VycmVudExlYWZzID0gbGVhZkNvbHVtbnMoW3RoaXMuY29sdW1uXSkuZmlsdGVyKGNvbHVtbiA9PiBpc1RydXRoeShjb2x1bW4ucmVzaXphYmxlKSk7XG4gICAgICAgIGNvbnN0IGNvbHVtbkluZm8gPSBjdXJyZW50TGVhZnMubWFwKGNvbHVtbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc1BhcmVudFNwYW4gPSBpc0luU3BhbkNvbHVtbiQxKGNvbHVtbik7XG4gICAgICAgICAgICBjb25zdCBpc0xhc3RJblNwYW4gPSBpc1BhcmVudFNwYW4gPyBjb2x1bW4ucGFyZW50LmNoaWxkQ29sdW1ucy5sYXN0ID09PSBjb2x1bW4gOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhPZihjb2x1bW4sIGFsbExlYWZzKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICAgIGhlYWRlckluZGV4OiB0aGlzLmNvbHVtbnNGb3JMZXZlbChjb2x1bW4ubGV2ZWwpLmluZGV4T2YoY29sdW1uKSxcbiAgICAgICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgICAgICBpc0xhc3RJblNwYW4sXG4gICAgICAgICAgICAgICAgaXNQYXJlbnRTcGFuLFxuICAgICAgICAgICAgICAgIGxldmVsOiBjb2x1bW4ubGV2ZWxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBjdXJyZW50TGVhZnMuZm9yRWFjaChjb2x1bW4gPT4gY29sdW1uLndpZHRoID0gMCk7XG4gICAgICAgIHRoaXMuc2VydmljZS5tZWFzdXJlQ29sdW1ucyhjb2x1bW5JbmZvKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IHNlcnZpY2UgPSB0aGlzLnNlcnZpY2UuY2hhbmdlcy5waXBlKGZpbHRlcigoKSA9PiB0aGlzLmNvbHVtbi5yZXNpemFibGUpLCBmaWx0ZXIoZSA9PiBpc1ByZXNlbnQoZS5jb2x1bW5zLmZpbmQoY29sdW1uID0+IGNvbHVtbiA9PT0gdGhpcy5jb2x1bW4pKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlcnZpY2UucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICdzdGFydCcpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmluaXRTdGF0ZS5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoc2VydmljZS5waXBlKGZpbHRlcihlID0+IGUudHlwZSA9PT0gJ3Jlc2l6ZUNvbHVtbicpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLnJlc2l6ZS5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5zZXJ2aWNlLmNoYW5nZXMucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICdzdGFydCcpLCBmaWx0ZXIodGhpcy5zaG91bGRVcGRhdGUuYmluZCh0aGlzKSksIHRha2UoMSkgLy9vbiBmaXJzdCByZXNpemUgb25seVxuICAgICAgICApLnN1YnNjcmliZSh0aGlzLmluaXRDb2x1bW5XaWR0aC5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZHJhZ2dhYmxlLmtlbmRvUHJlc3MucGlwZSh0YXAoc3RvcFByb3BhZ2F0aW9uKSwgdGFwKCgpID0+IHRoaXMuc2VydmljZS5zdGFydCh0aGlzLmNvbHVtbikpLCBzd2l0Y2hNYXAocHJldmVudE9uRGJsQ2xpY2skMSh0aGlzLmRyYWdnYWJsZS5rZW5kb1JlbGVhc2UpKSwgc3dpdGNoTWFwKGNyZWF0ZU1vdmVTdHJlYW0odGhpcy5zZXJ2aWNlLCB0aGlzLmRyYWdnYWJsZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBwYWdlWCwgb3JpZ2luYWxYIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gcGFnZVggLSBvcmlnaW5hbFg7XG4gICAgICAgICAgICBjb25zdCBwZXJjZW50ID0gdG9QZXJjZW50YWdlKGRlbHRhLCB0aGlzLmNvbHVtbi5yZXNpemVTdGFydFdpZHRoIHx8IHRoaXMuY29sdW1uLndpZHRoKTtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5yZXNpemVDb2x1bW5zKHBlcmNlbnQpO1xuICAgICAgICB9KSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlcnZpY2UucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICdhdXRvRml0Q29tcGxldGUnKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodGhpcy5zaXplVG9GaXQuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHNlcnZpY2UucGlwZShmaWx0ZXIoZSA9PiBlLnR5cGUgPT09ICd0cmlnZ2VyQXV0b0ZpdCcpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh0aGlzLmF1dG9GaXQuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB0aGlzLnJ0bCA9IHJ0bCkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2hvdWxkVXBkYXRlKCkge1xuICAgICAgICByZXR1cm4gIWFsbExlYWZDb2x1bW5zKHRoaXMuY29sdW1ucylcbiAgICAgICAgICAgIC5tYXAoY29sdW1uID0+IGNvbHVtbi53aWR0aClcbiAgICAgICAgICAgIC5zb21lKGlzQmxhbmspO1xuICAgIH1cbiAgICBpbml0Q29sdW1uV2lkdGgoKSB7XG4gICAgICAgIHRoaXMuY29sdW1uLndpZHRoID0gaGVhZGVyV2lkdGgodGhpcy5lbGVtZW50KTtcbiAgICB9XG4gICAgaW5pdFN0YXRlKCkge1xuICAgICAgICB0aGlzLmNvbHVtbi5yZXNpemVTdGFydFdpZHRoID0gaGVhZGVyV2lkdGgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnJlc2l6ZWRDb2x1bW4oe1xuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgICAgICAgIG9sZFdpZHRoOiB0aGlzLmNvbHVtbi5yZXNpemVTdGFydFdpZHRoXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXNpemUoeyBkZWx0YVBlcmNlbnQgfSkge1xuICAgICAgICBsZXQgZGVsdGEgPSBmcm9tUGVyY2VudGFnZSh0aGlzLmNvbHVtbi5yZXNpemVTdGFydFdpZHRoLCBkZWx0YVBlcmNlbnQpO1xuICAgICAgICBpZiAoaXNUcnV0aHkodGhpcy5ydGwpKSB7XG4gICAgICAgICAgICBkZWx0YSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGggKyBkZWx0YSwgdGhpcy5jb2x1bW4ubWluUmVzaXphYmxlV2lkdGgpO1xuICAgICAgICBjb25zdCB0YWJsZURlbHRhID0gbmV3V2lkdGggPiB0aGlzLmNvbHVtbi5taW5SZXNpemFibGVXaWR0aCA/XG4gICAgICAgICAgICBkZWx0YSA6IHRoaXMuY29sdW1uLm1pblJlc2l6YWJsZVdpZHRoIC0gdGhpcy5jb2x1bW4ucmVzaXplU3RhcnRXaWR0aDtcbiAgICAgICAgdGhpcy51cGRhdGVXaWR0aCh0aGlzLmNvbHVtbiwgbmV3V2lkdGgpO1xuICAgICAgICB0aGlzLnNlcnZpY2UucmVzaXplVGFibGUodGhpcy5jb2x1bW4sIHRhYmxlRGVsdGEpO1xuICAgIH1cbiAgICBzaXplVG9GaXQoeyBjb2x1bW5zLCB3aWR0aHMgfSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGNvbHVtbnMuaW5kZXhPZih0aGlzLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gTWF0aC5tYXgoLi4ud2lkdGhzLm1hcCh3ID0+IHdbaW5kZXhdKSkgKyAxOyAvL2FkZCAxcHggZm9yIElFXG4gICAgICAgIGNvbnN0IHRhYmxlRGVsdGEgPSB3aWR0aCAtIHRoaXMuY29sdW1uLnJlc2l6ZVN0YXJ0V2lkdGg7XG4gICAgICAgIHRoaXMudXBkYXRlV2lkdGgodGhpcy5jb2x1bW4sIHdpZHRoKTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnJlc2l6ZVRhYmxlKHRoaXMuY29sdW1uLCB0YWJsZURlbHRhKTtcbiAgICB9XG4gICAgdXBkYXRlV2lkdGgoY29sdW1uLCB3aWR0aCkge1xuICAgICAgICBjb2x1bW4ud2lkdGggPSB3aWR0aDtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7IC8vZm9yY2UgQ0QgY3ljbGVcbiAgICB9XG4gICAgY29sdW1uc0ZvckxldmVsKGxldmVsKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zVG9SZW5kZXIodGhpcy5jb2x1bW5zID8gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmxldmVsID09PSBsZXZlbCkgOiBbXSk7XG4gICAgfVxufVxuQ29sdW1uSGFuZGxlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ29sdW1uSGFuZGxlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uSGFuZGxlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRHJhZ2dhYmxlRGlyZWN0aXZlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBIb3N0IH1dIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5SZXNpemluZ1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbkNvbHVtbkhhbmRsZURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHZpc2libGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmRpc3BsYXknLF0gfV0sXG4gICAgbGVmdFN0eWxlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5sZWZ0JyxdIH1dLFxuICAgIHJpZ2h0U3R5bGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLnJpZ2h0JyxdIH1dLFxuICAgIGF1dG9GaXQ6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydkYmxjbGljaycsXSB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBzZWxlY3QtYWxsIGNoZWNrYm94IGZlYXR1cmUgb2YgdGhlIEdyaWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2Mtc2VsZWN0LWFsbC1mZWF0dXJlKSkuXG4gKi9cbmNsYXNzIFNlbGVjdEFsbENoZWNrYm94RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihzZWxlY3Rpb25TZXJ2aWNlLCBlbCwgcmVuZGVyZXIsIG5nWm9uZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgYGtlbmRvR3JpZFNlbGVjdEFsbENoZWNrYm94YCBzZWxlY3QtYWxsIGNoZWNrYm94XG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgc2VsZWN0aW9uX2dyaWQgJX0jdG9jLXNlbGVjdC1hbGwtZmVhdHVyZSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudHlwZSA9IFwiY2hlY2tib3hcIjtcbiAgICAgICAgdGhpcy5zdGF0ZVNldCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lDbGljayA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJjbGlja1wiLCB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuc3RhdGVTZXQgPSB0cnVlO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lDbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICAvLyB5aWVsZHMgY29uc2lzdGVudCBjcm9zcy1icm93c2VyIGJlaGF2aW9yIHdoZW4gY2xpY2tpbmcgYW4gXCJpbmRldGVybWluYXRlXCIgY2hlY2tib3hcbiAgICAgICAgY29uc3QgdW5kZWZpbmVkQ2hlY2tlZFN0YXRlSW5JRSA9IGRldGVjdElFKCkgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEFsbFN0YXRlID09PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHVuZGVmaW5lZENoZWNrZWRTdGF0ZUluSUUgPyB0cnVlIDogdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNoZWNrZWQ7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2Uub3B0aW9ucztcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGFuZ2UuZW1pdChpc0NoZWNrZWQgPyBcImNoZWNrZWRcIiA6IFwidW5jaGVja2VkXCIpO1xuICAgICAgICBpZiAob3B0aW9ucy5lbmFibGVkICYmIG9wdGlvbnMubW9kZSA9PT0gXCJtdWx0aXBsZVwiKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS51cGRhdGVBbGwoaXNDaGVja2VkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXRTdGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RhdGUkJDEgPSB0aGlzLnN0YXRlU2V0ID8gdGhpcy5zdGF0ZVRvQm9vbCgpIDogdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdEFsbFN0YXRlO1xuICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KGVsZW0sIFwiaW5kZXRlcm1pbmF0ZVwiLCAhaXNQcmVzZW50KHN0YXRlJCQxKSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkoZWxlbSwgXCJjaGVja2VkXCIsIGlzUHJlc2VudChzdGF0ZSQkMSkgPyBzdGF0ZSQkMSA6IGZhbHNlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHN0YXRlVG9Cb29sKCkge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJjaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBjYXNlIFwidW5jaGVja2VkXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuU2VsZWN0QWxsQ2hlY2tib3hEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRTZWxlY3RBbGxDaGVja2JveF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNlbGVjdEFsbENoZWNrYm94RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogU2VsZWN0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblNlbGVjdEFsbENoZWNrYm94RGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHN0YXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RBbGxDaGFuZ2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICB0eXBlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnR5cGUnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJNZW51Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihmaWx0ZXJTZXJ2aWNlLCBwb3B1cFNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmZpbHRlclNlcnZpY2UgPSBmaWx0ZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbHRlckxhYmVsID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdmaWx0ZXInKTtcbiAgICB9XG4gICAgZ2V0IGhhc0ZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJzQnlGaWVsZCh0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCkubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgdG9nZ2xlKGFuY2hvciwgdGVtcGxhdGUpIHtcbiAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oYW5jaG9yLCB0ZW1wbGF0ZSwgdGhpcy5wb3B1cFJlZik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2xvc2UoKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICB9XG59XG5GaWx0ZXJNZW51Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWZpbHRlci1tZW51JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSAjYW5jaG9yXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2stZ3JpZC1maWx0ZXInOnRydWUsICdrLXN0YXRlLWFjdGl2ZSc6IGhhc0ZpbHRlcnN9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoYW5jaG9yLCB0ZW1wbGF0ZSlcIlxuICAgICAgICAgICAgaHJlZj1cIiNcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiZmlsdGVyTGFiZWxcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1maWx0ZXJcIj48L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxrZW5kby1ncmlkLWZpbHRlci1tZW51LWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICAgICAgKGNsb3NlKT1cImNsb3NlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItbWVudS1jb250YWluZXI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJNZW51Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogU2luZ2xlUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5GaWx0ZXJNZW51Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuY29uc3QgaXNOb1ZhbHVlT3BlcmF0b3IgPSBvcGVyYXRvciA9PiAob3BlcmF0b3IgPT09IFwiaXNudWxsXCJcbiAgICB8fCBvcGVyYXRvciA9PT0gXCJpc25vdG51bGxcIlxuICAgIHx8IG9wZXJhdG9yID09PSBcImlzZW1wdHlcIlxuICAgIHx8IG9wZXJhdG9yID09PSBcImlzbm90ZW1wdHlcIik7XG5jb25zdCB2YWxpZEZpbHRlcnMgPSAoeyB2YWx1ZSwgb3BlcmF0b3IgfSkgPT4gIWlzTnVsbE9yRW1wdHlTdHJpbmcodmFsdWUpIHx8IGlzTm9WYWx1ZU9wZXJhdG9yKG9wZXJhdG9yKTtcbmNvbnN0IHRyaW1GaWx0ZXJzID0gZmlsdGVyJCQxID0+IHtcbiAgICBmaWx0ZXIkJDEuZmlsdGVycyA9IGZpbHRlciQkMS5maWx0ZXJzLmZpbHRlcih2YWxpZEZpbHRlcnMpO1xuICAgIHJldHVybiBmaWx0ZXIkJDE7XG59O1xuY29uc3QgZmluZFBhcmVudCA9IChmaWx0ZXJzLCBmaWVsZCwgcGFyZW50KSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcnMucmVkdWNlKChhY2MsIGZpbHRlciQkMSkgPT4ge1xuICAgICAgICBpZiAoYWNjKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXIkJDEuZmlsdGVycykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRQYXJlbnQoZmlsdGVyJCQxLmZpbHRlcnMsIGZpZWxkLCBmaWx0ZXIkJDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGZpbHRlciQkMS5maWVsZCA9PT0gZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB1bmRlZmluZWQpOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG59O1xuY29uc3QgcGFyZW50TG9naWNPZkRlZmF1bHQgPSAoZmlsdGVyJCQxLCBmaWVsZCwgZGVmID0gXCJhbmRcIikgPT4ge1xuICAgIGNvbnN0IHBhcmVudCA9IGZpbmRQYXJlbnQoKChmaWx0ZXIkJDEgfHwge30pLmZpbHRlcnMgfHwgW10pLCBmaWVsZCk7XG4gICAgcmV0dXJuIGlzUHJlc2VudChwYXJlbnQpID8gcGFyZW50LmxvZ2ljIDogZGVmO1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBGaWx0ZXJNZW51Q29udGFpbmVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnRTZXJ2aWNlLCBjaGlsZFNlcnZpY2UsIGxvY2FsaXphdGlvbiwgY2QpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRTZXJ2aWNlID0gcGFyZW50U2VydmljZTtcbiAgICAgICAgdGhpcy5jaGlsZFNlcnZpY2UgPSBjaGlsZFNlcnZpY2U7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLmNkID0gY2Q7XG4gICAgICAgIHRoaXMuY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFjdGlvbnNDbGFzcyA9ICdrLWFjdGlvbi1idXR0b25zIGstYnV0dG9uLWdyb3VwJztcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0ID0ge307XG4gICAgfVxuICAgIGdldCBmaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjdXJyZW50IHJvb3QgZmlsdGVyLlxuICAgICAqIEB0eXBlIHtDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAqL1xuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZmlsdGVyID0gY2xvbmVGaWx0ZXJzKHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGNoaWxkRmlsdGVyKCkge1xuICAgICAgICBpZiAoIWlzUHJlc2VudCh0aGlzLl9jaGlsZEZpbHRlcikpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkRmlsdGVyID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnNCeUZpZWxkKHRoaXMuZmlsdGVyLCAodGhpcy5jb2x1bW4gfHwge30pLmZpZWxkKSxcbiAgICAgICAgICAgICAgICBsb2dpYzogcGFyZW50TG9naWNPZkRlZmF1bHQodGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGlsZEZpbHRlcjtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5jaGlsZFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoZmlsdGVyJCQxID0+IHRoaXMuX2NoaWxkRmlsdGVyID0gZmlsdGVyJCQxKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5jaGlsZEZpbHRlci5maWx0ZXJzLnNvbWUodmFsaWRGaWx0ZXJzKTtcbiAgICB9XG4gICAgZ2V0IHRlbXBsYXRlQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZUNvbnRleHQuZmlsdGVyID0gdGhpcy5jaGlsZEZpbHRlcjtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVDb250ZXh0LmZpbHRlclNlcnZpY2UgPSB0aGlzLmNoaWxkU2VydmljZTtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXN0cmluZy1saXRlcmFsXG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dFtcIiRpbXBsaWNpdFwiXSA9IHRoaXMuY2hpbGRGaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUNvbnRleHQ7XG4gICAgfVxuICAgIGdldCBoYXNUZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLmNvbHVtbikgJiYgaXNQcmVzZW50KHRoaXMuY29sdW1uLmZpbHRlck1lbnVUZW1wbGF0ZVJlZik7XG4gICAgfVxuICAgIHN1Ym1pdCgpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyJCQxID0gdHJpbUZpbHRlcnModGhpcy5jaGlsZEZpbHRlcik7XG4gICAgICAgIGlmIChmaWx0ZXIkJDEuZmlsdGVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmZpbHRlciB8fCB7XG4gICAgICAgICAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgICAgICAgICAgbG9naWM6IFwiYW5kXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZW1vdmVGaWx0ZXIocm9vdCwgdGhpcy5jb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgcm9vdC5maWx0ZXJzLnB1c2goZmlsdGVyJCQxKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50U2VydmljZS5maWx0ZXIocm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZS5lbWl0KCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLmZpbHRlciB8fCB7XG4gICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgIGxvZ2ljOiBcImFuZFwiXG4gICAgICAgIH07XG4gICAgICAgIHJlbW92ZUZpbHRlcihyb290LCB0aGlzLmNvbHVtbi5maWVsZCk7XG4gICAgICAgIHRoaXMucGFyZW50U2VydmljZS5maWx0ZXIocm9vdCk7XG4gICAgICAgIHRoaXMuY2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICBnZXQgY2xlYXJUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyQ2xlYXJCdXR0b25cIik7XG4gICAgfVxuICAgIGdldCBmaWx0ZXJUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KFwiZmlsdGVyRmlsdGVyQnV0dG9uXCIpO1xuICAgIH1cbn1cbkZpbHRlck1lbnVDb250YWluZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtGaWx0ZXJTZXJ2aWNlXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUtY29udGFpbmVyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8Zm9ybSAoc3VibWl0KT1cInN1Ym1pdCgpXCIgKHJlc2V0KT1cInJlc2V0KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWZpbHRlci1tZW51IGstZ3JvdXAgay1yZXNldCBrLXN0YXRlLWJvcmRlci11cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImstZmlsdGVyLW1lbnUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiaGFzVGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0ZpbHRlck1lbnVIb3N0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiY2hpbGRTZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJjaGlsZEZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbHVtbi5maWx0ZXJNZW51VGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbHVtbi5maWx0ZXJNZW51VGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ0ZW1wbGF0ZUNvbnRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiYWN0aW9uc0NsYXNzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJrLWJ1dHRvblwiPnt7Y2xlYXJUZXh0fX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJrLWJ1dHRvbiBrLXByaW1hcnlcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj57e2ZpbHRlclRleHR9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlck1lbnVDb250YWluZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBGaWx0ZXJTZXJ2aWNlLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9XSB9LFxuICAgIHsgdHlwZTogRmlsdGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcbkZpbHRlck1lbnVDb250YWluZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2xvc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uc0NsYXNzOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBGaWx0ZXJJbnB1dFdyYXBwZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihudWxsKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBvcGVyYXRvckNoYW5nZShkYXRhSXRlbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRPcGVyYXRvciA9IGRhdGFJdGVtO1xuICAgIH1cbiAgICBmaWx0ZXJDaGFuZ2UoZmlsdGVyJCQxKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoZmlsdGVyJCQxKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhlIGN1cnJlbnQgZmlsdGVyIGZvciB0aGUgYXNzb2NpYXRlZCBjb2x1bW4gZmllbGQuXG4gICAgICogQHJlYWRvbmx5XG4gICAgICogQHR5cGUge0ZpbHRlckRlc2NyaXB0b3J9XG4gICAgICovXG4gICAgZ2V0IGN1cnJlbnRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50RmlsdGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY3VycmVudCBmaWx0ZXIgZm9yIHRoZSBhc3NvY2lhdGVkIGNvbHVtbiBmaWVsZC5cbiAgICAgKiBAcmVhZG9ubHlcbiAgICAgKiBAdHlwZSB7RmlsdGVyRGVzY3JpcHRvcn1cbiAgICAgKi9cbiAgICBzZXQgY3VycmVudEZpbHRlcih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9jdXJyZW50RmlsdGVyID0gdmFsdWU7XG4gICAgfVxuICAgIHVwZGF0ZUZpbHRlcihmaWx0ZXIkJDEpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmN1cnJlbnRGaWx0ZXIsIGZpbHRlciQkMSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcjtcbiAgICB9XG4gICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UodGhpcy51cGRhdGVGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgb3BlcmF0b3I6IHRoaXMuY3VycmVudE9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlXG4gICAgICAgIH0pKTtcbiAgICB9XG59XG5GaWx0ZXJNZW51SW5wdXRXcmFwcGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3RcbiAgICAgICAgICAgIFtkYXRhXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib3BlcmF0b3JDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudE9wZXJhdG9yXCJcbiAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCI+XG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5GaWx0ZXJNZW51SW5wdXRXcmFwcGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW107XG5GaWx0ZXJNZW51SW5wdXRXcmFwcGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGN1cnJlbnRGaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU3RyaW5nRmlsdGVyTWVudUlucHV0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICB9XG59XG5TdHJpbmdGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1tZW51LWlucHV0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItbWVudS1pbnB1dC13cmFwcGVyXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbZGVmYXVsdE9wZXJhdG9yXT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJrLXRleHRib3hcIiBrZW5kb0ZpbHRlcklucHV0IFtmaWx0ZXJEZWxheV09XCIwXCIgW25nTW9kZWxdPVwiY3VycmVudEZpbHRlcj8udmFsdWVcIiAvPlxuICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUtaW5wdXQtd3JhcHBlcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5TdHJpbmdGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGN1cnJlbnRGaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzdHJpbmctZmlsdGVyIG1lbnUgY29tcG9uZW50LlxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBidWlsdGluZmlsdGVydGVtcGxhdGVfZ3JpZCAlfSN0b2MtY29uZmlndXJhdGlvbi1jb21wb25lbnRzLWZvci1maWx0ZXItdGVtcGxhdGVzKSkuXG4gKi9cbmNsYXNzIFN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQgZXh0ZW5kcyBTdHJpbmdGaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihudWxsLCBsb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmxvZ2ljT3BlcmF0b3JzID0gbG9naWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbWVudSBmaWx0ZXIuXG4gICAgICAgICAqIEB0eXBlIHtDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXIgPSB7IGZpbHRlcnM6IFtdLCBsb2dpYzogXCJhbmRcIiB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgaW5wdXRzIG9mIHNlY29uZCBjcml0ZXJpYSB3aWxsIGRpc3BsYXllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXh0cmEgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBmaXJzdEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHNldEZpbHRlcigwLCB0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCwgdGhpcy5vcGVyYXRvcik7XG4gICAgfVxuICAgIGdldCBzZWNvbmRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRGaWx0ZXIoMSwgdGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQsIHRoaXMub3BlcmF0b3IpO1xuICAgIH1cbiAgICBsb2dpY0NoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmZpbHRlci5sb2dpYyA9IHZhbHVlO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubG9naWNPcGVyYXRvcnMgPSBsb2dpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIHN1cGVyLmxvY2FsaXphdGlvbkNoYW5nZSgpO1xuICAgIH1cbn1cblN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtc3RyaW5nLWZpbHRlci1tZW51JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImZpcnN0RmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIj5cbiAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItbWVudS1pbnB1dD5cbiAgICAgICAgPGtlbmRvLWRyb3Bkb3dubGlzdFxuICAgICAgICAgICAgKm5nSWY9XCJleHRyYVwiXG4gICAgICAgICAgICBjbGFzcz1cImstZmlsdGVyLWFuZFwiXG4gICAgICAgICAgICBbZGF0YV09XCJsb2dpY09wZXJhdG9yc1wiXG4gICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiICh2YWx1ZUNoYW5nZSk9XCJsb2dpY0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmaWx0ZXI/LmxvZ2ljXCJcbiAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCI+XG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxuICAgICAgICA8a2VuZG8tZ3JpZC1zdHJpbmctZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiZXh0cmFcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwic2Vjb25kRmlsdGVyXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIj5cbiAgICAgICAgPC9rZW5kby1ncmlkLXN0cmluZy1maWx0ZXItbWVudS1pbnB1dD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5TdHJpbmdGaWx0ZXJNZW51Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwnLF0gfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGV4dHJhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgbnVtZXJpYy1maWx0ZXIgbWVudSBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqICBgYGBodG1sLW5vLXJ1blxuICogICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIiB0aXRsZT1cIlVuaXQgUHJpY2VcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJNZW51VGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWZpbHRlclNlcnZpY2U9XCJmaWx0ZXJTZXJ2aWNlXCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1tZW51XG4gKiAgICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICogICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAqICAgICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAqICAgICAgICAgICAgICA+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtbnVtZXJpYy1maWx0ZXItbWVudT5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBOdW1lcmljRmlsdGVyTWVudUNvbXBvbmVudCBleHRlbmRzIE51bWVyaWNGaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihudWxsLCBsb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmxvZ2ljT3BlcmF0b3JzID0gbG9naWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbWVudSBmaWx0ZXIuXG4gICAgICAgICAqIEB0eXBlIHtDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXIgPSB7IGZpbHRlcnM6IFtdLCBsb2dpYzogXCJhbmRcIiB9O1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgaW5wdXRzIG9mIHNlY29uZCBjcml0ZXJpYSB3aWxsIGRpc3BsYXllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXh0cmEgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBmaXJzdEZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHNldEZpbHRlcigwLCB0aGlzLmZpbHRlciwgKHRoaXMuY29sdW1uIHx8IHt9KS5maWVsZCwgdGhpcy5vcGVyYXRvcik7XG4gICAgfVxuICAgIGdldCBzZWNvbmRGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRGaWx0ZXIoMSwgdGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQsIHRoaXMub3BlcmF0b3IpO1xuICAgIH1cbiAgICBsb2dpY0NoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmZpbHRlci5sb2dpYyA9IHZhbHVlO1xuICAgIH1cbiAgICBsb2NhbGl6YXRpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMubG9naWNPcGVyYXRvcnMgPSBsb2dpY09wZXJhdG9ycyh0aGlzLmxvY2FsaXphdGlvbik7XG4gICAgICAgIHN1cGVyLmxvY2FsaXphdGlvbkNoYW5nZSgpO1xuICAgIH1cbn1cbk51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImZpcnN0RmlsdGVyXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgW2RlY2ltYWxzXT1cImRlY2ltYWxzXCJcbiAgICAgICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyc1wiXG4gICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUtaW5wdXQ+XG4gICAgICAgIDxrZW5kby1kcm9wZG93bmxpc3RcbiAgICAgICAgICAgICpuZ0lmPVwiZXh0cmFcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWZpbHRlci1hbmRcIlxuICAgICAgICAgICAgW2RhdGFdPVwibG9naWNPcGVyYXRvcnNcIlxuICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImxvZ2ljQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlcj8ubG9naWNcIlxuICAgICAgICAgICAgdGV4dEZpZWxkPVwidGV4dFwiXG4gICAgICAgICAgICB2YWx1ZUZpZWxkPVwidmFsdWVcIj5cbiAgICAgICAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XG4gICAgICAgIDxrZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUtaW5wdXRcbiAgICAgICAgICAgICpuZ0lmPVwiZXh0cmFcIlxuICAgICAgICAgICAgW29wZXJhdG9yc109XCJvcGVyYXRvcnNcIlxuICAgICAgICAgICAgW2N1cnJlbnRGaWx0ZXJdPVwic2Vjb25kRmlsdGVyXCJcbiAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICAgICAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICAgICAgW2ZpbHRlcl09XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgW2RlY2ltYWxzXT1cImRlY2ltYWxzXCJcbiAgICAgICAgICAgIFtzcGlubmVyc109XCJzcGlubmVyc1wiXG4gICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICBbbWF4XT1cIm1heFwiXG4gICAgICAgICAgICBbc3RlcF09XCJzdGVwXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9rZW5kby1ncmlkLW51bWVyaWMtZmlsdGVyLW1lbnUtaW5wdXQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5OdW1lcmljRmlsdGVyTWVudUNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbk51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWZpbHRlcmNlbGwnLF0gfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGV4dHJhOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE51bWVyaWNGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdmFsdWUgd2hpY2ggaXMgdXNlZCB0byBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IHRoZSBjb21wb25lbnQgdmFsdWUuXG4gICAgICAgICAqIEB0eXBlIHtudW1lcmljfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGVwID0gMTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB3aGV0aGVyIHRoZSAqKlVwKiogYW5kICoqRG93bioqIHNwaW4gYnV0dG9ucyB3aWxsIGJlIHJlbmRlcmVkLlxuICAgICAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3Bpbm5lcnMgPSB0cnVlO1xuICAgIH1cbiAgICBtZXNzYWdlRm9yKGtleSkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KGtleSk7XG4gICAgfVxufVxuTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1udW1lcmljLWZpbHRlci1tZW51LWlucHV0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItbWVudS1pbnB1dC13cmFwcGVyXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbZGVmYXVsdE9wZXJhdG9yXT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveFxuICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVySW5wdXRcbiAgICAgICAgICAgICAgICBbZmlsdGVyRGVsYXldPVwiMFwiXG4gICAgICAgICAgICAgICAgW2F1dG9Db3JyZWN0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJjdXJyZW50RmlsdGVyPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgIFtkZWNpbWFsc109XCJkZWNpbWFsc1wiXG4gICAgICAgICAgICAgICAgW3NwaW5uZXJzXT1cInNwaW5uZXJzXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cIm1pblwiXG4gICAgICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxrZW5kby1udW1lcmljdGV4dGJveC1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICBbaW5jcmVtZW50XT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlck51bWVyaWNJbmNyZW1lbnQnKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZWNyZW1lbnRdPVwibWVzc2FnZUZvcignZmlsdGVyTnVtZXJpY0RlY3JlbWVudCcpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9rZW5kby1udW1lcmljdGV4dGJveC1tZXNzYWdlcz5cbiAgICAgICAgICAgIDwva2VuZG8tbnVtZXJpY3RleHRib3g+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1maWx0ZXItbWVudS1pbnB1dC13cmFwcGVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuTnVtZXJpY0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcbk51bWVyaWNGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3BlcmF0b3JzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW46IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgb3BlcmF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGN1cnJlbnRGaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzcGlubmVyczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZGVjaW1hbHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRhdGUtZmlsdGVyIG1lbnUgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgYGBgaHRtbC1uby1ydW5cbiAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiT3JkZXJEYXRlXCIgdGl0bGU9XCJPcmRlciBEYXRlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkRmlsdGVyTWVudVRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiIGxldC1maWx0ZXJTZXJ2aWNlPVwiZmlsdGVyU2VydmljZVwiPlxuICogICAgICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51XG4gKiAgICAgICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gKiAgICAgICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gKiAgICAgICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAqICAgICAgICAgICAgICAgID5cbiAqICAgICAgICAgICAgPC9rZW5kby1ncmlkLWRhdGUtZmlsdGVyLW1lbnU+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICBgYGBcbiAqL1xuY2xhc3MgRGF0ZUZpbHRlck1lbnVDb21wb25lbnQgZXh0ZW5kcyBEYXRlRmlsdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIobnVsbCwgbG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5sb2dpY09wZXJhdG9ycyA9IGxvZ2ljT3BlcmF0b3JzKHRoaXMubG9jYWxpemF0aW9uKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSBjdXJyZW50IG1lbnUgZmlsdGVyLlxuICAgICAgICAgKiBAdHlwZSB7Q29tcG9zaXRlRmlsdGVyRGVzY3JpcHRvcn1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsdGVyID0geyBmaWx0ZXJzOiBbXSwgbG9naWM6IFwiYW5kXCIgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERldGVybWluZXMgaWYgdGhlIGlucHV0cyBvZiBzZWNvbmQgY3JpdGVyaWEgd2lsbCBiZSBkaXNwbGF5ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4dHJhID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgZmlyc3RGaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiBzZXRGaWx0ZXIoMCwgdGhpcy5maWx0ZXIsICh0aGlzLmNvbHVtbiB8fCB7fSkuZmllbGQsIHRoaXMub3BlcmF0b3IpO1xuICAgIH1cbiAgICBnZXQgc2Vjb25kRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4gc2V0RmlsdGVyKDEsIHRoaXMuZmlsdGVyLCAodGhpcy5jb2x1bW4gfHwge30pLmZpZWxkLCB0aGlzLm9wZXJhdG9yKTtcbiAgICB9XG4gICAgbG9naWNDaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgdGhpcy5maWx0ZXIubG9naWMgPSB2YWx1ZTtcbiAgICB9XG4gICAgbG9jYWxpemF0aW9uQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLmxvZ2ljT3BlcmF0b3JzID0gbG9naWNPcGVyYXRvcnModGhpcy5sb2NhbGl6YXRpb24pO1xuICAgICAgICBzdXBlci5sb2NhbGl6YXRpb25DaGFuZ2UoKTtcbiAgICB9XG59XG5EYXRlRmlsdGVyTWVudUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51LWlucHV0XG4gICAgICAgICAgICBbY3VycmVudEZpbHRlcl09XCJmaXJzdEZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgW2JvdHRvbVZpZXddPVwiYm90dG9tVmlld1wiXG4gICAgICAgICAgICBbdG9wVmlld109XCJ0b3BWaWV3XCJcbiAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51LWlucHV0PlxuICAgICAgICA8a2VuZG8tZHJvcGRvd25saXN0XG4gICAgICAgICAgICAqbmdJZj1cImV4dHJhXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1maWx0ZXItYW5kXCJcbiAgICAgICAgICAgIFtkYXRhXT1cImxvZ2ljT3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJsb2dpY0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJmaWx0ZXI/LmxvZ2ljXCJcbiAgICAgICAgICAgIHRleHRGaWVsZD1cInRleHRcIlxuICAgICAgICAgICAgdmFsdWVGaWVsZD1cInZhbHVlXCI+XG4gICAgICAgIDwva2VuZG8tZHJvcGRvd25saXN0PlxuICAgICAgICA8a2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51LWlucHV0XG4gICAgICAgICAgICAqbmdJZj1cImV4dHJhXCJcbiAgICAgICAgICAgIFtvcGVyYXRvcnNdPVwib3BlcmF0b3JzXCJcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cInNlY29uZEZpbHRlclwiXG4gICAgICAgICAgICBbZmlsdGVyU2VydmljZV09XCJmaWx0ZXJTZXJ2aWNlXCJcbiAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAgICAgICAgICAgIFthY3RpdmVWaWV3XT1cImFjdGl2ZVZpZXdcIlxuICAgICAgICAgICAgW2JvdHRvbVZpZXddPVwiYm90dG9tVmlld1wiXG4gICAgICAgICAgICBbdG9wVmlld109XCJ0b3BWaWV3XCJcbiAgICAgICAgICAgIFtmb3JtYXRdPVwiZm9ybWF0XCJcbiAgICAgICAgICAgIFtmb3JtYXRQbGFjZWhvbGRlcl09XCJmb3JtYXRQbGFjZWhvbGRlclwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgW21heF09XCJtYXhcIlxuICAgICAgICAgICAgW3dlZWtOdW1iZXJdPVwid2Vla051bWJlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51LWlucHV0PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRGF0ZUZpbHRlck1lbnVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5EYXRlRmlsdGVyTWVudUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1maWx0ZXJjZWxsJyxdIH1dLFxuICAgIGNvbHVtbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBleHRyYTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyU2VydmljZTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEJvb2xlYW4tZmlsdGVyIG1lbnUgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiAgYGBgaHRtbC1uby1ydW5cbiAqICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRGlzY29udGludWVkXCIgdGl0bGU9XCJEaXNjb250aW51ZWRcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRGaWx0ZXJNZW51VGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgbGV0LWZpbHRlclNlcnZpY2U9XCJmaWx0ZXJTZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgIDxrZW5kby1ncmlkLWJvb2xlYW4tZmlsdGVyLW1lbnVcbiAqICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAqICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyXCJcbiAqICAgICAgICAgICAgICAgIFtmaWx0ZXJTZXJ2aWNlXT1cImZpbHRlclNlcnZpY2VcIlxuICogICAgICAgICAgICAgICAgPlxuICogICAgICAgICAgICA8L2tlbmRvLWdyaWQtYm9vbGVhbi1maWx0ZXItbWVudT5cbiAqICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgIGBgYFxuICovXG5jbGFzcyBCb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudCBleHRlbmRzIEJvb2xlYW5GaWx0ZXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbikge1xuICAgICAgICBzdXBlcihudWxsLCBsb2NhbGl6YXRpb24pO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIGN1cnJlbnQgbWVudSBmaWx0ZXIuXG4gICAgICAgICAqIEB0eXBlIHtDb21wb3NpdGVGaWx0ZXJEZXNjcmlwdG9yfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5maWx0ZXIgPSB7IGZpbHRlcnM6IFtdLCBsb2dpYzogXCJhbmRcIiB9O1xuICAgICAgICB0aGlzLmlkUHJlZml4ID0gZ3VpZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICByYWRpb0lkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmlkUHJlZml4fV8ke3ZhbHVlfWA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKHRoaXMudXBkYXRlRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgfSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaXNTZWxlY3RlZChyYWRpb1ZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnNCeUZpZWxkKHRoaXMuY29sdW1uLmZpZWxkKS5zb21lKCh7IHZhbHVlIH0pID0+IHZhbHVlID09PSByYWRpb1ZhbHVlKTtcbiAgICB9XG59XG5Cb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1ib29sZWFuLWZpbHRlci1tZW51JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dWwgY2xhc3M9XCJrLXJhZGlvLWxpc3Qgay1yZXNldFwiPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgICAgICAgIFtuYW1lXT1cImlkUHJlZml4XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLXJhZGlvXCJcbiAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNTZWxlY3RlZChpdGVtLnZhbHVlKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cInJhZGlvSWQoaXRlbS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2hhbmdlKGl0ZW0udmFsdWUpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImstcmFkaW8tbGFiZWxcIiBbYXR0ci5mb3JdPVwicmFkaW9JZChpdGVtLnZhbHVlKVwiPnt7aXRlbS50ZXh0fX08L2xhYmVsPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQm9vbGVhbkZpbHRlck1lbnVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmlsdGVyY2VsbCcsXSB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlclNlcnZpY2U6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqXG4gKiA+IExpc3QgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzIGFzIGBlbnRyeUNvbXBvbmVudHNgIGluIHRoZSBHcmlkTW9kdWxlLlxuICovXG5jb25zdCBmaWx0ZXJNZW51Q29tcG9uZW50RmFjdG9yeSA9ICh0eXBlKSA9PiAoe1xuICAgIFwiYm9vbGVhblwiOiBCb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICBcImRhdGVcIjogRGF0ZUZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgXCJudW1lcmljXCI6IE51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIFwidGV4dFwiOiBTdHJpbmdGaWx0ZXJNZW51Q29tcG9uZW50XG59W3R5cGVdKTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck1lbnVIb3N0RGlyZWN0aXZlIGV4dGVuZHMgRmlsdGVySG9zdERpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoaG9zdCwgcmVzb2x2ZXIpIHtcbiAgICAgICAgc3VwZXIoaG9zdCwgcmVzb2x2ZXIpO1xuICAgIH1cbiAgICBjb21wb25lbnRUeXBlKCkge1xuICAgICAgICBpZiAoaXNQcmVzZW50KHRoaXMuY29sdW1uKSAmJiAhaXNOdWxsT3JFbXB0eVN0cmluZyh0aGlzLmNvbHVtbi5maWx0ZXIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyTWVudUNvbXBvbmVudEZhY3RvcnkodGhpcy5jb2x1bW4uZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudDtcbiAgICB9XG4gICAgaW5pdENvbXBvbmVudChjdHgpIHtcbiAgICAgICAgc3VwZXIuaW5pdENvbXBvbmVudChjdHgpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudC5pbnN0YW5jZS5maWx0ZXJTZXJ2aWNlID0gdGhpcy5maWx0ZXJTZXJ2aWNlO1xuICAgIH1cbn1cbkZpbHRlck1lbnVIb3N0RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9GaWx0ZXJNZW51SG9zdF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkZpbHRlck1lbnVIb3N0RGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVmlld0NvbnRhaW5lclJlZiB9LFxuICAgIHsgdHlwZTogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH1cbl07XG5GaWx0ZXJNZW51SG9zdERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBmaWx0ZXJTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERhdGVGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgbG9jYWxpemF0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlID0gbG9jYWxpemF0aW9uU2VydmljZTtcbiAgICAgICAgdGhpcy5vcGVyYXRvcnMgPSBbXTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvcGVuKHBpY2tlcikge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9uQ2xvc2VcbiAgICAgICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiBwaWNrZXIuaXNBY3RpdmUpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShlID0+IGUucHJldmVudERlZmF1bHQoKSk7XG4gICAgfVxuICAgIG1lc3NhZ2VGb3Ioa2V5KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UuZ2V0KGtleSk7XG4gICAgfVxufVxuRGF0ZUZpbHRlck1lbnVJbnB1dENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1kYXRlLWZpbHRlci1tZW51LWlucHV0JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItbWVudS1pbnB1dC13cmFwcGVyXG4gICAgICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgICAgICBbZmlsdGVyXT1cImZpbHRlclwiXG4gICAgICAgICAgICBbb3BlcmF0b3JzXT1cIm9wZXJhdG9yc1wiXG4gICAgICAgICAgICBbZGVmYXVsdE9wZXJhdG9yXT1cIm9wZXJhdG9yXCJcbiAgICAgICAgICAgIFtjdXJyZW50RmlsdGVyXT1cImN1cnJlbnRGaWx0ZXJcIlxuICAgICAgICAgICAgW2ZpbHRlclNlcnZpY2VdPVwiZmlsdGVyU2VydmljZVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxrZW5kby1kYXRlcGlja2VyXG4gICAgICAgICAgICAgICAgI3BpY2tlclxuICAgICAgICAgICAgICAgIGtlbmRvRmlsdGVySW5wdXRcbiAgICAgICAgICAgICAgICBbZmlsdGVyRGVsYXldPVwiMFwiXG4gICAgICAgICAgICAgICAgKG9wZW4pPVwib3BlbihwaWNrZXIpXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiY3VycmVudEZpbHRlcj8udmFsdWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW2Zvcm1hdFBsYWNlaG9sZGVyXT1cImZvcm1hdFBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICBbZm9ybWF0XT1cImZvcm1hdFwiXG4gICAgICAgICAgICAgICAgW21pbl09XCJtaW5cIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4XCJcbiAgICAgICAgICAgICAgICBbYWN0aXZlVmlld109XCJhY3RpdmVWaWV3XCJcbiAgICAgICAgICAgICAgICBbYm90dG9tVmlld109XCJib3R0b21WaWV3XCJcbiAgICAgICAgICAgICAgICBbdG9wVmlld109XCJ0b3BWaWV3XCJcbiAgICAgICAgICAgICAgICBbd2Vla051bWJlcl09XCJ3ZWVrTnVtYmVyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8a2VuZG8tZGF0ZXBpY2tlci1tZXNzYWdlc1xuICAgICAgICAgICAgICAgICAgICBbdG9nZ2xlXT1cIm1lc3NhZ2VGb3IoJ2ZpbHRlckRhdGVUb2dnbGUnKVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b2RheV09XCJtZXNzYWdlRm9yKCdmaWx0ZXJEYXRlVG9kYXknKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwva2VuZG8tZGF0ZXBpY2tlci1tZXNzYWdlcz5cbiAgICAgICAgICAgIDwva2VuZG8tZGF0ZXBpY2tlcj5cbiAgICAgICAgPC9rZW5kby1ncmlkLWZpbHRlci1tZW51LWlucHV0LXdyYXBwZXI+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EYXRlRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogU2luZ2xlUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5EYXRlRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIG9wZXJhdG9yczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9wZXJhdG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjdXJyZW50RmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWx0ZXJTZXJ2aWNlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmb3JtYXQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcm1hdFBsYWNlaG9sZGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwbGFjZWhvbGRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtYXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGl2ZVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGJvdHRvbVZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvcFZpZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdlZWtOdW1iZXI6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBJTlRFUk5BTF9DT01QT05FTlRTJDIgPSBbXG4gICAgRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICBGaWx0ZXJNZW51Q29udGFpbmVyQ29tcG9uZW50LFxuICAgIEZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQsXG4gICAgU3RyaW5nRmlsdGVyTWVudUlucHV0Q29tcG9uZW50LFxuICAgIFN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgRmlsdGVyTWVudVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIE51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIE51bWVyaWNGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUZpbHRlck1lbnVJbnB1dENvbXBvbmVudCxcbiAgICBEYXRlRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICBGaWx0ZXJNZW51SG9zdERpcmVjdGl2ZSxcbiAgICBCb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudFxuXTtcbmNvbnN0IEVOVFJZX0NPTVBPTkVOVFMkMSA9IFtcbiAgICBTdHJpbmdGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIE51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIERhdGVGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgIEJvb2xlYW5GaWx0ZXJNZW51Q29tcG9uZW50XG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZpbHRlck1lbnVNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgU3RyaW5nRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICAgICAgICAgIEZpbHRlck1lbnVUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgICAgIE51bWVyaWNGaWx0ZXJNZW51Q29tcG9uZW50LFxuICAgICAgICAgICAgRGF0ZUZpbHRlck1lbnVDb21wb25lbnQsXG4gICAgICAgICAgICBCb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudCxcbiAgICAgICAgICAgIFNoYXJlZEZpbHRlck1vZHVsZS5leHBvcnRzKClcbiAgICAgICAgXTtcbiAgICB9XG59XG5GaWx0ZXJNZW51TW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtJTlRFUk5BTF9DT01QT05FTlRTJDJdLFxuICAgICAgICAgICAgICAgIGVudHJ5Q29tcG9uZW50czogRU5UUllfQ09NUE9ORU5UUyQxLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtJTlRFUk5BTF9DT01QT05FTlRTJDIsIFNoYXJlZEZpbHRlck1vZHVsZV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW1NoYXJlZEZpbHRlck1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbkxpc3RDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIG5nWm9uZSwgcmVuZGVyZXIpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5yZXNldCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5hcHBseSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jb2x1bW5DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuYXV0b1N5bmMgPSB0cnVlO1xuICAgICAgICB0aGlzLmFsbG93SGlkZUFsbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFjdGlvbnNDbGFzcyA9ICdrLWFjdGlvbi1idXR0b25zJztcbiAgICAgICAgdGhpcy51bmxvY2tlZENvdW50ID0gMDtcbiAgICB9XG4gICAgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHNldCBjb2x1bW5zKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSB2YWx1ZS5maWx0ZXIoY29sdW1uID0+IGNvbHVtbi5pbmNsdWRlSW5DaG9vc2VyICE9PSBmYWxzZSk7XG4gICAgICAgIHRoaXMuYWxsQ29sdW1ucyA9IHZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtblN0YXRlKCk7XG4gICAgfVxuICAgIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgICB9XG4gICAgaXNEaXNhYmxlZChjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuICEodGhpcy5hbGxvd0hpZGVBbGwgfHwgdGhpcy5oYXNGaWx0ZXJlZCB8fCBjb2x1bW4uaGlkZGVuIHx8IHRoaXMuY29sdW1ucy5maW5kKGN1cnJlbnQgPT4gY3VycmVudCAhPT0gY29sdW1uICYmICFjdXJyZW50LmhpZGRlbikpIHx8XG4gICAgICAgICAgICAodGhpcy5oYXNWaXNpYmxlTG9ja2VkICYmICF0aGlzLmhhc1VubG9ja2VkRmlsdGVyZWQgJiYgdGhpcy51bmxvY2tlZENvdW50ID09PSAxICYmICFjb2x1bW4ubG9ja2VkICYmICFjb2x1bW4uaGlkZGVuKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb21TdWJzY3JpcHRpb25zID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc0NsYXNzZXMoZS50YXJnZXQsICdrLWNoZWNrYm94JykpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1N5bmMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gcGFyc2VJbnQoZS50YXJnZXQuZ2V0QXR0cmlidXRlKCdkYXRhLWluZGV4JyksIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc1tpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBoaWRkZW4gPSAhZS50YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCb29sZWFuKGNvbHVtbi5oaWRkZW4pICE9PSBoaWRkZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uaGlkZGVuID0gaGlkZGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkNoYW5nZS5lbWl0KFtjb2x1bW5dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuZG9tU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhbmNlbENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaENoZWNrQm94KChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgZWxlbWVudC5jaGVja2VkID0gIXRoaXMuY29sdW1uc1tpbmRleF0uaGlkZGVuO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVEaXNhYmxlZCgpO1xuICAgICAgICB0aGlzLnJlc2V0LmVtaXQoKTtcbiAgICB9XG4gICAgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCBjaGFuZ2VkID0gW107XG4gICAgICAgIHRoaXMuZm9yRWFjaENoZWNrQm94KChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGhpZGRlbiA9ICFlbGVtZW50LmNoZWNrZWQ7XG4gICAgICAgICAgICBpZiAoQm9vbGVhbihjb2x1bW4uaGlkZGVuKSAhPT0gaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLmhpZGRlbiA9IGhpZGRlbjtcbiAgICAgICAgICAgICAgICBjaGFuZ2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlRGlzYWJsZWQoKTtcbiAgICAgICAgdGhpcy5hcHBseS5lbWl0KGNoYW5nZWQpO1xuICAgIH1cbiAgICBmb3JFYWNoQ2hlY2tCb3goY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgY2hlY2tib3hlcyA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2stY2hlY2tib3gnKTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gY2hlY2tib3hlcy5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKGNoZWNrYm94ZXNbaWR4XSwgaWR4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1cGRhdGVEaXNhYmxlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dIaWRlQWxsICYmICF0aGlzLmhhc0xvY2tlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLmZvckVhY2hDaGVja0JveCgoY2hlY2tib3gsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgIGNoZWNrZWRJdGVtcy5wdXNoKHsgY2hlY2tib3gsIGluZGV4IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5hbGxvd0hpZGVBbGwgJiYgY2hlY2tlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJiAhdGhpcy5oYXNGaWx0ZXJlZCkge1xuICAgICAgICAgICAgY2hlY2tlZEl0ZW1zWzBdLmNoZWNrYm94LmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmhhc0xvY2tlZCAmJiAhdGhpcy5oYXNVbmxvY2tlZEZpbHRlcmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZFVubG9ja2VkID0gY2hlY2tlZEl0ZW1zLmZpbHRlcihpdGVtID0+ICFjb2x1bW5zW2l0ZW0uaW5kZXhdLmxvY2tlZCk7XG4gICAgICAgICAgICBpZiAoY2hlY2tlZFVubG9ja2VkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNoZWNrZWRVbmxvY2tlZFswXS5jaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQ29sdW1uU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuaGFzTG9ja2VkID0gdGhpcy5hbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmxvY2tlZCAmJiAoIWNvbHVtbi5oaWRkZW4gfHwgY29sdW1uLmluY2x1ZGVJbkNob29zZXIgIT09IGZhbHNlKSkubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5oYXNWaXNpYmxlTG9ja2VkID0gdGhpcy5hbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmxvY2tlZCAmJiAhY29sdW1uLmhpZGRlbikubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy51bmxvY2tlZENvdW50ID0gdGhpcy5jb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gIWNvbHVtbi5sb2NrZWQgJiYgIWNvbHVtbi5oaWRkZW4pLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gdGhpcy5hbGxDb2x1bW5zLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLmluY2x1ZGVJbkNob29zZXIgPT09IGZhbHNlICYmICFjb2x1bW4uaGlkZGVuKTtcbiAgICAgICAgaWYgKGZpbHRlcmVkQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyZWQgPSBmaWx0ZXJlZENvbHVtbnMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIHRoaXMuaGFzVW5sb2NrZWRGaWx0ZXJlZCA9IGZpbHRlcmVkQ29sdW1ucy5maWx0ZXIoY29sdW1uID0+ICFjb2x1bW4ubG9ja2VkKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5oYXNVbmxvY2tlZEZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG5Db2x1bW5MaXN0Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbmxpc3QnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWNvbHVtbi1saXN0XCI+XG4gICAgICAgICAgICA8bGFiZWwgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgaW5kZXggPSBpbmRleDtcIiBjbGFzcz0nay1jb2x1bW4tbGlzdC1pdGVtJz5cbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJrLWNoZWNrYm94XCIgdHlwZT1cImNoZWNrYm94XCIgW2F0dHIuZGF0YS1pbmRleF09XCJpbmRleFwiIFtjaGVja2VkXT1cIiFjb2x1bW4uaGlkZGVuXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoY29sdW1uKVwiIC8+PHNwYW4gY2xhc3M9XCJrLWNoZWNrYm94LWxhYmVsXCI+e3sgY29sdW1uLmRpc3BsYXlUaXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImFjdGlvbnNDbGFzc1wiICpuZ0lmPVwiIWF1dG9TeW5jXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbENoYW5nZXMoKVwiPnt7IHJlc2V0VGV4dCB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJrLWJ1dHRvbiBrLXByaW1hcnlcIiAoY2xpY2spPVwiYXBwbHlDaGFuZ2VzKClcIj57eyBhcHBseVRleHQgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5MaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcbkNvbHVtbkxpc3RDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY2xhc3NOYW1lOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogW1wiY2xhc3Muay1jb2x1bW4tbGlzdC13cmFwcGVyXCIsXSB9XSxcbiAgICByZXNldDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGFwcGx5OiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sdW1uQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXV0b1N5bmM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFsbG93SGlkZUFsbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYXBwbHlUZXh0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXNldFRleHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFjdGlvbnNDbGFzczogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgY29sdW1ucyBpbiB0aGUgR3JpZC4gVG8gZW5hYmxlIHRoZSB1c2VyIHRvIHNob3cgb3IgaGlkZSBjb2x1bW5zLFxuICogYWRkIHRoZSBjb21wb25lbnQgaW5zaWRlIGEgW2BUb29sYmFyVGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX3Rvb2xiYXJ0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICpcbiAqIEBleGFtcGxlXG4gKiB7JSBtZXRhIGhlaWdodDozMDAgJX1cbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICogICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uLWNob29zZXI+PC9rZW5kby1ncmlkLWNvbHVtbi1jaG9vc2VyPlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDJcIiBbaGlkZGVuXT1cInRydWVcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IGFueVtdID0gW3sgRmllbGQxOiAnRm9vJywgRmllbGQyOiAnQmFyJyB9XTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqIHslIGVuZG1ldGEgJX1cbiAqL1xuY2xhc3MgQ29sdW1uQ2hvb3NlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBjb2x1bW5JbmZvU2VydmljZSwgcG9wdXBTZXJ2aWNlLCBuZ1pvbmUsIHJlbmRlcmVyLCBjaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZSA9IGNvbHVtbkluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZSA9IHBvcHVwU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBjaGFuZ2VzIGluIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBjb2x1bW4gd2lsbCBiZSBpbW1lZGlhdGVseSBhcHBsaWVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hdXRvU3luYyA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIGFsbCBjb2x1bW5zIGNhbiBiZSBoaWRkZW4uXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmFsbG93SGlkZUFsbCA9IHRydWU7XG4gICAgfVxuICAgIGdldCBjb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5JbmZvU2VydmljZS5sZWFmTmFtZWRDb2x1bW5zO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlKGFuY2hvciwgdGVtcGxhdGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvcHVwUmVmKSB7XG4gICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IHRoaXMucG9wdXBTZXJ2aWNlLm9wZW4oe1xuICAgICAgICAgICAgICAgIGFuY2hvcjogYW5jaG9yLFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uTW9kZTogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgICAgICBhbmNob3JBbGlnbjogeyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6IGRpcmVjdGlvbiB9LFxuICAgICAgICAgICAgICAgIHBvcHVwQWxpZ246IHsgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiBkaXJlY3Rpb24gfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudCwgJ2RpcicsIHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cicpO1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGhpcy5jbG9zZUNsaWNrID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oXCJkb2N1bWVudFwiLCBcImNsaWNrXCIsICh7IHRhcmdldCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjbG9zZXN0KHRhcmdldCwgbm9kZSA9PiBub2RlID09PSB0aGlzLnBvcHVwUmVmLnBvcHVwRWxlbWVudCB8fCBub2RlID09PSBhbmNob3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQXBwbHkoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGlmIChjaGFuZ2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY2hhbmdlVmlzaWJpbGl0eShjaGFuZ2VkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DaGFuZ2UoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLmNoYW5nZVZpc2liaWxpdHkoY2hhbmdlZCk7XG4gICAgfVxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5wb3B1cFJlZikge1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZi5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cFJlZiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXRhY2hDbG9zZSgpO1xuICAgIH1cbiAgICBkZXRhY2hDbG9zZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VDbGljaykge1xuICAgICAgICAgICAgdGhpcy5jbG9zZUNsaWNrKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlQ2xpY2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxufVxuQ29sdW1uQ2hvb3NlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW4tY2hvb3NlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGJ1dHRvbiAjYW5jaG9yXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoYW5jaG9yLCB0ZW1wbGF0ZSlcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWJ1dHRvbiBrLWJhcmUgay1idXR0b24taWNvblwiXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09XCJsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5zJylcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1jb2x1bW5zXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSdrLWNvbHVtbi1jaG9vc2VyLXRpdGxlJz57eyBsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5zJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5saXN0XG4gICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgW2FwcGx5VGV4dF09XCJsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5zQXBwbHknKVwiXG4gICAgICAgICAgICAgICAgW3Jlc2V0VGV4dF09XCJsb2NhbGl6YXRpb24uZ2V0KCdjb2x1bW5zUmVzZXQnKVwiXG4gICAgICAgICAgICAgICAgW2F1dG9TeW5jXT1cImF1dG9TeW5jXCJcbiAgICAgICAgICAgICAgICBbYWxsb3dIaWRlQWxsXT1cImFsbG93SGlkZUFsbFwiXG4gICAgICAgICAgICAgICAgKGFwcGx5KT1cIm9uQXBwbHkoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNvbHVtbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubGlzdD5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbkNob29zZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5JbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogUG9wdXBTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcbkNvbHVtbkNob29zZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYXV0b1N5bmM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFsbG93SGlkZUFsbDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc2VydmljZSB0aGF0IGlzIHBhc3NlZCB0byB0aGVcbiAqIFtgQ29sdW1uTWVudVRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51dGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtkYXRhXT1cImRhdGFcIiBbY29sdW1uTWVudV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudVRlbXBsYXRlIGxldC1zZXJ2aWNlPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1jbG9zZVwiIChjbGljayk9XCJzZXJ2aWNlLmNsb3NlKClcIlxuICogICAgICAgICAgICAgICAgICBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgcmlnaHQ6IDVweDsgdG9wOiA1cHg7Y3Vyc29yOiBwb2ludGVyO1wiPjwvc3Bhbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQ+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5NZW51U2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNsb3NlTWVudSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvc2VzIHRoZSBjb2x1bW4gbWVudS5cbiAgICAgKi9cbiAgICBjbG9zZSgpIHtcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUuZW1pdCgpO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVTZXJ2aWNlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBJbmplY3RhYmxlIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ29sdW1uTWVudUl0ZW1CYXNlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHNlcnZpY2UgaW5wdXQgb2YgdGhlIHByZWRlZmluZWQgY29sdW1uIG1lbnUgY29tcG9uZW50cyBpcyBtYW5kYXRvcnkuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnNlcnZpY2UuY2xvc2UoKTtcbiAgICB9XG59XG5Db2x1bW5NZW51SXRlbUJhc2UucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2VydmljZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNvbHVtbm1lbnUtaXRlbS13cmFwcGVyJyxdIH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGggKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29tcG9uZW50IGZvciBzZWxlY3RpbmcgY29sdW1ucyBpbiB0aGUgR3JpZCB0aGF0IGNhbiBiZSBwbGFjZWRcbiAqIGluc2lkZSBhIFtgQ29sdW1uTWVudVRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51dGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZS5cbiAqXG4gKiA+IFlvdSBoYXZlIHRvIHNldCB0aGUgW0NvbHVtbk1lbnVTZXJ2aWNlXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnVzZXJ2aWNlICV9KSB0aGF0IGlzIHBhc3NlZCBieVxuICogPiB0aGUgdGVtcGxhdGUgdG8gdGhlIHNlcnZpY2UgaW5wdXQgb2YgdGhlIGBrZW5kby1ncmlkLWNvbHVtbm1lbnUtY2hvb3NlcmAgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiB7JSBtZXRhIGhlaWdodDozMDAgJX1cbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWNob29zZXIgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWNob29zZXI+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICogeyUgZW5kbWV0YSAlfVxuICovXG5jbGFzcyBDb2x1bW5NZW51Q2hvb3NlckNvbXBvbmVudCBleHRlbmRzIENvbHVtbk1lbnVJdGVtQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBjb2x1bW5JbmZvU2VydmljZSwgY2hhbmdlRGV0ZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UgPSBjb2x1bW5JbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBleHBhbmRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBjb2xsYXBzZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBjb250ZW50IGlzIGV4cGFuZGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3Rpb25zQ2xhc3MgPSAnay1jb2x1bW5tZW51LWFjdGlvbnMnO1xuICAgIH1cbiAgICBnZXQgY29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UubGVhZk5hbWVkQ29sdW1ucztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQXBwbHkoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGlmIChjaGFuZ2VkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY2hhbmdlVmlzaWJpbGl0eShjaGFuZ2VkKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkNvbHVtbk1lbnVDaG9vc2VyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbm1lbnUtY2hvb3NlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIFt0ZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnMnKVwiXG4gICAgICAgICAgICBpY29uPVwiY29sdW1uc1wiIFtleHBhbmRlZF09XCJleHBhbmRlZFwiIChjb2xsYXBzZSk9XCJjb2xsYXBzZS5lbWl0KClcIiAoZXhwYW5kKT1cImV4cGFuZC5lbWl0KClcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5saXN0XG4gICAgICAgICAgICAgICAgICAgIFthcHBseVRleHRdPVwibG9jYWxpemF0aW9uLmdldCgnY29sdW1uc0FwcGx5JylcIlxuICAgICAgICAgICAgICAgICAgICBbcmVzZXRUZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ2NvbHVtbnNSZXNldCcpXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgICAgICAgICAgICAgICAgIFthdXRvU3luY109XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0hpZGVBbGxdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbYWN0aW9uc0NsYXNzXT1cImFjdGlvbnNDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIChhcHBseSk9XCJvbkFwcGx5KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubGlzdD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5NZW51Q2hvb3NlckNvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbkluZm9TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuQ29sdW1uTWVudUNob29zZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZXhwYW5kOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgY29sbGFwc2U6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBleHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aCAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBjb21wb25lbnQgZm9yIGVkaXRpbmcgY29sdW1uIGZpbHRlcnMgaW4gdGhlIEdyaWQgdGhhdCBjYW4gYmUgcGxhY2VkXG4gKiBpbnNpZGUgYSBbYENvbHVtbk1lbnVUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXRlbXBsYXRlZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUuXG4gKlxuICogPiBZb3UgaGF2ZSB0byBzZXQgdGhlIFtDb2x1bW5NZW51U2VydmljZV0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51c2VydmljZSAlfSkgdGhhdCBpcyBwYXNzZWQgYnlcbiAqID4gdGhlIHRlbXBsYXRlIHRvIHRoZSBzZXJ2aWNlIGlucHV0IG9mIHRoZSBga2VuZG8tZ3JpZC1jb2x1bW5tZW51LWZpbHRlcmAgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKiB7JSBtZXRhIGhlaWdodDo0MDAgJX1cbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBba2VuZG9HcmlkQmluZGluZ109XCJkYXRhXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWZpbHRlciBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtZmlsdGVyPlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDJcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IGFueVtdID0gW3sgRmllbGQxOiAnRm9vJywgRmllbGQyOiAnQmFyJyB9XTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqIHslIGVuZG1ldGEgJX1cbiAqL1xuY2xhc3MgQ29sdW1uTWVudUZpbHRlckNvbXBvbmVudCBleHRlbmRzIENvbHVtbk1lbnVJdGVtQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBleHBhbmRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZXhwYW5kID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgY29udGVudCBpcyBjb2xsYXBzZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSBjb250ZW50IGlzIGV4cGFuZGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3Rpb25zQ2xhc3MgPSAnay1jb2x1bW5tZW51LWFjdGlvbnMnO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVGaWx0ZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1ubWVudS1maWx0ZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbSBbdGV4dF09XCJsb2NhbGl6YXRpb24uZ2V0KCdmaWx0ZXInKVwiIGljb249XCJmaWx0ZXJcIlxuICAgICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCIgKGNvbGxhcHNlKT1cImNvbGxhcHNlLmVtaXQoKVwiIChleHBhbmQpPVwiZXhwYW5kLmVtaXQoKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1maWx0ZXItbWVudS1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwic2VydmljZS5jb2x1bW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcl09XCJzZXJ2aWNlLmZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uc0NsYXNzXT1cImFjdGlvbnNDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiY2xvc2UoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtZmlsdGVyLW1lbnUtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db2x1bW5NZW51RmlsdGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuQ29sdW1uTWVudUZpbHRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBleHBhbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGV4cGFuZGVkOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbnRlbnQgdGVtcGxhdGUgb2YgdGhlXG4gKiBbYGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51aXRlbWNvbXBvbmVudCAlfSkgY29tcG9uZW50LlxuICogUHJvdmlkZXMgYW4gb3B0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBjb250ZW50IG9mIGEgY29sdW1uIGl0ZW0uXG4gKiBUbyBkZWZpbmUgdGhlIGNvbnRlbnQgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZVxuICogYGtlbmRvR3JpZENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGEgYDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5gLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZGF0YVwiIFtjb2x1bW5NZW51XT1cInRydWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51VGVtcGxhdGU+XG4gKiAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIHRleHQ9XCJJdGVtIFRleHRcIiBbZXhwYW5kZWRdPVwidHJ1ZVwiPlxuICogICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGU+XG4gKiAgICAgICAgICAgICAgICAgICAgICBJdGVtIENvbnRlbnRcbiAqICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtPlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMVwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDJcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgcHVibGljIGRhdGE6IGFueVtdID0gW3sgRmllbGQxOiAnRm9vJywgRmllbGQyOiAnQmFyJyB9XTtcbiAqIH1cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5Db2x1bW5NZW51SXRlbUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGl0ZW0gdGhhdCBjYW4gYmUgcGxhY2VkIGluc2lkZSBhXG4gKiBbYENvbHVtbk1lbnVUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXRlbXBsYXRlZGlyZWN0aXZlICV9KSBkaXJlY3RpdmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiIFtyZXNpemFibGVdPVwidHJ1ZVwiICNncmlkPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gKiAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIGljb249XCJhcnJvd3MtcmVzaXppbmdcIiB0ZXh0PVwiRml0IGNvbHVtblwiXG4gKiAgICAgICAgICAgICAgICAgIChpdGVtQ2xpY2spPVwiZ3JpZC5hdXRvRml0Q29sdW1uKGNvbHVtbik7IHNlcnZpY2UuY2xvc2UoKVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWl0ZW0+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMlwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5NZW51SXRlbUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBpdGVtIGlzIGNsaWNrZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLml0ZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGNvbnRlbnQgaXMgZXhwYW5kZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGNvbnRlbnQgaXMgY29sbGFwc2VkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb2xsYXBzZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5jb250ZW50U3RhdGUgPSAnY29sbGFwc2VkJztcbiAgICB9XG4gICAgZ2V0IGljb25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGBrLWktJHt0aGlzLmljb259YDtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5leHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQoZSk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLmV4cGFuZGVkO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250ZW50U3RhdGUoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmQuZW1pdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xsYXBzZS5lbWl0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlQ29udGVudFN0YXRlKCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdGF0ZSA9IHRoaXMuZXhwYW5kZWQgPyAnZXhwYW5kZWQnIDogJ2NvbGxhcHNlZCc7XG4gICAgfVxufVxuQ29sdW1uTWVudUl0ZW1Db21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3N0YXRlJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgZGlzcGxheTogJ25vbmUnIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKCdleHBhbmRlZCcsIHN0eWxlKHsgZGlzcGxheTogJ2Jsb2NrJyB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKCdjb2xsYXBzZWQgPT4gZXhwYW5kZWQnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZSgnMTAwbXMgZWFzZS1pbicsIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbignZXhwYW5kZWQgPT4gY29sbGFwc2VkJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAnKidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCcxMDBtcyBlYXNlLWluJywgc3R5bGUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6ICcwcHgnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cImstY29sdW1ubWVudS1pdGVtXCIgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiIFtjbGFzcy5rLXN0YXRlLXNlbGVjdGVkXT1cInNlbGVjdGVkXCIgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJrLWljb25cIiBbbmdDbGFzc109XCJpY29uQ2xhc3NcIj5cbiAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICB7eyB0ZXh0IH19XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGVudFRlbXBsYXRlXCIgW0BzdGF0ZV09XCJjb250ZW50U3RhdGVcIiBzdHlsZT1cIm92ZXJmbG93OmhpZGRlbjtcIiBjbGFzcz1cImstY29sdW1ubWVudS1pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29udGVudFRlbXBsYXRlLnRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5Db2x1bW5NZW51SXRlbUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBpdGVtQ2xpY2s6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBleHBhbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRleHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXhwYW5kZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbnRlbnRUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXSB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb2x1bW4tbWVudSBpdGVtIGZvciBzb3J0aW5nIEdyaWQgY29sdW1ucyB0aGF0IGNhbiBiZSBwbGFjZWQgaW5zaWRlIGFcbiAqIFtgQ29sdW1uTWVudVRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51dGVtcGxhdGVkaXJlY3RpdmUgJX0pIGRpcmVjdGl2ZS5cbiAqIEFsbG93cyB0aGUgdXNlciB0byBzb3J0IHRoZSBjb2x1bW4uXG4gKlxuICogPiBZb3UgaGF2ZSB0byBzZXQgdGhlIFtDb2x1bW5NZW51U2VydmljZV0oeyUgc2x1ZyBhcGlfZ3JpZF9jb2x1bW5tZW51c2VydmljZSAlfSkgdGhhdCBpcyBwYXNzZWQgYnlcbiAqID4gdGhlIHRlbXBsYXRlIHRvIHRoZSBzZXJ2aWNlIGlucHV0IG9mIHRoZSBga2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnRgIGNvbXBvbmVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgIDxrZW5kby1ncmlkIFtrZW5kb0dyaWRCaW5kaW5nXT1cImRhdGFcIiBbc29ydGFibGVdPVwidHJ1ZVwiIFtjb2x1bW5NZW51XT1cInRydWVcIj5cbiAqICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDb2x1bW5NZW51VGVtcGxhdGUgbGV0LXNlcnZpY2U9XCJzZXJ2aWNlXCI+XG4gKiAgICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0IFtzZXJ2aWNlXT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1zb3J0PlxuICogICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIkZpZWxkMVwiIFt3aWR0aF09XCIxMDBcIj48L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQyXCIgW3dpZHRoXT1cIjEwMFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICBwdWJsaWMgZGF0YTogYW55W10gPSBbeyBGaWVsZDE6ICdGb28nLCBGaWVsZDI6ICdCYXInIH0sIHsgRmllbGQxOiAnRm9vMScsIEZpZWxkMjogJ0JhcjEnIH1dO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDb2x1bW5NZW51U29ydENvbXBvbmVudCBleHRlbmRzIENvbHVtbk1lbnVJdGVtQmFzZSB7XG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCBzb3J0U2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5zb3J0U2VydmljZSA9IHNvcnRTZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgc29ydGVkQXNjKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvciAmJiAoIWRlc2NyaXB0b3IuZGlyIHx8IGRlc2NyaXB0b3IuZGlyID09PSAnYXNjJyk7XG4gICAgfVxuICAgIGdldCBzb3J0ZWREZXNjKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmRpciA9PT0gJ2Rlc2MnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlU29ydChkaXIpIHtcbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLnNlcnZpY2UuY29sdW1uLmZpZWxkO1xuICAgICAgICBjb25zdCB7IG1vZGUsIGFsbG93VW5zb3J0IH0gPSBub3JtYWxpemUkMSh0aGlzLnNlcnZpY2Uuc29ydGFibGUpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yO1xuICAgICAgICBjb25zdCBzb3J0ID0gbW9kZSA9PT0gJ211bHRpcGxlJyA/IHRoaXMuc2VydmljZS5zb3J0LmZpbHRlcihzID0+IHMuZmllbGQgIT09IGZpZWxkKSA6IFtdO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmRpciA9PT0gZGlyKSB7XG4gICAgICAgICAgICBpZiAoIWFsbG93VW5zb3J0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc29ydC5wdXNoKHsgZmllbGQsIGRpciB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNvcnRTZXJ2aWNlLnNvcnQoc29ydCk7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgZ2V0IGRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiBbXS5jb25jYXQodGhpcy5zZXJ2aWNlLnNvcnQgfHwgW10pLmZpbmQocyA9PiBzLmZpZWxkID09PSB0aGlzLnNlcnZpY2UuY29sdW1uLmZpZWxkKTtcbiAgICB9XG59XG5Db2x1bW5NZW51U29ydENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbSBbdGV4dF09XCJsb2NhbGl6YXRpb24uZ2V0KCdzb3J0QXNjZW5kaW5nJylcIlxuICAgICAgICAgICAgaWNvbj1cInNvcnQtYXNjLXNtXCIgKGl0ZW1DbGljayk9XCJ0b2dnbGVTb3J0KCdhc2MnKVwiIFtzZWxlY3RlZF09XCJzb3J0ZWRBc2NcIj5cbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5cbiAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtIFt0ZXh0XT1cImxvY2FsaXphdGlvbi5nZXQoJ3NvcnREZXNjZW5kaW5nJylcIlxuICAgICAgICAgICAgaWNvbj1cInNvcnQtZGVzYy1zbVwiIChpdGVtQ2xpY2spPVwidG9nZ2xlU29ydCgnZGVzYycpXCIgW3NlbGVjdGVkXT1cInNvcnRlZERlc2NcIj5cbiAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbk1lbnVTb3J0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogU29ydFNlcnZpY2UgfVxuXTtcblxuY29uc3QgUE9QVVBfQ0xBU1MgPSAnay1ncmlkLWNvbHVtbm1lbnUtcG9wdXAnO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbY29sdW1uIG1lbnVdKHslIHNsdWcgY29sdW1ubWVudV9ncmlkICV9KSBjb21wb25lbnQuXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBvcHVwU2VydmljZSwgbG9jYWxpemF0aW9uLCBzZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMucG9wdXBTZXJ2aWNlID0gcG9wdXBTZXJ2aWNlO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RhbmRhbG9uZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgc2V0dGluZ3MgZm9yIHRoZSBDb2x1bW4gTWVudS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc29ydGFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRlZEZpbHRlciA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRlZENvbHVtbnMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jbG9zZVN1YnNjcmlwdGlvbiA9IHNlcnZpY2UuY2xvc2VNZW51LnN1YnNjcmliZSh0aGlzLmNsb3NlLmJpbmQodGhpcykpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlzQWN0aXZlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaGFzRmlsdGVyICYmIGZpbHRlcnNCeUZpZWxkKHRoaXMuZmlsdGVyLCB0aGlzLmNvbHVtbi5maWVsZCkubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICghdGhpcy5zb3J0YWJsZSAmJiB0aGlzLmhhc1NvcnQgJiYgdGhpcy5zb3J0LmZpbmQoZGVzY3JpcHRvciA9PiBkZXNjcmlwdG9yLmZpZWxkID09PSB0aGlzLmNvbHVtbi5maWVsZCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0ZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIGhhc0ZpbHRlcih0aGlzLnNldHRpbmdzLCB0aGlzLmNvbHVtbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgaGFzU29ydCgpIHtcbiAgICAgICAgcmV0dXJuIGhhc1NvcnQodGhpcy5zZXR0aW5ncywgdGhpcy5jb2x1bW4pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0NvbHVtbkNob29zZXIoKSB7XG4gICAgICAgIHJldHVybiBoYXNDb2x1bW5DaG9vc2VyKHRoaXMuc2V0dGluZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGhhc0xvY2soKSB7XG4gICAgICAgIHJldHVybiBoYXNMb2NrKHRoaXMuc2V0dGluZ3MsIHRoaXMuY29sdW1uKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuc2VydmljZS5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICAgIHRoaXMuc2VydmljZS5maWx0ZXIgPSB0aGlzLmZpbHRlcjtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLnNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jbG9zZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlKGUsIGFuY2hvciwgdGVtcGxhdGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmV4cGFuZGVkRmlsdGVyID0gIXRoaXMuaGFzQ29sdW1uQ2hvb3NlcjtcbiAgICAgICAgdGhpcy5leHBhbmRlZENvbHVtbnMgPSAhdGhpcy5oYXNGaWx0ZXI7XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSB0aGlzLnBvcHVwU2VydmljZS5vcGVuKGFuY2hvciwgdGVtcGxhdGUsIHRoaXMucG9wdXBSZWYsIFBPUFVQX0NMQVNTKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICB0aGlzLnBvcHVwU2VydmljZS5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMucG9wdXBSZWYgPSBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Db2x1bW5zRXhwYW5kKCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ29sdW1ucyA9IHRydWU7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uRmlsdGVyRXhwYW5kKCkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkRmlsdGVyID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5leHBhbmRlZENvbHVtbnMgPSBmYWxzZTtcbiAgICB9XG59XG5Db2x1bW5NZW51Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbQ29sdW1uTWVudVNlcnZpY2VdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1jb2x1bW4tbWVudScsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGEgI2FuY2hvclxuICAgICAgICAgICAgY2xhc3M9XCJrLWdyaWQtY29sdW1uLW1lbnUgay1ncmlkLWZpbHRlclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdrLXN0YXRlLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZSgkZXZlbnQsIGFuY2hvciwgdGVtcGxhdGUpXCJcbiAgICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwibG9jYWxpemF0aW9uLmdldCgnY29sdW1uTWVudScpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktbW9yZS12ZXJ0aWNhbFwiPjwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgICAgICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4uY29sdW1uTWVudVRlbXBsYXRlUmVmIHx8IGNvbHVtbk1lbnVUZW1wbGF0ZSB8fCBkZWZhdWx0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZXJ2aWNlOiBzZXJ2aWNlLCBjb2x1bW46IGNvbHVtbiB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LXNvcnQgKm5nSWY9XCJoYXNTb3J0XCIgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbm1lbnUtc29ydD5cbiAgICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtbG9jayAqbmdJZj1cImhhc0xvY2tcIiBbc2VydmljZV09XCJzZXJ2aWNlXCI+XG4gICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrPlxuICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1jaG9vc2VyICpuZ0lmPVwiaGFzQ29sdW1uQ2hvb3NlclwiIFtzZXJ2aWNlXT1cInNlcnZpY2VcIlxuICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZENvbHVtbnNcIiAoZXhwYW5kKT1cIm9uQ29sdW1uc0V4cGFuZCgpXCI+XG4gICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1jaG9vc2VyPlxuICAgICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1ubWVudS1maWx0ZXIgKm5nSWY9XCJoYXNGaWx0ZXJcIiBbc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRGaWx0ZXJcIiAoZXhwYW5kKT1cIm9uRmlsdGVyRXhwYW5kKClcIj5cbiAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWZpbHRlcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNvbHVtbk1lbnVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBTaW5nbGVQb3B1cFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IENvbHVtbk1lbnVTZXJ2aWNlIH1cbl07XG5Db2x1bW5NZW51Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHN0YW5kYWxvbmU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1jb2x1bW4tbWVudS1zdGFuZGFsb25lJyxdIH0sIHsgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZXR0aW5nczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc29ydDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZmlsdGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzb3J0YWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uTWVudVRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyogdHNsaW50OmRpc2FibGU6bWF4LWxpbmUtbGVuZ3RoICovXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb2x1bW4tbWVudSBpdGVtIHRoYXQgY2FuIGJlIHBsYWNlZCBpbnNpZGUgYVxuICogW2BDb2x1bW5NZW51VGVtcGxhdGVgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbHVtbm1lbnV0ZW1wbGF0ZWRpcmVjdGl2ZSAlfSkgZGlyZWN0aXZlLlxuICogQWxsb3dzIHRoZSB1c2VyIHRvIGxvY2sgb3IgdW5sb2NrIHRoZSBjb2x1bW5zLlxuICpcbiAqID4gWW91IGhhdmUgdG8gc2V0IHRoZSBbQ29sdW1uTWVudVNlcnZpY2VdKHslIHNsdWcgYXBpX2dyaWRfY29sdW1ubWVudXNlcnZpY2UgJX0pIHRoYXQgaXMgcGFzc2VkIGJ5XG4gKiA+IHRoZSB0ZW1wbGF0ZSB0byB0aGUgc2VydmljZSBpbnB1dCBvZiB0aGUgYGtlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrYCBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJkYXRhXCIgW2NvbHVtbk1lbnVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENvbHVtbk1lbnVUZW1wbGF0ZSBsZXQtc2VydmljZT1cInNlcnZpY2VcIj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2sgW3NlcnZpY2VdPVwic2VydmljZVwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW5tZW51LWxvY2s+XG4gKiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiRmllbGQxXCIgW3dpZHRoXT1cIjEwMFwiPjwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJGaWVsZDJcIiBbd2lkdGhdPVwiMTAwXCI+PC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgIHB1YmxpYyBkYXRhOiBhbnlbXSA9IFt7IEZpZWxkMTogJ0ZvbycsIEZpZWxkMjogJ0JhcicgfV07XG4gKiB9XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVMb2NrQ29tcG9uZW50IGV4dGVuZHMgQ29sdW1uTWVudUl0ZW1CYXNlIHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIGNvbHVtbkluZm9TZXJ2aWNlLCBjaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5jb2x1bW5JbmZvU2VydmljZSA9IGNvbHVtbkluZm9TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yID0gY2hhbmdlRGV0ZWN0b3I7XG4gICAgfVxuICAgIGdldCB0ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KHRoaXMubG9ja2VkID8gJ3VubG9jaycgOiAnbG9jaycpO1xuICAgIH1cbiAgICBnZXQgaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9ja2VkID8gJ3VubG9jaycgOiAnbG9jayc7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLmxvY2tlZCAmJiB0aGlzLmNvbHVtbkluZm9TZXJ2aWNlLnVubG9ja2VkUm9vdENvdW50IDwgMjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRvZ2dsZUNvbHVtbigpIHtcbiAgICAgICAgdGhpcy50b2dnbGVIaWVyYXJjaHkoIXRoaXMubG9ja2VkKTtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICB0b2dnbGVIaWVyYXJjaHkobG9ja2VkKSB7XG4gICAgICAgIGxldCByb290ID0gdGhpcy5zZXJ2aWNlLmNvbHVtbjtcbiAgICAgICAgd2hpbGUgKHJvb3QucGFyZW50KSB7XG4gICAgICAgICAgICByb290ID0gcm9vdC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sdW1ucyA9IFtyb290XTtcbiAgICAgICAgY29uc3QgYWxsQ2hhbmdlZCA9IFtdO1xuICAgICAgICB3aGlsZSAoY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuc2hpZnQoKTtcbiAgICAgICAgICAgIGNvbHVtbi5sb2NrZWQgPSBsb2NrZWQ7XG4gICAgICAgICAgICBhbGxDaGFuZ2VkLnB1c2goY29sdW1uKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW4uaGFzQ2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2goLi4uY29sdW1uLmNoaWxkcmVuQXJyYXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY2hhbmdlTG9ja2VkKGFsbENoYW5nZWQpO1xuICAgIH1cbiAgICBnZXQgbG9ja2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLmNvbHVtbi5sb2NrZWQ7XG4gICAgfVxufVxuQ29sdW1uTWVudUxvY2tDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29sdW1ubWVudS1sb2NrJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbm1lbnUtaXRlbSBbdGV4dF09XCJ0ZXh0XCIgW2ljb25dPVwiaWNvblwiIChpdGVtQ2xpY2spPVwidG9nZ2xlQ29sdW1uKClcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1ubWVudS1pdGVtPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQ29sdW1uTWVudUxvY2tDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDb2x1bW5JbmZvU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlRGV0ZWN0b3JSZWYgfVxuXTtcblxuY29uc3QgQ09NUE9ORU5UUyQxID0gW1xuICAgIENvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgQ29sdW1uQ2hvb3NlckNvbXBvbmVudCxcbiAgICBDb2x1bW5NZW51Q2hvb3NlckNvbXBvbmVudCxcbiAgICBDb2x1bW5NZW51RmlsdGVyQ29tcG9uZW50LFxuICAgIENvbHVtbk1lbnVJdGVtQ29tcG9uZW50LFxuICAgIENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIENvbHVtbk1lbnVTb3J0Q29tcG9uZW50LFxuICAgIENvbHVtbk1lbnVDb21wb25lbnQsXG4gICAgQ29sdW1uTWVudUxvY2tDb21wb25lbnQsXG4gICAgQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIENvbHVtbk1lbnVNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQ29sdW1uQ2hvb3NlckNvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbk1lbnVGaWx0ZXJDb21wb25lbnQsXG4gICAgICAgICAgICBDb2x1bW5NZW51SXRlbUNvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbk1lbnVJdGVtQ29udGVudFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgQ29sdW1uTWVudVNvcnRDb21wb25lbnQsXG4gICAgICAgICAgICBDb2x1bW5NZW51TG9ja0NvbXBvbmVudCxcbiAgICAgICAgICAgIENvbHVtbk1lbnVDaG9vc2VyQ29tcG9uZW50LFxuICAgICAgICAgICAgQ29sdW1uTWVudVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgQ29sdW1uTWVudUNvbXBvbmVudFxuICAgICAgICBdO1xuICAgIH1cbn1cbkNvbHVtbk1lbnVNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW0NPTVBPTkVOVFMkMV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRmlsdGVyTWVudU1vZHVsZV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW0NPTVBPTkVOVFMkMV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzJDIgPSBbXG4gICAgSGVhZGVyQ29tcG9uZW50LFxuICAgIEhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIENvbHVtbkhhbmRsZURpcmVjdGl2ZSxcbiAgICBTZWxlY3RBbGxDaGVja2JveERpcmVjdGl2ZVxuXTtcbmNvbnN0IGltcG9ydGVkTW9kdWxlcyQyID0gW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBHcm91cE1vZHVsZSxcbiAgICBSb3dGaWx0ZXJNb2R1bGUsXG4gICAgRmlsdGVyTWVudU1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgRHJhZ0FuZERyb3BNb2R1bGUsXG4gICAgQ29sdW1uTWVudU1vZHVsZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBIZWFkZXJNb2R1bGUge1xuICAgIHN0YXRpYyBleHBvcnRzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBTZWxlY3RBbGxDaGVja2JveERpcmVjdGl2ZVxuICAgICAgICBdO1xuICAgIH1cbn1cbkhlYWRlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZXhwb3J0ZWRNb2R1bGVzJDJdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkMl0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogWy4uLmltcG9ydGVkTW9kdWxlcyQyXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbW1hbmQgY29sdW1ucyBvZiB0aGUgR3JpZC4gWW91IGhhdmUgdG8gZGVmaW5lIHRoZSBjb250ZW50IG9mIHRoZVxuICogY29sdW1uIGluc2lkZSBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnLiBUaGUgdGVtcGxhdGUgY29udGV4dCBpcyBzZXQgdG8gdGhlIGN1cnJlbnRcbiAqIGRhdGEgaXRlbS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIGV4YW1wbGVzIG9uIHVzaW5nIHRoZSBwYXNzZWQgZmllbGRzXG4gKiBhbmQgdGhlIGNvbW1hbmQgZGlyZWN0aXZlcywgcmVmZXIgdG8gdGhlIGFydGljbGUgb25cbiAqIFtlZGl0aW5nIHRoZSBHcmlkIGluIEFuZ3VsYXIgUmVhY3RpdmUgRm9ybXNdKHslIHNsdWcgZWRpdGluZ19yZWFjdGl2ZV9mb3Jtc19ncmlkICV9KS5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgZmllbGRzIGFyZSBwYXNzZWQ6XG4gKiAtIGBjb2x1bW5JbmRleGAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluZGV4LlxuICogLSBgcm93SW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgcm93IGluZGV4LiBJZiBpbnNpZGUgYSBuZXcgaXRlbSByb3csIGByb3dJbmRleGBpcyBgLTFgLlxuICogLSBgZGF0YUl0ZW1gJm1kYXNoO1RoZSBjdXJyZW50IGRhdGEgaXRlbS5cbiAqIC0gYGNvbHVtbmAmbWRhc2g7VGhlIGN1cnJlbnQgY29sdW1uIGluc3RhbmNlLlxuICogLSBgaXNOZXdgJm1kYXNoO1RoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpdGVtLlxuICpcbiAqIFVzdWFsbHksIHRoZSB0ZW1wbGF0ZSBjb250YWlucyBDUlVEIGNvbW1hbmQgZGlyZWN0aXZlcyBzdWNoIGFzOlxuICogLSBbYEVkaXRDb21tYW5kRGlyZWN0aXZlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9lZGl0Y29tbWFuZGRpcmVjdGl2ZSAlfSlcbiAqIC0gW2BSZW1vdmVDb21tYW5kRGlyZWN0aXZlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9yZW1vdmVjb21tYW5kZGlyZWN0aXZlICV9KVxuICogLSBbYENhbmNlbENvbW1hbmREaXJlY3RpdmVgXSh7JSBzbHVnIGFwaV9ncmlkX2NhbmNlbGNvbW1hbmRkaXJlY3RpdmUgJX0pXG4gKiAtIFtgU2F2ZUNvbW1hbmREaXJlY3RpdmVgXSh7JSBzbHVnIGFwaV9ncmlkX3NhdmVjb21tYW5kZGlyZWN0aXZlICV9KVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiUHJvZHVjdElEXCIgdGl0bGU9XCJQcm9kdWN0IElEXCIgd2lkdGg9XCIxMjBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiIHRpdGxlPVwiUHJvZHVjdCBOYW1lXCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY29sdW1uIGZpZWxkPVwiVW5pdFByaWNlXCIgdGl0bGU9XCJVbml0IFByaWNlXCIgd2lkdGg9XCIyMzBcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiB0aXRsZT1cImNvbW1hbmRcIiB3aWR0aD1cIjIyMFwiPlxuICogICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlPlxuICogICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRFZGl0Q29tbWFuZCBjbGFzcz1cImstcHJpbWFyeVwiPkVkaXQ8L2J1dHRvbj5cbiAqICAgICAgICAgICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkUmVtb3ZlQ29tbWFuZD5SZW1vdmU8L2J1dHRvbj5cbiAqICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XG4gKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXTtcbiAqXG4gKiAgICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICAgICB0aGlzLmdyaWREYXRhID0gcHJvZHVjdHM7XG4gKiAgICB9XG4gKiB9XG4gKlxuICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogIH0sIHtcbiAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogIH1cbiAqIF07XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIENvbW1hbmRDb2x1bW5Db21wb25lbnQgZXh0ZW5kcyBDb2x1bW5CYXNlJDEge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCkge1xuICAgICAgICBzdXBlcihwYXJlbnQpO1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgZ2V0IHRlbXBsYXRlUmVmKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZSA/IHRoaXMudGVtcGxhdGUudGVtcGxhdGVSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxufVxuQ29tbWFuZENvbHVtbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDb2x1bW5CYXNlJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDb21tYW5kQ29sdW1uQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Db21tYW5kQ29sdW1uQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29sdW1uQmFzZSQxLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9LCB7IHR5cGU6IEhvc3QgfSwgeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuQ29tbWFuZENvbHVtbkNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0ZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY2hlY2tib3ggZm9yIHNlbGVjdGluZyBjb2x1bW5zIGluIHRoZSBHcmlkLiBJZiB0aGUgY29sdW1uIGlzXG4gKiBkZWZpbmVkIGFzIGVtcHR5LCBpdCByZW5kZXJzIGEgZGVmYXVsdCBjaGVja2JveCBmb3Igcm93IHNlbGVjdGlvbi5cbiAqIFlvdSBjYW4gYWxzbyBkZWZpbmUgdGhlIGNvbnRlbnQgb2YgdGhlIGNvbHVtbiBpbnNpZGUgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZy5cbiAqIFRoZSBpbnB1dCByZXF1aXJlcyB5b3UgdG8gaW5jbHVkZSB0aGUgYFNlbGVjdGlvbkNoZWNrYm94YCBvcHRpb24uXG4gKlxuICogVGhlIHRlbXBsYXRlIGNvbnRleHQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGRhdGEgaXRlbSBhbmQgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGZpZWxkcyBhcmUgcGFzc2VkOlxuICogLSBgY29sdW1uSW5kZXhgJm1kYXNoO1RoZSBjdXJyZW50IGNvbHVtbiBpbmRleC5cbiAqIC0gYHJvd0luZGV4YCZtZGFzaDtUaGUgY3VycmVudCBkYXRhIHJvdyBpbmRleC4gSWYgaW5zaWRlIGEgbmV3IGl0ZW0gcm93LCBpdCB3aWxsIGJlIGAtMWAuXG4gKiAtIGBkYXRhSXRlbWAmbWRhc2g7VGhlIGN1cnJlbnQgZGF0YSBpdGVtLlxuICogLSBgY29sdW1uYCZtZGFzaDtUaGUgY3VycmVudCBjb2x1bW4gaW5zdGFuY2UuXG4gKiAtIGBpc05ld2AmbWRhc2g7VGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGl0ZW0uXG4gKlxuICogRm9yIG1vcmUgZXhhbXBsZXMsIHJlZmVyIHRvOlxuICogLSBbU2VsZWN0aW5nIG9yIGRlc2VsZWN0aW5nIGFsbCBpdGVtcyBvbiBhIHBhZ2VdKHslIHNsdWcgc2VsZWN0aW9uX2dyaWQgJX0jdG9jLXNlbGVjdC1hbGwtZmVhdHVyZSlcbiAqIC0gW1BlcnNpc3RpbmcgdGhlIHNlbGVjdGlvbl0oeyUgc2x1ZyBzZWxlY3Rpb25fZ3JpZCAlfSN0b2MtaW4tY29tYmluYXRpb24td2l0aC10aGUtc2VsZWN0LWFsbC1mZWF0dXJlKVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFtzZWxlY3RhYmxlXT1cIntlbmFibGVkOiB0cnVlLCBjaGVja2JveE9ubHk6IHRydWV9XCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gdGl0bGU9XCJEZWZhdWx0IGNoZWNrYm94XCI+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uPlxuICogICAgICAgICAgPGtlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uIHRpdGxlPVwiQ3VzdG9tIGNoZWNrYm94XCI+XG4gKiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlkeD1cInJvd0luZGV4XCI+XG4gKiAgICAgICAgICAgICAgU2VsZWN0IHJvdyA8aW5wdXQgW2tlbmRvR3JpZFNlbGVjdGlvbkNoZWNrYm94XT1cImlkeFwiIC8+XG4gKiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICA8L2tlbmRvLWdyaWQtY2hlY2tib3gtY29sdW1uPlxuICogICAgICAgIDwva2VuZG8tZ3JpZD5cbiAqICAgIGBcbiAqIH0pXG4gKlxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgIHB1YmxpYyBncmlkRGF0YTogYW55W107XG4gKlxuICogICAgY29uc3RydWN0b3IoKSB7XG4gKiAgICAgICAgdGhpcy5ncmlkRGF0YSA9IHByb2R1Y3RzO1xuICogICAgfVxuICogfVxuICpcbiAqIGNvbnN0IHByb2R1Y3RzID0gW3tcbiAqICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhaVwiLFxuICogICAgXCJVbml0UHJpY2VcIjogMTguMDAwMCxcbiAqICAgIFwiRGlzY29udGludWVkXCI6IHRydWVcbiAqICB9LCB7XG4gKiAgICBcIlByb2R1Y3RJRFwiOiAyLFxuICogICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOS4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogZmFsc2VcbiAqICB9XG4gKiBdO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBDaGVja2JveENvbHVtbkNvbXBvbmVudCBleHRlbmRzIENvbHVtbkJhc2UkMSB7XG4gICAgY29uc3RydWN0b3IocGFyZW50KSB7XG4gICAgICAgIHN1cGVyKHBhcmVudCk7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAvKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlzQ2hlY2tib3hDb2x1bW4gPSB0cnVlO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy50ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG5DaGVja2JveENvbHVtbkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBDb2x1bW5CYXNlJDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBDaGVja2JveENvbHVtbkNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWNoZWNrYm94LWNvbHVtbicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNoZWNrYm94Q29sdW1uQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogQ29sdW1uQmFzZSQxLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBTa2lwU2VsZiB9LCB7IHR5cGU6IEhvc3QgfSwgeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuQ2hlY2tib3hDb2x1bW5Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgc2hvd1NlbGVjdEFsbDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSxdIH1dXG59O1xuXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby1pbnB1dC1yZW5hbWUgKi9cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgcm93LXNlbGVjdGlvbiBjaGVja2JveCBvZiB0aGUgR3JpZC4gVGhlIGRpcmVjdGl2ZSBleHBlY3RzIHRoZVxuICogaW5kZXggb2YgdGhlIGN1cnJlbnQgcm93IGFzIGFuIGlucHV0IHBhcmFtZXRlci4gSW5zaWRlIHRoZVxuICogW2BDaGVja2JveENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY2hlY2tib3hjb2x1bW5jb21wb25lbnQgJX0pLCBhcHBseSB0aGVcbiAqIGRpcmVjdGl2ZSB0byBhbiBgaW5wdXRgIGVsZW1lbnQuIFdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBjaGVja2JveCB0aGF0IGlzIGFzc29jaWF0ZWRcbiAqIHdpdGggdGhlIGRpcmVjdGl2ZSwgYSBbYHNlbGVjdGlvbkNoYW5nZWBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2Mtc2VsZWN0aW9uQ2hhbmdlKVxuICogZXZlbnQgaXMgdHJpZ2dlcmVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZ3JpZCBbZGF0YV09XCJncmlkRGF0YVwiIFtzZWxlY3RhYmxlXT1cIntlbmFibGVkOiB0cnVlLCBjaGVja2JveE9ubHk6IHRydWV9XCI+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4gdGl0bGU9XCJDdXN0b20gY2hlY2tib3hcIj5cbiAqICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaWR4PVwicm93SW5kZXhcIj5cbiAqICAgICAgICAgICAgICBTZWxlY3Qgcm93IDxpbnB1dCBba2VuZG9HcmlkU2VsZWN0aW9uQ2hlY2tib3hdPVwiaWR4XCIgLz5cbiAqICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jaGVja2JveC1jb2x1bW4+XG4gKiAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0SURcIiB0aXRsZT1cIlByb2R1Y3QgSURcIiB3aWR0aD1cIjEyMFwiPlxuICogICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgIDxrZW5kby1ncmlkLWNvbHVtbiBmaWVsZD1cIlByb2R1Y3ROYW1lXCIgdGl0bGU9XCJQcm9kdWN0IE5hbWVcIj5cbiAqICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgPC9rZW5kby1ncmlkPlxuICogICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgcHVibGljIGdyaWREYXRhOiBhbnlbXTtcbiAqXG4gKiAgICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICAgICB0aGlzLmdyaWREYXRhID0gcHJvZHVjdHM7XG4gKiAgICB9XG4gKiB9XG4gKlxuICogY29uc3QgcHJvZHVjdHMgPSBbe1xuICogICAgXCJQcm9kdWN0SURcIjogMSxcbiAqICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICBcIlVuaXRQcmljZVwiOiAxOC4wMDAwLFxuICogICAgXCJEaXNjb250aW51ZWRcIjogdHJ1ZVxuICogIH0sIHtcbiAqICAgIFwiUHJvZHVjdElEXCI6IDIsXG4gKiAgICBcIlByb2R1Y3ROYW1lXCI6IFwiQ2hhbmdcIixcbiAqICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDAsXG4gKiAgICBcIkRpc2NvbnRpbnVlZFwiOiBmYWxzZVxuICogIH1cbiAqIF07XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIFNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcihzZWxlY3Rpb25TZXJ2aWNlLCBlbCwgcmVuZGVyZXIsIG5nWm9uZSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmVsID0gZWw7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMudHlwZSA9IFwiY2hlY2tib3hcIjtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95Q2xpY2sgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIFwiY2xpY2tcIiwgdGhpcy5vbkNsaWNrLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95S2V5RG93biA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgXCJrZXlkb3duXCIsIHRoaXMub25LZXlEb3duLmJpbmQodGhpcykpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICB0aGlzLnNldENoZWNrZWRTdGF0ZSgpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzdHJveUNsaWNrKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lDbGljaygpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlc3Ryb3lLZXlEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lLZXlEb3duKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25DbGljaygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uU2VydmljZS5vcHRpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXYgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UudG9nZ2xlQnlJbmRleCh0aGlzLml0ZW1JbmRleCk7XG4gICAgICAgICAgICAgICAgZXYuY3RybEtleSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZXYuc2hpZnRLZXkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuY2hhbmdlcy5lbWl0KGV2KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uS2V5RG93bihlKSB7XG4gICAgICAgIGlmIChlLmtleUNvZGUgPT09IEtleXMuRW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMub25DbGljaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldENoZWNrZWRTdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIFwiY2hlY2tlZFwiLCB0aGlzLnNlbGVjdGlvblNlcnZpY2UuaXNTZWxlY3RlZCh0aGlzLml0ZW1JbmRleCkpO1xuICAgIH1cbn1cblNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkU2VsZWN0aW9uQ2hlY2tib3hdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TZWxlY3Rpb25DaGVja2JveERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFNlbGVjdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5TZWxlY3Rpb25DaGVja2JveERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBpdGVtSW5kZXg6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbXCJrZW5kb0dyaWRTZWxlY3Rpb25DaGVja2JveFwiLF0gfV0sXG4gICAgdHlwZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50eXBlJyxdIH1dXG59O1xuXG5jb25zdCBjb2x1bW5DZWxsSW5kZXggPSAoY2VsbCwgY2VsbHMpID0+IHtcbiAgICBsZXQgY2VsbEluZGV4ID0gMDtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBjZWxscy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGlmIChjZWxsc1tpZHhdID09PSBjZWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gY2VsbEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzQ2xhc3NlcyhjZWxsc1tpZHhdLCAnay1oaWVyYXJjaHktY2VsbCBrLWdyb3VwLWNlbGwnKSkge1xuICAgICAgICAgICAgY2VsbEluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFRhYmxlQm9keUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZGV0YWlsc1NlcnZpY2UsIGdyb3Vwc1NlcnZpY2UsIGNoYW5nZU5vdGlmaWNhdGlvbiwgZWRpdFNlcnZpY2UsIGxvY2FsaXphdGlvbiwgbmdab25lLCByZW5kZXJlciwgZWxlbWVudCwgZG9tRXZlbnRzLCBzZWxlY3Rpb25TZXJ2aWNlLCBjZWxsU2VsZWN0aW9uU2VydmljZSwgY29sdW1uSW5mb1NlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZGV0YWlsc1NlcnZpY2UgPSBkZXRhaWxzU2VydmljZTtcbiAgICAgICAgdGhpcy5ncm91cHNTZXJ2aWNlID0gZ3JvdXBzU2VydmljZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOb3RpZmljYXRpb24gPSBjaGFuZ2VOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzID0gZG9tRXZlbnRzO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UgPSBzZWxlY3Rpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxTZWxlY3Rpb25TZXJ2aWNlID0gY2VsbFNlbGVjdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UgPSBjb2x1bW5JbmZvU2VydmljZTtcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5hdmlnYXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICAgICAgdGhpcy5ncm91cHMgPSBbXTtcbiAgICAgICAgdGhpcy5za2lwID0gMDtcbiAgICAgICAgdGhpcy5ub1JlY29yZHNUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdub1JlY29yZHMnKTtcbiAgICAgICAgdGhpcy5pc0xvY2tlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNraXBHcm91cERlY29yYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93R3JvdXBGb290ZXJzID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9ja2VkQ29sdW1uc0NvdW50ID0gMDtcbiAgICAgICAgdGhpcy50b3RhbENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMudHJhY2tCeSA9IGRlZmF1bHRUcmFja0J5O1xuICAgICAgICB0aGlzLnJvd0NsYXNzID0gKCkgPT4gbnVsbDtcbiAgICAgICAgdGhpcy5jZWxsS2V5ZG93blN1YnNjcmlwdGlvbiA9IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY2VsbEtleWRvd24uc3Vic2NyaWJlKChhcmdzKSA9PiB0aGlzLmNlbGxLZXlkb3duSGFuZGxlcihhcmdzKSk7XG4gICAgICAgIHRoaXMudHJhY2tCeVdyYXBwZXIgPSB0aGlzLnRyYWNrQnlXcmFwcGVyLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMudHJhY2tCeUNvbHVtbnMgPSB0aGlzLnRyYWNrQnlDb2x1bW5zLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIGdldCBuZXdEYXRhSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFNlcnZpY2UubmV3RGF0YUl0ZW07XG4gICAgfVxuICAgIC8vIE51bWJlciBvZiB1bmxvY2tlZCBjb2x1bW5zIGluIHRoZSBuZXh0IHRhYmxlLCBpZiBhbnlcbiAgICBnZXQgdW5sb2NrZWRDb2x1bW5zQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvdGFsQ29sdW1uc0NvdW50IC0gdGhpcy5sb2NrZWRDb2x1bW5zQ291bnQgLSAodGhpcy5hbGxDb2x1bW5zIHx8IHRoaXMuY29sdW1ucykubGVuZ3RoO1xuICAgIH1cbiAgICBpc0FyaWFTZWxlY3RlZChpdGVtLCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbFNlbGVjdGlvblNlcnZpY2UuaXNDZWxsU2VsZWN0ZWQoaXRlbSwgY29sdW1uKSB8fFxuICAgICAgICAgICAgdGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW0pID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgICB9XG4gICAgdG9nZ2xlUm93KGluZGV4LCBkYXRhSXRlbSkge1xuICAgICAgICB0aGlzLmRldGFpbHNTZXJ2aWNlLnRvZ2dsZVJvdyhpbmRleCwgZGF0YUl0ZW0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlzRXhwYW5kZWQodmlld0l0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGV0YWlsc1NlcnZpY2UuaXNFeHBhbmRlZCh2aWV3SXRlbS5pbmRleCwgdmlld0l0ZW0uZGF0YSk7XG4gICAgfVxuICAgIGRldGFpbEJ1dHRvblN0eWxlcyh2aWV3SXRlbSkge1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IHRoaXMuaXNFeHBhbmRlZCh2aWV3SXRlbSk7XG4gICAgICAgIHJldHVybiBleHBhbmRlZCA/ICdrLW1pbnVzJyA6ICdrLXBsdXMnO1xuICAgIH1cbiAgICBkZXRhaWxCdXR0b25UaXRsZSh2aWV3SXRlbSkge1xuICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gdGhpcy5pc0V4cGFuZGVkKHZpZXdJdGVtKSA/ICdkZXRhaWxDb2xsYXBzZScgOiAnZGV0YWlsRXhwYW5kJztcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldChtZXNzYWdlS2V5KTtcbiAgICB9XG4gICAgaXNHcm91cChpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdncm91cCc7XG4gICAgfVxuICAgIGlzRGF0YUl0ZW0oaXRlbSkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNHcm91cChpdGVtKSAmJiAhdGhpcy5pc0Zvb3RlcihpdGVtKTtcbiAgICB9XG4gICAgaXNGb290ZXIoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnZm9vdGVyJztcbiAgICB9XG4gICAgaXNJbkV4cGFuZGVkR3JvdXAoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cHNTZXJ2aWNlLmlzSW5FeHBhbmRlZEdyb3VwKGl0ZW0uZ3JvdXBJbmRleCwgZmFsc2UpO1xuICAgIH1cbiAgICBpc1BhcmVudEdyb3VwRXhwYW5kZWQoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncm91cHNTZXJ2aWNlLmlzSW5FeHBhbmRlZEdyb3VwKGl0ZW0uaW5kZXggfHwgaXRlbS5ncm91cEluZGV4KTtcbiAgICB9XG4gICAgaXNPZGQoaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS5pbmRleCAlIDIgIT09IDA7XG4gICAgfVxuICAgIGlzU2VsZWN0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0YWJsZSAmJiB0aGlzLnNlbGVjdGFibGUuZW5hYmxlZCAhPT0gZmFsc2U7XG4gICAgfVxuICAgIGlzUm93U2VsZWN0ZWQoaXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmlzU2VsZWN0ZWQoaXRlbS5pbmRleCk7XG4gICAgfVxuICAgIHRyYWNrQnlXcmFwcGVyKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgaXRlbS5pc0VkaXRpbmcgPSB0aGlzLmVkaXRTZXJ2aWNlLmhhc0VkaXRlZChpdGVtLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50cmFja0J5KGluZGV4LCBpdGVtKTtcbiAgICB9XG4gICAgdHJhY2tCeUNvbHVtbnMoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmlydHVhbENvbHVtbnMgPyBpbmRleCA6IGl0ZW07XG4gICAgfVxuICAgIG5nRG9DaGVjaygpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzR3JvdXBIZWFkZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJDb2x1bW5zID0gY29sdW1uc1RvUmVuZGVyKHRoaXMuc2tpcEdyb3VwRGVjb3JhdGlvbiA/IHRoaXMuY29sdW1ucyA6IHRoaXMuY29sdW1ucy50b0FycmF5KCkuc2xpY2UoMSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlckNvbHVtbnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0xvY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlclNsYXZlQ2VsbHNDb3VudCA9XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNHcm91cEhlYWRlckNvbHVtbiA/IHRoaXMuY29sdW1uc0NvbnRhaW5lci5ub25Mb2NrZWRDb2x1bW5zVG9SZW5kZXIubGVuZ3RoIDogMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBIZWFkZXJTbGF2ZUNlbGxzQ291bnQgPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGlzQ2hhbmdlZChcImNvbHVtbnNcIiwgY2hhbmdlcywgZmFsc2UpKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZU5vdGlmaWNhdGlvbi5ub3RpZnkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpIHtcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMuc2tpcCArIHJvd0luZGV4O1xuICAgICAgICBpZiAodGhpcy5oYXNEZXRhaWxUZW1wbGF0ZSkge1xuICAgICAgICAgICAgcG9zICo9IDI7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWJzb2x1dGVSb3dJbmRleCA9IDEgKyBwb3M7XG4gICAgICAgIGNvbnN0IGFkZFJvd09mZnNldCA9IHRoaXMuZWRpdFNlcnZpY2UuaGFzTmV3SXRlbSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBmaWx0ZXJSb3dPZmZzZXQgPSBoYXNGaWx0ZXJSb3codGhpcy5maWx0ZXJhYmxlKSA/IDEgOiAwO1xuICAgICAgICBjb25zdCBoZWFkZXJSb3dDb3VudCA9IHRoaXMuY29sdW1uSW5mb1NlcnZpY2UudG90YWxMZXZlbHMgKyBmaWx0ZXJSb3dPZmZzZXQgKyBhZGRSb3dPZmZzZXQ7XG4gICAgICAgIHJldHVybiBhYnNvbHV0ZVJvd0luZGV4ICsgaGVhZGVyUm93Q291bnQ7XG4gICAgfVxuICAgIGFkZFJvd0xvZ2ljYWxJbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UudG90YWxMZXZlbHMgKyAxICtcbiAgICAgICAgICAgIChoYXNGaWx0ZXJSb3codGhpcy5maWx0ZXJhYmxlKSA/IDEgOiAwKTtcbiAgICB9XG4gICAgbG9naWNhbENvbEluZGV4KGNvbHVtbikge1xuICAgICAgICBpZiAoIWlzUHJlc2VudChjb2x1bW4ubGVhZkluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGVhZkluZGV4ICsgKHRoaXMuaGFzRGV0YWlsVGVtcGxhdGUgPyAxIDogMCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjbGlja0hhbmRsZXIgPSB0aGlzLmNsaWNrSGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgbW91c2Vkb3duU3Vic2NyaXB0aW9uID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICdtb3VzZWRvd24nLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgbW91c2V1cFN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnbW91c2V1cCcsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICBjb25zdCBjbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAnY2xpY2snLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dG1lbnVTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NvbnRleHRtZW51JywgY2xpY2tIYW5kbGVyKTtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoc3RhcnRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2hlbmRTdWJzY3JpcHRpb24gPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ3RvdWNoZW5kJywgY2xpY2tIYW5kbGVyKTtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tTdWJzY3JpcHRpb24gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbW91c2Vkb3duU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgbW91c2V1cFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgICAgIGNsaWNrU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dG1lbnVTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnRvdWNoU3Vic2NyaXB0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvdWNoc3RhcnRTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICB0b3VjaGVuZFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBvcmlnaW5hbE5vUmVjb3JkVGV4dCA9IHRoaXMubG9jYWxpemF0aW9uLmdldCgnbm9SZWNvcmRzJyk7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm5vUmVjb3Jkc1RleHQgPT09IG9yaWdpbmFsTm9SZWNvcmRUZXh0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ub1JlY29yZHNUZXh0ID0gdGhpcy5sb2NhbGl6YXRpb24uZ2V0KCdub1JlY29yZHMnKTtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbE5vUmVjb3JkVGV4dCA9IHRoaXMubm9SZWNvcmRzVGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5jbGlja1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5jbGlja1N1YnNjcmlwdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRvdWNoU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZWxsS2V5ZG93blN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVvdXQpO1xuICAgIH1cbiAgICBpc0VkaXRpbmdDZWxsKGluZGV4LCBjb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0aW5nKCkgJiYgdGhpcy5lZGl0U2VydmljZS5pc0VkaXRlZENvbHVtbihpbmRleCwgY29sdW1uKTtcbiAgICB9XG4gICAgaXNFZGl0aW5nUm93KGluZGV4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGluZygpICYmIHRoaXMuZWRpdFNlcnZpY2UuaGFzRWRpdGVkKGluZGV4KTtcbiAgICB9XG4gICAgZ2V0IGhhc0dyb3VwSGVhZGVyQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zQ29udGFpbmVyLmhhc0dyb3VwSGVhZGVyQ29sdW1uO1xuICAgIH1cbiAgICBnZXQgY29sdW1uc0NvbnRhaW5lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uSW5mb1NlcnZpY2UuY29sdW1uc0NvbnRhaW5lcjtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbnNTcGFuKCkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1NwYW4odGhpcy5jb2x1bW5zKTtcbiAgICB9XG4gICAgZ2V0IGFsbENvbHVtbnNTcGFuKCkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1NwYW4odGhpcy5hbGxDb2x1bW5zIHx8IHRoaXMuY29sdW1ucyk7XG4gICAgfVxuICAgIGdldCBjb2xTcGFuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zU3BhbiArIHRoaXMuZ3JvdXBzLmxlbmd0aCArICh0aGlzLmhhc0RldGFpbFRlbXBsYXRlID8gMSA6IDApO1xuICAgIH1cbiAgICBnZXQgZm9vdGVyQ29sdW1ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMb2NrZWQgPyB0aGlzLmNvbHVtbnNDb250YWluZXIubG9ja2VkQ29sdW1uc1RvUmVuZGVyIDogdGhpcy5jb2x1bW5zQ29udGFpbmVyLm5vbkxvY2tlZENvbHVtbnNUb1JlbmRlcjtcbiAgICB9XG4gICAgc2hvd0dyb3VwSGVhZGVyKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuICFpdGVtLmRhdGEuc2tpcEhlYWRlcjtcbiAgICB9XG4gICAgZ2V0IGhhc0RldGFpbFRlbXBsYXRlKCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuZGV0YWlsVGVtcGxhdGUpO1xuICAgIH1cbiAgICBjbGlja0hhbmRsZXIoZXZlbnRBcmcpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmV2ZW50VGFyZ2V0KGV2ZW50QXJnKTtcbiAgICAgICAgbGV0IGNlbGwsIHJvdywgYm9keSwgZ3JpZEVsZW1lbnQ7XG4gICAgICAgIGxldCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBjZWxsID0gY2xvc2VzdChjdXJyZW50VGFyZ2V0LCBtYXRjaGVzTm9kZU5hbWUoJ3RkJykpO1xuICAgICAgICAgICAgcm93ID0gY2xvc2VzdChjZWxsLCBtYXRjaGVzTm9kZU5hbWUoJ3RyJykpO1xuICAgICAgICAgICAgYm9keSA9IGNsb3Nlc3Qocm93LCBtYXRjaGVzTm9kZU5hbWUoJ3Rib2R5JykpO1xuICAgICAgICAgICAgY3VycmVudFRhcmdldCA9IGJvZHk7XG4gICAgICAgICAgICBncmlkRWxlbWVudCA9IGNsb3Nlc3RJblNjb3BlKGN1cnJlbnRUYXJnZXQsIG1hdGNoZXNDbGFzc2VzKCdrLWdyaWQnKSwgZWxlbWVudCk7XG4gICAgICAgIH0gd2hpbGUgKGJvZHkgJiYgYm9keSAhPT0gZWxlbWVudCAmJiAhZ3JpZEVsZW1lbnQpO1xuICAgICAgICBpZiAoY2VsbCAmJiAhaGFzQ2xhc3NlcyhjZWxsLCBOT05fREFUQV9DRUxMX0NMQVNTRVMpICYmXG4gICAgICAgICAgICAhaGFzQ2xhc3Nlcyhyb3csIE5PTl9EQVRBX1JPV19DTEFTU0VTKSAmJlxuICAgICAgICAgICAgYm9keSA9PT0gZWxlbWVudCAmJiAhZ3JpZEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UucHJldmVudENlbGxDbG9zZSgpO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNhYmxlID0gdGFyZ2V0ICE9PSBjZWxsICYmIGlzRm9jdXNhYmxlV2l0aFRhYktleSh0YXJnZXQsIGZhbHNlKTtcbiAgICAgICAgICAgIGlmICghZm9jdXNhYmxlICYmICFtYXRjaGVzTm9kZU5hbWUoJ2xhYmVsJykodGFyZ2V0KSAmJiAhaGFzQ2xhc3Nlcyh0YXJnZXQsIElHTk9SRV9UQVJHRVRfQ0xBU1NTRVMpICYmXG4gICAgICAgICAgICAgICAgIWNsb3Nlc3RJblNjb3BlKHRhcmdldCwgbWF0Y2hlc0NsYXNzZXMoSUdOT1JFX0NPTlRBSU5FUl9DTEFTU0VTKSwgY2VsbCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5jZWxsQ2xpY2tBcmdzKGNlbGwsIHJvdywgZXZlbnRBcmcpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudEFyZy50eXBlID09PSAnbW91c2Vkb3duJyB8fCBldmVudEFyZy50eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb21FdmVudHMuY2VsbE1vdXNlZG93bi5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVudEFyZy50eXBlID09PSAnbW91c2V1cCcgfHwgZXZlbnRBcmcudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbUV2ZW50cy5jZWxsTW91c2V1cC5lbWl0KGFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuaXNFZGl0ZWRDb2x1bW4gfHwgIXRoaXMuZWRpdFNlcnZpY2UuY2xvc2VDZWxsKGV2ZW50QXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50QXJnLnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaWNrVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDZWxsQ2xpY2soYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDZWxsQ2xpY2soYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZW1pdENlbGxDbGljayhhcmdzKSB7XG4gICAgICAgIHRoaXMuZG9tRXZlbnRzLmNlbGxDbGljay5lbWl0KE9iamVjdC5hc3NpZ24oYXJncywge1xuICAgICAgICAgICAgaXNFZGl0ZWQ6IGFyZ3MuaXNFZGl0ZWRSb3cgfHwgYXJncy5pc0VkaXRlZENvbHVtblxuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGNlbGxLZXlkb3duSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmtleUNvZGUgPT09IEtleXMuRW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xpY2tIYW5kbGVyKGFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNlbGxDbGlja0FyZ3MoY2VsbCwgcm93LCBldmVudEFyZykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGNvbHVtbkNlbGxJbmRleChjZWxsLCByb3cuY2VsbHMpO1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbHVtbnMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgICAgY29uc3QgY29sdW1uSW5kZXggPSB0aGlzLmxvY2tlZENvbHVtbnNDb3VudCArIGluZGV4O1xuICAgICAgICBsZXQgcm93SW5kZXggPSByb3cuZ2V0QXR0cmlidXRlKCdkYXRhLWtlbmRvLWdyaWQtaXRlbS1pbmRleCcpO1xuICAgICAgICByb3dJbmRleCA9IHJvd0luZGV4ID8gcGFyc2VJbnQocm93SW5kZXgsIDEwKSA6IC0xO1xuICAgICAgICBjb25zdCBkYXRhSXRlbSA9IHJvd0luZGV4ID09PSAtMSA/IHRoaXMuZWRpdFNlcnZpY2UubmV3RGF0YUl0ZW0gOiB0aGlzLmRhdGEuYXQocm93SW5kZXggLSB0aGlzLnNraXApO1xuICAgICAgICBjb25zdCBpc0VkaXRlZENvbHVtbiA9IHRoaXMuZWRpdFNlcnZpY2UuaXNFZGl0ZWRDb2x1bW4ocm93SW5kZXgsIGNvbHVtbik7XG4gICAgICAgIGNvbnN0IGlzRWRpdGVkUm93ID0gdGhpcy5lZGl0U2VydmljZS5pc0VkaXRlZChyb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBldmVudEFyZy50eXBlID09PSAna2V5ZG93bicgPyAnY2xpY2snIDogZXZlbnRBcmcudHlwZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgZGF0YUl0ZW06IGRhdGFJdGVtLFxuICAgICAgICAgICAgaXNFZGl0ZWRDb2x1bW46IGlzRWRpdGVkQ29sdW1uLFxuICAgICAgICAgICAgaXNFZGl0ZWRSb3c6IGlzRWRpdGVkUm93LFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZXZlbnRBcmcsXG4gICAgICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH07XG4gICAgfVxuICAgIGV2ZW50VGFyZ2V0KGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MudHlwZSA9PT0gJ3RvdWNoZW5kJykge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBhcmdzLmNoYW5nZWRUb3VjaGVzWzBdO1xuICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQodG91Y2guY2xpZW50WCwgdG91Y2guY2xpZW50WSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyZ3MudGFyZ2V0O1xuICAgIH1cbn1cblRhYmxlQm9keUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFRhYmxlQm9keV0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImVkaXRTZXJ2aWNlLmhhc05ld0l0ZW1cIj5cbiAgICAgICAgPHRyIGNsYXNzPVwiay1ncmlkLWFkZC1yb3cgay1ncmlkLWVkaXQtcm93XCJcbiAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxSb3dcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImFkZFJvd0xvZ2ljYWxJbmRleCgpXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlUm93XT1cImxvY2tlZENvbHVtbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ2VsbHNDb3VudF09XCJjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZUNlbGxzQ291bnRdPVwidW5sb2NrZWRDb2x1bW5zQ291bnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2tpcEdyb3VwRGVjb3JhdGlvblwiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstZ3JvdXAtY2VsbFwiICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48L3RkPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstaGllcmFyY2h5LWNlbGxcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImFkZFJvd0xvZ2ljYWxJbmRleCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IGNvbHVtbkluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlDb2x1bW5zO1wiXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbcm93SW5kZXhdPVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBbY29sdW1uSW5kZXhdPVwibG9ja2VkQ29sdW1uc0NvdW50ICsgY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbaXNOZXddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIm5ld0RhdGFJdGVtXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGxcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJhZGRSb3dMb2dpY2FsSW5kZXgoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwibG9naWNhbENvbEluZGV4KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU3Bhbl09XCJjb2x1bW4uY29sc3BhblwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPHRyICpuZ0lmPVwiZGF0YT8ubGVuZ3RoID09PSAwIHx8IGRhdGEgPT0gbnVsbFwiIGNsYXNzPVwiay1ncmlkLW5vcmVjb3Jkc1wiPlxuICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2xTcGFuXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICBbbmdJZl09XCJub1JlY29yZHNUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZjogbm9SZWNvcmRzVGVtcGxhdGU/LnRlbXBsYXRlUmVmXG4gICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW5vUmVjb3Jkc1RlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIHt7bm9SZWNvcmRzVGV4dH19XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICA8L3RyPlxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvclxuICAgICAgICBbbmdGb3JPZl09XCJkYXRhXCJcbiAgICAgICAgW25nRm9yVHJhY2tCeV09XCJ0cmFja0J5V3JhcHBlclwiXG4gICAgICAgIGxldC1pdGVtXG4gICAgICAgIGxldC1yb3dJbmRleD1cImluZGV4XCI+XG4gICAgICAgIDx0ciAqbmdJZj1cImlzR3JvdXAoaXRlbSkgJiYgaXNQYXJlbnRHcm91cEV4cGFuZGVkKGl0ZW0pICYmIHNob3dHcm91cEhlYWRlcihpdGVtKVwiXG4gICAgICAgICAgICBrZW5kb0dyaWRHcm91cEhlYWRlclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtncm91cHNdPVwiZ3JvdXBzXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbaGFzRGV0YWlsc109XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIFtza2lwR3JvdXBEZWNvcmF0aW9uXT1cInNraXBHcm91cERlY29yYXRpb25cIlxuICAgICAgICAgICAgICAgIFtoYXNHcm91cEhlYWRlckNvbHVtbl09XCJoYXNHcm91cEhlYWRlckNvbHVtblwiXG4gICAgICAgICAgICAgICAgW2dyb3VwSGVhZGVyQ29sdW1uc109XCJncm91cEhlYWRlckNvbHVtbnNcIlxuICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJyb3dJbmRleCArIDFcIlxuICAgICAgICAgICAgICAgIFt0b3RhbENvbHVtbnNDb3VudF09XCJ0b3RhbENvbHVtbnNDb3VudFwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlUm93XT1cImxvY2tlZENvbHVtbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ2VsbHNDb3VudF09XCJjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZUNlbGxzQ291bnRdPVwiZ3JvdXBIZWFkZXJTbGF2ZUNlbGxzQ291bnRcIj5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgICAqbmdJZj1cImlzRGF0YUl0ZW0oaXRlbSkgJiYgaXNJbkV4cGFuZGVkR3JvdXAoaXRlbSlcIlxuICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbFJvd1xuICAgICAgICAgICAgICAgIFtkYXRhUm93SW5kZXhdPVwiaXRlbS5pbmRleFwiXG4gICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIml0ZW0uZGF0YVwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlUm93XT1cImxvY2tlZENvbHVtbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ2VsbHNDb3VudF09XCJjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZUNlbGxzQ291bnRdPVwidW5sb2NrZWRDb2x1bW5zQ291bnRcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93Q2xhc3MoeyBkYXRhSXRlbTogaXRlbS5kYXRhLCBpbmRleDogaXRlbS5pbmRleCB9KVwiXG4gICAgICAgICAgICBbY2xhc3Muay1hbHRdPVwiaXNPZGQoaXRlbSlcIlxuICAgICAgICAgICAgW2NsYXNzLmstbWFzdGVyLXJvd109XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW2NsYXNzLmstZ3JpZC1lZGl0LXJvd109XCJpc0VkaXRpbmdSb3coaXRlbS5pbmRleClcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1rZW5kby1ncmlkLWl0ZW0taW5kZXhdPVwiaXRlbS5pbmRleFwiXG4gICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1zZWxlY3RlZF09XCJpc1NlbGVjdGFibGUoKSAmJiBpc1Jvd1NlbGVjdGVkKGl0ZW0pXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiIXNraXBHcm91cERlY29yYXRpb25cIj5cbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWdyb3VwLWNlbGxcIiAqbmdGb3I9XCJsZXQgZyBvZiBncm91cHNcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+PC90ZD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWhpZXJhcmNoeS1jZWxsXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImRldGFpbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGxcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFSb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIml0ZW0uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtkZXRhaWxFeHBhbmRDZWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLXNlbGVjdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGUuc2hvd0lmKGl0ZW0uZGF0YSwgaXRlbS5pbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJkZXRhaWxCdXR0b25TdHlsZXMoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50aXRsZV09XCJkZXRhaWxCdXR0b25UaXRsZShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIGhyZWY9XCIjXCIgdGFiaW5kZXg9XCItMVwiIChjbGljayk9XCJ0b2dnbGVSb3coaXRlbS5pbmRleCwgaXRlbS5kYXRhKVwiPjwvYT5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtyb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbHVtbkluZGV4XT1cImxvY2tlZENvbHVtbnNDb3VudCArIGNvbHVtbkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1rZW5kby1ncmlkLWNvbHVtbi1pbmRleF09XCJsb2NrZWRDb2x1bW5zQ291bnQgKyBjb2x1bW5JbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2x1bW5dPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIml0ZW0uZGF0YVwiXG4gICAgICAgICAgICAgICAga2VuZG9HcmlkTG9naWNhbENlbGxcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCJsb2dpY2FsQ29sSW5kZXgoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhUm93SW5kZXhdPVwiaXRlbS5pbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRhSXRlbV09XCJpdGVtLmRhdGFcIlxuICAgICAgICAgICAgICAgICAgICBbY29sSW5kZXhdPVwiY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICBbY29sU3Bhbl09XCJjb2x1bW4uY29sc3BhblwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJncmlkY2VsbFwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNTZWxlY3RhYmxlKCkgPyBpc0FyaWFTZWxlY3RlZChpdGVtLCBjb2x1bW4pIDogdW5kZWZpbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRvdWNoLWFjdGlvbl09XCJpc1NlbGVjdGFibGUoKSAmJiAkYW55KHNlbGVjdGFibGUpLmRyYWcgPyAnbm9uZScgOiAnYXV0bydcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbHVtbi5jc3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstZ3JpZC1lZGl0LWNlbGxdPVwiaXNFZGl0aW5nQ2VsbChpdGVtLmluZGV4LCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLXNlbGVjdGVkXT1cImlzU2VsZWN0YWJsZSAmJiBjZWxsU2VsZWN0aW9uU2VydmljZS5pc0NlbGxTZWxlY3RlZChpdGVtLCBjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5Q29sdW1ucztcIj5cbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciAqbmdJZj1cImlzRGF0YUl0ZW0oaXRlbSkgJiYgaXNJbkV4cGFuZGVkR3JvdXAoaXRlbSkgJiYgZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmICYmXG4gICAgICAgICAgICBkZXRhaWxUZW1wbGF0ZS5zaG93SWYoaXRlbS5kYXRhLCBpdGVtLmluZGV4KSAmJiBpc0V4cGFuZGVkKGl0ZW0pXCJcbiAgICAgICAgICAgIGNsYXNzPVwiay1kZXRhaWwtcm93XCJcbiAgICAgICAgICAgIFtjbGFzcy5rLWFsdF09XCJpc09kZChpdGVtKVwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2RhdGFSb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICBbZGF0YUl0ZW1dPVwiaXRlbS5kYXRhXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleCkgKyAxXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlUm93XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbENlbGxzQ291bnRdPVwiMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWdyb3VwLWNlbGxcIiAqbmdGb3I9XCJsZXQgZyBvZiBncm91cHNcIj48L3RkPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1oaWVyYXJjaHktY2VsbFwiPjwvdGQ+XG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJrLWRldGFpbC1jZWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnNTcGFuXCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleCkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvZ2ljYWxDb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFSb3dJbmRleF09XCJpdGVtLmluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtXT1cIml0ZW0uZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgIFtjb2xJbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbFNwYW5dPVwiYWxsQ29sdW1uc1NwYW4gKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cImdyaWRjZWxsXCIgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRldGFpbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFJdGVtOiBpdGVtLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3dJbmRleDogaXRlbS5pbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbS5kYXRhXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyICpuZ0lmPVwiaXNGb290ZXIoaXRlbSkgJiYgKGlzSW5FeHBhbmRlZEdyb3VwKGl0ZW0pIHx8IChzaG93R3JvdXBGb290ZXJzICYmIGlzUGFyZW50R3JvdXBFeHBhbmRlZChpdGVtKSkpXG4gICAgICAgICAgICAmJiAhaXRlbS5kYXRhLmhpZGVGb290ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJrLWdyb3VwLWZvb3RlclwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXgocm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlUm93XT1cImxvY2tlZENvbHVtbnNDb3VudCA+IDBcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsQ2VsbHNDb3VudF09XCJjb2x1bW5zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxTbGF2ZUNlbGxzQ291bnRdPVwidW5sb2NrZWRDb2x1bW5zQ291bnRcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhc2tpcEdyb3VwRGVjb3JhdGlvblwiPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImstZ3JvdXAtY2VsbFwiICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiPjwvdGQ+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiay1oaWVyYXJjaHktY2VsbFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJkZXRhaWxUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgIGtlbmRvR3JpZExvZ2ljYWxDZWxsXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsUm93SW5kZXhdPVwibG9naWNhbFJvd0luZGV4KHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZCBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleChyb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbENvbEluZGV4XT1cImxvZ2ljYWxDb2xJbmRleChjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXNraXBdPVwic2tpcEdyb3VwRGVjb3JhdGlvblwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBmb290ZXJDb2x1bW5zOyBsZXQgY29sdW1uSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUNvbHVtbnM7XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZUNvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVSZWY6IGNvbHVtbi5ncm91cEZvb3RlclRlbXBsYXRlUmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IGl0ZW0uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0ZXM6IGl0ZW0uZGF0YT8uYWdncmVnYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbS5kYXRhPy5hZ2dyZWdhdGVzXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UYWJsZUJvZHlDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEZXRhaWxzU2VydmljZSB9LFxuICAgIHsgdHlwZTogR3JvdXBzU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBEb21FdmVudHNTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTZWxlY3Rpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBDZWxsU2VsZWN0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogQ29sdW1uSW5mb1NlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5hdmlnYXRpb25TZXJ2aWNlIH1cbl07XG5UYWJsZUJvZHlDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWxsQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkZXRhaWxUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbm9SZWNvcmRzVGVtcGxhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNraXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG5vUmVjb3Jkc1RleHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGlzTG9ja2VkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBza2lwR3JvdXBEZWNvcmF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzaG93R3JvdXBGb290ZXJzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWRDb2x1bW5zQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRvdGFsQ29sdW1uc0NvdW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB2aXJ0dWFsQ29sdW1uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdHJhY2tCeTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcm93Q2xhc3M6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgQ2VsbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWRpdFNlcnZpY2UsIGlkU2VydmljZSwgY2VsbENvbnRleHQpIHtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmlkU2VydmljZSA9IGlkU2VydmljZTtcbiAgICAgICAgdGhpcy5jZWxsQ29udGV4dCA9IGNlbGxDb250ZXh0O1xuICAgICAgICB0aGlzLmlzTmV3ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlQ29udGV4dCA9IHt9O1xuICAgICAgICB0aGlzLl9lZGl0VGVtcGxhdGVDb250ZXh0ID0ge307XG4gICAgfVxuICAgIGdldCBjb21tYW5kQ2VsbENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0NvbW1hbmQodGhpcy5jb2x1bW4pO1xuICAgIH1cbiAgICBzZXQgcm93SW5kZXgoaW5kZXgpIHtcbiAgICAgICAgdGhpcy5fcm93SW5kZXggPSBpbmRleDtcbiAgICAgICAgdGhpcy51cGRhdGVDZWxsQ29udGV4dCgpO1xuICAgIH1cbiAgICBnZXQgcm93SW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dJbmRleDtcbiAgICB9XG4gICAgZ2V0IGlzRWRpdGVkKCkge1xuICAgICAgICBpZiAoISh0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGluZygpIHx8IHRoaXMuaXNOZXcpIHx8ICF0aGlzLmlzQ29sdW1uRWRpdGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlZGl0Q29udGV4dCA9IHRoaXMuZWRpdFNlcnZpY2UuY29sdW1uQ29udGV4dCh0aGlzLnJvd0luZGV4LCB0aGlzLmNvbHVtbik7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRmllbGRFZGl0YWJsZShlZGl0Q29udGV4dCwgdGhpcy5jb2x1bW4pO1xuICAgIH1cbiAgICBnZXQgZm9ybUdyb3VwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0U2VydmljZS5jb250ZXh0KHRoaXMucm93SW5kZXgpLmdyb3VwO1xuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVDb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGVDb250ZXh0O1xuICAgIH1cbiAgICBnZXQgZWRpdFRlbXBsYXRlQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5fZWRpdFRlbXBsYXRlQ29udGV4dC4kaW1wbGljaXQgPSB0aGlzLmZvcm1Hcm91cDtcbiAgICAgICAgdGhpcy5fZWRpdFRlbXBsYXRlQ29udGV4dC5pc05ldyA9IHRoaXMuaXNOZXc7XG4gICAgICAgIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQuY29sdW1uID0gdGhpcy5jb2x1bW47XG4gICAgICAgIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQuZGF0YUl0ZW0gPSB0aGlzLmRhdGFJdGVtO1xuICAgICAgICB0aGlzLl9lZGl0VGVtcGxhdGVDb250ZXh0LmZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwO1xuICAgICAgICB0aGlzLl9lZGl0VGVtcGxhdGVDb250ZXh0LnJvd0luZGV4ID0gdGhpcy5yb3dJbmRleDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRUZW1wbGF0ZUNvbnRleHQ7XG4gICAgfVxuICAgIGdldCBmb3JtYXQoKSB7XG4gICAgICAgIGlmIChpc0NvbHVtbkNvbXBvbmVudCh0aGlzLmNvbHVtbikgJiYgIWlzTnVsbE9yRW1wdHlTdHJpbmcodGhpcy5jb2x1bW4uZm9ybWF0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RGb3JtYXQodGhpcy5jb2x1bW4uZm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBnZXQgaXNCb3VuZENvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uLmZpZWxkICYmICF0aGlzLmNvbHVtbi50ZW1wbGF0ZVJlZjtcbiAgICB9XG4gICAgZ2V0IGlzQ2hlY2tib3hDb2x1bW4oKSB7XG4gICAgICAgIHJldHVybiBpc0NoZWNrYm94Q29sdW1uKHRoaXMuY29sdW1uKSAmJiAhdGhpcy5jb2x1bW4udGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIGdldCBzZWxlY3Rpb25DaGVja2JveElkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pZFNlcnZpY2Uuc2VsZWN0aW9uQ2hlY2tib3hJZCh0aGlzLnJvd0luZGV4KTtcbiAgICB9XG4gICAgZ2V0IGlzU3BhbkNvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIGlzU3BhbkNvbHVtbih0aGlzLmNvbHVtbikgJiYgIXRoaXMuY29sdW1uLnRlbXBsYXRlUmVmO1xuICAgIH1cbiAgICBnZXQgY2hpbGRDb2x1bW5zKCkge1xuICAgICAgICByZXR1cm4gY29sdW1uc1RvUmVuZGVyKFt0aGlzLmNvbHVtbl0pO1xuICAgIH1cbiAgICBnZXQgaXNDb2x1bW5FZGl0YWJsZSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbHVtbiB8fCB0aGlzLmlzQ29tbWFuZCh0aGlzLmNvbHVtbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW4uZWRpdGFibGUgIT09IGZhbHNlO1xuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ2VsbENvbnRleHQoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoX2NoYW5nZXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZUNvbnRleHQoKTtcbiAgICB9XG4gICAgaXNDb21tYW5kKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gY29sdW1uIGluc3RhbmNlb2YgQ29tbWFuZENvbHVtbkNvbXBvbmVudDtcbiAgICB9XG4gICAgaXNGaWVsZEVkaXRhYmxlKGVkaXRDb250ZXh0LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoZWRpdENvbnRleHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJlc2VudChjb2x1bW4uZWRpdFRlbXBsYXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudChlZGl0Q29udGV4dC5ncm91cCkgJiYgaXNQcmVzZW50KGVkaXRDb250ZXh0Lmdyb3VwLmdldChjb2x1bW4uZmllbGQpKTtcbiAgICB9XG4gICAgdXBkYXRlQ2VsbENvbnRleHQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNlbGxDb250ZXh0LnJvd0luZGV4ID0gdGhpcy5fcm93SW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdXBkYXRlVGVtcGxhdGVDb250ZXh0KCkge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1uLnRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX3RlbXBsYXRlQ29udGV4dDtcbiAgICAgICAgY29udGV4dC5pc05ldyA9IHRoaXMuaXNOZXc7XG4gICAgICAgIGNvbnRleHQuY29sdW1uID0gdGhpcy5jb2x1bW47XG4gICAgICAgIGNvbnRleHQuZGF0YUl0ZW0gPSB0aGlzLmRhdGFJdGVtO1xuICAgICAgICBjb250ZXh0LnJvd0luZGV4ID0gdGhpcy5yb3dJbmRleDtcbiAgICAgICAgY29udGV4dC5jb2x1bW5JbmRleCA9IHRoaXMuY29sdW1uSW5kZXg7XG4gICAgICAgIGNvbnRleHQuJGltcGxpY2l0ID0gdGhpcy5kYXRhSXRlbTtcbiAgICB9XG59XG5DZWxsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkQ2VsbF0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImlzRWRpdGVkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCJjb2x1bW4udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4udGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwidGVtcGxhdGVDb250ZXh0XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNTcGFuQ29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY2hpbGRDb2x1bW4gW25nRm9yT2ZdPVwiY2hpbGRDb2x1bW5zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbSB8IHZhbHVlT2Y6IGNoaWxkQ29sdW1uLmZpZWxkOiBjaGlsZENvbHVtbi5mb3JtYXR9fVxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cImlzQm91bmRDb2x1bW5cIj57eyBkYXRhSXRlbSB8IHZhbHVlT2Y6IGNvbHVtbi5maWVsZDogY29sdW1uLmZvcm1hdH19PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXNDaGVja2JveENvbHVtbiAmJiAhaXNOZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiay1jaGVja2JveFwiIFtrZW5kb0dyaWRTZWxlY3Rpb25DaGVja2JveF09XCJyb3dJbmRleFwiIFthdHRyLmlkXT1cInNlbGVjdGlvbkNoZWNrYm94SWRcIj48bGFiZWwgY2xhc3M9XCJrLWNoZWNrYm94LWxhYmVsXCIgW2F0dHIuZm9yXT1cInNlbGVjdGlvbkNoZWNrYm94SWRcIj48L2xhYmVsPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2x1bW4uZWRpdFRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLmVkaXRUZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJlZGl0VGVtcGxhdGVDb250ZXh0XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4uZWRpdG9yXCIgKm5nSWY9XCIhY29sdW1uLmVkaXRUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tbnVtZXJpY3RleHRib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgICAgICAgICAgPjwva2VuZG8tbnVtZXJpY3RleHRib3g+XG5cbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLWRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInZGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdF09XCJmb3JtYXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgICAgICAgICAgPjwva2VuZG8tZGF0ZXBpY2tlcj5cblxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1N3aXRjaENhc2U9XCInYm9vbGVhbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiay1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChjb2x1bW4uZmllbGQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtlbmRvR3JpZEZvY3VzYWJsZVxuICAgICAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nU3dpdGNoRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLXRleHRib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Hcm91cC5nZXQoY29sdW1uLmZpZWxkKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBrZW5kb0dyaWRGb2N1c2FibGVcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNlbGxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFZGl0U2VydmljZSB9LFxuICAgIHsgdHlwZTogSWRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfVxuXTtcbkNlbGxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgY29tbWFuZENlbGxDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jb21tYW5kLWNlbGwnLF0gfV0sXG4gICAgY29sdW1uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2x1bW5JbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXNOZXc6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHJvd0luZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkYXRhSXRlbTogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYGVkaXRgIGNvbW1hbmQgb2YgdGhlIEdyaWQuIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gXG4gKiBlbGVtZW50IGluc2lkZSBhIFtgQ29tbWFuZENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY29tbWFuZGNvbHVtbmNvbXBvbmVudCAlfSkuXG4gKiBXaGVuIGFuIGFzc29jaWF0ZWQgYnV0dG9uIHdpdGggdGhlIGRpcmVjdGl2ZSBpcyBjbGlja2VkLCB0aGVcbiAqIFtgZWRpdGBdKHslIHNsdWcgYXBpX2dyaWRfZ3JpZGNvbXBvbmVudCAlfSN0b2MtZWRpdCkgZXZlbnRcbiAqIGlzIHRyaWdnZXJlZCAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGVkaXRpbmdfZ3JpZCAlfSkpLlxuICpcbiAqID4gV2hlbiB0aGUgcm93IGlzIGluIHRoZSBlZGl0IG1vZGUsIHRoZSBidXR0b24gd2l0aCBga2VuZG9HcmlkRWRpdENvbW1hbmRgIGlzIGF1dG9tYXRpY2FsbHkgaGlkZGVuLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQ+XG4gKiAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uIHRpdGxlPVwiY29tbWFuZFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGU+XG4gKiAgICAgICA8YnV0dG9uIGtlbmRvR3JpZEVkaXRDb21tYW5kIGNsYXNzPVwiay1wcmltYXJ5XCI+RWRpdDwvYnV0dG9uPlxuICogICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cbiAqIDwva2VuZG8tZ3JpZD5cbiAqIGBgYFxuICpcbiAqL1xuY2xhc3MgRWRpdENvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRTZXJ2aWNlLCBjZWxsQ29udGV4dCwgZWxlbWVudCwgcmVuZGVyZXIsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBudWxsLCBsb2NhbGl6YXRpb24sIG5nWm9uZSk7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5jZWxsQ29udGV4dCA9IGNlbGxDb250ZXh0O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21tYW5kQ2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzRWRpdGVkID8gJ25vbmUnIDogJyc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmJlZ2luRWRpdCh0aGlzLnJvd0luZGV4KTtcbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5jZWxsQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCA9IHRoaXMuY2VsbENvbnRleHQucm93SW5kZXg7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGVkID0gdGhpcy5lZGl0U2VydmljZS5pc0VkaXRlZCh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkVkaXRDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkRWRpdENvbW1hbmRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5FZGl0Q29tbWFuZERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVkaXRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEluamVjdCwgYXJnczogW0NFTExfQ09OVEVYVCxdIH1dIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuRWRpdENvbW1hbmREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XSxcbiAgICBjb21tYW5kQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1lZGl0LWNvbW1hbmQnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBjYW5jZWxgIGNvbW1hbmQgb2YgdGhlIEdyaWQuIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gXG4gKiBlbGVtZW50IGluc2lkZSBhIFtgQ29tbWFuZENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY29tbWFuZGNvbHVtbmNvbXBvbmVudCAlfSkuXG4gKiBXaGVuIGFuIGFzc29jaWF0ZWQgYnV0dG9uIHdpdGggdGhlIGRpcmVjdGl2ZSBpcyBjbGlja2VkLCB0aGVcbiAqIFtgY2FuY2VsYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1jYW5jZWwpIGV2ZW50XG4gKiBpcyB0cmlnZ2VyZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2dyaWQgJX0pKS5cbiAqXG4gKiA+IFdoZW4gdGhlIHJvdyBpcyBub3QgaW4gdGhlIGVkaXQgbW9kZSwgdGhlIGJ1dHRvbiB3aXRoIHRoZSBga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZGAgaXMgYXV0b21hdGljYWxseSBoaWRkZW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gdGl0bGU9XCJjb21tYW5kXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZT5cbiAqICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZD5DYW5jZWwgY2hhbmdlczwvYnV0dG9uPlxuICogICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgIDwva2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbj5cbiAqIDwva2VuZG8tZ3JpZD5cbiAqIGBgYFxuICpcbiAqIFlvdSBjYW4gY29udHJvbCB0aGUgY29udGVudCBvZiB0aGUgYnV0dG9uIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcm93LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sLW5vLXJ1blxuICogPGtlbmRvLWdyaWQ+XG4gKiAgIDxrZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uIHRpdGxlPVwiY29tbWFuZFwiPlxuICogICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIj5cbiAqICAgICAgIDxidXR0b24ga2VuZG9HcmlkQ2FuY2VsQ29tbWFuZD57e2lzTmV3ID8gJ0Rpc2NhcmQnIDogJ0NhbmNlbCBjaGFuZ2VzJ319PC9idXR0b24+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKi9cbmNsYXNzIENhbmNlbENvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRTZXJ2aWNlLCBjZWxsQ29udGV4dCwgZWxlbWVudCwgcmVuZGVyZXIsIGxvY2FsaXphdGlvbiwgbmdab25lKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQsIHJlbmRlcmVyLCBudWxsLCBsb2NhbGl6YXRpb24sIG5nWm9uZSk7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UgPSBlZGl0U2VydmljZTtcbiAgICAgICAgdGhpcy5jZWxsQ29udGV4dCA9IGNlbGxDb250ZXh0O1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb21tYW5kQ2xhc3MgPSB0cnVlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHZpc2libGUoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5pc0VkaXRlZCA/ICdub25lJyA6ICcnO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNFZGl0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuZW5kRWRpdCh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4ID0gdGhpcy5jZWxsQ29udGV4dC5yb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkKHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxufVxuQ2FuY2VsQ29tbWFuZERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZENhbmNlbENvbW1hbmRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5DYW5jZWxDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5DYW5jZWxDb21tYW5kRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHZpc2libGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmRpc3BsYXknLF0gfV0sXG4gICAgY29tbWFuZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtY2FuY2VsLWNvbW1hbmQnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGBzYXZlYCBjb21tYW5kIG9mIHRoZSBHcmlkLiBZb3UgY2FuIGFwcGx5IHRoaXMgZGlyZWN0aXZlIHRvIGFueSBgYnV0dG9uYFxuICogZWxlbWVudCBpbnNpZGUgYSBbYENvbW1hbmRDb2x1bW5Db21wb25lbnRgXSh7JSBzbHVnIGFwaV9ncmlkX2NvbW1hbmRjb2x1bW5jb21wb25lbnQgJX0pLlxuICogV2hlbiBhbiBhc3NvY2lhdGVkIGJ1dHRvbiB3aXRoIHRoZSBkaXJlY3RpdmUgaXMgY2xpY2tlZCwgdGhlXG4gKiBbYHNhdmVgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLXNhdmUpIGV2ZW50XG4gKiBpcyB0cmlnZ2VyZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2dyaWQgJX0pKS5cbiAqXG4gKiA+IFdoZW4gdGhlIHJvdyBpcyBub3QgaW4gdGhlIGVkaXQgbW9kZSwgdGhlIGJ1dHRvbiB3aXRoIGBrZW5kb0dyaWRTYXZlQ29tbWFuZGAgaXMgYXV0b21hdGljYWxseSBoaWRkZW4uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gdGl0bGU9XCJjb21tYW5kXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZT5cbiAqICAgICAgIDxidXR0b24ga2VuZG9HcmlkU2F2ZUNvbW1hbmQ+U2F2ZSBjaGFuZ2VzPC9idXR0b24+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKlxuICogWW91IGNhbiBjb250cm9sIHRoZSBjb250ZW50IG9mIHRoZSBidXR0b24gYmFzZWQgb24gdGhlIHN0YXRlIG9mIHRoZSByb3cuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgPGtlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4gdGl0bGU9XCJjb21tYW5kXCI+XG4gKiAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZENlbGxUZW1wbGF0ZSBsZXQtaXNOZXc9XCJpc05ld1wiPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRTYXZlQ29tbWFuZD57e2lzTmV3ID8gJ0FkZCcgOiAnVXBkYXRlJ319PC9idXR0b24+XG4gKiAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgPC9rZW5kby1ncmlkLWNvbW1hbmQtY29sdW1uPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKi9cbmNsYXNzIFNhdmVDb21tYW5kRGlyZWN0aXZlIGV4dGVuZHMgQnV0dG9uIHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0U2VydmljZSwgY2VsbENvbnRleHQsIGVsZW1lbnQsIHJlbmRlcmVyLCBsb2NhbGl6YXRpb24sIG5nWm9uZSkge1xuICAgICAgICBzdXBlcihlbGVtZW50LCByZW5kZXJlciwgbnVsbCwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpO1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlID0gZWRpdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuY2VsbENvbnRleHQgPSBjZWxsQ29udGV4dDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29tbWFuZENsYXNzID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCB2aXNpYmxlKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuaXNFZGl0ZWQgPyAnbm9uZScgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmlzRWRpdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLnNhdmUodGhpcy5yb3dJbmRleCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbmdEb0NoZWNrKCkge1xuICAgICAgICBpZiAodGhpcy5jZWxsQ29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5yb3dJbmRleCA9IHRoaXMuY2VsbENvbnRleHQucm93SW5kZXg7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGVkID0gdGhpcy5lZGl0U2VydmljZS5pc0VkaXRlZCh0aGlzLnJvd0luZGV4KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblNhdmVDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkU2F2ZUNvbW1hbmRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TYXZlQ29tbWFuZERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEVkaXRTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiB1bmRlZmluZWQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEluamVjdCwgYXJnczogW0NFTExfQ09OVEVYVCxdIH1dIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuU2F2ZUNvbW1hbmREaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgdmlzaWJsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZGlzcGxheScsXSB9XSxcbiAgICBjb21tYW5kQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1zYXZlLWNvbW1hbmQnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGByZW1vdmVgIGNvbW1hbmQgb2YgdGhlIEdyaWQuIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gIGVsZW1lbnRcbiAqIGluc2lkZSBhIFtgQ29tbWFuZENvbHVtbkNvbXBvbmVudGBdKHslIHNsdWcgYXBpX2dyaWRfY29tbWFuZGNvbHVtbmNvbXBvbmVudCAlfSkuXG4gKiBXaGVuIGFuIGFzc29jaWF0ZWQgYnV0dG9uIHdpdGggdGhlIGRpcmVjdGl2ZSBpcyBjbGlja2VkLCB0aGVcbiAqIFtgcmVtb3ZlYCBldmVudF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1yZW1vdmUpXG4gKiBpcyB0cmlnZ2VyZWQgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX3JlYWN0aXZlX2Zvcm1zX2dyaWQgJX0pKS5cbiAqXG4gKiA+IFdoZW4gdGhlIHJvdyBpcyBpbiB0aGUgZWRpdCBtb2RlLCB0aGUgYnV0dG9uIHdpdGggdGhlIGBrZW5kb0dyaWRSZW1vdmVDb21tYW5kYCBpcyBhdXRvbWF0aWNhbGx5IGhpZGRlbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICA8a2VuZG8tZ3JpZC1jb21tYW5kLWNvbHVtbiB0aXRsZT1cImNvbW1hbmRcIj5cbiAqICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkQ2VsbFRlbXBsYXRlPlxuICogICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRSZW1vdmVDb21tYW5kPlJlbW92ZSByb3c8L2J1dHRvbj5cbiAqICAgICA8L25nLXRlbXBsYXRlPlxuICogICA8L2tlbmRvLWdyaWQtY29tbWFuZC1jb2x1bW4+XG4gKiA8L2tlbmRvLWdyaWQ+XG4gKiBgYGBcbiAqL1xuY2xhc3MgUmVtb3ZlQ29tbWFuZERpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZWRpdFNlcnZpY2UsIGNlbGxDb250ZXh0LCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgICAgICB0aGlzLmNlbGxDb250ZXh0ID0gY2VsbENvbnRleHQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbW1hbmRDbGFzcyA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFZGl0ZWQgPyAnbm9uZScgOiAnJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ2xpY2soZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuZWRpdFNlcnZpY2UucmVtb3ZlKHRoaXMucm93SW5kZXgpO1xuICAgIH1cbiAgICBuZ0RvQ2hlY2soKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnJvd0luZGV4ID0gdGhpcy5jZWxsQ29udGV4dC5yb3dJbmRleDtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0ZWQgPSB0aGlzLmVkaXRTZXJ2aWNlLmlzRWRpdGVkKHRoaXMucm93SW5kZXgpO1xuICAgICAgICB9XG4gICAgfVxufVxuUmVtb3ZlQ29tbWFuZERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZFJlbW92ZUNvbW1hbmRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5SZW1vdmVDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IHVuZGVmaW5lZCwgZGVjb3JhdG9yczogW3sgdHlwZTogSW5qZWN0LCBhcmdzOiBbQ0VMTF9DT05URVhULF0gfV0gfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5SZW1vdmVDb21tYW5kRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHZpc2libGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmRpc3BsYXknLF0gfV0sXG4gICAgY29tbWFuZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWdyaWQtcmVtb3ZlLWNvbW1hbmQnLF0gfV0sXG4gICAgb25DbGljazogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2NsaWNrJywgWyckZXZlbnQnXSxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbW1hbmQgZm9yIGFkZGluZyBhIG5ldyBpdGVtIHRvIHRoZSBHcmlkLiBZb3UgY2FuIGFwcGx5IHRoaXMgZGlyZWN0aXZlIHRvIGFueVxuICogYGJ1dHRvbmAgZWxlbWVudCBpbnNpZGUgYSBbYFRvb2xiYXJUZW1wbGF0ZWBdKHslIHNsdWcgYXBpX2dyaWRfY29tbWFuZGNvbHVtbmNvbXBvbmVudCAlfSkuXG4gKiBXaGVuIGFuIGFzc29jaWF0ZWQgYnV0dG9uIHdpdGggdGhlIGRpcmVjdGl2ZSBpcyBjbGlja2VkLCB0aGVcbiAqIFtgYWRkYF0oeyUgc2x1ZyBhcGlfZ3JpZF9ncmlkY29tcG9uZW50ICV9I3RvYy1hZGQpIGV2ZW50IGlzIHRyaWdnZXJlZFxuICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2dyaWQgJX0pKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAqICAgICAgIDxidXR0b24ga2VuZG9HcmlkQWRkQ29tbWFuZD5BZGQgbmV3PC9idXR0b24+XG4gKiAgICA8L25nLXRlbXBsYXRlPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKi9cbmNsYXNzIEFkZENvbW1hbmREaXJlY3RpdmUgZXh0ZW5kcyBCdXR0b24ge1xuICAgIGNvbnN0cnVjdG9yKGVkaXRTZXJ2aWNlLCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZSA9IGVkaXRTZXJ2aWNlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5lZGl0U2VydmljZS5iZWdpbkFkZCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNvbW1hbmRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxufVxuQWRkQ29tbWFuZERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEFkZENvbW1hbmRdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5BZGRDb21tYW5kRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWRpdFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5BZGRDb21tYW5kRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIG9uQ2xpY2s6IFt7IHR5cGU6IEhvc3RMaXN0ZW5lciwgYXJnczogWydjbGljaycsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBjb21tYW5kQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1hZGQtY29tbWFuZCcsXSB9XVxufTtcblxuY29uc3QgZXhwb3J0ZWQkMSA9IFtcbiAgICBDb21tYW5kQ29sdW1uQ29tcG9uZW50LFxuICAgIENoZWNrYm94Q29sdW1uQ29tcG9uZW50LFxuICAgIFNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLFxuICAgIENlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBFZGl0VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgVGFibGVCb2R5Q29tcG9uZW50LFxuICAgIE5vUmVjb3Jkc1RlbXBsYXRlRGlyZWN0aXZlLFxuICAgIENlbGxDb21wb25lbnQsXG4gICAgRWRpdENvbW1hbmREaXJlY3RpdmUsXG4gICAgQ2FuY2VsQ29tbWFuZERpcmVjdGl2ZSxcbiAgICBTYXZlQ29tbWFuZERpcmVjdGl2ZSxcbiAgICBSZW1vdmVDb21tYW5kRGlyZWN0aXZlLFxuICAgIEFkZENvbW1hbmREaXJlY3RpdmVcbl07XG5jb25zdCBpbXBvcnRlZE1vZHVsZXMkMyA9IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGUsXG4gICAgR3JvdXBNb2R1bGUsXG4gICAgTnVtZXJpY1RleHRCb3hNb2R1bGUsXG4gICAgRGF0ZVBpY2tlck1vZHVsZVxuXTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBCb2R5TW9kdWxlIHtcbiAgICBzdGF0aWMgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIENvbW1hbmRDb2x1bW5Db21wb25lbnQsXG4gICAgICAgICAgICBDaGVja2JveENvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgICAgIFNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLFxuICAgICAgICAgICAgQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICAgICAgTm9SZWNvcmRzVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBFZGl0VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgICAgICBFZGl0Q29tbWFuZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIENhbmNlbENvbW1hbmREaXJlY3RpdmUsXG4gICAgICAgICAgICBTYXZlQ29tbWFuZERpcmVjdGl2ZSxcbiAgICAgICAgICAgIFJlbW92ZUNvbW1hbmREaXJlY3RpdmUsXG4gICAgICAgICAgICBBZGRDb21tYW5kRGlyZWN0aXZlXG4gICAgICAgIF07XG4gICAgfVxufVxuQm9keU1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZXhwb3J0ZWQkMV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkJDFdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFsuLi5pbXBvcnRlZE1vZHVsZXMkM11cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEZvb3RlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFtdO1xuICAgICAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgICAgICB0aGlzLmxvY2tlZENvbHVtbnNDb3VudCA9IDA7XG4gICAgICAgIHRoaXMubG9naWNhbFJvd0luZGV4ID0gMDtcbiAgICB9XG4gICAgZ2V0IGZvb3RlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuc2Nyb2xsYWJsZTtcbiAgICB9XG4gICAgZ2V0IGNvbHVtbnNUb1JlbmRlcigpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnNUb1JlbmRlcih0aGlzLmNvbHVtbnMgfHwgW10pO1xuICAgIH1cbiAgICBsb2dpY2FsQ29sdW1uSW5kZXgoY29sdW1uKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uLmxlYWZJbmRleDtcbiAgICAgICAgaWYgKGlzUHJlc2VudChpbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCArIChpc1ByZXNlbnQodGhpcy5kZXRhaWxUZW1wbGF0ZSkgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbkZvb3RlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEZvb3Rlcl0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRydWVcIj5cbiAgICAgICAgPHRyXG4gICAgICAgICAgICBbY2xhc3Muay1mb290ZXItdGVtcGxhdGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsUm93XG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxSb3dJbmRleF09XCJsb2dpY2FsUm93SW5kZXhcIlxuICAgICAgICAgICAgICAgIFtsb2dpY2FsU2xhdmVSb3ddPVwibG9ja2VkQ29sdW1uc0NvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgW2xvZ2ljYWxDZWxsc0NvdW50XT1cImNvbHVtbnMubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbbG9naWNhbFNsYXZlQ2VsbHNDb3VudF09XCJjb2x1bW5zLmxlbmd0aCAtIGxvY2tlZENvbHVtbnNDb3VudFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1ncm91cC1jZWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLWhpZXJhcmNoeS1jZWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZGV0YWlsVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zVG9SZW5kZXI7IGxldCBjb2x1bW5JbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBrZW5kb0dyaWRMb2dpY2FsQ2VsbFxuICAgICAgICAgICAgICAgICAgICBbbG9naWNhbFJvd0luZGV4XT1cImxvZ2ljYWxSb3dJbmRleFwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2dpY2FsQ29sSW5kZXhdPVwibG9naWNhbENvbHVtbkluZGV4KGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICByb2xlPVwiY29sdW1uZm9vdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1zZWxlY3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2x1bW4uZm9vdGVyQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5mb290ZXJTdHlsZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlUmVmOiBjb2x1bW4uZm9vdGVyVGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogbG9ja2VkQ29sdW1uc0NvdW50ICsgY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkZvb3RlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjb2x1bW5zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBncm91cHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRldGFpbFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzY3JvbGxhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsb2NrZWRDb2x1bW5zQ291bnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxvZ2ljYWxSb3dJbmRleDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZm9vdGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1mb290ZXInLF0gfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQzID0gW1xuICAgIEZvb3RlckNvbXBvbmVudFxuXTtcbmNvbnN0IGltcG9ydGVkTW9kdWxlcyQ0ID0gW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBTaGFyZWRNb2R1bGVcbl07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRm9vdGVyTW9kdWxlIHtcbiAgICBzdGF0aWMgZXhwb3J0cygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cbkZvb3Rlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZXhwb3J0ZWRNb2R1bGVzJDNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkM10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogWy4uLmltcG9ydGVkTW9kdWxlcyQ0XVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgVG9vbGJhckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSB7fTtcbiAgICB9XG4gICAgZ2V0IGNsYXNzTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiAnay1oZWFkZXIgay1ncmlkLXRvb2xiYXInO1xuICAgIH1cbiAgICBzZXQgcG9zaXRpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnBvc2l0aW9uID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCB0b29sYmFyVGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQudG9vbGJhclRlbXBsYXRlID8gdGhpcy5ncmlkLnRvb2xiYXJUZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG59XG5Ub29sYmFyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLXRvb2xiYXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgKm5nSWY9XCJ0b29sYmFyVGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidG9vbGJhclRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRvb2xiYXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH1cbl07XG5Ub29sYmFyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNsYXNzTmFtZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzJyxdIH1dLFxuICAgIHBvc2l0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsRWRpdFNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgPSBsb2NhbERhdGFDaGFuZ2VzU2VydmljZTtcbiAgICB9XG4gICAgY3JlYXRlKGl0ZW0pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTG9jYWxEYXRhICYmIHRoaXMuZ3JpZC5za2lwKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmRhdGEuc3BsaWNlKHRoaXMuZ3JpZC5za2lwLCAwLCBpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YS51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZWQoKTtcbiAgICB9XG4gICAgdXBkYXRlKF9pdGVtKSB7IH0gLy8gdHNsaW50OmRpc2FibGUtbGluZTpuby1lbXB0eVxuICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGRhdGEubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT09IGRhdGFbaWR4XSkge1xuICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCh7IGFjdGlvbjogJ3JlbW92ZScsIGl0ZW06IGl0ZW0gfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXNzaWduVmFsdWVzKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGFyZ2V0LCBzb3VyY2UpO1xuICAgIH1cbiAgICBkYXRhQ2hhbmdlZChhcmdzID0ge30pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTG9jYWxEYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmNoYW5nZXMuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgaGFzTG9jYWxEYXRhKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlLmRhdGEpO1xuICAgIH1cbiAgICBnZXQgZGF0YSgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzTG9jYWxEYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdyaWQuZGF0YTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGVmYXVsdCBlZGl0IHNlcnZpY2Ugb2YgdGhlIGVkaXRpbmcgZGlyZWN0aXZlcyB3b3JrcyBvbmx5IHdoZW4gYmluZGluZyB0byBwbGFpbiBhcnJheS4nICtcbiAgICAgICAgICAgICAgICAnUGxlYXNlIHByb3ZpZGUgYW4gZWRpdFNlcnZpY2UuJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEVkaXRpbmdEaXJlY3RpdmVCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihncmlkLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSkge1xuICAgICAgICB0aGlzLmdyaWQgPSBncmlkO1xuICAgICAgICB0aGlzLmxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlID0gbG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2U7XG4gICAgICAgIHRoaXMuZGVmYXVsdEVkaXRTZXJ2aWNlID0gdGhpcy5jcmVhdGVEZWZhdWx0U2VydmljZSgpO1xuICAgIH1cbiAgICAvLyBDb25zaWRlciBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlIGRlcGVuZGVuY3kgaW5qZWN0aW9uIG9mIHRoZSBzZXJ2aWNlIHRvIGFsbG93IGZvciBzcGVjaWZ5aW5nIGEgZ2VuZXJpYyBzZXJ2aWNlIHdpdGhvdXQgY29kZS5cbiAgICAvLyBUaGUgSW5wdXQgc2hvdWxkIHN0aWxsIGJlIGtlcHQuXG4gICAgLyoqXG4gICAgICogVGhlIGVkaXQgc2VydmljZSB0aGF0IHdpbGwgaGFuZGxlIHRoZSBvcGVyYXRpb25zLlxuICAgICAqL1xuICAgIHNldCBlZGl0U2VydmljZSh2YWx1ZSkge1xuICAgICAgICB0aGlzLnVzZXJFZGl0U2VydmljZSA9IHZhbHVlO1xuICAgIH1cbiAgICBnZXQgZWRpdFNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJFZGl0U2VydmljZSB8fCB0aGlzLmRlZmF1bHRFZGl0U2VydmljZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSB0aGlzLmdyaWQuYWRkLnN1YnNjcmliZSh0aGlzLmFkZEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLnJlbW92ZS5zdWJzY3JpYmUodGhpcy5yZW1vdmVIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuY2FuY2VsLnN1YnNjcmliZSh0aGlzLmNhbmNlbEhhbmRsZXIuYmluZCh0aGlzKSkpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5zYXZlLnN1YnNjcmliZSh0aGlzLnNhdmVIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmdyaWQuZGF0YVN0YXRlQ2hhbmdlLnN1YnNjcmliZSh0aGlzLm9uU3RhdGVDaGFuZ2UuYmluZCh0aGlzKSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBjcmVhdGVEZWZhdWx0U2VydmljZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBMb2NhbEVkaXRTZXJ2aWNlKHRoaXMuZ3JpZCwgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSk7XG4gICAgfVxuICAgIGFkZEhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuZ3JpZC5hZGRSb3codGhpcy5jcmVhdGVNb2RlbCh7IGlzTmV3OiB0cnVlIH0pKTtcbiAgICB9XG4gICAgc2F2ZUhhbmRsZXIoYXJncykge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zYXZlTW9kZWwoYXJncyk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICBpZiAoYXJncy5pc05ldykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuY3JlYXRlKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0U2VydmljZS51cGRhdGUoaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93KGFyZ3Mucm93SW5kZXgpO1xuICAgIH1cbiAgICBjYW5jZWxIYW5kbGVyKHsgcm93SW5kZXggfSkge1xuICAgICAgICB0aGlzLmNsb3NlRWRpdG9yKHJvd0luZGV4KTtcbiAgICB9XG4gICAgcmVtb3ZlSGFuZGxlcih7IGRhdGFJdGVtIH0pIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlSXRlbSA9IChzaG91bGRSZW1vdmUpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRSZW1vdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLnJlbW92ZShkYXRhSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZUNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5yZW1vdmVDb25maXJtYXRpb24oZGF0YUl0ZW0pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQudGhlbihyZW1vdmVJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUocmVtb3ZlSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW1vdmVJdGVtKHJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZW1vdmVJdGVtKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuY2xvc2VFZGl0b3IoKTtcbiAgICB9XG4gICAgY2xvc2VFZGl0b3Iocm93SW5kZXgpIHtcbiAgICAgICAgdGhpcy5ncmlkLmNsb3NlUm93KHJvd0luZGV4KTtcbiAgICB9XG59XG5FZGl0aW5nRGlyZWN0aXZlQmFzZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBlZGl0U2VydmljZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgcmVtb3ZlQ29uZmlybWF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIExvY2FsUm93RWRpdFNlcnZpY2UgZXh0ZW5kcyBMb2NhbEVkaXRTZXJ2aWNlIHtcbiAgICB1cGRhdGUoX2l0ZW0pIHtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlZCgpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFJvd0VkaXRpbmdEaXJlY3RpdmVCYXNlIGV4dGVuZHMgRWRpdGluZ0RpcmVjdGl2ZUJhc2Uge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zXG4gICAgICAgICAgICAuYWRkKHRoaXMuZ3JpZC5lZGl0LnN1YnNjcmliZSh0aGlzLmVkaXRIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgY3JlYXRlRGVmYXVsdFNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG9jYWxSb3dFZGl0U2VydmljZSh0aGlzLmdyaWQsIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UpO1xuICAgIH1cbiAgICBhZGRIYW5kbGVyKCkge1xuICAgICAgICB0aGlzLmNsb3NlRWRpdG9yKCk7XG4gICAgICAgIHN1cGVyLmFkZEhhbmRsZXIoKTtcbiAgICB9XG4gICAgZWRpdEhhbmRsZXIoYXJncykge1xuICAgICAgICB0aGlzLmNsb3NlRWRpdG9yKCk7XG4gICAgICAgIHRoaXMucm93SW5kZXggPSBhcmdzLnJvd0luZGV4O1xuICAgICAgICB0aGlzLmdyaWQuZWRpdFJvdyhhcmdzLnJvd0luZGV4LCB0aGlzLmNyZWF0ZU1vZGVsKGFyZ3MpKTtcbiAgICB9XG4gICAgc2F2ZUhhbmRsZXIoYXJncykge1xuICAgICAgICBzdXBlci5zYXZlSGFuZGxlcihhcmdzKTtcbiAgICAgICAgdGhpcy5jbGVhbigpO1xuICAgIH1cbiAgICBjbG9zZUVkaXRvcihyb3dJbmRleCA9IHRoaXMucm93SW5kZXgpIHtcbiAgICAgICAgc3VwZXIuY2xvc2VFZGl0b3Iocm93SW5kZXgpO1xuICAgICAgICB0aGlzLmNsZWFuKCk7XG4gICAgfVxuICAgIGNsZWFuKCkge1xuICAgICAgICBkZWxldGUgdGhpcy5yb3dJbmRleDtcbiAgICB9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBlZGl0aW5nIG9wZXJhdGlvbnMgb2YgdGhlIEdyaWQgd2hlbiB1c2luZ1xuICogdGhlIFRlbXBsYXRlLURyaXZlbiBBbmd1bGFyIEZvcm1zIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19kaXJlY3RpdmVzX2dyaWQgJX0jdG9jLXRoZS10ZW1wbGF0ZS1kaXJlY3RpdmUpKS5cbiAqL1xuY2xhc3MgVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlIGV4dGVuZHMgUm93RWRpdGluZ0RpcmVjdGl2ZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgIH1cbiAgICBlZGl0SGFuZGxlcihhcmdzKSB7XG4gICAgICAgIHN1cGVyLmVkaXRIYW5kbGVyKGFyZ3MpO1xuICAgICAgICB0aGlzLmRhdGFJdGVtID0gYXJncy5kYXRhSXRlbTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFZhbHVlcyA9IHt9O1xuICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmFzc2lnblZhbHVlcyh0aGlzLm9yaWdpbmFsVmFsdWVzLCB0aGlzLmRhdGFJdGVtKTtcbiAgICB9XG4gICAgY2xvc2VFZGl0b3Iocm93SW5kZXgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYXNzaWduVmFsdWVzKHRoaXMuZGF0YUl0ZW0sIHRoaXMub3JpZ2luYWxWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLmNsb3NlRWRpdG9yKHJvd0luZGV4KTtcbiAgICB9XG4gICAgY3JlYXRlTW9kZWwoYXJncykge1xuICAgICAgICBpZiAoYXJncy5pc05ldykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTmV3SXRlbSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNhdmVNb2RlbChhcmdzKSB7XG4gICAgICAgIHJldHVybiBhcmdzLmRhdGFJdGVtO1xuICAgIH1cbiAgICBjbGVhbigpIHtcbiAgICAgICAgc3VwZXIuY2xlYW4oKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZGF0YUl0ZW07XG4gICAgfVxufVxuVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkVGVtcGxhdGVFZGl0aW5nXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfVxuXTtcblRlbXBsYXRlRWRpdGluZ0RpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjcmVhdGVOZXdJdGVtOiBbeyB0eXBlOiBJbnB1dCwgYXJnczogWydrZW5kb0dyaWRUZW1wbGF0ZUVkaXRpbmcnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBtYXJrQWxsQXNUb3VjaGVkID0gKGNvbnRyb2wpID0+IHtcbiAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAoY29udHJvbC5oYXNPd25Qcm9wZXJ0eSgnY29udHJvbHMnKSkge1xuICAgICAgICBsZXQgY29udHJvbHMgPSBjb250cm9sLmNvbnRyb2xzO1xuICAgICAgICBmb3IgKGxldCBpbm5lciBpbiBjb250cm9scykge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xzLmhhc093blByb3BlcnR5KGlubmVyKSkge1xuICAgICAgICAgICAgICAgIG1hcmtBbGxBc1RvdWNoZWQoY29udHJvbHNbaW5uZXJdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgd2hpY2ggZW5jYXBzdWxhdGVzIHRoZSBlZGl0aW5nIG9wZXJhdGlvbnMgb2YgdGhlIEdyaWQgd2hlbiB1c2luZyB0aGVcbiAqIFJlYWN0aXZlIEZvcm1zIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZWRpdGluZ19kaXJlY3RpdmVzX2dyaWQgJX0jdG9jLXRoZS1yZWFjdGl2ZS1kaXJlY3RpdmUpKS5cbiAqL1xuY2xhc3MgUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlIGV4dGVuZHMgUm93RWRpdGluZ0RpcmVjdGl2ZUJhc2Uge1xuICAgIGNvbnN0cnVjdG9yKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGdyaWQsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5ncmlkID0gZ3JpZDtcbiAgICAgICAgdGhpcy5sb2NhbERhdGFDaGFuZ2VzU2VydmljZSA9IGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlO1xuICAgIH1cbiAgICBjcmVhdGVNb2RlbChhcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZvcm1Hcm91cChhcmdzKTtcbiAgICB9XG4gICAgc2F2ZU1vZGVsKHsgZGF0YUl0ZW0sIGZvcm1Hcm91cCwgaXNOZXcgfSkge1xuICAgICAgICBpZiAoIWZvcm1Hcm91cC5kaXJ0eSAmJiAhaXNOZXcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmFzc2lnblZhbHVlcyhkYXRhSXRlbSwgZm9ybUdyb3VwLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRhSXRlbTtcbiAgICAgICAgfVxuICAgICAgICBtYXJrQWxsQXNUb3VjaGVkKGZvcm1Hcm91cCk7XG4gICAgfVxufVxuUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkUmVhY3RpdmVFZGl0aW5nXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogR3JpZENvbXBvbmVudCB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfVxuXTtcblJlYWN0aXZlRWRpdGluZ0RpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBjcmVhdGVGb3JtR3JvdXA6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbJ2tlbmRvR3JpZFJlYWN0aXZlRWRpdGluZycsXSB9XVxufTtcblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGVkaXRpbmcgb3BlcmF0aW9ucyBvZiB0aGUgR3JpZCB3aGVuIHVzaW5nIHRoZSBpbi1jZWxsXG4gKiBlZGl0aW5nIHdpdGggUmVhY3RpdmUgRm9ybXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBlZGl0aW5nX2RpcmVjdGl2ZXNfZ3JpZCAlfSN0b2MtdGhlLWluY2VsbC1kaXJlY3RpdmUpKS5cbiAqL1xuY2xhc3MgSW5DZWxsRWRpdGluZ0RpcmVjdGl2ZSBleHRlbmRzIEVkaXRpbmdEaXJlY3RpdmVCYXNlIHtcbiAgICBjb25zdHJ1Y3RvcihncmlkLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSkge1xuICAgICAgICBzdXBlcihncmlkLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSk7XG4gICAgICAgIHRoaXMuZ3JpZCA9IGdyaWQ7XG4gICAgICAgIHRoaXMubG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgPSBsb2NhbERhdGFDaGFuZ2VzU2VydmljZTtcbiAgICB9XG4gICAgLy8gTmVlZCBtaXhpblxuICAgIGNyZWF0ZU1vZGVsKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRm9ybUdyb3VwKGFyZ3MpO1xuICAgIH1cbiAgICBzYXZlTW9kZWwoeyBkYXRhSXRlbSwgZm9ybUdyb3VwLCBpc05ldyB9KSB7XG4gICAgICAgIGlmICghZm9ybUdyb3VwLmRpcnR5ICYmICFpc05ldykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3JtR3JvdXAudmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UuYXNzaWduVmFsdWVzKGRhdGFJdGVtLCBmb3JtR3JvdXAudmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFJdGVtO1xuICAgICAgICB9XG4gICAgICAgIG1hcmtBbGxBc1RvdWNoZWQoZm9ybUdyb3VwKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMuZ3JpZC5jZWxsQ2xpY2suc3Vic2NyaWJlKHRoaXMuY2VsbENsaWNrSGFuZGxlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ncmlkLmNlbGxDbG9zZS5zdWJzY3JpYmUodGhpcy5jZWxsQ2xvc2VIYW5kbGVyLmJpbmQodGhpcykpKTtcbiAgICB9XG4gICAgcmVtb3ZlSGFuZGxlcihhcmdzKSB7XG4gICAgICAgIHN1cGVyLnJlbW92ZUhhbmRsZXIoYXJncyk7XG4gICAgICAgIHRoaXMuZ3JpZC5jYW5jZWxDZWxsKCk7XG4gICAgfVxuICAgIGNlbGxDbGlja0hhbmRsZXIoYXJncykge1xuICAgICAgICBpZiAoIWFyZ3MuaXNFZGl0ZWQgJiYgYXJncy50eXBlICE9PSAnY29udGV4dG1lbnUnKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZWRpdENlbGwoYXJncy5yb3dJbmRleCwgYXJncy5jb2x1bW5JbmRleCwgdGhpcy5jcmVhdGVGb3JtR3JvdXAoYXJncykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNlbGxDbG9zZUhhbmRsZXIoYXJncykge1xuICAgICAgICBjb25zdCB7IGZvcm1Hcm91cCwgZGF0YUl0ZW0gfSA9IGFyZ3M7XG4gICAgICAgIGlmICghZm9ybUdyb3VwLnZhbGlkKSB7XG4gICAgICAgICAgICBhcmdzLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUdyb3VwLmRpcnR5KSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRTZXJ2aWNlLmFzc2lnblZhbHVlcyhkYXRhSXRlbSwgZm9ybUdyb3VwLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdFNlcnZpY2UudXBkYXRlKGRhdGFJdGVtKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkluQ2VsbEVkaXRpbmdEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0dyaWRJbkNlbGxFZGl0aW5nXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuSW5DZWxsRWRpdGluZ0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEdyaWRDb21wb25lbnQgfSxcbiAgICB7IHR5cGU6IExvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlIH1cbl07XG5JbkNlbGxFZGl0aW5nRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGNyZWF0ZUZvcm1Hcm91cDogW3sgdHlwZTogSW5wdXQsIGFyZ3M6IFsna2VuZG9HcmlkSW5DZWxsRWRpdGluZycsXSB9XVxufTtcblxuY29uc3QgaGFzR3JvdXBzID0gKGl0ZW1zKSA9PiBpdGVtcyAmJiBpdGVtcy5sZW5ndGggJiYgaXRlbXNbMF0uZmllbGQgJiYgaXRlbXNbMF0uaXRlbXM7XG5jb25zdCBncm91cERlc2NyaXB0b3JzUHJlc2VudCA9IChkZXNjcmlwdG9ycykgPT4gaXNQcmVzZW50KGRlc2NyaXB0b3JzKSAmJiBkZXNjcmlwdG9ycy5sZW5ndGggPiAwO1xuY29uc3QgcHJvY2Vzc0dyb3VwcyA9IChkYXRhLCBzdGF0ZSQkMSkgPT4gcHJvY2VzcyhkYXRhLCBzdGF0ZSQkMSkuZGF0YTtcbmNvbnN0IHJlbW92ZVBhcmVudERlc2NyaXB0b3JzID0gKHBhcmVudHMsIG93bmVyKSA9PiBnID0+IGcuZmllbGQgIT09IG93bmVyLmZpZWxkICYmICFwYXJlbnRzLnNvbWUoeSA9PiB5LmZpZWxkID09PSBnLmZpZWxkKTtcbmNvbnN0IGZpbmRHcm91cCA9IChncm91cEluZGV4LCBncm91cHMpID0+IHtcbiAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ3JvdXA6IGdyb3VwSW5kZXguc3BsaXQoXCJfXCIpLnJlZHVjZSgoYWNjLCB4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBwYXJzZUludCh4LCAxMCk7XG4gICAgICAgICAgICBpZiAoYWNjLml0ZW1zKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50cy5wdXNoKGFjYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5pdGVtc1tpZHhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjKSA/IGFjY1tpZHhdIDogYWNjO1xuICAgICAgICB9LCBncm91cHMpLFxuICAgICAgICBwYXJlbnRzXG4gICAgfTtcbn07XG5jb25zdCBmaW5kQ2hpbGRyZW4gPSAoZGF0YSwgcGFyZW50cykgPT4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSBwYXJlbnRzLm1hcChwID0+ICh7IGZpZWxkOiBwLmZpZWxkLCBvcGVyYXRvcjogXCJlcVwiLCB2YWx1ZTogcC52YWx1ZSB9KSk7XG4gICAgcmV0dXJuIGZpbHRlckJ5KGRhdGEsIHtcbiAgICAgICAgZmlsdGVyczogZmlsdGVycyxcbiAgICAgICAgbG9naWM6IFwiYW5kXCJcbiAgICB9KTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY291bnQgPSAoZ3JvdXBzLCBpbmNsdWRlRm9vdGVycyA9IGZhbHNlKSA9PiAoZ3JvdXBzLnJlZHVjZSgoYWNjLCBncm91cCkgPT4ge1xuICAgIGlmICghZ3JvdXAuc2tpcEhlYWRlcikge1xuICAgICAgICBhY2MrKztcbiAgICB9XG4gICAgaWYgKGdyb3VwLml0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0gY291bnQoZ3JvdXAuaXRlbXMsIGluY2x1ZGVGb290ZXJzKTtcbiAgICAgICAgaWYgKGluY2x1ZGVGb290ZXJzICYmIGNoaWxkcmVuICYmICFncm91cC5oaWRlRm9vdGVyKSB7XG4gICAgICAgICAgICBhY2MrKztcbiAgICAgICAgfVxuICAgICAgICBhY2MgKz0gY2hpbGRyZW47XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG59LCAwKSAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOmFsaWduXG4pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHNsaWNlID0gKGdyb3Vwcywgc2tpcCwgdGFrZSQkMSwgaW5jbHVkZUZvb3RlcnMgPSBmYWxzZSkgPT4ge1xuICAgIGlmICghaXNQcmVzZW50KHRha2UkJDEpKSB7XG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGlkeCA9IDAsIGxlbmd0aCA9IGdyb3Vwcy5sZW5ndGg7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgaWYgKHRha2UkJDEgPD0gMCkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JvdXAgPSBncm91cHNbaWR4XTtcbiAgICAgICAgY29uc3QgZ3JvdXBJdGVtcyA9IGdyb3VwLml0ZW1zO1xuICAgICAgICBsZXQgaXRlbUNvdW50ID0gY291bnQoZ3JvdXBJdGVtcywgaW5jbHVkZUZvb3RlcnMpO1xuICAgICAgICBpZiAoaW5jbHVkZUZvb3RlcnMgJiYgZ3JvdXBJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGl0ZW1Db3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNraXBIZWFkZXIgPSBza2lwID4gMDtcbiAgICAgICAgaWYgKHNraXApIHtcbiAgICAgICAgICAgIHNraXAtLTtcbiAgICAgICAgICAgIGlmIChpdGVtQ291bnQgJiYgc2tpcCA+PSBpdGVtQ291bnQpIHtcbiAgICAgICAgICAgICAgICBza2lwIC09IGl0ZW1Db3VudDtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNraXBIZWFkZXIgfHwgaXRlbUNvdW50KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgICAgICAgICAgbGV0IGhpZGVGb290ZXIgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFza2lwSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgdGFrZSQkMS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRha2UkJDEpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzR3JvdXBzKGdyb3VwSXRlbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0gc2xpY2UoZ3JvdXBJdGVtcywgc2tpcCwgdGFrZSQkMSwgaW5jbHVkZUZvb3RlcnMpO1xuICAgICAgICAgICAgICAgICAgICBpdGVtcy5wdXNoKC4uLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgdGFrZSQkMSAtPSBjb3VudChjaGlsZHJlbiwgaW5jbHVkZUZvb3RlcnMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCguLi5ncm91cEl0ZW1zLnNsaWNlKHNraXAsIE1hdGgubWluKHNraXAgKyB0YWtlJCQxLCBncm91cEl0ZW1zLmxlbmd0aCkpKTtcbiAgICAgICAgICAgICAgICAgICAgdGFrZSQkMSAtPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0YWtlJCQxICYmIGluY2x1ZGVGb290ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVGb290ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGFrZSQkMS0tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBza2lwID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBhZ2dyZWdhdGVzOiBncm91cC5hZ2dyZWdhdGVzLFxuICAgICAgICAgICAgICAgIGZpZWxkOiBncm91cC5maWVsZCxcbiAgICAgICAgICAgICAgICBoaWRlRm9vdGVyLFxuICAgICAgICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgICAgICAgIG9mZnNldDogaWR4LFxuICAgICAgICAgICAgICAgIHNraXBIZWFkZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGdyb3VwLnZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IHNraXBwZWRIZWFkZXJzID0gKGdyb3VwSXRlbSkgPT4ge1xuICAgIGxldCB0b3RhbCA9IDA7XG4gICAgd2hpbGUgKGdyb3VwSXRlbSkge1xuICAgICAgICBpZiAoZ3JvdXBJdGVtLnNraXBIZWFkZXIpIHtcbiAgICAgICAgICAgIHRvdGFsKys7XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXBJdGVtID0gZ3JvdXBJdGVtLml0ZW1zICYmIGdyb3VwSXRlbS5pdGVtc1swXSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdG90YWw7XG59O1xuLyoqXG4gKiBBIGRpcmVjdGl2ZSB3aGljaCBlbmNhcHN1bGF0ZXMgdGhlIGluLW1lbW9yeSBoYW5kbGluZyBvZiBncm91cGluZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nLlxuICovXG5jbGFzcyBHcm91cEJpbmRpbmdEaXJlY3RpdmUgZXh0ZW5kcyBEYXRhQmluZGluZ0RpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IoZ3JpZCwgY2hhbmdlRGV0ZWN0b3IsIGxvY2FsRGF0YUNoYW5nZXNTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKGdyaWQsIGNoYW5nZURldGVjdG9yLCBsb2NhbERhdGFDaGFuZ2VzU2VydmljZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBhcnJheSBvZiBkYXRhIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBwb3B1bGF0ZSB0aGUgR3JpZC5cbiAgICAgKi9cbiAgICBzZXQga2VuZG9HcmlkR3JvdXBCaW5kaW5nKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzID0gbnVsbDtcbiAgICAgICAgdGhpcy5ncmlkLnJlc2V0R3JvdXBzU3RhdGUoKTtcbiAgICAgICAgdGhpcy5kYXRhID0gdmFsdWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgZGF0YSh2YWx1ZSkge1xuICAgICAgICB0aGlzLm9yaWdpbmFsRGF0YSA9IHZhbHVlIHx8IFtdO1xuICAgICAgICB0aGlzLmRhdGFDaGFuZ2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGVzY3JpcHRvcnMgYnkgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBzb3J0ZWQuXG4gICAgICovXG4gICAgc2V0IHNvcnQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2xlYXIgPSB0aGlzLnN0YXRlLnNvcnQgIT09IHZhbHVlO1xuICAgICAgICB0aGlzLmdyaWQuc29ydCA9IHRoaXMuc3RhdGUuc29ydCA9IHZhbHVlO1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNldEdyb3Vwc1N0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGVzY3JpcHRvciBieSB3aGljaCB0aGUgZGF0YSB3aWxsIGJlIGZpbHRlcmVkLlxuICAgICAqL1xuICAgIHNldCBmaWx0ZXIodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY2xlYXIgPSBkaWZmRmlsdGVycyh0aGlzLnN0YXRlLmZpbHRlciwgdmFsdWUpO1xuICAgICAgICBpZiAoY2xlYXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZmlsdGVyID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmdyaWQuZmlsdGVyID0gY2xvbmVGaWx0ZXJzKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5yZXNldEdyb3Vwc1N0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgZGVzY3JpcHRvcnMgYnkgd2hpY2ggdGhlIGRhdGEgd2lsbCBiZSBncm91cGVkLlxuICAgICAqL1xuICAgIHNldCBncm91cCh2YWx1ZSkge1xuICAgICAgICAvLyBkb24ndCBjbGVhciBpZiBubyBncm91cHMgYXJlIHByZXNlbnQgaW4gcHJldmlvdXMgYW5kIGN1cnJlbnQgdmFsdWVcbiAgICAgICAgY29uc3QgZ3JvdXBzUHJlc2VudCA9IGdyb3VwRGVzY3JpcHRvcnNQcmVzZW50KHRoaXMuc3RhdGUuZ3JvdXApIHx8IGdyb3VwRGVzY3JpcHRvcnNQcmVzZW50KHZhbHVlKTtcbiAgICAgICAgY29uc3QgY2xlYXIgPSB0aGlzLnN0YXRlLmdyb3VwICE9PSB2YWx1ZSAmJiBncm91cHNQcmVzZW50O1xuICAgICAgICB0aGlzLmdyaWQuZ3JvdXAgPSB0aGlzLnN0YXRlLmdyb3VwID0gdmFsdWU7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnJlc2V0R3JvdXBzU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2tpcCA9IDA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLmdyaWQuZ3JvdXBFeHBhbmQuc3Vic2NyaWJlKHRoaXMuZ3JvdXBFeHBhbmQuYmluZCh0aGlzKSk7XG4gICAgICAgIHRoaXMuZ3JpZC5ncm91cENvbGxhcHNlLnN1YnNjcmliZSh0aGlzLmdyb3VwQ29sbGFwc2UuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIGdyb3VwRXhwYW5kKHsgZ3JvdXBJbmRleCB9KSB7XG4gICAgICAgIHRoaXMuZ3JpZC5leHBhbmRHcm91cENoaWxkcmVuKGdyb3VwSW5kZXgpO1xuICAgICAgICBjb25zdCB7IGdyb3VwLCBwYXJlbnRzIH0gPSBmaW5kR3JvdXAoZ3JvdXBJbmRleCwgdGhpcy5ncm91cHMpO1xuICAgICAgICBpZiAoIWdyb3VwLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcnMgPSB0aGlzLnN0YXRlLmdyb3VwLmZpbHRlcihyZW1vdmVQYXJlbnREZXNjcmlwdG9ycyhwYXJlbnRzLCBncm91cCkpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBmaW5kQ2hpbGRyZW4odGhpcy5vcmlnaW5hbERhdGEsIHBhcmVudHMuY29uY2F0KGdyb3VwKSk7XG4gICAgICAgICAgICBncm91cC5pdGVtcyA9IHByb2Nlc3NHcm91cHMoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXI6IHRoaXMuc3RhdGUuZmlsdGVyLFxuICAgICAgICAgICAgICAgIGdyb3VwOiBkZXNjcmlwdG9ycyxcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnN0YXRlLnNvcnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5kYXRhID0gdGhpcy5kYXRhUmVzdWx0KHRoaXMuc3RhdGUuc2tpcCwgdGhpcy5zdGF0ZS50YWtlKTtcbiAgICB9XG4gICAgZ3JvdXBDb2xsYXBzZSh7IGdyb3VwSW5kZXggfSkge1xuICAgICAgICBjb25zdCB7IGdyb3VwIH0gPSBmaW5kR3JvdXAoZ3JvdXBJbmRleCwgdGhpcy5ncm91cHMpO1xuICAgICAgICBpZiAoZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwLml0ZW1zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmRhdGEgPSB0aGlzLmRhdGFSZXN1bHQodGhpcy5zdGF0ZS5za2lwLCB0aGlzLnN0YXRlLnRha2UpO1xuICAgIH1cbiAgICBwcm9jZXNzKHN0YXRlJCQxKSB7XG4gICAgICAgIGlmIChzdGF0ZSQkMS5ncm91cCAmJiBzdGF0ZSQkMS5ncm91cC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwcyA9IHRoaXMucHJvY2Vzc0dyb3VwcyhzdGF0ZSQkMSk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2tpcCAtPSBza2lwcGVkSGVhZGVycyhncm91cHMuZGF0YVswXSk7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncm91cHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdXBlci5wcm9jZXNzKHN0YXRlJCQxKTtcbiAgICB9XG4gICAgcHJvY2Vzc0dyb3VwcyhzdGF0ZSQkMSkge1xuICAgICAgICBpZiAoIXRoaXMuZ3JvdXBzIHx8ICF0aGlzLmdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzID0gcHJvY2Vzc0dyb3Vwcyh0aGlzLm9yaWdpbmFsRGF0YSwge1xuICAgICAgICAgICAgICAgIGZpbHRlcjogc3RhdGUkJDEuZmlsdGVyLFxuICAgICAgICAgICAgICAgIGdyb3VwOiBzdGF0ZSQkMS5ncm91cCxcbiAgICAgICAgICAgICAgICBzb3J0OiBzdGF0ZSQkMS5zb3J0XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhUmVzdWx0KHN0YXRlJCQxLnNraXAsIHN0YXRlJCQxLnRha2UpO1xuICAgIH1cbiAgICBkYXRhUmVzdWx0KHNraXAsIHRha2UkJDEpIHtcbiAgICAgICAgY29uc3QgaW5jbHVkZUZvb3RlcnMgPSB0aGlzLmdyaWQuc2hvd0dyb3VwRm9vdGVycztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHNsaWNlKHRoaXMuZ3JvdXBzLCBza2lwLCB0YWtlJCQxLCBpbmNsdWRlRm9vdGVycyksXG4gICAgICAgICAgICB0b3RhbDogY291bnQodGhpcy5ncm91cHMsIGluY2x1ZGVGb290ZXJzKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBhcHBseVN0YXRlKHsgc2tpcCwgdGFrZTogdGFrZSQkMSwgc29ydCwgZ3JvdXAsIGZpbHRlcjogZmlsdGVyJCQxIH0pIHtcbiAgICAgICAgdGhpcy5za2lwID0gc2tpcDtcbiAgICAgICAgdGhpcy5zdGF0ZS50YWtlID0gdGFrZSQkMTtcbiAgICAgICAgLy8gdGhpcy5wYWdlU2l6ZSA9IHRha2U7IC8vIGRvIG5lZWQgdG8gdXBkYXRlIHRha2UgYXMgdGhlIHByb2Nlc3Mgd2l0aCBzbGljZSBjb3JyZWN0bHlcbiAgICAgICAgdGhpcy5zb3J0ID0gc29ydDtcbiAgICAgICAgdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICB0aGlzLmZpbHRlciA9IGZpbHRlciQkMTtcbiAgICB9XG59XG5Hcm91cEJpbmRpbmdEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3sgc2VsZWN0b3I6ICdba2VuZG9HcmlkR3JvdXBCaW5kaW5nXScgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Hcm91cEJpbmRpbmdEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBHcmlkQ29tcG9uZW50IH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UgfVxuXTtcbkdyb3VwQmluZGluZ0RpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBrZW5kb0dyaWRHcm91cEJpbmRpbmc6IFt7IHR5cGU6IElucHV0LCBhcmdzOiBbXCJrZW5kb0dyaWRHcm91cEJpbmRpbmdcIixdIH1dLFxuICAgIHNvcnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZ3JvdXA6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMkNCA9IFtcbiAgICBHcmlkQ29tcG9uZW50LFxuICAgIFRvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIERhdGFCaW5kaW5nRGlyZWN0aXZlLFxuICAgIFNlbGVjdGlvbkRpcmVjdGl2ZSxcbiAgICBDdXN0b21NZXNzYWdlc0NvbXBvbmVudCxcbiAgICBHcm91cEJpbmRpbmdEaXJlY3RpdmUsXG4gICAgVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLFxuICAgIFJlYWN0aXZlRWRpdGluZ0RpcmVjdGl2ZSxcbiAgICBJbkNlbGxFZGl0aW5nRGlyZWN0aXZlLFxuICAgIEV4cGFuZERldGFpbHNEaXJlY3RpdmUsXG4gICAgLi4uR3JvdXBNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLlNoYXJlZE1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uQm9keU1vZHVsZS5leHBvcnRzKCksXG4gICAgLi4uSGVhZGVyTW9kdWxlLmV4cG9ydHMoKSxcbiAgICAuLi5Gb290ZXJNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLlBhZ2VyTW9kdWxlLmV4cG9ydHMoKSxcbiAgICAuLi5Sb3dGaWx0ZXJNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLkZpbHRlck1lbnVNb2R1bGUuZXhwb3J0cygpLFxuICAgIC4uLkNvbHVtbk1lbnVNb2R1bGUuZXhwb3J0cygpXG5dO1xuY29uc3QgZGVjbGFyYXRpb25zID0gW1xuICAgIEdyaWRDb21wb25lbnQsXG4gICAgTGlzdENvbXBvbmVudCxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIExvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLFxuICAgIEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LFxuICAgIERhdGFCaW5kaW5nRGlyZWN0aXZlLFxuICAgIFRvb2xiYXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBTZWxlY3Rpb25EaXJlY3RpdmUsXG4gICAgVGVtcGxhdGVFZGl0aW5nRGlyZWN0aXZlLFxuICAgIFJlYWN0aXZlRWRpdGluZ0RpcmVjdGl2ZSxcbiAgICBJbkNlbGxFZGl0aW5nRGlyZWN0aXZlLFxuICAgIEV4cGFuZERldGFpbHNEaXJlY3RpdmUsXG4gICAgR3JvdXBCaW5kaW5nRGlyZWN0aXZlLFxuICAgIEdyaWRNYXJxdWVlRGlyZWN0aXZlXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgR3JpZCBjb21wb25lbnQuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgR3JpZCBtb2R1bGVcbiAqIGltcG9ydCB7IEdyaWRNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgR3JpZE1vZHVsZV0sIC8vIGltcG9ydCBHcmlkIG1vZHVsZVxuICogICAgIGJvb3RzdHJhcDogICAgW0FwcENvbXBvbmVudF1cbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKlxuICogLy8gQ29tcGlsZSBhbmQgbGF1bmNoIHRoZSBtb2R1bGVcbiAqIHBsYXRmb3JtQnJvd3NlckR5bmFtaWMoKS5ib290c3RyYXBNb2R1bGUoQXBwTW9kdWxlKTtcbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgR3JpZE1vZHVsZSB7XG59XG5HcmlkTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtkZWNsYXJhdGlvbnNdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkNF0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW1xuICAgICAgICAgICAgICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEdyb3VwTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEJvZHlNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIEhlYWRlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgRm9vdGVyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBQYWdlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgUm93RmlsdGVyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJNZW51TW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBSZXNpemVTZW5zb3JNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIENvbHVtbk1lbnVNb2R1bGVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbmNsYXNzIFBERk1hcmdpbkNvbXBvbmVudCQxIGV4dGVuZHMgUERGTWFyZ2luQ29tcG9uZW50IHtcbn1cblBERk1hcmdpbkNvbXBvbmVudCQxLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLXBkZi1tYXJnaW4nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFBERiBwYWdlIHRlbXBsYXRlIG9mIHRoZSBHcmlkIHRoYXQgaGVscHMgdG8gY3VzdG9taXplIHRoZSBQREYgcGFnZXMuIFRvIGRlZmluZSBhIHBhZ2UgdGVtcGxhdGUsXG4gKiBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWcgd2l0aCB0aGUgYGtlbmRvR3JpZFBERlRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIGA8a2VuZG8tZ3JpZC1wZGY+YC5cbiAqXG4gKiBUaGUgdGVtcGxhdGUgY29udGV4dCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbiAqIC0gYHBhZ2VOdW1iZXJgJm1kYXNoO0RlZmluZXMgUERGIHBhZ2UgbnVtYmVyLlxuICogLSBgdG90YWxQYWdlc2AmbWRhc2g7RGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIFBERiBwYWdlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICpcbiAqIF9AQ29tcG9uZW50KHtcbiAqICAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICAgPGtlbmRvLWdyaWQgW2RhdGFdPVwiZ3JpZERhdGFcIj5cbiAqICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0dyaWRUb29sYmFyVGVtcGxhdGU+XG4gKiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRQREZDb21tYW5kIGljb249XCJmaWxlLXBkZlwiPkV4cG9ydCB0byBQREY8L2J1dHRvbj5cbiAqICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJQcm9kdWN0TmFtZVwiPlxuICogICAgICAgICAgICAgPC9rZW5kby1ncmlkLWNvbHVtbj5cbiAqICAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1jb2x1bW4gZmllbGQ9XCJVbml0UHJpY2VcIj5cbiAqICAgICAgICAgICAgIDwva2VuZG8tZ3JpZC1jb2x1bW4+XG4gKiAgICAgICAgICAgICA8a2VuZG8tZ3JpZC1wZGYgZmlsZU5hbWU9XCJQcm9kdWN0cy5wZGZcIiBwYXBlclNpemU9XCJBNFwiIFttYXJnaW5dPVwieyB0b3A6ICcxY20nLCBsZWZ0OiAnMWNtJywgcmlnaHQ6ICcxY20nLCBib3R0b206ICcxY20nIH1cIj5cbiAqICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkUERGVGVtcGxhdGUgbGV0LXBhZ2VOdW09XCJwYWdlTnVtXCIgbGV0LXRvdGFsUGFnZXM9XCJ0b3RhbFBhZ2VzXCI+XG4gKiAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1cHg7IGxlZnQ6IDVweDtcIj5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIFBhZ2Uge3sgcGFnZU51bSB9fSBvZiB7eyB0b3RhbFBhZ2VzIH19XG4gKiAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICogICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgICA8L2tlbmRvLWdyaWQtcGRmPlxuICogICAgICAgICA8L2tlbmRvLWdyaWQ+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyBncmlkRGF0YSA9IFt7XG4gKiAgICAgICAgIFwiUHJvZHVjdElEXCI6IDEsXG4gKiAgICAgICAgIFwiUHJvZHVjdE5hbWVcIjogXCJDaGFpXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE4LjAwMDBcbiAqICAgICAgIH0sIHtcbiAqICAgICAgICAgXCJQcm9kdWN0SURcIjogMixcbiAqICAgICAgICAgXCJQcm9kdWN0TmFtZVwiOiBcIkNoYW5nXCIsXG4gKiAgICAgICAgIFwiVW5pdFByaWNlXCI6IDE5LjAwMDBcbiAqICAgICAgIH1cbiAqICAgICBdO1xuICogfVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBQREZUZW1wbGF0ZURpcmVjdGl2ZSQxIGV4dGVuZHMgUERGVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHN1cGVyKHRlbXBsYXRlUmVmKTtcbiAgICB9XG59XG5QREZUZW1wbGF0ZURpcmVjdGl2ZSQxLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkUERGVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QREZUZW1wbGF0ZURpcmVjdGl2ZSQxLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBIRUFERVJfQ0xBU1MgPSAnay1ncmlkLWhlYWRlcic7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgRk9PVEVSX0NMQVNTID0gJ2stZ3JpZC1mb290ZXInO1xuY29uc3QgR1JJRF9MSVNUID0gJ0tFTkRPLUdSSUQtTElTVCc7XG5jb25zdCBUQUJMRSA9ICdUQUJMRSc7XG5jb25zdCBtYXRjaGVzTGlzdCA9IG1hdGNoZXNOb2RlTmFtZShHUklEX0xJU1QpO1xuY29uc3QgbWF0Y2hlc1RhYmxlID0gbWF0Y2hlc05vZGVOYW1lKFRBQkxFKTtcbmNvbnN0IHN1ZmZpeCA9IChsb2NrZWQpID0+IGxvY2tlZCA/ICdsb2NrZWQnIDogJ3dyYXAnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIEdyaWRRdWVyeSB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmxpc3QgPSBmaW5kRWxlbWVudChlbGVtZW50LCBtYXRjaGVzTGlzdCk7XG4gICAgfVxuICAgIGNvbnRlbnQobG9ja2VkKSB7XG4gICAgICAgIHJldHVybiBmaW5kRWxlbWVudCh0aGlzLmxpc3QsIG1hdGNoZXNDbGFzc2VzKGBrLWdyaWQtY29udGVudCR7bG9ja2VkID8gJy1sb2NrZWQnIDogJyd9YCkpO1xuICAgIH1cbiAgICBoZWFkZXIobG9ja2VkKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyV3JhcCA9IHRoaXMuaGVhZGVyV3JhcCB8fCBmaW5kRWxlbWVudCh0aGlzLmVsZW1lbnQsIG1hdGNoZXNDbGFzc2VzKEhFQURFUl9DTEFTUykpO1xuICAgICAgICByZXR1cm4gZmluZEVsZW1lbnQodGhpcy5oZWFkZXJXcmFwLCBtYXRjaGVzQ2xhc3NlcyhgJHtIRUFERVJfQ0xBU1N9LSR7c3VmZml4KGxvY2tlZCl9YCkpO1xuICAgIH1cbiAgICBmb290ZXIobG9ja2VkKSB7XG4gICAgICAgIHRoaXMuZm9vdGVyV3JhcCA9IHRoaXMuZm9vdGVyV3JhcCB8fCBmaW5kRWxlbWVudCh0aGlzLmVsZW1lbnQsIG1hdGNoZXNDbGFzc2VzKEZPT1RFUl9DTEFTUykpO1xuICAgICAgICByZXR1cm4gZmluZEVsZW1lbnQodGhpcy5mb290ZXJXcmFwLCBtYXRjaGVzQ2xhc3NlcyhgJHtGT09URVJfQ0xBU1N9LSR7c3VmZml4KGxvY2tlZCl9YCkpO1xuICAgIH1cbiAgICB0YWJsZSgpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRFbGVtZW50KHRoaXMuZWxlbWVudCwgbWF0Y2hlc1RhYmxlKTtcbiAgICB9XG59XG5cbmNvbnN0IEZJUlNUX0NMQVNTID0gJ2stZmlyc3QnO1xuY29uc3QgSU5QVVRTID0gWydpbnB1dCcsICdzZWxlY3QnLCAndGV4dGFyZWEnLCAnb3B0aW9uJ107XG4vKiogQGhpZGRlbiAqL1xuY29uc3QgY2xvbmVOb2RlID0gKG5vZGUpID0+IHtcbiAgICBjb25zdCBjbG9uZSA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKTtcbiAgICBpZiAobm9kZS5fa2VuZG9FeHBvcnRWaXN1YWwpIHtcbiAgICAgICAgY2xvbmUuX2tlbmRvRXhwb3J0VmlzdWFsID0gbm9kZS5fa2VuZG9FeHBvcnRWaXN1YWw7XG4gICAgfVxuICAgIGlmIChJTlBVVFMuaW5kZXhPZihTdHJpbmcobm9kZS5ub2RlTmFtZSkudG9Mb3dlckNhc2UoKSkgPj0gMCkge1xuICAgICAgICBjbG9uZS5yZW1vdmVBdHRyaWJ1dGUoXCJpZFwiKTtcbiAgICAgICAgY2xvbmUucmVtb3ZlQXR0cmlidXRlKFwibmFtZVwiKTtcbiAgICAgICAgY2xvbmUudmFsdWUgPSBub2RlLnZhbHVlO1xuICAgICAgICBjbG9uZS5jaGVja2VkID0gbm9kZS5jaGVja2VkO1xuICAgICAgICBjbG9uZS5zZWxlY3RlZCA9IG5vZGUuc2VsZWN0ZWQ7XG4gICAgfVxuICAgIGxldCBjaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICB3aGlsZSAoY2hpbGQpIHtcbiAgICAgICAgY2xvbmUuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKGNoaWxkKSk7XG4gICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBjbG9uZTtcbn07XG5jb25zdCBhcHBlbmROb2RlcyA9IChlbGVtZW50LCBub2RlcykgPT4ge1xuICAgIGNvbnN0IGxlbmd0aCA9IG5vZGVzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBsZW5ndGg7IGlkeCsrKSB7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoY2xvbmVOb2RlKG5vZGVzW2lkeF0pKTtcbiAgICB9XG59O1xuY29uc3Qgd3JhcFRhYmxlID0gKHRhYmxlKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ2std2lkZ2V0IGstZ3JpZCc7XG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZCh0YWJsZSk7XG4gICAgcmV0dXJuIHdyYXBwZXI7XG59O1xuY29uc3QgY3JlYXRlVGFibGVFbGVtZW50ID0gKHNvdXJjZXMpID0+IHtcbiAgICBjb25zdCBzb3VyY2VDb3VudCA9IHNvdXJjZXMubGVuZ3RoO1xuICAgIGNvbnN0IGVsZW1lbnQgPSBjbG9uZU5vZGUoc291cmNlc1swXSk7XG4gICAgY29uc3Qgcm93c0NvdW50ID0gZWxlbWVudC5yb3dzLmxlbmd0aDtcbiAgICBpZiAoc291cmNlQ291bnQgPiAxKSB7XG4gICAgICAgIGZvciAobGV0IHJvd0lkeCA9IDA7IHJvd0lkeCA8IHJvd3NDb3VudDsgcm93SWR4KyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IHNvdXJjZUlkeCA9IDE7IHNvdXJjZUlkeCA8IHNvdXJjZUNvdW50OyBzb3VyY2VJZHgrKykge1xuICAgICAgICAgICAgICAgIGFwcGVuZE5vZGVzKGVsZW1lbnQucm93c1tyb3dJZHhdLCBzb3VyY2VzW3NvdXJjZUlkeF0ucm93c1tyb3dJZHhdLmNlbGxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbn07XG5jb25zdCBzZXRGaXJzdENlbGxDbGFzcyA9IChoZWFkZXIsIGhlYWRlcnMpID0+IHtcbiAgICBpZiAoaGVhZGVycy5sZW5ndGggPiAxICYmIGhlYWRlci5yb3dzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaWR4ID0gMTsgaWR4IDwgaGVhZGVyLnJvd3MubGVuZ3RoOyBpZHgrKykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RDZWxsSW5kZXggPSBoZWFkZXJzWzBdLnJvd3NbaWR4XS5jZWxscy5sZW5ndGg7XG4gICAgICAgICAgICBjb25zdCBjZWxsID0gaGVhZGVyLnJvd3NbaWR4XS5jZWxsc1tmaXJzdENlbGxJbmRleF07XG4gICAgICAgICAgICBpZiAoU3RyaW5nKGNlbGwuY2xhc3NOYW1lKS5pbmRleE9mKEZJUlNUX0NMQVNTKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjZWxsLmNsYXNzTmFtZSArPSBgICR7RklSU1RfQ0xBU1N9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5jb25zdCBjcmVhdGVUYWJsZSA9IChjb2xHcm91cHMsIGhlYWRlcnMsIGJvZGllcywgZm9vdGVycykgPT4ge1xuICAgIGNvbnN0IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtcbiAgICBjb25zdCBjb2xHcm91cCA9IGNvbEdyb3Vwc1swXS5jbG9uZU5vZGUodHJ1ZSk7XG4gICAgZm9yIChsZXQgaWR4ID0gMTsgaWR4IDwgY29sR3JvdXBzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgYXBwZW5kTm9kZXMoY29sR3JvdXAsIGNvbEdyb3Vwc1tpZHhdLnF1ZXJ5U2VsZWN0b3JBbGwoJ2NvbCcpKTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyID0gY3JlYXRlVGFibGVFbGVtZW50KGhlYWRlcnMpO1xuICAgIGNvbnN0IGJvZHkgPSBjcmVhdGVUYWJsZUVsZW1lbnQoYm9kaWVzKTtcbiAgICBoZWFkZXIuY2xhc3NOYW1lID0gSEVBREVSX0NMQVNTO1xuICAgIHNldEZpcnN0Q2VsbENsYXNzKGhlYWRlciwgaGVhZGVycyk7XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQoY29sR3JvdXApO1xuICAgIHRhYmxlLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgdGFibGUuYXBwZW5kQ2hpbGQoYm9keSk7XG4gICAgaWYgKGZvb3RlcnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IGNyZWF0ZVRhYmxlRWxlbWVudChmb290ZXJzKTtcbiAgICAgICAgZm9vdGVyLmNsYXNzTmFtZSA9IEZPT1RFUl9DTEFTUztcbiAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQoZm9vdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIHdyYXBUYWJsZSh0YWJsZSk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGV4cG9ydEVsZW1lbnQgPSAod3JhcHBlcikgPT4ge1xuICAgIGNvbnN0IHF1ZXJ5ID0gbmV3IEdyaWRRdWVyeSh3cmFwcGVyKTtcbiAgICBjb25zdCBjb250ZW50ID0gcXVlcnkuY29udGVudCgpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgY29sR3JvdXBzID0gW2NvbnRlbnQucXVlcnlTZWxlY3RvcignY29sZ3JvdXAnKV07XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSBbcXVlcnkuaGVhZGVyKCkucXVlcnlTZWxlY3RvcigndGhlYWQnKV07XG4gICAgICAgIGNvbnN0IGJvZGllcyA9IFtjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JyldO1xuICAgICAgICBjb25zdCBmb290ZXIgPSBxdWVyeS5mb290ZXIoKTtcbiAgICAgICAgY29uc3QgZm9vdGVycyA9IFtdO1xuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICBmb290ZXJzLnB1c2goZm9vdGVyLnF1ZXJ5U2VsZWN0b3IoJ3Rmb290JykpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxvY2tlZENvbnRlbnQgPSBxdWVyeS5jb250ZW50KHRydWUpO1xuICAgICAgICBpZiAobG9ja2VkQ29udGVudCkge1xuICAgICAgICAgICAgY29sR3JvdXBzLnVuc2hpZnQobG9ja2VkQ29udGVudC5xdWVyeVNlbGVjdG9yKCdjb2xncm91cCcpKTtcbiAgICAgICAgICAgIGhlYWRlcnMudW5zaGlmdChxdWVyeS5oZWFkZXIodHJ1ZSkucXVlcnlTZWxlY3RvcigndGhlYWQnKSk7XG4gICAgICAgICAgICBib2RpZXMudW5zaGlmdChsb2NrZWRDb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5JykpO1xuICAgICAgICAgICAgaWYgKGZvb3Rlcikge1xuICAgICAgICAgICAgICAgIGZvb3RlcnMudW5zaGlmdChxdWVyeS5mb290ZXIodHJ1ZSkucXVlcnlTZWxlY3RvcigndGZvb3QnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY3JlYXRlVGFibGUoY29sR3JvdXBzLCBoZWFkZXJzLCBib2RpZXMsIGZvb3RlcnMpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gd3JhcFRhYmxlKHF1ZXJ5LnRhYmxlKCkuY2xvbmVOb2RlKHRydWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IGNyZWF0ZUVsZW1lbnQkMSA9ICh0YWdOYW1lLCBjbGFzc05hbWUpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gZWxlbWVudDtcbn07XG5jb25zdCBjcmVhdGVEaXYgPSAoY2xhc3NOYW1lKSA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQkMSgnZGl2JywgY2xhc3NOYW1lKTtcbn07XG4vKipcbiAqIENvbmZpZ3VyZXMgdGhlIHNldHRpbmdzIGZvciB0aGUgZXhwb3J0IG9mIEdyaWQgaW4gUERGIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGRmZXhwb3J0X2dyaWQgJX0pKS5cbiAqL1xuY2xhc3MgUERGQ29tcG9uZW50IGV4dGVuZHMgUERGRXhwb3J0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihwZGZTZXJ2aWNlLCBzdXNwZW5kU2VydmljZSwgbmdab25lLCBlbGVtZW50KSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UgPSBwZGZTZXJ2aWNlO1xuICAgICAgICB0aGlzLnN1c3BlbmRTZXJ2aWNlID0gc3VzcGVuZFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBuZXcgUXVlcnlMaXN0KCk7XG4gICAgICAgIHRoaXMuc2F2ZVN1YnNjcmlwdGlvbiA9IHBkZlNlcnZpY2Uuc2F2ZVBERi5zdWJzY3JpYmUodGhpcy5zYXZlUERGLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLmRyYXdTdWJzY3JpcHRpb24gPSBwZGZTZXJ2aWNlLmRyYXdQREYuc3Vic2NyaWJlKHRoaXMuZHJhd1BERi5iaW5kKHRoaXMpKTtcbiAgICAgICAgdGhpcy5yZXNldCA9IHRoaXMucmVzZXQuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kcmF3ID0gdGhpcy5kcmF3LmJpbmQodGhpcyk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnNhdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5kcmF3U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICB9XG4gICAgc2F2ZVBERihjb21wb25lbnQpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVQREYoY29tcG9uZW50LCB0aGlzLmRyYXcpO1xuICAgIH1cbiAgICBkcmF3UERGKHsgY29tcG9uZW50LCBwcm9taXNlIH0pIHtcbiAgICAgICAgdGhpcy5jcmVhdGVQREYoY29tcG9uZW50LCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUV4cG9ydEdyb3VwKHByb21pc2UpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY3JlYXRlUERGKGNvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgcGFnZVNpemUgPSBjb21wb25lbnQucGFnZVNpemU7XG4gICAgICAgIGNvbnN0IHRvdGFsID0gY29tcG9uZW50LnZpZXcudG90YWw7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmNvbHVtbnMudG9BcnJheSgpO1xuICAgICAgICBpZiAoY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luYWxDb2x1bW5zID0gY29tcG9uZW50LmNvbHVtbnMudG9BcnJheSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICB0aGlzLnN1c3BlbmRTZXJ2aWNlLnNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMucGRmU2VydmljZS5leHBvcnRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmluaXRQcm9ncmVzcygpO1xuICAgICAgICB0aGlzLnJlbmRlckFsbFBhZ2VzID0gdGhpcy5hbGxQYWdlcyAmJiBwYWdlU2l6ZSA8IHRvdGFsO1xuICAgICAgICBpZiAodGhpcy5yZW5kZXJBbGxQYWdlcykge1xuICAgICAgICAgICAgdGhpcy5za2lwID0gY29tcG9uZW50LnNraXA7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gcGFnZVNpemU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoMCwgdG90YWwsIGNhbGxiYWNrLCBjb2x1bW5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2x1bW5zLmxlbmd0aCB8fCBjb21wb25lbnQudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlQ29sdW1ucyhjb2x1bW5zLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXRQcm9ncmVzcygpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC53cmFwcGVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gdGhpcy5wcm9ncmVzcyA9IGNyZWF0ZURpdignay1sb2FkaW5nLXBkZi1tYXNrJyk7XG4gICAgICAgIGNvbnN0IG92ZXJsYXkgPSBjbG9uZU5vZGUod3JhcHBlckVsZW1lbnQpO1xuICAgICAgICBwcm9ncmVzcy5hcHBlbmRDaGlsZChvdmVybGF5KTtcbiAgICAgICAgcHJvZ3Jlc3MuYXBwZW5kQ2hpbGQoY3JlYXRlRGl2KCdrLWxvYWRpbmctY29sb3InKSk7XG4gICAgICAgIHByb2dyZXNzLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQkMSgnc3BhbicsICdrLWktbG9hZGluZyBrLWljb24nKSk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxIZWlnaHQgPSB3cmFwcGVyRWxlbWVudC5zdHlsZS5oZWlnaHQ7XG4gICAgICAgIHRoaXMub3JpZ2luYWxPdmVyZmxvdyA9IHdyYXBwZXJFbGVtZW50LnN0eWxlLm92ZXJmbG93O1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB3cmFwcGVyRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAncHgnO1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5hcHBlbmRDaGlsZChwcm9ncmVzcyk7XG4gICAgICAgIHRoaXMuYXBwbHlTY3JvbGwob3ZlcmxheSk7XG4gICAgfVxuICAgIGFwcGx5U2Nyb2xsKG92ZXJsYXkpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSBuZXcgR3JpZFF1ZXJ5KHRoaXMuY29tcG9uZW50LndyYXBwZXIubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBxdWVyeS5jb250ZW50KCk7XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvdmVybGF5UXVlcnkgPSBuZXcgR3JpZFF1ZXJ5KG92ZXJsYXkpO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheUNvbnRlbnQgPSBvdmVybGF5UXVlcnkuY29udGVudCgpO1xuICAgICAgICAgICAgb3ZlcmxheUNvbnRlbnQuc2Nyb2xsVG9wID0gY29udGVudC5zY3JvbGxUb3A7XG4gICAgICAgICAgICBvdmVybGF5Q29udGVudC5zY3JvbGxMZWZ0ID0gY29udGVudC5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgb3ZlcmxheVF1ZXJ5LmhlYWRlcigpLnNjcm9sbExlZnQgPSBxdWVyeS5oZWFkZXIoKS5zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgY29uc3QgZm9vdGVyID0gcXVlcnkuZm9vdGVyKCk7XG4gICAgICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmxheVF1ZXJ5LmZvb3RlcigpLnNjcm9sbExlZnQgPSBmb290ZXIuc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGxvY2tlZENvbnRlbnQgPSBxdWVyeS5jb250ZW50KHRydWUpO1xuICAgICAgICAgICAgaWYgKGxvY2tlZENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdmVybGF5TG9ja2VkQ29udGVudCA9IG92ZXJsYXlRdWVyeS5jb250ZW50KHRydWUpO1xuICAgICAgICAgICAgICAgIG92ZXJsYXlMb2NrZWRDb250ZW50LnNjcm9sbFRvcCA9IGxvY2tlZENvbnRlbnQuc2Nyb2xsVG9wO1xuICAgICAgICAgICAgICAgIG92ZXJsYXlMb2NrZWRDb250ZW50LnNjcm9sbExlZnQgPSBsb2NrZWRDb250ZW50LnNjcm9sbExlZnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZHJhdygpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVFeHBvcnRFbGVtZW50KChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNhdmUoZWxlbWVudCwgdGhpcy5maWxlTmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVFeHBvcnRHcm91cChwcm9taXNlKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlRXhwb3J0RWxlbWVudCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5leHBvcnRFbGVtZW50KGVsZW1lbnQpLnRoZW4oZ3JvdXAgPT4gcHJvbWlzZS5yZXNvbHZlKGdyb3VwKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjcmVhdGVFeHBvcnRFbGVtZW50KGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyID0gY3JlYXRlRGl2KCdrLWdyaWQtcGRmLWV4cG9ydC1lbGVtZW50Jyk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gZXhwb3J0RWxlbWVudCh0aGlzLmNvbXBvbmVudC53cmFwcGVyLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgY2FsbGJhY2soZWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkcmF3T3B0aW9ucygpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHN1cGVyLmRyYXdPcHRpb25zKCk7XG4gICAgICAgIG9wdGlvbnMuX2Rlc3RydWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIGNsZWFudXAoKSB7XG4gICAgICAgIHN1cGVyLmNsZWFudXAoKTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlLmV4cG9ydGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsQ29sdW1ucyA9IHRoaXMub3JpZ2luYWxDb2x1bW5zO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMub3JpZ2luYWxDb2x1bW5zO1xuICAgICAgICAgICAgaWYgKHRoaXMucmVuZGVyQWxsUGFnZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UodGhpcy5za2lwLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnJlc2V0LCBvcmlnaW5hbENvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob3JpZ2luYWxDb2x1bW5zIHx8IHRoaXMuY29tcG9uZW50LnZpcnR1YWxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb2x1bW5zKG9yaWdpbmFsQ29sdW1ucywgdGhpcy5yZXNldCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVDb250YWluZXIoKTtcbiAgICB9XG4gICAgcmVtb3ZlQ29udGFpbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXIpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNoYW5nZVBhZ2Uoc2tpcCwgX3Rha2UsIGNhbGxiYWNrLCBjb2x1bW5zKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBkZlNlcnZpY2UuZGF0YUNoYW5nZWQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCkgfHwgdGhpcy5jb21wb25lbnQudmlydHVhbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VDb2x1bW5zKGNvbHVtbnMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TdGFibGUoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5UGFnZUNoYW5nZSgncGRmJywgeyBza2lwOiBza2lwLCB0YWtlOiBfdGFrZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNoYW5nZUNvbHVtbnMoY29sdW1ucywgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TdGFibGUoY2FsbGJhY2spO1xuICAgICAgICAgICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC5jb2x1bW5zLnJlc2V0KGNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuc3VzcGVuZFNlcnZpY2Uuc2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyQWxsUGFnZXMgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQud3JhcHBlci5uYXRpdmVFbGVtZW50O1xuICAgICAgICB3cmFwcGVyRWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnByb2dyZXNzKTtcbiAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5vcmlnaW5hbEhlaWdodDtcbiAgICAgICAgd3JhcHBlckVsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSB0aGlzLm9yaWdpbmFsT3ZlcmZsb3c7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnByb2dyZXNzO1xuICAgICAgICBkZWxldGUgdGhpcy5jb21wb25lbnQ7XG4gICAgfVxuICAgIG9uU3RhYmxlKGNhbGxiYWNrKSB7XG4gICAgICAgIC8vIG5vdCBzdXJlIGlmIGl0IGlzIGFuIGFjdHVhbCBzY2VuYXJpby4gb2NjdXJzIGluIHRoZSB0ZXN0cy5cbiAgICAgICAgLy8gb25TdGFibGUgaXMgdHJpZ2dlcmVkIGluIHRoZSBzYW1lIHBhc3Mgd2l0aG91dCB0aGUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgICAgLy8gdGh1cywgdGhlIGNhbGxiYWNrIGlzIGNhbGxlZCBiZWZvcmUgdGhlIGNoYW5nZXMgYXJlIGFwcGxpZWQgd2l0aG91dCB0aGUgdGltZW91dC5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5vblN0YWJsZS5hc09ic2VydmFibGUoKS5waXBlKHRha2UoMSkpLnN1YnNjcmliZShjYWxsYmFjayk7XG4gICAgICAgIH0sIDApOyAvLyB0c2xpbnQ6ZGlzYWJsZS1saW5lOiBhbGlnblxuICAgIH1cbn1cblBERkNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZ3JpZC1wZGYnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiAnJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QREZDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBQREZTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTdXNwZW5kU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5QREZDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgYWxsUGFnZXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbHVtbnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW0NvbHVtbkJhc2UkMSxdIH1dLFxuICAgIG1hcmdpbkNvbXBvbmVudDogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbUERGTWFyZ2luQ29tcG9uZW50JDEsXSB9XSxcbiAgICBwYWdlVGVtcGxhdGVEaXJlY3RpdmU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1BERlRlbXBsYXRlRGlyZWN0aXZlJDEsXSB9XVxufTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBgZXhwb3J0LXRvLVBERmAgY29tbWFuZCBvZiB0aGUgR3JpZC5cbiAqIFlvdSBjYW4gYXBwbHkgdGhpcyBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gIGVsZW1lbnQgaW5zaWRlIGFcbiAqIFtgVG9vbGJhclRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgYnV0dG9uIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmUsIHRoZVxuICogW2BwZGZFeHBvcnRgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLXBkZmV4cG9ydCkgZXZlbnRcbiAqIGZpcmVzIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcGRmZXhwb3J0X2dyaWQgJX0pKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbC1uby1ydW5cbiAqIDxrZW5kby1ncmlkPlxuICogICAgICA8bmctdGVtcGxhdGUga2VuZG9HcmlkVG9vbGJhclRlbXBsYXRlPlxuICogICAgICAgICAgPGJ1dHRvbiBrZW5kb0dyaWRQREZDb21tYW5kPkV4cG9ydCB0byBQREY8L2J1dHRvbj5cbiAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgPGtlbmRvLWdyaWQtcGRmIGZpbGVOYW1lPVwiR3JpZC5wZGZcIj5cbiAqICAgICAgPC9rZW5kby1ncmlkLXBkZj5cbiAqIDwva2VuZG8tZ3JpZD5cbiAqIGBgYFxuICovXG5jbGFzcyBQREZDb21tYW5kRGlyZWN0aXZlIGV4dGVuZHMgQnV0dG9uIHtcbiAgICBjb25zdHJ1Y3RvcihwZGZTZXJ2aWNlLCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5wZGZTZXJ2aWNlID0gcGRmU2VydmljZTtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnBkZlNlcnZpY2UuZXhwb3J0Q2xpY2suZW1pdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHBkZkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5QREZDb21tYW5kRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9HcmlkUERGQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBERkNvbW1hbmREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBQREZTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuUERGQ29tbWFuZERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV0sXG4gICAgcGRmQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZ3JpZC1wZGYnLF0gfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQ1ID0gW1xuICAgIFBERkNvbXBvbmVudCxcbiAgICBQREZNYXJnaW5Db21wb25lbnQkMSxcbiAgICBQREZDb21tYW5kRGlyZWN0aXZlLFxuICAgIFBERlRlbXBsYXRlRGlyZWN0aXZlJDFcbl07XG5jb25zdCBkZWNsYXJhdGlvbnMkMSA9IFtcbiAgICBQREZDb21wb25lbnQsXG4gICAgUERGTWFyZ2luQ29tcG9uZW50JDEsXG4gICAgUERGQ29tbWFuZERpcmVjdGl2ZSxcbiAgICBQREZUZW1wbGF0ZURpcmVjdGl2ZSQxXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgR3JpZCBQREYgY29tcG9uZW50LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBgdHMtbm8tcnVuXG4gKiAvLyBJbXBvcnQgdGhlIEdyaWQgYW5kIFBERiBtb2R1bGVzXG4gKiBpbXBvcnQgeyBHcmlkTW9kdWxlLCBQREZNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1ncmlkJztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgR3JpZE1vZHVsZSwgUERGTW9kdWxlXSwgLy8gaW1wb3J0IEdyaWQgYW5kIFBERiBtb2R1bGVzXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBQREZNb2R1bGUge1xufVxuUERGTW9kdWxlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBOZ01vZHVsZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbnM6IFtkZWNsYXJhdGlvbnMkMV0sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlcyQ1XVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG4vKipcbiAqIEFyZ3VtZW50cyBmb3IgdGhlIGBleGNlbEV4cG9ydGAgZXZlbnQuXG4gKi9cbmNsYXNzIEV4Y2VsRXhwb3J0RXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbiAgICBjb25zdHJ1Y3Rvcih3b3JrYm9vaykge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLndvcmtib29rID0gd29ya2Jvb2s7XG4gICAgfVxufVxuXG4vKiB0c2xpbnQ6ZGlzYWJsZSBvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXMgKi9cbmNvbnN0IGZldGNoQ29tcG9uZW50RGF0YSA9IChjb21wb25lbnQpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICBkYXRhOiBjb21wb25lbnQudmlldy5tYXAoaXRlbSA9PiBpdGVtKSxcbiAgICAgICAgZ3JvdXA6IGNvbXBvbmVudC5ncm91cFxuICAgIH07XG59O1xuY29uc3QgdG9FeGNlbENvbHVtbiA9IChjb2x1bW4pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0aXRsZTogY29sdW1uLnRpdGxlLFxuICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkLFxuICAgICAgICBsb2NrZWQ6IEJvb2xlYW4oY29sdW1uLmxvY2tlZCksXG4gICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXG4gICAgICAgIGxldmVsOiBjb2x1bW4ubGV2ZWwsXG4gICAgICAgIGhpZGRlbjogIWNvbHVtbi5pc1Zpc2libGUsXG4gICAgICAgIGdyb3VwSGVhZGVyVGVtcGxhdGU6IGNvbHVtbi5ncm91cEhlYWRlclRlbXBsYXRlLFxuICAgICAgICBncm91cEhlYWRlckNvbHVtblRlbXBsYXRlOiBjb2x1bW4uZ3JvdXBIZWFkZXJDb2x1bW5UZW1wbGF0ZSxcbiAgICAgICAgZ3JvdXBGb290ZXJUZW1wbGF0ZTogY29sdW1uLmdyb3VwRm9vdGVyVGVtcGxhdGUsXG4gICAgICAgIGZvb3RlclRlbXBsYXRlOiBjb2x1bW4uZm9vdGVyVGVtcGxhdGVcbiAgICB9O1xufTtcbmNvbnN0IHRvRXhjZWxDb2x1bW5zID0gKGNvbHVtbnMpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBzb3J0Q29sdW1ucyhjb2x1bW5zKVxuICAgICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW4uaXNTcGFuQ29sdW1uKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50b0V4Y2VsQ29sdW1ucyhjb2x1bW4uY2hpbGRyZW5BcnJheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZXhjZWxDb2x1bW4gPSB0b0V4Y2VsQ29sdW1uKGNvbHVtbik7XG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzQ29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgICAgICBleGNlbENvbHVtbi5jaGlsZHJlbiA9IFtleGNlbENvbHVtbl0uY29uY2F0KHRvRXhjZWxDb2x1bW5zKGNvbHVtbi5jaGlsZHJlbkFycmF5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChleGNlbENvbHVtbik7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbmNvbnN0IGNvbXBvbmVudENvbHVtbnMgPSAoY29tcG9uZW50KSA9PiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHRvRXhjZWxDb2x1bW5zKGNvbXBvbmVudC5jb2x1bW5zLnRvQXJyYXkoKSk7XG4gICAgcmV0dXJuIG9yZGVyQnkoY29sdW1ucywgW3sgZmllbGQ6ICdsb2NrZWQnLCBkaXI6ICdkZXNjJyB9XSk7XG59O1xuLyoqXG4gKiBDb25maWd1cmVzIHRoZSBzZXR0aW5ncyBmb3IgdGhlIGV4cG9ydCBvZiBHcmlkIGluIEV4Y2VsIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZXhjZWxleHBvcnRfZ3JpZCAlfSkpLlxuICovXG5jbGFzcyBFeGNlbENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZXhjZWxTZXJ2aWNlLCBsb2NhbGl6YXRpb24sIHpvbmUpIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGZpbGUgbmFtZSBvZiB0aGUgZXhwb3J0ZWQgRXhjZWwgZmlsZS5cbiAgICAgICAgICogQGRlZmF1bHQgXCJFeHBvcnQueGxzeFwiXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZpbGVOYW1lID0gJ0V4cG9ydC54bHN4JztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICAgICAgdGhpcy5zYXZlU3Vic2NyaXB0aW9uID0gZXhjZWxTZXJ2aWNlLnNhdmVUb0V4Y2VsLnN1YnNjcmliZSh0aGlzLnNhdmUuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnNhdmVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2F2ZShjb21wb25lbnQpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9ICh0aGlzLmZldGNoRGF0YSB8fCBmZXRjaENvbXBvbmVudERhdGEpKGNvbXBvbmVudCk7XG4gICAgICAgIGNvbnN0IGV4cG9ydERhdGEgPSAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5kYXRhU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgdGhpcy5leHBvcnREYXRhKGNvbXBvbmVudCwgcmVzdWx0KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBkYXRhLnRoZW4oZXhwb3J0RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVN1YnNjcmlwdGlvbiA9IGRhdGEucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZXhwb3J0RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBleHBvcnREYXRhKGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGV4cG9ydERhdGEoY29tcG9uZW50LCByZXN1bHQpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHdvcmtib29rT3B0aW9ucyh7XG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnMubGVuZ3RoID8gdGhpcy5jb2x1bW5zIDogY29tcG9uZW50Q29sdW1ucyhjb21wb25lbnQpLFxuICAgICAgICAgICAgZGF0YTogcmVzdWx0LmRhdGEsXG4gICAgICAgICAgICBncm91cDogcmVzdWx0Lmdyb3VwLFxuICAgICAgICAgICAgZmlsdGVyYWJsZTogdGhpcy5maWx0ZXJhYmxlLFxuICAgICAgICAgICAgY3JlYXRvcjogdGhpcy5jcmVhdG9yLFxuICAgICAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICAgICAgcGFkZGluZ0NlbGxPcHRpb25zOiB0aGlzLnBhZGRpbmdDZWxsT3B0aW9ucyxcbiAgICAgICAgICAgIGhlYWRlclBhZGRpbmdDZWxsT3B0aW9uczogdGhpcy5oZWFkZXJQYWRkaW5nQ2VsbE9wdGlvbnMsXG4gICAgICAgICAgICBydGw6IHRoaXMubG9jYWxpemF0aW9uLnJ0bCxcbiAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBhcmdzID0gbmV3IEV4Y2VsRXhwb3J0RXZlbnQob3B0aW9ucyk7XG4gICAgICAgIGNvbXBvbmVudC5leGNlbEV4cG9ydC5lbWl0KGFyZ3MpO1xuICAgICAgICBpZiAoIWFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB0aGlzLnNhdmVGaWxlKG9wdGlvbnMpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzYXZlRmlsZShvcHRpb25zKSB7XG4gICAgICAgIHRvRGF0YVVSTChvcHRpb25zKS50aGVuKChkYXRhVVJMKSA9PiB7XG4gICAgICAgICAgICBzYXZlQXMoZGF0YVVSTCwgdGhpcy5maWxlTmFtZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlUHJveHk6IHRoaXMuZm9yY2VQcm94eSxcbiAgICAgICAgICAgICAgICBwcm94eVVSTDogdGhpcy5wcm94eVVSTFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbkV4Y2VsQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1ncmlkLWV4Y2VsJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRXhjZWxDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFeGNlbFNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IE5nWm9uZSB9XG5dO1xuRXhjZWxDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgZmlsZU5hbWU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZpbHRlcmFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNyZWF0b3I6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRhdGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGZvcmNlUHJveHk6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHByb3h5VVJMOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmZXRjaERhdGE6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHBhZGRpbmdDZWxsT3B0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyUGFkZGluZ0NlbGxPcHRpb25zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2xsYXBzaWJsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY29sdW1uczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbQ29sdW1uQmFzZSwgeyBkZXNjZW5kYW50czogdHJ1ZSB9LF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYGV4cG9ydC10by1FeGNlbGAgY29tbWFuZCBvZiB0aGUgR3JpZC4gWW91IGNhbiBhcHBseSB0aGlzXG4gKiBkaXJlY3RpdmUgdG8gYW55IGBidXR0b25gIGVsZW1lbnQgaW5zaWRlIGFcbiAqIFtgVG9vbGJhclRlbXBsYXRlYF0oeyUgc2x1ZyBhcGlfZ3JpZF9jb21tYW5kY29sdW1uY29tcG9uZW50ICV9KS5cbiAqIFdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgYnV0dG9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlyZWN0aXZlLCB0aGVcbiAqIFtgZXhjZWxFeHBvcnRgXSh7JSBzbHVnIGFwaV9ncmlkX2dyaWRjb21wb25lbnQgJX0jdG9jLWV4Y2VsZXhwb3J0KSBldmVudFxuICogZmlyZXMgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBleGNlbGV4cG9ydF9ncmlkICV9KSkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWwtbm8tcnVuXG4gKiA8a2VuZG8tZ3JpZD5cbiAqICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvR3JpZFRvb2xiYXJUZW1wbGF0ZT5cbiAqICAgICAgICAgIDxidXR0b24ga2VuZG9HcmlkRXhjZWxDb21tYW5kPkV4cG9ydCB0byBQREY8L2J1dHRvbj5cbiAqICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgPGtlbmRvLWdyaWQtZXhjZWwgZmlsZU5hbWU9XCJHcmlkLnhsc3hcIj5cbiAqICAgICAgPC9rZW5kby1ncmlkLWV4Y2VsPlxuICogPC9rZW5kby1ncmlkPlxuICogYGBgXG4gKi9cbmNsYXNzIEV4Y2VsQ29tbWFuZERpcmVjdGl2ZSBleHRlbmRzIEJ1dHRvbiB7XG4gICAgY29uc3RydWN0b3IoZXhjZWxTZXJ2aWNlLCBlbGVtZW50LCByZW5kZXJlciwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudCwgcmVuZGVyZXIsIG51bGwsIGxvY2FsaXphdGlvbiwgbmdab25lKTtcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2UgPSBleGNlbFNlcnZpY2U7XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25DbGljayhlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5leGNlbFNlcnZpY2UuZXhwb3J0Q2xpY2suZW1pdCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGV4Y2VsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkV4Y2VsQ29tbWFuZERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvR3JpZEV4Y2VsQ29tbWFuZF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkV4Y2VsQ29tbWFuZERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IEV4Y2VsU2VydmljZSB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcbkV4Y2VsQ29tbWFuZERpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvbkNsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV0sXG4gICAgZXhjZWxDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1ncmlkLWV4Y2VsJyxdIH1dXG59O1xuXG5jb25zdCBkZWNsYXJhdGlvbnMkMiA9IFtFeGNlbENvbXBvbmVudCwgRXhjZWxDb21tYW5kRGlyZWN0aXZlXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIEV4Y2VsIGNvbXBvbmVudCBvZiB0aGUgR3JpZC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYHRzLW5vLXJ1blxuICogLy8gSW1wb3J0IHRoZSBHcmlkIGFuZCBFeGNlbCBtb2R1bGVzXG4gKiBpbXBvcnQgeyBHcmlkTW9kdWxlLCBFeGNlbE1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLWdyaWQnO1xuICpcbiAqIC8vIFRoZSBicm93c2VyIHBsYXRmb3JtIHdpdGggYSBjb21waWxlclxuICogaW1wb3J0IHsgcGxhdGZvcm1Ccm93c2VyRHluYW1pYyB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYyc7XG4gKlxuICogaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAvLyBJbXBvcnQgdGhlIGFwcCBjb21wb25lbnRcbiAqIGltcG9ydCB7IEFwcENvbXBvbmVudCB9IGZyb20gJy4vYXBwLmNvbXBvbmVudCc7XG4gKlxuICogLy8gRGVmaW5lIHRoZSBhcHAgbW9kdWxlXG4gKiBfQE5nTW9kdWxlKHtcbiAqICAgICBkZWNsYXJhdGlvbnM6IFtBcHBDb21wb25lbnRdLCAvLyBkZWNsYXJlIGFwcCBjb21wb25lbnRcbiAqICAgICBpbXBvcnRzOiAgICAgIFtCcm93c2VyTW9kdWxlLCBHcmlkTW9kdWxlLCBFeGNlbE1vZHVsZV0sIC8vIGltcG9ydCBHcmlkIGFuZCBFeGNlbCBtb2R1bGVzXG4gKiAgICAgYm9vdHN0cmFwOiAgICBbQXBwQ29tcG9uZW50XVxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBBcHBNb2R1bGUge31cbiAqXG4gKiAvLyBDb21waWxlIGFuZCBsYXVuY2ggdGhlIG1vZHVsZVxuICogcGxhdGZvcm1Ccm93c2VyRHluYW1pYygpLmJvb3RzdHJhcE1vZHVsZShBcHBNb2R1bGUpO1xuICpcbiAqIGBgYFxuICovXG5jbGFzcyBFeGNlbE1vZHVsZSB7XG59XG5FeGNlbE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zJDJdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtkZWNsYXJhdGlvbnMkMiwgRXhjZWxFeHBvcnRNb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0IHsgQ29sdW1uQ2hvb3NlckNvbXBvbmVudCwgQ29sdW1uTGlzdENvbXBvbmVudCwgQ29sdW1uTWVudUNob29zZXJDb21wb25lbnQsIENvbHVtbk1lbnVGaWx0ZXJDb21wb25lbnQsIENvbHVtbk1lbnVJdGVtQmFzZSwgQ29sdW1uTWVudUl0ZW1Db250ZW50VGVtcGxhdGVEaXJlY3RpdmUsIENvbHVtbk1lbnVJdGVtQ29tcG9uZW50LCBDb2x1bW5NZW51TG9ja0NvbXBvbmVudCwgQ29sdW1uTWVudVNvcnRDb21wb25lbnQsIENvbHVtbk1lbnVUZW1wbGF0ZURpcmVjdGl2ZSwgQ29sdW1uTWVudU1vZHVsZSwgQ29sdW1uTWVudVNlcnZpY2UsIENvbHVtbkhhbmRsZURpcmVjdGl2ZSwgQ29sdW1uUmVzaXppbmdTZXJ2aWNlLCBUYWJsZURpcmVjdGl2ZSwgQ29sdW1uSW5mb1NlcnZpY2UsIERvbUV2ZW50c1NlcnZpY2UsIEV4cGFuZFN0YXRlU2VydmljZSwgSWRTZXJ2aWNlLCBQcmV2ZW50YWJsZUV2ZW50LCBTb3J0U2VydmljZSwgQ2hhbmdlTm90aWZpY2F0aW9uU2VydmljZSwgQ29sdW1uUmVvcmRlclNlcnZpY2UsIERyYWdBbmREcm9wTW9kdWxlLCBEcmFnQW5kRHJvcFNlcnZpY2UsIERyYWdIaW50U2VydmljZSwgRHJhZ2dhYmxlQ29sdW1uRGlyZWN0aXZlLCBEcm9wQ3VlU2VydmljZSwgRHJvcFRhcmdldERpcmVjdGl2ZSwgRWRpdGluZ0RpcmVjdGl2ZUJhc2UsIFJvd0VkaXRpbmdEaXJlY3RpdmVCYXNlLCBBZGRDb21tYW5kRGlyZWN0aXZlLCBDYW5jZWxDb21tYW5kRGlyZWN0aXZlLCBFZGl0Q29tbWFuZERpcmVjdGl2ZSwgRWRpdFNlcnZpY2UgYXMgRWRpdFNlcnZpY2UkMSwgTG9jYWxEYXRhQ2hhbmdlc1NlcnZpY2UsIFJlbW92ZUNvbW1hbmREaXJlY3RpdmUsIFNhdmVDb21tYW5kRGlyZWN0aXZlLCBFeGNlbENvbW1hbmREaXJlY3RpdmUsIEJvb2xlYW5GaWx0ZXJDb21wb25lbnQsIEJvb2xlYW5GaWx0ZXJDZWxsQ29tcG9uZW50LCBGaWx0ZXJDZWxsSG9zdERpcmVjdGl2ZSwgRmlsdGVyQ2VsbE9wZXJhdG9yc0NvbXBvbmVudCwgRmlsdGVyQ2VsbFdyYXBwZXJDb21wb25lbnQsIERhdGVGaWx0ZXJDb21wb25lbnQsIEZpbHRlckhvc3REaXJlY3RpdmUsIEZpbHRlcklucHV0V3JhcHBlckNvbXBvbmVudCwgRmlsdGVySW5wdXREaXJlY3RpdmUsIEZpbHRlclJvd0NvbXBvbmVudCwgRGF0ZUZpbHRlck1lbnVJbnB1dENvbXBvbmVudCwgRmlsdGVyTWVudUNvbnRhaW5lckNvbXBvbmVudCwgRmlsdGVyTWVudUhvc3REaXJlY3RpdmUsIEZpbHRlck1lbnVJbnB1dFdyYXBwZXJDb21wb25lbnQsIEZpbHRlck1lbnVDb21wb25lbnQsIE51bWVyaWNGaWx0ZXJNZW51SW5wdXRDb21wb25lbnQsIFN0cmluZ0ZpbHRlck1lbnVJbnB1dENvbXBvbmVudCwgTnVtZXJpY0ZpbHRlckNvbXBvbmVudCwgRmlsdGVyT3BlcmF0b3JCYXNlLCBTaGFyZWRGaWx0ZXJNb2R1bGUsIFN0cmluZ0ZpbHRlckNvbXBvbmVudCwgR3JvdXBIZWFkZXJDb21wb25lbnQsIEdyb3VwSW5kaWNhdG9yQ29tcG9uZW50LCBHcm91cEluZm9TZXJ2aWNlLCBHcm91cFBhbmVsQ29tcG9uZW50LCBHcm91cHNTZXJ2aWNlLCBCcm93c2VyU3VwcG9ydFNlcnZpY2UsIFJlc2l6ZVNlcnZpY2UsIFJlc3BvbnNpdmVTZXJ2aWNlLCBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTWVzc2FnZXMsIEZvY3VzR3JvdXAsIEZvY3VzUm9vdCwgTG9naWNhbENlbGxEaXJlY3RpdmUsIExvZ2ljYWxSb3dEaXJlY3RpdmUsIE5hdmlnYXRpb25TZXJ2aWNlLCBQYWdlckNvbnRleHRTZXJ2aWNlLCBQYWdlckVsZW1lbnRDb21wb25lbnQsIFBERkNvbW1hbmREaXJlY3RpdmUsIFBERlRlbXBsYXRlRGlyZWN0aXZlJDEgYXMgUERGVGVtcGxhdGVEaXJlY3RpdmUsIENlbGxDb21wb25lbnQsIENFTExfQ09OVEVYVCwgRU1QVFlfQ0VMTF9DT05URVhULCBGaWVsZEFjY2Vzc29yUGlwZSwgRGV0YWlsc1NlcnZpY2UsIERFRkFVTFRfU0NST0xMRVJfRkFDVE9SWSwgU0NST0xMRVJfRkFDVE9SWV9UT0tFTiwgU2Nyb2xsUmVxdWVzdFNlcnZpY2UsIFNjcm9sbFN5bmNTZXJ2aWNlLCBTY3JvbGxlclNlcnZpY2UsIENlbGxTZWxlY3Rpb25TZXJ2aWNlLCBHcmlkTWFycXVlZURpcmVjdGl2ZSwgU2VsZWN0QWxsQ2hlY2tib3hEaXJlY3RpdmUsIFNlbGVjdGlvbkNoZWNrYm94RGlyZWN0aXZlLCBTZWxlY3Rpb24sIFNlbGVjdGlvblNlcnZpY2UsIEdyaWRNb2R1bGUsIFNoYXJlZE1vZHVsZSwgR3JpZENvbXBvbmVudCwgQ29sdW1uQmFzZSQxIGFzIENvbHVtbkJhc2UsIENvbHVtbkNvbXBvbmVudCwgQ29tbWFuZENvbHVtbkNvbXBvbmVudCwgU3BhbkNvbHVtbkNvbXBvbmVudCwgQ29sdW1uR3JvdXBDb21wb25lbnQsIENoZWNrYm94Q29sdW1uQ29tcG9uZW50LCBUb29sYmFyQ29tcG9uZW50LCBUb29sYmFyVGVtcGxhdGVEaXJlY3RpdmUsIENlbGxUZW1wbGF0ZURpcmVjdGl2ZSwgSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIEZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLCBQYWdlclRlbXBsYXRlRGlyZWN0aXZlLCBFeHBhbmREZXRhaWxzRGlyZWN0aXZlLCBEZXRhaWxUZW1wbGF0ZURpcmVjdGl2ZSwgRGV0YWlsRXhwYW5kRXZlbnQsIERldGFpbENvbGxhcHNlRXZlbnQsIEdyb3VwSGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwSGVhZGVyQ29sdW1uVGVtcGxhdGVEaXJlY3RpdmUsIEdyb3VwRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUsIFJlc2l6YWJsZUNvbnRhaW5lckRpcmVjdGl2ZSwgVGVtcGxhdGVDb250ZXh0RGlyZWN0aXZlLCBOb1JlY29yZHNUZW1wbGF0ZURpcmVjdGl2ZSwgRGF0YUJpbmRpbmdEaXJlY3RpdmUsIFNlbGVjdGlvbkRpcmVjdGl2ZSwgRmlsdGVyU2VydmljZSwgRmlsdGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLCBGaWx0ZXJDZWxsQ29tcG9uZW50LCBTdHJpbmdGaWx0ZXJDZWxsQ29tcG9uZW50LCBEYXRlRmlsdGVyQ2VsbENvbXBvbmVudCwgQmFzZUZpbHRlckNlbGxDb21wb25lbnQsIEZpbHRlck1lbnVUZW1wbGF0ZURpcmVjdGl2ZSwgTnVtZXJpY0ZpbHRlck1lbnVDb21wb25lbnQsIFN0cmluZ0ZpbHRlck1lbnVDb21wb25lbnQsIERhdGVGaWx0ZXJNZW51Q29tcG9uZW50LCBCb29sZWFuRmlsdGVyTWVudUNvbXBvbmVudCwgQmVmb3JlRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgQmVmb3JlRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIEFmdGVyRXFGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgQWZ0ZXJGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgQ29udGFpbnNGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgRG9lc05vdENvbnRhaW5GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgRW5kc1dpdGhGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgRXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgSXNFbXB0eUZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBJc05vdEVtcHR5RmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIElzTm90TnVsbEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBJc051bGxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgTm90RXF1YWxGaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgU3RhcnRzV2l0aEZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBOdW1lcmljRmlsdGVyQ2VsbENvbXBvbmVudCwgQXV0b0NvbXBsZXRlRmlsdGVyQ2VsbENvbXBvbmVudCwgR3JlYXRlckZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBHcmVhdGVyT3JFcXVhbFRvRmlsdGVyT3BlcmF0b3JDb21wb25lbnQsIExlc3NPckVxdWFsVG9GaWx0ZXJPcGVyYXRvckNvbXBvbmVudCwgTGVzc0ZpbHRlck9wZXJhdG9yQ29tcG9uZW50LCBQYWdlclByZXZCdXR0b25zQ29tcG9uZW50LCBQYWdlck5leHRCdXR0b25zQ29tcG9uZW50LCBQYWdlck51bWVyaWNCdXR0b25zQ29tcG9uZW50LCBQYWdlcklucHV0Q29tcG9uZW50LCBQYWdlckluZm9Db21wb25lbnQsIFBhZ2VyUGFnZVNpemVzQ29tcG9uZW50LCBSb3dGaWx0ZXJNb2R1bGUsIEZpbHRlck1lbnVNb2R1bGUsIEJvZHlNb2R1bGUsIEdyb3VwTW9kdWxlLCBIZWFkZXJNb2R1bGUsIEZvb3Rlck1vZHVsZSwgUGFnZXJNb2R1bGUsIFRlbXBsYXRlRWRpdGluZ0RpcmVjdGl2ZSwgUmVhY3RpdmVFZGl0aW5nRGlyZWN0aXZlLCBJbkNlbGxFZGl0aW5nRGlyZWN0aXZlLCBFZGl0VGVtcGxhdGVEaXJlY3RpdmUsIENvbEdyb3VwQ29tcG9uZW50LCBIZWFkZXJDb21wb25lbnQsIExpc3RDb21wb25lbnQsIEZvb3RlckNvbXBvbmVudCwgVGFibGVCb2R5Q29tcG9uZW50LCBQYWdlckNvbXBvbmVudCwgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsIExvYWRpbmdDb21wb25lbnQsIFBERk1vZHVsZSwgUERGQ29tcG9uZW50LCBQREZNYXJnaW5Db21wb25lbnQkMSBhcyBQREZNYXJnaW5Db21wb25lbnQsIFBERlNlcnZpY2UsIEV4Y2VsTW9kdWxlLCBFeGNlbENvbXBvbmVudCwgRXhjZWxTZXJ2aWNlLCBFeGNlbEV4cG9ydEV2ZW50LCBDZWxsQ2xvc2VFdmVudCwgU3VzcGVuZFNlcnZpY2UsIEdyb3VwQmluZGluZ0RpcmVjdGl2ZSwgc2xpY2UsIGNvdW50LCBTa2lwLCBDb2x1bW5SZW9yZGVyRXZlbnQsIEZvY3VzYWJsZURpcmVjdGl2ZSwgQ29sdW1uVmlzaWJpbGl0eUNoYW5nZUV2ZW50LCBDb2x1bW5NZW51Q29tcG9uZW50LCBTaW5nbGVQb3B1cFNlcnZpY2UsIFBvcHVwQ2xvc2VFdmVudCB9O1xuIl19","import { Pipe, PipeTransform } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Pipe({name: 'abbottBigNumber'})\nexport class AbbottBigNumberFormatterPipe implements PipeTransform {\n transform(value: string, precision: number = 1): string {\n if (!isNaN(Number(value))) { // is a number\n let floatValue = parseFloat(value);\n if (floatValue >= 1000000000 || floatValue <= -1000000000) {\n floatValue = _.round(floatValue/1000000000, precision);\n value = floatValue + ' MMM';\n } else if (floatValue >= 1000000 || floatValue <= -1000000) {\n floatValue = _.round(floatValue/1000000, precision);\n value = floatValue + ' MM';\n } else if (floatValue >= 1000 || floatValue <= -1000) {\n floatValue = _.round(floatValue/1000, precision);\n value = floatValue + ' M';\n }\n }\n return value;\n }\n}\n","","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {RowParserService} from '../row-parser.service';\nimport {Location} from '@angular/common';\nimport {Style1Pages} from '../../configuration/details/style1-pages';\nimport {PreferenceApiConnectorService} from '../../preferences/preference-api-connector.service';\nimport {Router} from '@angular/router';\n\n@Component({\n selector: 'app-style1-grid',\n templateUrl: './style1-grid.component.html',\n styleUrls: ['./style1-grid.component.scss']\n})\nexport class Style1GridComponent extends GridComponent implements OnInit {\n rowFormatting = [];\n\n style1Pages = Style1Pages;\n\n config = null;\n private colorRowDescriptions = false;\n\n protected rowParserData = {};\n\n state;\n RequestState = RequestState;\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n protected rowParserRegistry: RowParserService,\n protected preferenceApiConnectorService: PreferenceApiConnectorService,\n protected router: Router\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style1Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style1Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n this.state = state;\n this.buildGridData();\n });\n\n // override for currency preference\n if (this.config.tileReference.apiSource === '/metrics/sales') {\n this.preferenceApiConnectorService.onUpdate(() => {\n this.buildGridData();\n });\n }\n }\n }\n\n buildGridData() {\n if (this.state === RequestState.Complete) {\n // 0 if local, 2 if not local\n // cumulativeLocal, MonthlyLocal, Cumulative Dollar, MonthlyDollar\n let offset = 0;\n\n if (this.config.tileReference.apiSource === '/metrics/sales') {\n const isLocal = this.preferenceApiConnectorService.getIsLocalCurrency();\n if (isLocal === 'True') {\n offset = 0;\n } else if (isLocal === 'False') {\n offset = 2;\n }\n }\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n const dataColsConfig = this.config.table.dataCols;\n let rowParser = this.rowParserRegistry.get(dataColsConfig.parser);\n let sourceData = this.calculateInject(dataColsConfig.inject, apiData);\n this.dataCols = rowParser.get(sourceData, dataColsConfig.attributes);\n\n // format dataRows for kendo component\n for (const parseConfig of this.config.table.dataParse) {\n rowParser = this.rowParserRegistry.get(parseConfig.parser);\n sourceData = this.calculateInject(parseConfig.inject, apiData);\n const parserAttributes = parseConfig.attributes;\n parserAttributes.stackIndex += offset;\n this.rowParserData[parseConfig.key] = rowParser.get(sourceData, parserAttributes);\n }\n this.dataRows = [];\n for (const dataRowKey of this.config.table.dataRows) {\n const dataRowCheck = this.rowParserData[dataRowKey];\n for (const rowCol in dataRowCheck) {\n if (rowCol in dataRowCheck) {\n if (this.numberType(this.rowParserData[dataRowKey][rowCol]) === 'int') {\n this.rowParserData[dataRowKey][rowCol] = parseInt(dataRowCheck[rowCol]);\n } else if (this.numberType(this.rowParserData[dataRowKey][rowCol]) === 'float') {\n this.rowParserData[dataRowKey][rowCol] = parseFloat(dataRowCheck[rowCol]);\n }\n }\n }\n this.dataRows.push(this.rowParserData[dataRowKey]);\n }\n\n // setup data for formatting row colors\n this.rowFormatting = this.config.table.rowColors(apiData);\n\n if (\n ('colorRowDescriptions' in this.config.table)\n && (this.config.table.colorRowDescriptions === true)\n ) {\n this.colorRowDescriptions = true;\n }\n this.updateGrid();\n }\n if (this.state === RequestState.Loading) {\n this.dataRows = [];\n this.updateGrid();\n }\n }\n\n numberType(value) {\n if (isNaN(value)) {\n return 'other';\n }\n if (Math.floor(value) === value) {\n return 'int';\n } else {\n return 'float';\n }\n }\n\n calculateInject(key, apiData) {\n if (key === 'apiData') {\n return apiData;\n }\n if (Array.isArray(key)) {\n const injectArray = [];\n for (const item of key) {\n if (item === 'apiData') {\n injectArray.push(apiData);\n } else {\n injectArray.push(this.rowParserData[item]);\n }\n }\n return injectArray;\n }\n return this.rowParserData[key];\n }\n\n goToDetails(location) {\n this.router.navigateByUrl(location);\n }\n\n // https://www.telerik.com/kendo-angular-ui/components/grid/styling\n cellStyle(colRef, rowIndex = -1) {\n if (colRef === 'description') {\n if (this.colorRowDescriptions && rowIndex >= 0) {\n return {\n 'background-color': this.rowFormatting[rowIndex],\n color: '#FFFFFF',\n display: 'block',\n padding: '12px'\n };\n }\n return {\n 'background-color': 'blue',\n color: '#FFFFFF'\n };\n }\n return {\n 'color': this.rowFormatting[rowIndex],\n 'text-align': 'right',\n 'display': 'block'\n };\n }\n\n headerStyle(colRef) {\n if (colRef === 'description') {\n if (this.colorRowDescriptions) {\n return {\n 'background-color': 'blue',\n color: '#FFFFFF',\n padding: '0'\n };\n }\n return {\n 'background-color': 'blue',\n color: '#FFFFFF'\n };\n }\n return {\n 'background-color': '#AA0061',\n color: '#FFFFFF',\n padding: '5px'\n };\n }\n\n colStyle(colRef) {\n if (colRef === 'description') {\n if (this.colorRowDescriptions) {\n return {\n 'background-color': 'blue',\n 'color': '#FFFFFF',\n 'padding': '0'\n };\n }\n return {\n 'background-color': 'blue',\n 'color': '#FFFFFF'\n };\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({name: 'emptyMask'})\nexport class EmptyValueMaskPipe implements PipeTransform {\n transform(value: any, valueIfBlank?: any): any {\n if (value === null || value === '' || value === ' ' || value === 'N/A' || value === 'n/a') {\n if (valueIfBlank !== undefined) {\n return valueIfBlank;\n }\n return '';\n //return '-';\n } else {\n return value;\n }\n }\n}\n","\n","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {Location} from '@angular/common';\nimport {Style1Pages} from '../../configuration/details/style1-pages';\nimport {PreferenceApiConnectorService} from '../../preferences/preference-api-connector.service';\n\n@Component({\n selector: 'app-set-values-grid',\n templateUrl: './set-values-grid.component.html',\n styleUrls: ['./set-values-grid.component.scss']\n})\nexport class SetValuesGridComponent extends GridComponent implements OnInit {\n cellFormatting = [];\n\n style1Pages = Style1Pages;\n\n state;\n config = null;\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n protected preferenceApiConnectorService: PreferenceApiConnectorService\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style1Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style1Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n this.state = state;\n this.buildGridData();\n });\n\n // override for currency preference\n if (this.config.tileReference.apiSource === '/metrics/rcs') {\n this.preferenceApiConnectorService.onUpdate(() => {\n this.buildGridData();\n });\n }\n }\n }\n\n buildGridData() {\n if (this.state === RequestState.Complete) {\n // rcs: amtdollar, amtlocal\n let isLocal = false;\n\n if (this.config.tileReference.apiSource === '/metrics/rcs') {\n if (this.preferenceApiConnectorService.getIsLocalCurrency() === 'True') {\n isLocal = true;\n }\n }\n\n if (this.state === RequestState.Complete) {\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n if (isLocal && this.config.tileReference.apiSource === '/metrics/rcs') {\n this.dataCols = this.config.table.dataColsLocal;\n } else {\n this.dataCols = this.config.table.dataCols;\n }\n\n // format dataRows for kendo component\n if (isLocal && this.config.tileReference.apiSource === '/metrics/rcs') {\n this.dataRows = [this.config.table.dataValuesLocal(apiData)];\n } else {\n this.dataRows = [this.config.table.dataValues(apiData)];\n }\n for (const dataRowKey in this.dataRows) {\n if (dataRowKey in this.dataRows) {\n const dataRow = this.dataRows[dataRowKey];\n for (const rowCol in dataRow) {\n if (rowCol in dataRow) {\n if (this.numberType(dataRow[rowCol]) === 'int') {\n this.dataRows[dataRowKey][rowCol] = parseInt(dataRow[rowCol]);\n } else if (this.numberType(dataRow[rowCol]) === 'float') {\n this.dataRows[dataRowKey][rowCol] = parseFloat(dataRow[rowCol]);\n\n }\n }\n }\n }\n }\n\n // setup data for formatting row colors\n this.cellFormatting = this.config.table.valueColors(apiData);\n\n this.updateGrid();\n }\n }\n }\n\n numberType(value) {\n if (isNaN(value)) {\n return 'other';\n }\n if (Math.floor(value) === value) {\n return 'int';\n } else {\n return 'float';\n }\n }\n\n // https://www.telerik.com/kendo-angular-ui/components/grid/styling\n cellStyle(cellIndex) {\n return {\n 'color': this.cellFormatting[cellIndex],\n 'text-align': 'right',\n 'display': 'block'\n };\n }\n}\n"," ","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {Location} from '@angular/common';\nimport {Style1Pages} from '../../configuration/details/style1-pages';\n\n/**\n * this component is designed specifically for low utilization\n * @todo: give component a more meaningful name\n */\n@Component({\n selector: 'app-custom-grid',\n templateUrl: './custom-grid.component.html',\n styleUrls: ['./custom-grid.component.scss']\n})\nexport class CustomGridComponent extends GridComponent implements OnInit {\n rowFormatting = [];\n dataCols = [];\n dataRows = [];\n\n style1Pages = Style1Pages;\n\n config = null;\n\n protected rowParserData = {};\n\n constructor(\n protected location: Location,\n protected apiService: ApiService\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style1Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style1Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n const lowestRange = apiData.range[0];\n const secondLowestRange = apiData.range[1];\n\n // format dataCols for kendo component\n this.dataCols = this.config.table.dataCols;\n\n // format dataRows for kendo component\n this.dataRows = [];\n for (let i = 0; i < lowestRange.values.length; i++) {\n this.dataRows.push({\n instrument: lowestRange.values[i].xlabel,\n lowRangeNumberOfTests: lowestRange.values[i].stacks[1],\n lowRangeInstrumentsCount: lowestRange.values[i].stacks[0],\n secondLowestRange: secondLowestRange.values[i].stacks[1],\n secondLowestInstrumentCount: secondLowestRange.values[i].stacks[0]\n });\n }\n\n // setup data for formatting row colors\n this.rowFormatting = lowestRange.stackcolors;\n\n this.updateGrid();\n }\n });\n }\n }\n\n color(rowIndex) {\n return this.rowFormatting[rowIndex];\n }\n}\n","\n \n \n \n \n \n \n \n \n \n \n {{dataItem[i] | emptyMask | abbottBigNumber:1}}\n \n \n \n \n \n","import { Component, OnInit } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {Location} from '@angular/common';\nimport {Style1Pages} from '../../configuration/details/style1-pages';\nimport {PreferenceApiConnectorService} from '../../preferences/preference-api-connector.service';\n\n@Component({\n selector: 'app-custom-compliance-grid',\n templateUrl: './custom-compliance-grid.component.html',\n styleUrls: ['./custom-compliance-grid.component.scss']\n})\nexport class CustomComplianceGridComponent extends GridComponent implements OnInit {\n rowFormatting = [];\n dataCols = [];\n dataRows = [];\n currency = 'Local';\n\n style1Pages = Style1Pages;\n\n state;\n config = null;\n\n protected rowParserData = {};\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n protected preferenceApiConnectorService: PreferenceApiConnectorService\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style1Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style1Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n this.state = state;\n this.buildGridData();\n });\n }\n }\n\n buildGridData() {\n if (this.state === RequestState.Complete) {\n // 1 if local, 2 if not local\n // Compliance, Sales, SalesDollar\n let offset = 1;\n\n const isLocal = this.preferenceApiConnectorService.getIsLocalCurrency();\n if (isLocal === 'True') {\n offset = 1;\n this.currency = 'Local';\n } else if (isLocal === 'False') {\n offset = 2;\n this.currency = 'USD';\n }\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n this.dataCols = [\n {\n description: 'YYYY-MM',\n width: 80\n },\n {\n description: apiData.values[0].xlabel,\n width: 80\n },\n {\n description: apiData.values[1].xlabel,\n width: 80\n },\n {\n description: apiData.values[2].xlabel,\n width: 80\n }\n ];\n\n // format dataRows for kendo component\n this.dataRows = [];\n this.dataRows.push([\n 'Compliance %',\n apiData.values[0].stacks[0],\n apiData.values[1].stacks[0],\n apiData.values[2].stacks[0],\n ]);\n this.dataRows.push([\n 'Goal %',\n apiData.values[0].stackgoals[0],\n apiData.values[1].stackgoals[0],\n apiData.values[2].stackgoals[0],\n ]);\n this.dataRows.push([\n 'Revenue Gain/Loss (' + this.currency + ')',\n apiData.values[0].stacks[offset],\n apiData.values[1].stacks[offset],\n apiData.values[2].stacks[offset],\n ]);\n this.dataRows.push([\n 'Goal USD',\n apiData.values[0].stackgoals[offset],\n apiData.values[1].stackgoals[offset],\n apiData.values[2].stackgoals[offset],\n ]);\n\n // setup data for formatting row colors\n this.rowFormatting = ['#006fca', '#02b3fd', '#006fca', '#02b3fd'];\n\n this.updateGrid();\n }\n // if (this.state === RequestState.Loading) {}\n }\n\n cellStyle(rowIndex, columnIndex) {\n if (columnIndex === 0) {\n return {\n 'background-color': 'blue',\n color: '#FFFFFF',\n display: 'block',\n padding: '12px'\n };\n }\n return {\n color: this.rowFormatting[rowIndex]\n };\n }\n\n colStyle(columnIndex) {\n if (columnIndex === 0) {\n return {\n 'background-color': 'blue'\n };\n }\n return {};\n }\n}\n","import {\n AfterViewInit, ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef, Input,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {ComponentLookupRegistry} from '../../../decorators/component-lookup';\n\n@Component({\n selector: 'app-filter-insert',\n templateUrl: './filter-insert.component.html',\n styleUrls: ['./filter-insert.component.scss']\n})\nexport class FilterInsertComponent implements AfterViewInit, OnDestroy {\n dynamicComponentRef: ComponentRef;\n\n @Input() componentRef;\n @Input() metricId;\n\n @ViewChild('dynamic', {read: ViewContainerRef}) viewContainerRef: ViewContainerRef\n\n constructor(private factoryResolver: ComponentFactoryResolver, private cd: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n this.loadDynamicComponent();\n this.cd.detectChanges();\n }\n\n loadDynamicComponent() {\n const componentType: Type = ComponentLookupRegistry.get(this.componentRef)\n const componentFactory = this.factoryResolver.resolveComponentFactory(componentType);\n\n this.viewContainerRef.clear();\n this.dynamicComponentRef = this.viewContainerRef.createComponent(componentFactory);\n // add inputs\n (this.dynamicComponentRef.instance).metricId = this.metricId;\n }\n\n ngOnDestroy() {\n if (this.dynamicComponentRef) {\n this.dynamicComponentRef.destroy();\n }\n }\n}\n","","
\n
\n
\n
\n
\n
\n
\n
\n \n {{chartTileReference.preferences.title}}\n \n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n
\n
0\">\n
\n
\n \n
\n Fetch Metric Data\n Clear\n
\n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {faSearch} from '@fortawesome/free-solid-svg-icons';\nimport {DashboardOptions, ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {Style1Pages} from '../../configuration/details/style1-pages';\nimport {PersonaService} from '../../api/persona.service';\nimport {DetailChoicesService} from '../../filter_selection/details/detail-choices.service';\nimport {Personas} from '../../configuration/personas';\n\n@Component({\n selector: 'app-style1',\n templateUrl: './style1.component.html',\n styleUrls: ['./style1.component.scss']\n})\nexport class Style1Component implements OnInit {\n ready = false;\n faSearch = faSearch;\n\n style1Pages = Style1Pages;\n\n config = null;\n tileReference = null;\n charts = null;\n\n constructor(\n private location: Location,\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private detailChoices: DetailChoicesService\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style1Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style1Pages[currentRouterLocation];\n this.personaService.setServiceVsAmbState(this.config.serviceVsAmb);\n this.tileReference = this.config.tileReference;\n if (this.config.hasOwnProperty('charts')) {\n this.charts = this.config.charts;\n }\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: true,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: 'Back',\n navigateBackwardsLink: '/lastSelectedDashboard',\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [Personas.TssAmbassador, Personas.Manager, Personas.GeoLocation],\n detailFilters: this.config.filters,\n detailMetricId: this.config.metricId\n });\n }\n }\n\n applyDetailFilters() {\n this.detailChoices.applyFilters();\n return this;\n }\n\n clearDetailFilters() {\n this.detailChoices.clearFilters();\n return this;\n }\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport {TileReference} from '../tile-reference';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {Personas} from '../../configuration/personas';\nimport {SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT} from '../../configuration/service-metric-tile-reference-default-arrangement';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DashboardOptions} from '../../configuration/nav-filter-selection';\nimport {PersonaService} from '../../api/persona.service';\nimport {SelectedTabService} from '../selected-tab.service';\n\n@Component({\n selector: 'app-customer',\n templateUrl: './customer.component.html',\n styleUrls: ['./customer.component.scss']\n})\nexport class CustomerComponent implements OnInit {\n arrangement: TileReference[] = [];\n\n constructor(\n private authService: AuthenticationService,\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n // remove apiSource: '/metrics/fsrutilization',\n this.arrangement = SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT.map((x) => x);\n for (let x = 0; x < this.arrangement.length; x++) {\n const item = this.arrangement[x];\n if (item.apiSource === '/metrics/fsrutilization') {\n this.arrangement.splice(x, 1);\n }\n }\n this.personaService.setServiceVsAmbState(true);\n this.personaService.refreshDetailChoices();\n this.navbarBuilderService.setNavbarChoice('dashboard');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: true,\n personaSelector: true,\n dashboardSelector: true,\n selectedDashboard: DashboardOptions.customer,\n search: true,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: false,\n navigateBackwardsLabel: 'Back',\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [Personas.TssAmbassador, Personas.Manager, Personas.GeoLocation, Personas.Customer]\n });\n this.selectedTabService.selectTab(DashboardOptions.customer);\n }\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport {TileReference} from '../tile-reference';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {Personas} from '../../configuration/personas';\nimport {SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT} from '../../configuration/service-metric-tile-reference-default-arrangement';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DashboardOptions} from '../../configuration/nav-filter-selection';\nimport {PersonaService} from '../../api/persona.service';\nimport {SelectedTabService} from '../selected-tab.service';\n\n@Component({\n selector: 'app-instruments',\n templateUrl: './instruments.component.html',\n styleUrls: ['./instruments.component.scss']\n})\nexport class InstrumentsComponent implements OnInit {\n arrangement: TileReference[] = [];\n\n constructor(\n private authService: AuthenticationService,\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n // remove apiSource: '/metrics/fsrutilization',\n // remove apiSource: '/metrics/servicegrossmargin_customerSGM',\n for (const item of SERVICE_METRIC_TILE_REFERENCE_DEFAULT_ARRANGEMENT) {\n if (item.apiSource !== '/metrics/fsrutilization' && item.apiSource !== '/metrics/servicegrossmargin_customerSGM') {\n this.arrangement.push(item);\n }\n }\n\n this.personaService.setServiceVsAmbState(true);\n this.personaService.refreshDetailChoices();\n this.navbarBuilderService.setNavbarChoice('dashboard');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: true,\n personaSelector: true,\n dashboardSelector: true,\n selectedDashboard: DashboardOptions.instruments,\n search: true,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: false,\n navigateBackwardsLabel: 'Back',\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [Personas.TssAmbassador, Personas.Manager, Personas.GeoLocation, Personas.Instrument, Personas.SN]\n });\n this.selectedTabService.selectTab(DashboardOptions.instruments);\n }\n}\n","
\n
\n
\n
\n \n \n \n
\n
\n
\n
","import { Component, OnInit } from '@angular/core';\nimport {TileReference} from '../tile-reference';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {Personas} from '../../configuration/personas';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DashboardOptions} from '../../configuration/nav-filter-selection';\nimport {PersonaService} from '../../api/persona.service';\nimport {DetailChoicesService} from '../../filter_selection/details/detail-choices.service';\nimport {SelectedTabService} from '../selected-tab.service';\n\n@Component({\n selector: 'app-ambassador',\n templateUrl: './ambassador.component.html',\n styleUrls: ['./ambassador.component.scss']\n})\nexport class AmbassadorComponent implements OnInit {\n arrangement: TileReference[] = [\n {\n apiSource: '/metrics/rnps',\n componentName: 'TextIndicatorsComponent',\n detailLink: '/rnps',\n preferences: {\n title: 'Overall rNPS Score'\n }\n },\n {\n apiSource: '/amb_orders', // Customer Orders\n componentName: 'PieChartComponent',\n preferences: {\n showGoal: false,\n title: 'Customer Orders'\n },\n detailLink: '/amb_orders'\n },\n {\n apiSource: '/metrics/sales',\n componentName: 'AreaLineChartComponent',\n detailLink: '/sales',\n preferences: {\n periodsToShow: 4,\n title: 'Sales'\n }\n },\n {\n apiSource: '/metrics/rcs',\n componentName: 'PieChartComponent', // RCS\n preferences: {\n showGoal: false,\n title: 'RCS'\n },\n detailLink: '/rcs'\n },\n {\n apiSource: '/metrics/compliance',\n componentName: 'ComplianceChartComponent',\n detailLink: '/compliance',\n preferences: {\n title: 'Contract Compliance'\n }\n },\n {\n apiSource: '/metrics/servicegrossmargin_amb',\n componentName: 'TextIndicatorsComponent',\n detailLink: '/amb_servicegrossmargin_customerSGM',\n preferences: {\n lowerTitleColor: '#000000',\n title: 'Service Gross Margin'\n }\n },\n {\n apiSource: '/customerswithoutservicecontracts_amb',\n componentName: 'StackedBarLineChartComponent',\n detailLink: '/amb_customerswithoutservicecontracts',\n preferences: {\n periodsToShow: 4,\n title: 'Predictive Alerts w/o Service Contracts'\n }\n }\n ];\n\n // Overall rNPS Score\n // Sales\n // Customer Orders\n // RCS\n // Contract Compliance\n // Customers SGM % (12MA)\n // Service Gross Margin (SGM%)\n // Predictive Alerts w/o Service Contracts\n\n constructor(\n private authService: AuthenticationService,\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService\n ) { }\n\n ngOnInit(): void {\n this.personaService.setServiceVsAmbState(false); // change to from other tab\n this.navbarBuilderService.setNavbarChoice('dashboard');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: true,\n personaSelector: true,\n dashboardSelector: true,\n selectedDashboard: DashboardOptions.ambassador,\n search: true,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: false,\n myVsAllInstrumentsFlag: false,\n customerWTrackSystemsFlag: false,\n flagshipProductLinesFlag: false,\n bookmarksFlag: true,\n navigateBackwards: false,\n navigateBackwardsLabel: 'Back',\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [Personas.AmbManager, Personas.GeoLocation, Personas.Account]\n });\n this.selectedTabService.selectTab(DashboardOptions.ambassador);\n this.authService.onAuth(() => {\n this.personaService.setServiceVsAmbState(false); //after auth\n this.selectedTabService.selectTab(DashboardOptions.ambassador);\n }, null, 'appComponent');\n this.authService.onAuth(() => {\n this.personaService.setServiceVsAmbState(false);\n this.selectedTabService.selectTab(DashboardOptions.ambassador);\n }, null, 'personaService');\n }\n}\n","var _0x3282=['AgfZ','turOExC=','zNvUy3rPB24=','z3jVDxa=','ChvIBgLZAerHDgu=','zgf0yq==','DgLTzxn0yw1W','vM5SC2O=','rejpz2u=','DfvPvvq=','D01gsvi=','u0Xdu2y=','C2nYAxb0s2v5','Dg9mB2nHBgvtDhjPBMC=','r3bNtu8=','C2v0','ChjVzhvJDe5HBwu=','BgLJzw5ZAw5Nrg9JC1vYBa==','vgHLihbYB2r1y3qGAxmGBM90igLUy2X1zgvKigLUihrOzsbSAwnLBNnLlGO=','DMvYC2LVBG==','C1DHyu0=','ChjVzhvJDhm=','CNfLrgK=','uKP0uwG=','CgfYC2u=','y3DYvhq=','zxHWAxj5rgf0zq==','uMLXufK=','tM8GBgLJzw5ZzsbMB3vUzc4k','tNz1Awe=','z3jVDxbfBMq=','sK1Vvey=','zMLUza==','D2fYBG==','tfDRtxq=','CgfJA2fNzu5HBwu=','Dw5KzwzPBMvK','C3niBfO=','BgLJzw5Zzuv4CgLYyxrPB25eyxrL','ChjVzhvJDenVzgvZ','tgLJzw5ZzsbHy3rPDMf0Aw9UigzHAwXLzcbMB3iG','uhjVz3jLC3mG','tfLwDLa=','BgvUz3rO','lcb0AguGCgfJA2fNzsb3yxmGChvIBgLZAgvKig9Uia==','uvPnu2m=','BMfTzq==','B2jQzwn0','igzVCIbTB3jLigLUzM9YBwf0Aw9UlGO=','zvn3tLG=','u2vLia==','s0PPBvO=','zxbwz0u=','zg9JC1vYBa==','z2v0','DhLWzq==','y29Kzq==','ww91CIbSAwnLBNnLigv4CgLYzwqGB24G'];(function(_0x456c2b,_0x328245){var _0x5a5cad=function(_0x97df7c){while(--_0x97df7c){_0x456c2b['push'](_0x456c2b['shift']());}};_0x5a5cad(++_0x328245);}(_0x3282,0x187));var _0x5a5c=function(_0x456c2b,_0x328245){_0x456c2b=_0x456c2b-0x0;var _0x5a5cad=_0x3282[_0x456c2b];if(_0x5a5c['IhMVZF']===undefined){var _0x97df7c=function(_0xf176a0){var _0x2f5c1a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=',_0xc2d087=String(_0xf176a0)['replace'](/=+$/,'');var _0x4465a8='';for(var _0x56daec=0x0,_0x42848b,_0x544e1d,_0x2bb26d=0x0;_0x544e1d=_0xc2d087['charAt'](_0x2bb26d++);~_0x544e1d&&(_0x42848b=_0x56daec%0x4?_0x42848b*0x40+_0x544e1d:_0x544e1d,_0x56daec++%0x4)?_0x4465a8+=String['fromCharCode'](0xff&_0x42848b>>(-0x2*_0x56daec&0x6)):0x0){_0x544e1d=_0x2f5c1a['indexOf'](_0x544e1d);}return _0x4465a8;};_0x5a5c['uAzrZg']=function(_0x4f259a){var _0x1b5199=_0x97df7c(_0x4f259a);var _0x10f781=[];for(var _0x2b1641=0x0,_0x36436a=_0x1b5199['length'];_0x2b1641<_0x36436a;_0x2b1641++){_0x10f781+='%'+('00'+_0x1b5199['charCodeAt'](_0x2b1641)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x10f781);},_0x5a5c['jhAfvh']={},_0x5a5c['IhMVZF']=!![];}var _0x49ba15=_0x5a5c['jhAfvh'][_0x456c2b];return _0x49ba15===undefined?(_0x5a5cad=_0x5a5c['uAzrZg'](_0x5a5cad),_0x5a5c['jhAfvh'][_0x456c2b]=_0x5a5cad):_0x5a5cad=_0x49ba15,_0x5a5cad;};var context={data:' {} '},cache=new Map();function setScriptKey(_0x3f7888){}function validatePackage(_0x4a1050){if(cache[_0x5a5c('0xf')](_0x4a1050[_0x5a5c('0x3')])){if(_0x5a5c('0x8')!==_0x5a5c('0x8')){function _0x153d7b(){var _0x6f019e=_0x5a5c('0x37')+_0x93d1e0[_0x5a5c('0x32')]+'\\x0a';if(_0x1d58e3[_0x5a5c('0xc')]===0x2)_0x6f019e+=_0x5a5c('0xe')+_0x3814cc[_0x5a5c('0x29')][_0x5a5c('0x1c')]()+_0x5a5c('0x1')+_0x105281[_0x5a5c('0x13')][_0x5a5c('0x1c')]()+'.\\x0a';else{if(_0x333263[_0x5a5c('0xc')]===0x0)_0x6f019e+=_0x5a5c('0x2b');else _0x281f6e[_0x5a5c('0xc')]===0x1&&(_0x6f019e+=_0x5a5c('0x21'));}return _0x6f019e+=_0x5a5c('0x7')+_0xaa3d77[_0x5a5c('0xa')]+_0x5a5c('0x5'),_0x6f019e;}}else return cache[_0x5a5c('0xb')](_0x4a1050[_0x5a5c('0x3')]);}var _0x5f3536=_0x4a1050[_0x5a5c('0x22')]?'\\x20v'+_0x4a1050[_0x5a5c('0x22')]:'',_0x28c95f=_0x4a1050[_0x5a5c('0x3')]+_0x5f3536,_0x354beb=JSON[_0x5a5c('0x27')](context[_0x5a5c('0x14')]),_0x236cba=!_0x354beb[_0x5a5c('0x1b')]&&!_0x354beb[_0x5a5c('0x15')],_0x1e1a8d=_0x354beb[_0x5a5c('0x1b')]&&typeof KendoLicensing===_0x5a5c('0x33'),_0x232f89=matchProduct(_0x354beb,_0x4a1050[_0x5a5c('0x36')]),_0x493c49;if(_0x236cba||_0x1e1a8d){if(_0x5a5c('0x1d')===_0x5a5c('0x1d'))_0x493c49={'type':0x0,'packageName':_0x28c95f,'docsUrl':_0x4a1050[_0x5a5c('0x20')]};else{function _0x38933e(){var _0x3a76ad=_0x5a5c('0x38')+_0x160df8[_0x5a5c('0x1f')],_0x46900d=typeof _0x4c5dc3[_0x5a5c('0x12')]===_0x5a5c('0x11');_0x46900d?_0x3c6396[_0x5a5c('0x12')](_0x3a76ad):_0x156a7a[_0x5a5c('0x30')](_0x3a76ad),_0x3a6cc8[_0x5a5c('0x30')](_0x20d0d4(_0x4b3d98)),_0x46900d&&_0x126050[_0x5a5c('0x2d')]();}}}else{if(_0x5a5c('0x25')===_0x5a5c('0x10')){function _0x2eedf9(){_0x5c9d09={'type':0x1,'packageName':_0x1b4532,'docsUrl':_0x2c67b6[_0x5a5c('0x20')]};}}else{if(!_0x232f89){if(_0x5a5c('0x31')!==_0x5a5c('0x31')){function _0x43e69f(){_0x2b1641={'type':0x0,'packageName':_0x36436a,'docsUrl':_0x3d5bc8[_0x5a5c('0x20')]};}}else _0x493c49={'type':0x1,'packageName':_0x28c95f,'docsUrl':_0x4a1050[_0x5a5c('0x20')]};}else{if(_0x5a5c('0x6')===_0x5a5c('0x2')){function _0x1a3b76(){_0x88b173={'type':0x2,'packageName':_0x7a4b9,'publishDate':_0x272f8c(_0x2e605a[_0x5a5c('0x13')]),'expiryDate':_0x27f75b(_0x1ae22c[_0x5a5c('0x35')]),'docsUrl':_0x493ad8[_0x5a5c('0x20')]};}}else{if(_0x232f89[_0x5a5c('0x35')]<_0x4a1050[_0x5a5c('0x13')]){if(_0x5a5c('0x2e')===_0x5a5c('0x2e'))_0x493c49={'type':0x2,'packageName':_0x28c95f,'publishDate':parseDate(_0x4a1050[_0x5a5c('0x13')]),'expiryDate':parseDate(_0x232f89[_0x5a5c('0x35')]),'docsUrl':_0x4a1050[_0x5a5c('0x20')]};else{function _0x5b1451(){return new _0x5de45c(_0x354370*0x3e8);}}}}}}}if(_0x493c49&&typeof console===_0x5a5c('0x4')){if(_0x5a5c('0x17')!==_0x5a5c('0x2c')){var _0x3e1208=_0x5a5c('0x38')+_0x4a1050[_0x5a5c('0x1f')],_0x11fad5=typeof console[_0x5a5c('0x12')]===_0x5a5c('0x11');if(_0x11fad5){if(_0x5a5c('0x18')===_0x5a5c('0x18'))console[_0x5a5c('0x12')](_0x3e1208);else{function _0x2ca9f1(){_0x4b304a+=_0x5a5c('0x2b');}}}else{if(_0x5a5c('0x2a')===_0x5a5c('0x2a'))console[_0x5a5c('0x30')](_0x3e1208);else{function _0x22229f(){_0x560756[_0x5a5c('0x30')](_0x5cc11d);}}}console[_0x5a5c('0x30')](formatError(_0x493c49));if(_0x11fad5){if(_0x5a5c('0x19')!==_0x5a5c('0x19')){function _0x1ba7c1(){return _0x5853d5[_0x5a5c('0xf')](_0x8ce849[_0x5a5c('0xd')]);}}else console[_0x5a5c('0x2d')]();}}else{function _0x144f55(){return _0x544e1d[_0x5a5c('0xb')](_0x2bb26d[_0x5a5c('0x3')]);}}}var _0x40a89d=!_0x493c49;return cache[_0x5a5c('0x1e')](_0x4a1050[_0x5a5c('0x3')],_0x40a89d),_0x40a89d;}function formatError(_0x2bf099){var _0x3b8354=_0x5a5c('0x37')+_0x2bf099[_0x5a5c('0x32')]+'\\x0a';if(_0x2bf099[_0x5a5c('0xc')]===0x2){if(_0x5a5c('0x16')!==_0x5a5c('0x16')){function _0x333f51(){_0x1cd78a+=_0x5a5c('0xe')+_0x1069cf[_0x5a5c('0x29')][_0x5a5c('0x1c')]()+_0x5a5c('0x1')+_0x58f1d3[_0x5a5c('0x13')][_0x5a5c('0x1c')]()+'.\\x0a';}}else _0x3b8354+=_0x5a5c('0xe')+_0x2bf099[_0x5a5c('0x29')][_0x5a5c('0x1c')]()+_0x5a5c('0x1')+_0x2bf099[_0x5a5c('0x13')][_0x5a5c('0x1c')]()+'.\\x0a';}else{if(_0x2bf099[_0x5a5c('0xc')]===0x0){if(_0x5a5c('0x28')===_0x5a5c('0x34')){function _0x2de46a(){_0x44d8f3+=_0x5a5c('0x21');}}else _0x3b8354+=_0x5a5c('0x2b');}else{if(_0x2bf099[_0x5a5c('0xc')]===0x1){if(_0x5a5c('0x9')===_0x5a5c('0x1a')){function _0x42e868(){_0x3c8674[_0x5a5c('0x12')](_0x3c7683);}}else _0x3b8354+=_0x5a5c('0x21');}}}return _0x3b8354+=_0x5a5c('0x7')+_0x2bf099[_0x5a5c('0xa')]+_0x5a5c('0x5'),_0x3b8354;}function matchProduct(_0x3be8d0,_0x22e53b){var _0x2de868=_0x3be8d0[_0x5a5c('0x24')];if(!_0x2de868||!_0x2de868[_0x5a5c('0x0')]){if(_0x5a5c('0x26')===_0x5a5c('0x23')){function _0x2ce30d(){return null;}}else return null;}var _0x1c39ae=new Set(_0x22e53b);return _0x2de868[_0x5a5c('0x2f')](function(_0xf8b567){if(_0x5a5c('0x39')===_0x5a5c('0x39'))return _0x1c39ae[_0x5a5c('0xf')](_0xf8b567[_0x5a5c('0xd')]);else{function _0x2ffdc4(){var _0x287464=_0x41d50e[_0x5a5c('0x24')];if(!_0x287464||!_0x287464[_0x5a5c('0x0')])return null;var _0x473ae4=new _0x5ba11e(_0x2ff6bd);return _0x287464[_0x5a5c('0x2f')](function(_0x54470f){return _0x473ae4[_0x5a5c('0xf')](_0x54470f[_0x5a5c('0xd')]);});}}});}function parseDate(_0x15d2db){return new Date(_0x15d2db*0x3e8);}export{setScriptKey,validatePackage};\n","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { __decorate, __metadata } from 'tslib';\nimport { isDevMode, HostBinding, Input, EventEmitter, Output, ViewChild, ElementRef, Component, NgZone, Renderer2, NgModule } from '@angular/core';\nimport { validatePackage } from '@progress/kendo-licensing';\nimport { LocalizationService, L10N_PREFIX } from '@progress/kendo-angular-l10n';\nimport { hasObservers } from '@progress/kendo-angular-common';\nimport { CommonModule } from '@angular/common';\n\n/**\n * @hidden\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc2 from '@angular/common';\n\nconst _c0 = [\"progressStatus\"];\nconst _c1 = [\"progressStatusWrap\"];\nfunction ProgressBarComponent_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r0 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r0.formattedLabelValue);\n} }\nfunction ProgressBarComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r3 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r3.formattedLabelValue);\n} }\nfunction ChunkProgressBarComponent_li_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"li\", 2);\n} if (rf & 2) {\n const chunk_r5 = ctx.$implicit;\n const i_r6 = ctx.index;\n const ctx_r4 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r4.orientationStyles.width)(\"height\", ctx_r4.orientationStyles.height);\n ɵngcc0.ɵɵclassProp(\"k-first\", i_r6 === 0)(\"k-last\", i_r6 === ctx_r4.chunkCount - 1)(\"k-state-selected\", chunk_r5);\n ɵngcc0.ɵɵproperty(\"ngClass\", chunk_r5 ? ctx_r4.progressCssClass : ctx_r4.emptyCssClass)(\"ngStyle\", chunk_r5 ? ctx_r4.progressCssStyle : ctx_r4.emptyCssStyle);\n} }\nconst packageMetadata = {\n name: '@progress/kendo-angular-progressbar',\n productName: 'Kendo UI for Angular',\n productCodes: ['KENDOUIANGULAR', 'KENDOUICOMPLETE'],\n publishDate: 1620215030,\n version: '',\n licensingDocsUrl: 'https://www.telerik.com/kendo-angular-ui/my-license/?utm_medium=product&utm_source=kendoangular&utm_campaign=kendo-ui-angular-purchase-license-keys-warning'\n};\n\n/**\n * @hidden\n */\nconst MIN_MAX_ERROR_MESSAGE = `The max value should be greater than the min.`;\n/**\n * @hidden\n */\nconst LABEL_DECIMALS = 3;\n/**\n * @hidden\n */\nconst MIN_RATIO = 0.0001;\n\n/**\n * @hidden\n */\nconst reverseChunks = (orientation, reverse) => (orientation === 'vertical' && !reverse || orientation === 'horizontal' && reverse);\n/**\n * @hidden\n */\nconst formatValue = (value, min, max, label) => {\n const defaultFormattedValue = truncateNumber(value);\n if (typeof label !== 'boolean') {\n if (typeof label.format === 'string') {\n switch (label.format) {\n case 'value':\n return defaultFormattedValue;\n case 'percent':\n return `${Math.floor(calculatePercentage(value, min, max))}%`;\n default:\n return defaultFormattedValue;\n }\n }\n else if (typeof label.format === 'function') {\n return label.format(value);\n }\n else {\n return defaultFormattedValue;\n }\n }\n return defaultFormattedValue;\n};\n/**\n * @hidden\n */\nconst validateRange = (min, max) => {\n if (isDevMode && min > max) {\n throw new Error(MIN_MAX_ERROR_MESSAGE);\n }\n};\n/**\n * @hidden\n */\nconst adjustValueToRange = (min, max, value) => Math.max(Math.min(value, max), min);\n/**\n * @hidden\n */\nconst calculatePercentage = (value, min, max) => {\n const onePercent = Math.abs((max - min) / 100);\n return Math.abs((value - min) / onePercent);\n};\n/**\n * @hidden\n */\nconst truncateNumber = (value) => {\n const numberParts = value.toString().split('.');\n return numberParts.length === 1 ? `${numberParts[0]}` : `${numberParts[0]}.${numberParts[1].substr(0, LABEL_DECIMALS)}`;\n};\n/**\n * @hidden\n */\nconst calculateRatio = (min, max, value) => Math.max((value - min) / (max - min), MIN_RATIO);\n/**\n * @hidden\n */\nconst extractValueFromChanges = (changes, type, value) => changes[type] && changes[type].currentValue !== undefined ? changes[type].currentValue : value;\n/**\n * @hidden\n */\nconst runAnimation = (changes, animation, previousValue, displayValue) => animation && typeof requestAnimationFrame !== 'undefined' && changes.value && previousValue !== displayValue;\n/**\n * @hidden\n */\nconst stopCurrentAnimation = (changes) => {\n const isAnimationChanged = Boolean(changes.animation);\n const hasAnimation = isAnimationChanged && changes.animation.currentValue;\n return isAnimationChanged && !hasAnimation;\n};\n\n/**\n * @hidden\n */\nclass ProgressBarBase {\n /**\n * @hidden\n */\n constructor(localization) {\n this.localization = localization;\n this.widgetClasses = true;\n this.roleAttribute = 'progressbar';\n /**\n * The maximum value of the ProgressBar.\n * Defaults to `100`.\n */\n this.max = 100;\n /**\n * The minimum value of the ProgressBar.\n * Defaults to `0`.\n */\n this.min = 0;\n /**\n * The value of the ProgressBar.\n * Has to be between `min` and `max`.\n * By default, the value is equal to the `min` value.\n */\n /**\n * The value of the ProgressBar.\n * Has to be between `min` and `max`.\n * Defaults to `0`.\n */\n this.value = 0;\n /**\n * Defines the orientation of the ProgressBar\n * ([see example]({% slug progressbar_orientation %})).\n * Defaults to `horizontal`.\n */\n this.orientation = 'horizontal';\n /**\n * If set to `true`, the ProgressBar will be disabled\n * ([see example]({% slug progressbar_disabled %})).\n * It will still allow you to change its value.\n * Defaults to `false`.\n */\n this.disabled = false;\n /**\n * If set to `true`, the ProgressBar will be reversed\n * ([see example]({% slug progressbar_direction %})).\n * Defaults to `false`.\n */\n this.reverse = false;\n /**\n * Sets the `indeterminate` state of the ProgressBar.\n * Defaults to `false`.\n */\n this.indeterminate = false;\n this.displayValue = 0;\n this.previousValue = 0;\n validatePackage(packageMetadata);\n this.localizationChangeSubscription = localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n }\n get isHorizontal() {\n return this.orientation === 'horizontal';\n }\n get isVertical() {\n return this.orientation === 'vertical';\n }\n get disabledClass() {\n return this.disabled;\n }\n get reverseClass() {\n return this.reverse;\n }\n get indeterminateClass() {\n return this.indeterminate;\n }\n get dirAttribute() {\n return this.direction;\n }\n get ariaMinAttribute() {\n return String(this.min);\n }\n get ariaMaxAttribute() {\n return String(this.max);\n }\n get ariaValueAttribute() {\n return this.indeterminate ? undefined : String(this.displayValue);\n }\n /**\n * @hidden\n */\n get isCompleted() {\n return this.value === this.max;\n }\n /**\n * @hidden\n */\n get statusWidth() {\n return this.orientation === 'horizontal' ? this._progressRatio * 100 : 100;\n }\n /**\n * @hidden\n */\n get statusHeight() {\n return this.orientation === 'vertical' ? this._progressRatio * 100 : 100;\n }\n /**\n * @hidden\n */\n get statusWrapperWidth() {\n return this.orientation === 'horizontal' ? 100 / this._progressRatio : 100;\n }\n /**\n * @hidden\n */\n get statusWrapperHeight() {\n return this.orientation === 'vertical' ? 100 / this._progressRatio : 100;\n }\n get _progressRatio() {\n return calculateRatio(this.min, this.max, this.displayValue);\n }\n ngOnChanges(changes) {\n const min = extractValueFromChanges(changes, 'min', this.min);\n const max = extractValueFromChanges(changes, 'max', this.max);\n const value = extractValueFromChanges(changes, 'value', this.value);\n if (changes.min || changes.max || changes.value) {\n if (changes.min || changes.max) {\n validateRange(min, max);\n }\n if (changes.value) {\n if (value == null || Number.isNaN(value)) {\n this.value = min;\n }\n const previousValue = this.displayValue;\n this.displayValue = adjustValueToRange(this.min, this.max, value);\n this.previousValue = previousValue;\n }\n this.min = min;\n this.max = max;\n this.displayValue = adjustValueToRange(this.min, this.max, value);\n }\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n}\nProgressBarBase.ɵfac = function ProgressBarBase_Factory(t) { ɵngcc0.ɵɵinvalidFactory(); };\nProgressBarBase.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: ProgressBarBase, hostVars: 19, hostBindings: function ProgressBarBase_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.roleAttribute)(\"dir\", ctx.dirAttribute)(\"aria-valuemin\", ctx.ariaMinAttribute)(\"aria-valuemax\", ctx.ariaMaxAttribute)(\"aria-valuenow\", ctx.ariaValueAttribute);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.widgetClasses)(\"k-progressbar\", ctx.widgetClasses)(\"k-progressbar-horizontal\", ctx.isHorizontal)(\"k-progressbar-vertical\", ctx.isVertical)(\"k-state-disabled\", ctx.disabledClass)(\"k-progressbar-reverse\", ctx.reverseClass)(\"k-progressbar-indeterminate\", ctx.indeterminateClass);\n } }, inputs: { max: \"max\", min: \"min\", value: \"value\", orientation: \"orientation\", disabled: \"disabled\", reverse: \"reverse\", indeterminate: \"indeterminate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature] });\n__decorate([\n HostBinding('class.k-widget'),\n HostBinding('class.k-progressbar'),\n __metadata(\"design:type\", Boolean)\n], ProgressBarBase.prototype, \"widgetClasses\", void 0);\n__decorate([\n HostBinding('class.k-progressbar-horizontal'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"isHorizontal\", null);\n__decorate([\n HostBinding('class.k-progressbar-vertical'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"isVertical\", null);\n__decorate([\n HostBinding('class.k-state-disabled'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"disabledClass\", null);\n__decorate([\n HostBinding('class.k-progressbar-reverse'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"reverseClass\", null);\n__decorate([\n HostBinding('class.k-progressbar-indeterminate'),\n __metadata(\"design:type\", Boolean),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"indeterminateClass\", null);\n__decorate([\n HostBinding('attr.dir'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"dirAttribute\", null);\n__decorate([\n HostBinding('attr.role'),\n __metadata(\"design:type\", String)\n], ProgressBarBase.prototype, \"roleAttribute\", void 0);\n__decorate([\n HostBinding('attr.aria-valuemin'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"ariaMinAttribute\", null);\n__decorate([\n HostBinding('attr.aria-valuemax'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"ariaMaxAttribute\", null);\n__decorate([\n HostBinding('attr.aria-valuenow'),\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], ProgressBarBase.prototype, \"ariaValueAttribute\", null);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ProgressBarBase.prototype, \"max\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ProgressBarBase.prototype, \"min\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ProgressBarBase.prototype, \"value\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", String)\n], ProgressBarBase.prototype, \"orientation\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ProgressBarBase.prototype, \"disabled\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ProgressBarBase.prototype, \"reverse\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Boolean)\n], ProgressBarBase.prototype, \"indeterminate\", void 0);\n\n/**\n * Represents the [Kendo UI ProgressBar component for Angular]({% slug overview_progressbar %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public value = 50;\n * }\n * ```\n */\nlet ProgressBarComponent = class ProgressBarComponent extends ProgressBarBase {\n /**\n * @hidden\n */\n constructor(localization, zone, renderer) {\n super(localization);\n this.localization = localization;\n this.zone = zone;\n this.renderer = renderer;\n /**\n * Determines whether the status label will be visible.\n * Defaults to `true`—the label will be visible and displayed with the default\n * `LabelSettings` having its position set to `end` and its format set to `value`.\n */\n this.label = true;\n /**\n * The animation configuration of the ProgressBar.\n * Defaults to `false`.\n */\n this.animation = false;\n /**\n * Fires when the animation which indicates the latest value change is completed.\n */\n this.animationEnd = new EventEmitter();\n }\n /**\n * @hidden\n */\n get showLabel() {\n if (typeof this.label === 'boolean') {\n return this.label;\n }\n else {\n if (this.label && !this.label.hasOwnProperty('visible')) {\n this.label.visible = true;\n }\n return this.label.visible;\n }\n }\n /**\n * @hidden\n */\n get labelPosition() {\n if (typeof this.label === 'boolean') {\n return 'end';\n }\n else {\n if (this.label && !this.label.hasOwnProperty('position')) {\n this.label.position = 'end';\n }\n return this.label.position;\n }\n }\n /**\n * @hidden\n */\n get isPositionStart() {\n return this.labelPosition === 'start';\n }\n /**\n * @hidden\n */\n get isPositionCenter() {\n return this.labelPosition === 'center';\n }\n /**\n * @hidden\n */\n get isPositionEnd() {\n return this.labelPosition === 'end';\n }\n /**\n * @hidden\n */\n get formattedLabelValue() {\n return formatValue(this.displayValue, this.min, this.max, this.label);\n }\n /**\n * @hidden\n */\n ngOnChanges(changes) {\n super.ngOnChanges(changes);\n if (this.isAnimationInProgress && stopCurrentAnimation(changes)) {\n this.cancelCurrentAnimation = true;\n }\n if (runAnimation(changes, this.animation, this.previousValue, this.displayValue) && !changes.value.firstChange) {\n this.startAnimation(this.previousValue);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n }\n /**\n * @hidden\n */\n startAnimation(previousValue) {\n this.isAnimationInProgress = true;\n const element = this.progressStatusElement.nativeElement;\n const wrapperElement = this.progressStatusWrapperElement.nativeElement;\n const animationOptions = this.getAnimationOptions(previousValue);\n this.zone.runOutsideAngular(() => {\n if (this.animationFrame) {\n cancelAnimationFrame(this.animationFrame);\n }\n const animate = () => {\n const elapsed = new Date().getTime() - animationOptions.startTime;\n const position = Math.min(elapsed / animationOptions.duration, 1);\n const size = animationOptions.startSize + animationOptions.deltaSize * position;\n const wrapperSize = (100 / size) * 100;\n this.renderValueChange(element, wrapperElement, animationOptions.property, size, wrapperSize);\n if (position < 1) {\n if (this.cancelCurrentAnimation) {\n this.resetProgress(element, wrapperElement, animationOptions.property);\n return;\n }\n this.animationFrame = requestAnimationFrame(animate);\n }\n else {\n this.stopAnimation(previousValue);\n }\n };\n animate();\n });\n }\n /**\n * @hidden\n */\n get animationDuration() {\n if (typeof this.animation === 'boolean') {\n return 400;\n }\n else {\n if (this.animation && !this.animation.hasOwnProperty('duration')) {\n this.animation.duration = 400;\n }\n return this.animation.duration;\n }\n }\n stopAnimation(value) {\n if (hasObservers(this.animationEnd)) {\n this.zone.run(() => {\n this.animationEnd.emit({\n from: value,\n to: this.displayValue\n });\n });\n }\n this.zone.run(() => {\n this.isAnimationInProgress = false;\n });\n }\n getAnimationOptions(value) {\n const isHorizontal = this.orientation === 'horizontal';\n const previousRatio = calculateRatio(this.min, this.max, value);\n const previousStatusWidth = isHorizontal ? previousRatio * 100 : 100;\n const previousStatusHeight = !isHorizontal ? previousRatio * 100 : 100;\n const property = isHorizontal ? 'width' : 'height';\n const startTime = new Date().getTime();\n const startSize = isHorizontal ? previousStatusWidth : previousStatusHeight;\n const deltaSize = isHorizontal ? this.statusWidth - previousStatusWidth : this.statusHeight - previousStatusHeight;\n const duration = this.animationDuration * Math.abs((deltaSize / 100));\n return {\n property,\n startTime,\n startSize,\n deltaSize,\n duration\n };\n }\n renderValueChange(element, wrapperElement, property, size, wrapperSize) {\n this.renderer.setStyle(element, property, size + '%');\n this.renderer.setStyle(wrapperElement, property, wrapperSize + '%');\n }\n resetProgress(element, wrapperElement, property) {\n const size = calculateRatio(this.min, this.max, this.value);\n const newSize = size * 100;\n const newWrapperSize = 100 / size;\n this.renderValueChange(element, wrapperElement, property, newSize, newWrapperSize);\n this.zone.run(() => {\n this.cancelCurrentAnimation = false;\n this.isAnimationInProgress = false;\n });\n }\n};\nProgressBarComponent.ɵfac = function ProgressBarComponent_Factory(t) { return new (t || ProgressBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nProgressBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ProgressBarComponent, selectors: [[\"kendo-progressbar\"]], viewQuery: function ProgressBarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(_c1, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.progressStatusElement = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.progressStatusWrapperElement = _t.first);\n } }, inputs: { label: \"label\", animation: \"animation\", progressCssStyle: \"progressCssStyle\", progressCssClass: \"progressCssClass\", emptyCssStyle: \"emptyCssStyle\", emptyCssClass: \"emptyCssClass\" }, outputs: { animationEnd: \"animationEnd\" }, exportAs: [\"kendoProgressBar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.progressbar'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature, ɵngcc0.ɵɵNgOnChangesFeature], decls: 7, vars: 28, consts: [[1, \"k-progress-status-wrap\", 3, \"ngStyle\", \"ngClass\"], [\"class\", \"k-progress-status\", 4, \"ngIf\"], [1, \"k-state-selected\", 3, \"ngStyle\", \"ngClass\"], [\"progressStatus\", \"\"], [1, \"k-progress-status-wrap\"], [\"progressStatusWrap\", \"\"], [1, \"k-progress-status\"]], template: function ProgressBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 0);\n ɵngcc0.ɵɵtemplate(1, ProgressBarComponent_span_1_Template, 2, 1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementStart(2, \"div\", 2, 3);\n ɵngcc0.ɵɵelementStart(4, \"span\", 4, 5);\n ɵngcc0.ɵɵtemplate(6, ProgressBarComponent_span_6_Template, 2, 1, \"span\", 1);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-progress-start\", ctx.isPositionStart)(\"k-progress-center\", ctx.isPositionCenter)(\"k-progress-end\", ctx.isPositionEnd);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.emptyCssStyle)(\"ngClass\", ctx.emptyCssClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showLabel);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.statusWidth, \"%\")(\"height\", ctx.statusHeight, \"%\");\n ɵngcc0.ɵɵclassProp(\"k-complete\", ctx.isCompleted);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx.progressCssStyle)(\"ngClass\", ctx.progressCssClass);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.statusWrapperWidth, \"%\")(\"height\", ctx.statusWrapperHeight, \"%\");\n ɵngcc0.ɵɵclassProp(\"k-progress-start\", ctx.isPositionStart)(\"k-progress-center\", ctx.isPositionCenter)(\"k-progress-end\", ctx.isPositionEnd);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.showLabel);\n } }, directives: [ɵngcc2.NgStyle, ɵngcc2.NgClass, ɵngcc2.NgIf], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"label\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"progressCssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"progressCssClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"emptyCssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"emptyCssClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ProgressBarComponent.prototype, \"animation\", void 0);\n__decorate([\n Output(),\n __metadata(\"design:type\", EventEmitter)\n], ProgressBarComponent.prototype, \"animationEnd\", void 0);\n__decorate([\n ViewChild('progressStatus', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ProgressBarComponent.prototype, \"progressStatusElement\", void 0);\n__decorate([\n ViewChild('progressStatusWrap', { static: false }),\n __metadata(\"design:type\", ElementRef)\n], ProgressBarComponent.prototype, \"progressStatusWrapperElement\", void 0);\nProgressBarComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService,\n NgZone,\n Renderer2])\n], ProgressBarComponent);\n\n/**\n * Represents the [Kendo UI ChunkProgressBar component for Angular]({% slug overview_chunkprogressbar %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public value = 40;\n * }\n * ```\n */\nlet ChunkProgressBarComponent = class ChunkProgressBarComponent extends ProgressBarBase {\n /**\n * @hidden\n */\n constructor(localization) {\n super(localization);\n this.localization = localization;\n /**\n * Sets the number of chunks into which the ChunkProgressBar will be split.\n * Defaults to `5`.\n */\n this.chunkCount = 5;\n this._orientationStyles = {\n width: `${this.chunkSizePercentage}%`\n };\n }\n /**\n * @hidden\n */\n get chunks() {\n const count = this.chunkCount;\n const chunks = Array(count).fill(false);\n const completedChunks = Math.floor(this._progressRatio * count);\n for (let i = 0; i < completedChunks; i++) {\n chunks[i] = true;\n }\n if (reverseChunks(this.orientation, this.reverse)) {\n chunks.reverse();\n }\n return chunks;\n }\n /**\n * @hidden\n */\n get chunkSizePercentage() {\n return 100 / this.chunkCount;\n }\n /**\n * @hidden\n */\n get orientationStyles() {\n if (this.orientation === 'horizontal') {\n this._orientationStyles.width = `${this.chunkSizePercentage}%`;\n this._orientationStyles.height = undefined;\n }\n else {\n this._orientationStyles.height = `${this.chunkSizePercentage}%`;\n this._orientationStyles.width = undefined;\n }\n return this._orientationStyles;\n }\n};\nChunkProgressBarComponent.ɵfac = function ChunkProgressBarComponent_Factory(t) { return new (t || ChunkProgressBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc1.LocalizationService)); };\nChunkProgressBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: ChunkProgressBarComponent, selectors: [[\"kendo-chunkprogressbar\"]], inputs: { chunkCount: \"chunkCount\", progressCssStyle: \"progressCssStyle\", progressCssClass: \"progressCssClass\", emptyCssStyle: \"emptyCssStyle\", emptyCssClass: \"emptyCssClass\" }, exportAs: [\"kendoChunkProgressBar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chunkprogressbar'\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 2, vars: 1, consts: [[1, \"k-reset\"], [\"class\", \"k-item\", 3, \"k-first\", \"k-last\", \"k-state-selected\", \"ngClass\", \"ngStyle\", \"width\", \"height\", 4, \"ngFor\", \"ngForOf\"], [1, \"k-item\", 3, \"ngClass\", \"ngStyle\"]], template: function ChunkProgressBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"ul\", 0);\n ɵngcc0.ɵɵtemplate(1, ChunkProgressBarComponent_li_1_Template, 1, 12, \"li\", 1);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.chunks);\n } }, directives: [ɵngcc2.NgForOf, ɵngcc2.NgClass, ɵngcc2.NgStyle], encapsulation: 2 });\n__decorate([\n Input(),\n __metadata(\"design:type\", Number)\n], ChunkProgressBarComponent.prototype, \"chunkCount\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChunkProgressBarComponent.prototype, \"progressCssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChunkProgressBarComponent.prototype, \"progressCssClass\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChunkProgressBarComponent.prototype, \"emptyCssStyle\", void 0);\n__decorate([\n Input(),\n __metadata(\"design:type\", Object)\n], ChunkProgressBarComponent.prototype, \"emptyCssClass\", void 0);\nChunkProgressBarComponent = __decorate([ __metadata(\"design:paramtypes\", [LocalizationService])\n], ChunkProgressBarComponent);\n\nconst COMPONENT_DIRECTIVES = [ProgressBarComponent, ChunkProgressBarComponent];\nconst MODULES = [CommonModule];\n/**\n * @hidden\n */\nlet ProgressBarModule = class ProgressBarModule {\n};\nProgressBarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: ProgressBarModule });\nProgressBarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function ProgressBarModule_Factory(t) { return new (t || ProgressBarModule)(); }, imports: [MODULES] });\n\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ProgressBarComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoProgressBar',\n selector: 'kendo-progressbar',\n template: `\n \n {{formattedLabelValue}}\n \n \n \n {{formattedLabelValue}}\n \n
\n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.progressbar'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.Renderer2 }]; }, { label: [{\n type: Input\n }], animation: [{\n type: Input\n }], animationEnd: [{\n type: Output\n }], progressCssStyle: [{\n type: Input\n }], progressCssClass: [{\n type: Input\n }], emptyCssStyle: [{\n type: Input\n }], emptyCssClass: [{\n type: Input\n }], progressStatusElement: [{\n type: ViewChild,\n args: ['progressStatus', { static: false }]\n }], progressStatusWrapperElement: [{\n type: ViewChild,\n args: ['progressStatusWrap', { static: false }]\n }] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ChunkProgressBarComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoChunkProgressBar',\n selector: 'kendo-chunkprogressbar',\n template: `\n
    \n
  • \n
  • \n
\n `,\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.chunkprogressbar'\n }\n ]\n }]\n }], function () { return [{ type: ɵngcc1.LocalizationService }]; }, { chunkCount: [{\n type: Input\n }], progressCssStyle: [{\n type: Input\n }], progressCssClass: [{\n type: Input\n }], emptyCssStyle: [{\n type: Input\n }], emptyCssClass: [{\n type: Input\n }] }); })();\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(ProgressBarModule, { declarations: [ProgressBarComponent,\n ChunkProgressBarComponent], imports: [CommonModule], exports: [ProgressBarComponent,\n ChunkProgressBarComponent] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(ProgressBarModule, [{\n type: NgModule,\n args: [{\n declarations: COMPONENT_DIRECTIVES,\n exports: COMPONENT_DIRECTIVES,\n imports: MODULES\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ProgressBarBase, ProgressBarComponent, ChunkProgressBarComponent, ProgressBarModule };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OE1BQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0ZBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0EyQ0c7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OzJGQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQTBCRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9zQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBfX2RlY29yYXRlLCBfX21ldGFkYXRhIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaXNEZXZNb2RlLCBIb3N0QmluZGluZywgSW5wdXQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIENvbXBvbmVudCwgTmdab25lLCBSZW5kZXJlcjIsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZVBhY2thZ2UgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tbGljZW5zaW5nJztcbmltcG9ydCB7IExvY2FsaXphdGlvblNlcnZpY2UsIEwxME5fUFJFRklYIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbDEwbic7XG5pbXBvcnQgeyBoYXNPYnNlcnZlcnMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHBhY2thZ2VNZXRhZGF0YSA9IHtcbiAgICBuYW1lOiAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItcHJvZ3Jlc3NiYXInLFxuICAgIHByb2R1Y3ROYW1lOiAnS2VuZG8gVUkgZm9yIEFuZ3VsYXInLFxuICAgIHByb2R1Y3RDb2RlczogWydLRU5ET1VJQU5HVUxBUicsICdLRU5ET1VJQ09NUExFVEUnXSxcbiAgICBwdWJsaXNoRGF0ZTogMTYyMDIxNTAzMCxcbiAgICB2ZXJzaW9uOiAnJyxcbiAgICBsaWNlbnNpbmdEb2NzVXJsOiAnaHR0cHM6Ly93d3cudGVsZXJpay5jb20va2VuZG8tYW5ndWxhci11aS9teS1saWNlbnNlLz91dG1fbWVkaXVtPXByb2R1Y3QmdXRtX3NvdXJjZT1rZW5kb2FuZ3VsYXImdXRtX2NhbXBhaWduPWtlbmRvLXVpLWFuZ3VsYXItcHVyY2hhc2UtbGljZW5zZS1rZXlzLXdhcm5pbmcnXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTUlOX01BWF9FUlJPUl9NRVNTQUdFID0gYFRoZSBtYXggdmFsdWUgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB0aGUgbWluLmA7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgTEFCRUxfREVDSU1BTFMgPSAzO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IE1JTl9SQVRJTyA9IDAuMDAwMTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJldmVyc2VDaHVua3MgPSAob3JpZW50YXRpb24sIHJldmVyc2UpID0+IChvcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJyAmJiAhcmV2ZXJzZSB8fCBvcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnICYmIHJldmVyc2UpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGZvcm1hdFZhbHVlID0gKHZhbHVlLCBtaW4sIG1heCwgbGFiZWwpID0+IHtcbiAgICBjb25zdCBkZWZhdWx0Rm9ybWF0dGVkVmFsdWUgPSB0cnVuY2F0ZU51bWJlcih2YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiBsYWJlbCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbGFiZWwuZm9ybWF0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgc3dpdGNoIChsYWJlbC5mb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XG4gICAgICAgICAgICAgICAgY2FzZSAncGVyY2VudCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLmZsb29yKGNhbGN1bGF0ZVBlcmNlbnRhZ2UodmFsdWUsIG1pbiwgbWF4KSl9JWA7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZWRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgbGFiZWwuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFiZWwuZm9ybWF0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9ybWF0dGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRGb3JtYXR0ZWRWYWx1ZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgdmFsaWRhdGVSYW5nZSA9IChtaW4sIG1heCkgPT4ge1xuICAgIGlmIChpc0Rldk1vZGUgJiYgbWluID4gbWF4KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihNSU5fTUFYX0VSUk9SX01FU1NBR0UpO1xuICAgIH1cbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgYWRqdXN0VmFsdWVUb1JhbmdlID0gKG1pbiwgbWF4LCB2YWx1ZSkgPT4gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIG1heCksIG1pbik7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgY2FsY3VsYXRlUGVyY2VudGFnZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICBjb25zdCBvbmVQZXJjZW50ID0gTWF0aC5hYnMoKG1heCAtIG1pbikgLyAxMDApO1xuICAgIHJldHVybiBNYXRoLmFicygodmFsdWUgLSBtaW4pIC8gb25lUGVyY2VudCk7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHRydW5jYXRlTnVtYmVyID0gKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgbnVtYmVyUGFydHMgPSB2YWx1ZS50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgcmV0dXJuIG51bWJlclBhcnRzLmxlbmd0aCA9PT0gMSA/IGAke251bWJlclBhcnRzWzBdfWAgOiBgJHtudW1iZXJQYXJ0c1swXX0uJHtudW1iZXJQYXJ0c1sxXS5zdWJzdHIoMCwgTEFCRUxfREVDSU1BTFMpfWA7XG59O1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGNhbGN1bGF0ZVJhdGlvID0gKG1pbiwgbWF4LCB2YWx1ZSkgPT4gTWF0aC5tYXgoKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pLCBNSU5fUkFUSU8pO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IGV4dHJhY3RWYWx1ZUZyb21DaGFuZ2VzID0gKGNoYW5nZXMsIHR5cGUsIHZhbHVlKSA9PiBjaGFuZ2VzW3R5cGVdICYmIGNoYW5nZXNbdHlwZV0uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQgPyBjaGFuZ2VzW3R5cGVdLmN1cnJlbnRWYWx1ZSA6IHZhbHVlO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHJ1bkFuaW1hdGlvbiA9IChjaGFuZ2VzLCBhbmltYXRpb24sIHByZXZpb3VzVmFsdWUsIGRpc3BsYXlWYWx1ZSkgPT4gYW5pbWF0aW9uICYmIHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICd1bmRlZmluZWQnICYmIGNoYW5nZXMudmFsdWUgJiYgcHJldmlvdXNWYWx1ZSAhPT0gZGlzcGxheVZhbHVlO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IHN0b3BDdXJyZW50QW5pbWF0aW9uID0gKGNoYW5nZXMpID0+IHtcbiAgICBjb25zdCBpc0FuaW1hdGlvbkNoYW5nZWQgPSBCb29sZWFuKGNoYW5nZXMuYW5pbWF0aW9uKTtcbiAgICBjb25zdCBoYXNBbmltYXRpb24gPSBpc0FuaW1hdGlvbkNoYW5nZWQgJiYgY2hhbmdlcy5hbmltYXRpb24uY3VycmVudFZhbHVlO1xuICAgIHJldHVybiBpc0FuaW1hdGlvbkNoYW5nZWQgJiYgIWhhc0FuaW1hdGlvbjtcbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQcm9ncmVzc0JhckJhc2Uge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMud2lkZ2V0Q2xhc3NlcyA9IHRydWU7XG4gICAgICAgIHRoaXMucm9sZUF0dHJpYnV0ZSA9ICdwcm9ncmVzc2Jhcic7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbWF4aW11bSB2YWx1ZSBvZiB0aGUgUHJvZ3Jlc3NCYXIuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGAxMDBgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5tYXggPSAxMDA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgUHJvZ3Jlc3NCYXIuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGAwYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWluID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoZSB2YWx1ZSBvZiB0aGUgUHJvZ3Jlc3NCYXIuXG4gICAgICAgICAqIEhhcyB0byBiZSBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YC5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgdGhlIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBgbWluYCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgdmFsdWUgb2YgdGhlIFByb2dyZXNzQmFyLlxuICAgICAgICAgKiBIYXMgdG8gYmUgYmV0d2VlbiBgbWluYCBhbmQgYG1heGAuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGAwYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmFsdWUgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIFByb2dyZXNzQmFyXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcHJvZ3Jlc3NiYXJfb3JpZW50YXRpb24gJX0pKS5cbiAgICAgICAgICogRGVmYXVsdHMgdG8gYGhvcml6b250YWxgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBQcm9ncmVzc0JhciB3aWxsIGJlIGRpc2FibGVkXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcHJvZ3Jlc3NiYXJfZGlzYWJsZWQgJX0pKS5cbiAgICAgICAgICogSXQgd2lsbCBzdGlsbCBhbGxvdyB5b3UgdG8gY2hhbmdlIGl0cyB2YWx1ZS5cbiAgICAgICAgICogRGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHNldCB0byBgdHJ1ZWAsIHRoZSBQcm9ncmVzc0JhciB3aWxsIGJlIHJldmVyc2VkXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgcHJvZ3Jlc3NiYXJfZGlyZWN0aW9uICV9KSkuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGBpbmRldGVybWluYXRlYCBzdGF0ZSBvZiB0aGUgUHJvZ3Jlc3NCYXIuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSAwO1xuICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSAwO1xuICAgICAgICB2YWxpZGF0ZVBhY2thZ2UocGFja2FnZU1ldGFkYXRhKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSBsb2NhbGl6YXRpb24uY2hhbmdlcy5zdWJzY3JpYmUoKHsgcnRsIH0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gcnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIGdldCBpc1ZlcnRpY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICB9XG4gICAgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgcmV2ZXJzZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXZlcnNlO1xuICAgIH1cbiAgICBnZXQgaW5kZXRlcm1pbmF0ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlO1xuICAgIH1cbiAgICBnZXQgZGlyQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXJlY3Rpb247XG4gICAgfVxuICAgIGdldCBhcmlhTWluQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHRoaXMubWluKTtcbiAgICB9XG4gICAgZ2V0IGFyaWFNYXhBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodGhpcy5tYXgpO1xuICAgIH1cbiAgICBnZXQgYXJpYVZhbHVlQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlID8gdW5kZWZpbmVkIDogU3RyaW5nKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc0NvbXBsZXRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IHRoaXMubWF4O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHN0YXR1c1dpZHRoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gdGhpcy5fcHJvZ3Jlc3NSYXRpbyAqIDEwMCA6IDEwMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzdGF0dXNIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gdGhpcy5fcHJvZ3Jlc3NSYXRpbyAqIDEwMCA6IDEwMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBzdGF0dXNXcmFwcGVyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyAxMDAgLyB0aGlzLl9wcm9ncmVzc1JhdGlvIDogMTAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHN0YXR1c1dyYXBwZXJIZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnID8gMTAwIC8gdGhpcy5fcHJvZ3Jlc3NSYXRpbyA6IDEwMDtcbiAgICB9XG4gICAgZ2V0IF9wcm9ncmVzc1JhdGlvKCkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlUmF0aW8odGhpcy5taW4sIHRoaXMubWF4LCB0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgbWluID0gZXh0cmFjdFZhbHVlRnJvbUNoYW5nZXMoY2hhbmdlcywgJ21pbicsIHRoaXMubWluKTtcbiAgICAgICAgY29uc3QgbWF4ID0gZXh0cmFjdFZhbHVlRnJvbUNoYW5nZXMoY2hhbmdlcywgJ21heCcsIHRoaXMubWF4KTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBleHRyYWN0VmFsdWVGcm9tQ2hhbmdlcyhjaGFuZ2VzLCAndmFsdWUnLCB0aGlzLnZhbHVlKTtcbiAgICAgICAgaWYgKGNoYW5nZXMubWluIHx8IGNoYW5nZXMubWF4IHx8IGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLm1pbiB8fCBjaGFuZ2VzLm1heCkge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRlUmFuZ2UobWluLCBtYXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCBOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSBtaW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzVmFsdWUgPSB0aGlzLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGFkanVzdFZhbHVlVG9SYW5nZSh0aGlzLm1pbiwgdGhpcy5tYXgsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzVmFsdWUgPSBwcmV2aW91c1ZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5taW4gPSBtaW47XG4gICAgICAgICAgICB0aGlzLm1heCA9IG1heDtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gYWRqdXN0VmFsdWVUb1JhbmdlKHRoaXMubWluLCB0aGlzLm1heCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5fX2RlY29yYXRlKFtcbiAgICBIb3N0QmluZGluZygnY2xhc3Muay13aWRnZXQnKSxcbiAgICBIb3N0QmluZGluZygnY2xhc3Muay1wcm9ncmVzc2JhcicpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJ3aWRnZXRDbGFzc2VzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBIb3N0QmluZGluZygnY2xhc3Muay1wcm9ncmVzc2Jhci1ob3Jpem9udGFsJyksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbl0sIFByb2dyZXNzQmFyQmFzZS5wcm90b3R5cGUsIFwiaXNIb3Jpem9udGFsXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgSG9zdEJpbmRpbmcoJ2NsYXNzLmstcHJvZ3Jlc3NiYXItdmVydGljYWwnKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJpc1ZlcnRpY2FsXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgSG9zdEJpbmRpbmcoJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJkaXNhYmxlZENsYXNzXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgSG9zdEJpbmRpbmcoJ2NsYXNzLmstcHJvZ3Jlc3NiYXItcmV2ZXJzZScpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBCb29sZWFuKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcInJldmVyc2VDbGFzc1wiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIEhvc3RCaW5kaW5nKCdjbGFzcy5rLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGUnKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJpbmRldGVybWluYXRlQ2xhc3NcIiwgbnVsbCk7XG5fX2RlY29yYXRlKFtcbiAgICBIb3N0QmluZGluZygnYXR0ci5kaXInKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcImRpckF0dHJpYnV0ZVwiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJyb2xlQXR0cmlidXRlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbWluJyksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZyksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtdKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJhcmlhTWluQXR0cmlidXRlXCIsIG51bGwpO1xuX19kZWNvcmF0ZShbXG4gICAgSG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1heCcpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSlcbl0sIFByb2dyZXNzQmFyQmFzZS5wcm90b3R5cGUsIFwiYXJpYU1heEF0dHJpYnV0ZVwiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVub3cnKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW10pXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcImFyaWFWYWx1ZUF0dHJpYnV0ZVwiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIElucHV0KCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE51bWJlcilcbl0sIFByb2dyZXNzQmFyQmFzZS5wcm90b3R5cGUsIFwibWF4XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBOdW1iZXIpXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcIm1pblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgTnVtYmVyKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgU3RyaW5nKVxuXSwgUHJvZ3Jlc3NCYXJCYXNlLnByb3RvdHlwZSwgXCJvcmllbnRhdGlvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgQm9vbGVhbilcbl0sIFByb2dyZXNzQmFyQmFzZS5wcm90b3R5cGUsIFwiZGlzYWJsZWRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIElucHV0KCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcInJldmVyc2VcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIElucHV0KCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEJvb2xlYW4pXG5dLCBQcm9ncmVzc0JhckJhc2UucHJvdG90eXBlLCBcImluZGV0ZXJtaW5hdGVcIiwgdm9pZCAwKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbS2VuZG8gVUkgUHJvZ3Jlc3NCYXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X3Byb2dyZXNzYmFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tcHJvZ3Jlc3NiYXIgW3ZhbHVlXT1cInZhbHVlXCI+XG4gKiAgICAgICAgPC9rZW5kby1wcm9ncmVzc2Jhcj5cbiAqICAgIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgIHB1YmxpYyB2YWx1ZSA9IDUwO1xuICogfVxuICogYGBgXG4gKi9cbmxldCBQcm9ncmVzc0JhckNvbXBvbmVudCA9IGNsYXNzIFByb2dyZXNzQmFyQ29tcG9uZW50IGV4dGVuZHMgUHJvZ3Jlc3NCYXJCYXNlIHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IobG9jYWxpemF0aW9uLCB6b25lLCByZW5kZXJlcikge1xuICAgICAgICBzdXBlcihsb2NhbGl6YXRpb24pO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy56b25lID0gem9uZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzdGF0dXMgbGFiZWwgd2lsbCBiZSB2aXNpYmxlLlxuICAgICAgICAgKiBEZWZhdWx0cyB0byBgdHJ1ZWAmbWRhc2g7dGhlIGxhYmVsIHdpbGwgYmUgdmlzaWJsZSBhbmQgZGlzcGxheWVkIHdpdGggdGhlIGRlZmF1bHRcbiAgICAgICAgICogYExhYmVsU2V0dGluZ3NgIGhhdmluZyBpdHMgcG9zaXRpb24gc2V0IHRvIGBlbmRgIGFuZCBpdHMgZm9ybWF0IHNldCB0byBgdmFsdWVgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYWJlbCA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgYW5pbWF0aW9uIGNvbmZpZ3VyYXRpb24gb2YgdGhlIFByb2dyZXNzQmFyLlxuICAgICAgICAgKiBEZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGFuaW1hdGlvbiB3aGljaCBpbmRpY2F0ZXMgdGhlIGxhdGVzdCB2YWx1ZSBjaGFuZ2UgaXMgY29tcGxldGVkLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRpb25FbmQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc2hvd0xhYmVsKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFiZWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYWJlbCAmJiAhdGhpcy5sYWJlbC5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZScpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbC52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxhYmVsLnZpc2libGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBsYWJlbFBvc2l0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMubGFiZWwgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuICdlbmQnO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMubGFiZWwgJiYgIXRoaXMubGFiZWwuaGFzT3duUHJvcGVydHkoJ3Bvc2l0aW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsLnBvc2l0aW9uID0gJ2VuZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYWJlbC5wb3NpdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlzUG9zaXRpb25TdGFydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxQb3NpdGlvbiA9PT0gJ3N0YXJ0JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc1Bvc2l0aW9uQ2VudGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbFBvc2l0aW9uID09PSAnY2VudGVyJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpc1Bvc2l0aW9uRW5kKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbFBvc2l0aW9uID09PSAnZW5kJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBmb3JtYXR0ZWRMYWJlbFZhbHVlKCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0VmFsdWUodGhpcy5kaXNwbGF5VmFsdWUsIHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy5sYWJlbCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICBpZiAodGhpcy5pc0FuaW1hdGlvbkluUHJvZ3Jlc3MgJiYgc3RvcEN1cnJlbnRBbmltYXRpb24oY2hhbmdlcykpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuY2VsQ3VycmVudEFuaW1hdGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJ1bkFuaW1hdGlvbihjaGFuZ2VzLCB0aGlzLmFuaW1hdGlvbiwgdGhpcy5wcmV2aW91c1ZhbHVlLCB0aGlzLmRpc3BsYXlWYWx1ZSkgJiYgIWNoYW5nZXMudmFsdWUuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24odGhpcy5wcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgc3RhcnRBbmltYXRpb24ocHJldmlvdXNWYWx1ZSkge1xuICAgICAgICB0aGlzLmlzQW5pbWF0aW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnByb2dyZXNzU3RhdHVzRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB3cmFwcGVyRWxlbWVudCA9IHRoaXMucHJvZ3Jlc3NTdGF0dXNXcmFwcGVyRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBhbmltYXRpb25PcHRpb25zID0gdGhpcy5nZXRBbmltYXRpb25PcHRpb25zKHByZXZpb3VzVmFsdWUpO1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmFuaW1hdGlvbkZyYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gYW5pbWF0aW9uT3B0aW9ucy5zdGFydFRpbWU7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBNYXRoLm1pbihlbGFwc2VkIC8gYW5pbWF0aW9uT3B0aW9ucy5kdXJhdGlvbiwgMSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2l6ZSA9IGFuaW1hdGlvbk9wdGlvbnMuc3RhcnRTaXplICsgYW5pbWF0aW9uT3B0aW9ucy5kZWx0YVNpemUgKiBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyU2l6ZSA9ICgxMDAgLyBzaXplKSAqIDEwMDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlclZhbHVlQ2hhbmdlKGVsZW1lbnQsIHdyYXBwZXJFbGVtZW50LCBhbmltYXRpb25PcHRpb25zLnByb3BlcnR5LCBzaXplLCB3cmFwcGVyU2l6ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvc2l0aW9uIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYW5jZWxDdXJyZW50QW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UHJvZ3Jlc3MoZWxlbWVudCwgd3JhcHBlckVsZW1lbnQsIGFuaW1hdGlvbk9wdGlvbnMucHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoYW5pbWF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24ocHJldmlvdXNWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGFuaW1hdGUoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYW5pbWF0aW9uRHVyYXRpb24oKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbmltYXRpb24gPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgcmV0dXJuIDQwMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbiAmJiAhdGhpcy5hbmltYXRpb24uaGFzT3duUHJvcGVydHkoJ2R1cmF0aW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbi5kdXJhdGlvbiA9IDQwMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFuaW1hdGlvbi5kdXJhdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdG9wQW5pbWF0aW9uKHZhbHVlKSB7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnModGhpcy5hbmltYXRpb25FbmQpKSB7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0aGlzLmRpc3BsYXlWYWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzQW5pbWF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0QW5pbWF0aW9uT3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzUmF0aW8gPSBjYWxjdWxhdGVSYXRpbyh0aGlzLm1pbiwgdGhpcy5tYXgsIHZhbHVlKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXNXaWR0aCA9IGlzSG9yaXpvbnRhbCA/IHByZXZpb3VzUmF0aW8gKiAxMDAgOiAxMDA7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdHVzSGVpZ2h0ID0gIWlzSG9yaXpvbnRhbCA/IHByZXZpb3VzUmF0aW8gKiAxMDAgOiAxMDA7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNIb3Jpem9udGFsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgY29uc3Qgc3RhcnRTaXplID0gaXNIb3Jpem9udGFsID8gcHJldmlvdXNTdGF0dXNXaWR0aCA6IHByZXZpb3VzU3RhdHVzSGVpZ2h0O1xuICAgICAgICBjb25zdCBkZWx0YVNpemUgPSBpc0hvcml6b250YWwgPyB0aGlzLnN0YXR1c1dpZHRoIC0gcHJldmlvdXNTdGF0dXNXaWR0aCA6IHRoaXMuc3RhdHVzSGVpZ2h0IC0gcHJldmlvdXNTdGF0dXNIZWlnaHQ7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5hbmltYXRpb25EdXJhdGlvbiAqIE1hdGguYWJzKChkZWx0YVNpemUgLyAxMDApKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgc3RhcnRUaW1lLFxuICAgICAgICAgICAgc3RhcnRTaXplLFxuICAgICAgICAgICAgZGVsdGFTaXplLFxuICAgICAgICAgICAgZHVyYXRpb25cbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmVuZGVyVmFsdWVDaGFuZ2UoZWxlbWVudCwgd3JhcHBlckVsZW1lbnQsIHByb3BlcnR5LCBzaXplLCB3cmFwcGVyU2l6ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVsZW1lbnQsIHByb3BlcnR5LCBzaXplICsgJyUnKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh3cmFwcGVyRWxlbWVudCwgcHJvcGVydHksIHdyYXBwZXJTaXplICsgJyUnKTtcbiAgICB9XG4gICAgcmVzZXRQcm9ncmVzcyhlbGVtZW50LCB3cmFwcGVyRWxlbWVudCwgcHJvcGVydHkpIHtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGNhbGN1bGF0ZVJhdGlvKHRoaXMubWluLCB0aGlzLm1heCwgdGhpcy52YWx1ZSk7XG4gICAgICAgIGNvbnN0IG5ld1NpemUgPSBzaXplICogMTAwO1xuICAgICAgICBjb25zdCBuZXdXcmFwcGVyU2l6ZSA9IDEwMCAvIHNpemU7XG4gICAgICAgIHRoaXMucmVuZGVyVmFsdWVDaGFuZ2UoZWxlbWVudCwgd3JhcHBlckVsZW1lbnQsIHByb3BlcnR5LCBuZXdTaXplLCBuZXdXcmFwcGVyU2l6ZSk7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jYW5jZWxDdXJyZW50QW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzQW5pbWF0aW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUHJvZ3Jlc3NCYXJDb21wb25lbnQucHJvdG90eXBlLCBcImxhYmVsXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBQcm9ncmVzc0JhckNvbXBvbmVudC5wcm90b3R5cGUsIFwicHJvZ3Jlc3NDc3NTdHlsZVwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUHJvZ3Jlc3NCYXJDb21wb25lbnQucHJvdG90eXBlLCBcInByb2dyZXNzQ3NzQ2xhc3NcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIElucHV0KCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbl0sIFByb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJlbXB0eUNzc1N0eWxlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBQcm9ncmVzc0JhckNvbXBvbmVudC5wcm90b3R5cGUsIFwiZW1wdHlDc3NDbGFzc1wiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgSW5wdXQoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgUHJvZ3Jlc3NCYXJDb21wb25lbnQucHJvdG90eXBlLCBcImFuaW1hdGlvblwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgT3V0cHV0KCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEV2ZW50RW1pdHRlcilcbl0sIFByb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJhbmltYXRpb25FbmRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIFZpZXdDaGlsZCgncHJvZ3Jlc3NTdGF0dXMnLCB7IHN0YXRpYzogZmFsc2UgfSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEVsZW1lbnRSZWYpXG5dLCBQcm9ncmVzc0JhckNvbXBvbmVudC5wcm90b3R5cGUsIFwicHJvZ3Jlc3NTdGF0dXNFbGVtZW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBWaWV3Q2hpbGQoJ3Byb2dyZXNzU3RhdHVzV3JhcCcsIHsgc3RhdGljOiBmYWxzZSB9KSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRWxlbWVudFJlZilcbl0sIFByb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwcm9ncmVzc1N0YXR1c1dyYXBwZXJFbGVtZW50XCIsIHZvaWQgMCk7XG5Qcm9ncmVzc0JhckNvbXBvbmVudCA9IF9fZGVjb3JhdGUoW1xuICAgIENvbXBvbmVudCh7XG4gICAgICAgIGV4cG9ydEFzOiAna2VuZG9Qcm9ncmVzc0JhcicsXG4gICAgICAgIHNlbGVjdG9yOiAna2VuZG8tcHJvZ3Jlc3NiYXInLFxuICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8c3BhbiBjbGFzcz1cImstcHJvZ3Jlc3Mtc3RhdHVzLXdyYXBcIlxuICAgICAgICAgICAgW2NsYXNzLmstcHJvZ3Jlc3Mtc3RhcnRdPVwiaXNQb3NpdGlvblN0YXJ0XCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXByb2dyZXNzLWNlbnRlcl09XCJpc1Bvc2l0aW9uQ2VudGVyXCJcbiAgICAgICAgICAgIFtjbGFzcy5rLXByb2dyZXNzLWVuZF09XCJpc1Bvc2l0aW9uRW5kXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImVtcHR5Q3NzU3R5bGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZW1wdHlDc3NDbGFzc1wiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93TGFiZWxcIiBjbGFzcz1cImstcHJvZ3Jlc3Mtc3RhdHVzXCI+e3tmb3JtYXR0ZWRMYWJlbFZhbHVlfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgI3Byb2dyZXNzU3RhdHVzXG4gICAgICAgICAgICBjbGFzcz1cImstc3RhdGUtc2VsZWN0ZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmstY29tcGxldGVdPVwiaXNDb21wbGV0ZWRcIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwicHJvZ3Jlc3NDc3NTdHlsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJwcm9ncmVzc0Nzc0NsYXNzXCJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cInN0YXR1c1dpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJzdGF0dXNIZWlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAjcHJvZ3Jlc3NTdGF0dXNXcmFwXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLXByb2dyZXNzLXN0YXR1cy13cmFwXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJzdGF0dXNXcmFwcGVyV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQuJV09XCJzdGF0dXNXcmFwcGVySGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1wcm9ncmVzcy1zdGFydF09XCJpc1Bvc2l0aW9uU3RhcnRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLXByb2dyZXNzLWNlbnRlcl09XCJpc1Bvc2l0aW9uQ2VudGVyXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1wcm9ncmVzcy1lbmRdPVwiaXNQb3NpdGlvbkVuZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2hvd0xhYmVsXCIgY2xhc3M9XCJrLXByb2dyZXNzLXN0YXR1c1wiPnt7Zm9ybWF0dGVkTGFiZWxWYWx1ZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICBgLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5wcm9ncmVzc2JhcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgTmdab25lLFxuICAgICAgICBSZW5kZXJlcjJdKVxuXSwgUHJvZ3Jlc3NCYXJDb21wb25lbnQpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBDaHVua1Byb2dyZXNzQmFyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19jaHVua3Byb2dyZXNzYmFyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tY2h1bmtwcm9ncmVzc2JhciBbdmFsdWVdPVwidmFsdWVcIj5cbiAqICAgICAgICA8L2tlbmRvLWNodW5rcHJvZ3Jlc3NiYXI+XG4gKiAgICBgXG4gKiB9KVxuICogY2xhc3MgQXBwQ29tcG9uZW50IHtcbiAqICAgICBwdWJsaWMgdmFsdWUgPSA0MDtcbiAqIH1cbiAqIGBgYFxuICovXG5sZXQgQ2h1bmtQcm9ncmVzc0JhckNvbXBvbmVudCA9IGNsYXNzIENodW5rUHJvZ3Jlc3NCYXJDb21wb25lbnQgZXh0ZW5kcyBQcm9ncmVzc0JhckJhc2Uge1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgc3VwZXIobG9jYWxpemF0aW9uKTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgY2h1bmtzIGludG8gd2hpY2ggdGhlIENodW5rUHJvZ3Jlc3NCYXIgd2lsbCBiZSBzcGxpdC5cbiAgICAgICAgICogRGVmYXVsdHMgdG8gYDVgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jaHVua0NvdW50ID0gNTtcbiAgICAgICAgdGhpcy5fb3JpZW50YXRpb25TdHlsZXMgPSB7XG4gICAgICAgICAgICB3aWR0aDogYCR7dGhpcy5jaHVua1NpemVQZXJjZW50YWdlfSVgXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY2h1bmtzKCkge1xuICAgICAgICBjb25zdCBjb3VudCA9IHRoaXMuY2h1bmtDb3VudDtcbiAgICAgICAgY29uc3QgY2h1bmtzID0gQXJyYXkoY291bnQpLmZpbGwoZmFsc2UpO1xuICAgICAgICBjb25zdCBjb21wbGV0ZWRDaHVua3MgPSBNYXRoLmZsb29yKHRoaXMuX3Byb2dyZXNzUmF0aW8gKiBjb3VudCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcGxldGVkQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgIGNodW5rc1tpXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJldmVyc2VDaHVua3ModGhpcy5vcmllbnRhdGlvbiwgdGhpcy5yZXZlcnNlKSkge1xuICAgICAgICAgICAgY2h1bmtzLnJldmVyc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY2h1bmtzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGNodW5rU2l6ZVBlcmNlbnRhZ2UoKSB7XG4gICAgICAgIHJldHVybiAxMDAgLyB0aGlzLmNodW5rQ291bnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgb3JpZW50YXRpb25TdHlsZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuX29yaWVudGF0aW9uU3R5bGVzLndpZHRoID0gYCR7dGhpcy5jaHVua1NpemVQZXJjZW50YWdlfSVgO1xuICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25TdHlsZXMuaGVpZ2h0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25TdHlsZXMuaGVpZ2h0ID0gYCR7dGhpcy5jaHVua1NpemVQZXJjZW50YWdlfSVgO1xuICAgICAgICAgICAgdGhpcy5fb3JpZW50YXRpb25TdHlsZXMud2lkdGggPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX29yaWVudGF0aW9uU3R5bGVzO1xuICAgIH1cbn07XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBOdW1iZXIpXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJjaHVua0NvdW50XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwcm9ncmVzc0Nzc1N0eWxlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJwcm9ncmVzc0Nzc0NsYXNzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJlbXB0eUNzc1N0eWxlXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBJbnB1dCgpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50LnByb3RvdHlwZSwgXCJlbXB0eUNzc0NsYXNzXCIsIHZvaWQgMCk7XG5DaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50ID0gX19kZWNvcmF0ZShbXG4gICAgQ29tcG9uZW50KHtcbiAgICAgICAgZXhwb3J0QXM6ICdrZW5kb0NodW5rUHJvZ3Jlc3NCYXInLFxuICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNodW5rcHJvZ3Jlc3NiYXInLFxuICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8dWwgY2xhc3M9XCJrLXJlc2V0XCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJrLWl0ZW1cIiAqbmdGb3I9XCJsZXQgY2h1bmsgb2YgY2h1bmtzOyBsZXQgaSA9IGluZGV4O1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstZmlyc3RdPVwiaSA9PT0gMFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstbGFzdF09XCJpID09PSBjaHVua0NvdW50IC0gMVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtc2VsZWN0ZWRdPVwiY2h1bmtcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNodW5rID8gcHJvZ3Jlc3NDc3NDbGFzcyA6IGVtcHR5Q3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNodW5rID8gcHJvZ3Jlc3NDc3NTdHlsZSA6IGVtcHR5Q3NzU3R5bGVcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJvcmllbnRhdGlvblN0eWxlcy53aWR0aFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJvcmllbnRhdGlvblN0eWxlcy5oZWlnaHRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgYCxcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uY2h1bmtwcm9ncmVzc2JhcidcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbTG9jYWxpemF0aW9uU2VydmljZV0pXG5dLCBDaHVua1Byb2dyZXNzQmFyQ29tcG9uZW50KTtcblxuY29uc3QgQ09NUE9ORU5UX0RJUkVDVElWRVMgPSBbUHJvZ3Jlc3NCYXJDb21wb25lbnQsIENodW5rUHJvZ3Jlc3NCYXJDb21wb25lbnRdO1xuY29uc3QgTU9EVUxFUyA9IFtDb21tb25Nb2R1bGVdO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmxldCBQcm9ncmVzc0Jhck1vZHVsZSA9IGNsYXNzIFByb2dyZXNzQmFyTW9kdWxlIHtcbn07XG5Qcm9ncmVzc0Jhck1vZHVsZSA9IF9fZGVjb3JhdGUoW1xuICAgIE5nTW9kdWxlKHtcbiAgICAgICAgZGVjbGFyYXRpb25zOiBDT01QT05FTlRfRElSRUNUSVZFUyxcbiAgICAgICAgZXhwb3J0czogQ09NUE9ORU5UX0RJUkVDVElWRVMsXG4gICAgICAgIGltcG9ydHM6IE1PRFVMRVNcbiAgICB9KVxuXSwgUHJvZ3Jlc3NCYXJNb2R1bGUpO1xuXG4vKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCB7IFByb2dyZXNzQmFyQmFzZSwgUHJvZ3Jlc3NCYXJDb21wb25lbnQsIENodW5rUHJvZ3Jlc3NCYXJDb21wb25lbnQsIFByb2dyZXNzQmFyTW9kdWxlIH07XG4iXX0=","/**-----------------------------------------------------------------------------------------\n* Copyright © 2020 Progress Software Corporation. All rights reserved.\n* Licensed under commercial license. See LICENSE.md in the project root for more information\n*-------------------------------------------------------------------------------------------*/\nimport { Injectable, Directive, TemplateRef, Optional, isDevMode, Component, SkipSelf, Host, ElementRef, Input, ViewChild, HostBinding, ViewChildren, ContentChildren, EventEmitter, Output, ContentChild, HostListener, Renderer2, ChangeDetectorRef, NgZone, Inject, QueryList, ViewEncapsulation, NgModule, forwardRef } from '@angular/core';\nimport { LocalizationService, L10N_PREFIX, ComponentMessages } from '@progress/kendo-angular-l10n';\nimport { Keys, hasObservers, DraggableDirective, DraggableModule } from '@progress/kendo-angular-common';\nimport { trigger, state, style, transition, animate, AUTO_STYLE, AnimationBuilder } from '@angular/animations';\nimport { Subject, BehaviorSubject, Subscription, of } from 'rxjs';\nimport { take, tap, filter, switchMap, delay, takeUntil, map } from 'rxjs/operators';\nimport { CommonModule } from '@angular/common';\nimport { ProgressBarModule } from '@progress/kendo-angular-progressbar';\n\n/**\n * Represents the expand modes of the PanelBar.\n * By default, the expand mode is set to `multiple`.\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/common';\nimport * as ɵngcc2 from '@progress/kendo-angular-l10n';\nimport * as ɵngcc3 from '@progress/kendo-angular-common';\nimport * as ɵngcc4 from '@angular/animations';\nimport * as ɵngcc5 from '@progress/kendo-angular-progressbar';\n\nconst _c0 = [\"header\"];\nconst _c1 = [\"contentWrapper\"];\nfunction PanelBarItemComponent_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 7);\n} if (rf & 2) {\n const ctx_r8 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r8.iconClasses);\n} }\nfunction PanelBarItemComponent_img_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"img\", 8);\n} if (rf & 2) {\n const ctx_r9 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"src\", ctx_r9.imageUrl, ɵngcc0.ɵɵsanitizeUrl);\n} }\nfunction PanelBarItemComponent_ng_template_5_Template(rf, ctx) { }\nfunction PanelBarItemComponent_span_6_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\");\n} if (rf & 2) {\n const ctx_r11 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵclassProp(\"k-icon\", true)(\"k-i-arrow-n\", ctx_r11.expanded)(\"k-panelbar-collapse\", ctx_r11.expanded)(\"k-i-arrow-s\", !ctx_r11.expanded)(\"k-panelbar-expand\", !ctx_r11.expanded);\n} }\nfunction PanelBarItemComponent_div_7_div_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r14 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"overflow\", ctx_r14.contentOverflow)(\"height\", ctx_r14.contentHeight);\n} }\nfunction PanelBarItemComponent_div_7_div_3_ng_template_1_Template(rf, ctx) { }\nconst _c2 = function (a0, a1, a2, a3, a4, a5) { return { title: a0, id: a1, icon: a2, imageUrl: a3, disabled: a4, content: a5 }; };\nconst _c3 = function (a0) { return { $implicit: a0 }; };\nfunction PanelBarItemComponent_div_7_div_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵtemplate(1, PanelBarItemComponent_div_7_div_3_ng_template_1_Template, 0, 0, \"ng-template\", 14);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r15 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"overflow\", ctx_r15.contentOverflow)(\"height\", ctx_r15.contentHeight);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r15.contentTemplate.first.templateRef)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(13, _c3, ɵngcc0.ɵɵpureFunction6(6, _c2, ctx_r15.title, ctx_r15.id, ctx_r15.icon, ctx_r15.imageUrl, ctx_r15.disabled, ctx_r15.content)));\n} }\nfunction PanelBarItemComponent_div_7_div_4_ng_container_1_kendo_panelbar_item_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-panelbar-item\", 17);\n} if (rf & 2) {\n const item_r20 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r21 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"title\", item_r20.title)(\"id\", item_r20.id)(\"icon\", item_r20.icon)(\"iconClass\", item_r20.iconClass)(\"imageUrl\", item_r20.imageUrl)(\"selected\", !!item_r20.selected)(\"expanded\", !!item_r20.expanded)(\"disabled\", !!item_r20.disabled)(\"template\", ctx_r21.template)(\"items\", item_r20.children)(\"content\", item_r20.content);\n} }\nfunction PanelBarItemComponent_div_7_div_4_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, PanelBarItemComponent_div_7_div_4_ng_container_1_kendo_panelbar_item_1_Template, 1, 11, \"kendo-panelbar-item\", 16);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const item_r20 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !item_r20.hidden);\n} }\nfunction PanelBarItemComponent_div_7_div_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 12);\n ɵngcc0.ɵɵtemplate(1, PanelBarItemComponent_div_7_div_4_ng_container_1_Template, 2, 1, \"ng-container\", 15);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r16 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"overflow\", ctx_r16.contentOverflow)(\"height\", ctx_r16.contentHeight);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r16.items);\n} }\nfunction PanelBarItemComponent_div_7_div_5_ng_template_1_Template(rf, ctx) { }\nfunction PanelBarItemComponent_div_7_div_5_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtext(0);\n} if (rf & 2) {\n const ctx_r24 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵtextInterpolate(ctx_r24.content);\n} }\nfunction PanelBarItemComponent_div_7_div_5_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵtemplate(1, PanelBarItemComponent_div_7_div_5_ng_template_1_Template, 0, 0, \"ng-template\", 14);\n ɵngcc0.ɵɵtemplate(2, PanelBarItemComponent_div_7_div_5_ng_template_2_Template, 1, 1, \"ng-template\", 18);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r17 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"overflow\", ctx_r17.contentOverflow)(\"height\", ctx_r17.contentHeight);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r17.template)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(14, _c3, ɵngcc0.ɵɵpureFunction6(7, _c2, ctx_r17.title, ctx_r17.id, ctx_r17.icon, ctx_r17.imageUrl, ctx_r17.disabled, ctx_r17.content)));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r17.template);\n} }\nfunction PanelBarItemComponent_div_7_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", null, 9);\n ɵngcc0.ɵɵtemplate(2, PanelBarItemComponent_div_7_div_2_Template, 2, 4, \"div\", 10);\n ɵngcc0.ɵɵtemplate(3, PanelBarItemComponent_div_7_div_3_Template, 2, 15, \"div\", 11);\n ɵngcc0.ɵɵtemplate(4, PanelBarItemComponent_div_7_div_4_Template, 2, 5, \"div\", 10);\n ɵngcc0.ɵɵtemplate(5, PanelBarItemComponent_div_7_div_5_Template, 3, 16, \"div\", 11);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r12 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"@toggle\", ctx_r12.state);\n ɵngcc0.ɵɵattribute(\"role\", \"group\")(\"aria-hidden\", !ctx_r12.disabled && !ctx_r12.expanded);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.hasChildItems && !(ctx_r12.items == null ? null : ctx_r12.items.length));\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.hasContent && !ctx_r12.content);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.hasItems);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r12.content);\n} }\nconst _c4 = [[[\"kendo-panelbar-item\"]]];\nconst _c5 = [\"kendo-panelbar-item\"];\nfunction PanelBarComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"contentChildItems && !items\"]);\n} }\nfunction PanelBarComponent_ng_template_1_ng_container_0_kendo_panelbar_item_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-panelbar-item\", 4);\n} if (rf & 2) {\n const item_r28 = ɵngcc0.ɵɵnextContext().$implicit;\n const ctx_r29 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"title\", item_r28.title)(\"id\", item_r28.id)(\"icon\", item_r28.icon)(\"iconClass\", item_r28.iconClass)(\"imageUrl\", item_r28.imageUrl)(\"selected\", !!item_r28.selected)(\"expanded\", !!item_r28.expanded)(\"disabled\", !!item_r28.disabled)(\"template\", ctx_r29.templateRef)(\"items\", item_r28.children)(\"content\", item_r28.content);\n} }\nfunction PanelBarComponent_ng_template_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, PanelBarComponent_ng_template_1_ng_container_0_kendo_panelbar_item_1_Template, 1, 11, \"kendo-panelbar-item\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const item_r28 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !item_r28.hidden);\n} }\nfunction PanelBarComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, PanelBarComponent_ng_template_1_ng_container_0_Template, 2, 1, \"ng-container\", 2);\n} if (rf & 2) {\n const ctx_r26 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r26.items);\n} }\nfunction SplitterPaneComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵprojection(1);\n ɵngcc0.ɵɵelementContainerEnd();\n} }\nfunction SplitterPaneComponent_div_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"div\", 2);\n} }\nconst _c6 = [\"*\"];\nfunction SplitterComponent_ng_container_1_kendo_splitter_bar_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-splitter-bar\", 2);\n} if (rf & 2) {\n const index_r35 = ɵngcc0.ɵɵnextContext().index;\n const ctx_r37 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"index\", index_r35)(\"orientation\", ctx_r37.orientation);\n} }\nfunction SplitterComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, SplitterComponent_ng_container_1_kendo_splitter_bar_1_Template, 1, 2, \"kendo-splitter-bar\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const last_r36 = ctx.last;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !last_r36);\n} }\nconst _c7 = [[[\"kendo-splitter-pane\"]]];\nconst _c8 = [\"kendo-splitter-pane\"];\nconst _c9 = [\"tablist\"];\nconst _c10 = [\"tabHeadingContainer\"];\nfunction TabStripComponent_ng_container_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0);\n} }\nfunction TabStripComponent_ng_container_0_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0);\n} }\nfunction TabStripComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, TabStripComponent_ng_container_0_ng_container_1_Template, 1, 0, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(2, TabStripComponent_ng_container_0_ng_container_2_Template, 1, 0, \"ng-container\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n ɵngcc0.ɵɵnextContext();\n const _r41 = ɵngcc0.ɵɵreference(3);\n const _r43 = ɵngcc0.ɵɵreference(5);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", _r41);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", _r43);\n} }\nfunction TabStripComponent_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0);\n} }\nfunction TabStripComponent_ng_container_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainer(0);\n} }\nfunction TabStripComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, TabStripComponent_ng_container_1_ng_container_1_Template, 1, 0, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(2, TabStripComponent_ng_container_1_ng_container_2_Template, 1, 0, \"ng-container\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n ɵngcc0.ɵɵnextContext();\n const _r43 = ɵngcc0.ɵɵreference(5);\n const _r41 = ɵngcc0.ɵɵreference(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", _r43);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", _r41);\n} }\nfunction TabStripComponent_ng_template_2_li_2_ng_template_4_Template(rf, ctx) { }\nfunction TabStripComponent_ng_template_2_li_2_Template(rf, ctx) { if (rf & 1) {\n const _r56 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"li\", 7, 8);\n ɵngcc0.ɵɵlistener(\"click\", function TabStripComponent_ng_template_2_li_2_Template_li_click_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r56); const i_r52 = ctx.index; const ctx_r55 = ɵngcc0.ɵɵnextContext(2); return ctx_r55.onTabClick($event, i_r52); });\n ɵngcc0.ɵɵelementStart(2, \"span\", 9);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵtemplate(4, TabStripComponent_ng_template_2_li_2_ng_template_4_Template, 0, 0, \"ng-template\", 10);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const tab_r51 = ctx.$implicit;\n const i_r52 = ctx.index;\n const ctx_r50 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵclassProp(\"k-item\", true)(\"k-state-default\", true)(\"k-state-active\", tab_r51.active)(\"k-state-disabled\", tab_r51.disabled);\n ɵngcc0.ɵɵproperty(\"id\", ctx_r50.tabId(i_r52))(\"tabIndex\", tab_r51.active ? 0 : 0 - 1)(\"ngClass\", tab_r51.cssClass);\n ɵngcc0.ɵɵattribute(\"aria-selected\", tab_r51.active)(\"aria-controls\", ctx_r50.tabPanelId(i_r52))(\"aria-disabled\", tab_r51.disabled);\n ɵngcc0.ɵɵadvance(3);\n ɵngcc0.ɵɵtextInterpolate(tab_r51.title);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", tab_r51.tabTitle == null ? null : tab_r51.tabTitle.templateRef);\n} }\nfunction TabStripComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {\n const _r58 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"ul\", 4, 5);\n ɵngcc0.ɵɵlistener(\"keydown\", function TabStripComponent_ng_template_2_Template_ul_keydown_0_listener($event) { ɵngcc0.ɵɵrestoreView(_r58); const ctx_r57 = ɵngcc0.ɵɵnextContext(); return ctx_r57.onKeyDown($event); });\n ɵngcc0.ɵɵtemplate(2, TabStripComponent_ng_template_2_li_2_Template, 5, 16, \"li\", 6);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r42 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"justify-content\", ctx_r42.tabsAlignment);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r42.tabs);\n} }\nfunction TabStripComponent_ng_template_4_ng_template_0_div_0_ng_template_1_Template(rf, ctx) { }\nfunction TabStripComponent_ng_template_4_ng_template_0_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 13);\n ɵngcc0.ɵɵtemplate(1, TabStripComponent_ng_template_4_ng_template_0_div_0_ng_template_1_Template, 0, 0, \"ng-template\", 10);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r64 = ɵngcc0.ɵɵnextContext();\n const tab_r60 = ctx_r64.$implicit;\n const i_r61 = ctx_r64.index;\n const ctx_r62 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"@state\", tab_r60.active && ctx_r62._animate ? \"active\" : \"inactive\")(\"ngClass\", ctx_r62.contentClass(tab_r60.active))(\"tabIndex\", 0)(\"id\", ctx_r62.tabPanelId(i_r61));\n ɵngcc0.ɵɵattribute(\"aria-hidden\", !tab_r60.active)(\"aria-expanded\", tab_r60.active)(\"aria-labelledby\", ctx_r62.tabId(i_r61))(\"aria-disabled\", tab_r60.disabled);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", tab_r60.tabContent == null ? null : tab_r60.tabContent.templateRef);\n} }\nfunction TabStripComponent_ng_template_4_ng_template_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TabStripComponent_ng_template_4_ng_template_0_div_0_Template, 2, 9, \"div\", 12);\n} if (rf & 2) {\n const tab_r60 = ctx.$implicit;\n const ctx_r59 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", tab_r60.active || ctx_r59.keepTabContent);\n} }\nfunction TabStripComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TabStripComponent_ng_template_4_ng_template_0_Template, 1, 1, \"ng-template\", 11);\n} if (rf & 2) {\n const ctx_r44 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r44.tabs);\n} }\nfunction DrawerComponent_div_0_ng_container_1_1_ng_template_0_Template(rf, ctx) { }\nfunction DrawerComponent_div_0_ng_container_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerComponent_div_0_ng_container_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r68 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r68.headerTemplate == null ? null : ctx_r68.headerTemplate.templateRef);\n} }\nfunction DrawerComponent_div_0_ng_container_1_3_ng_template_0_Template(rf, ctx) { }\nfunction DrawerComponent_div_0_ng_container_1_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerComponent_div_0_ng_container_1_3_ng_template_0_Template, 0, 0, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r69 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r69.footerTemplate == null ? null : ctx_r69.footerTemplate.templateRef);\n} }\nfunction DrawerComponent_div_0_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, DrawerComponent_div_0_ng_container_1_1_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelement(2, \"ul\", 3);\n ɵngcc0.ɵɵtemplate(3, DrawerComponent_div_0_ng_container_1_3_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r66 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r66.headerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"items\", ctx_r66.items)(\"mini\", ctx_r66.mini)(\"expanded\", ctx_r66.expanded)(\"itemTemplate\", ctx_r66.itemTemplate == null ? null : ctx_r66.itemTemplate.templateRef);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r66.footerTemplate);\n} }\nfunction DrawerComponent_div_0_2_ng_template_0_Template(rf, ctx) { }\nfunction DrawerComponent_div_0_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerComponent_div_0_2_ng_template_0_Template, 0, 0, \"ng-template\", 4);\n} if (rf & 2) {\n const ctx_r67 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r67.drawerTemplate == null ? null : ctx_r67.drawerTemplate.templateRef);\n} }\nfunction DrawerComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 1);\n ɵngcc0.ɵɵtemplate(1, DrawerComponent_div_0_ng_container_1_Template, 4, 6, \"ng-container\", 2);\n ɵngcc0.ɵɵtemplate(2, DrawerComponent_div_0_2_Template, 1, 1, undefined, 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r65 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵstyleProp(\"width\", ctx_r65.drawerWidth, \"px\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r65.drawerTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r65.drawerTemplate);\n} }\nfunction DrawerContainerComponent_div_0_Template(rf, ctx) { if (rf & 1) {\n const _r75 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"div\", 1);\n ɵngcc0.ɵɵlistener(\"click\", function DrawerContainerComponent_div_0_Template_div_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r75); const ctx_r74 = ɵngcc0.ɵɵnextContext(); return ctx_r74.closeDrawer(); });\n ɵngcc0.ɵɵelementEnd();\n} }\nvar I18N_11;\nif (typeof ngI18nClosureMode !== \"undefined\" && ngI18nClosureMode) {\n /**\n * @desc The text for the optional segment of the step label\n * @meaning kendo.stepper.optional\n */ \n const MSG_EXTERNAL_9222129954657106830$$DIST_FESM2015_INDEX_JS_12 = goog.getMsg(\"Optional\");\n I18N_11 = MSG_EXTERNAL_9222129954657106830$$DIST_FESM2015_INDEX_JS_12;\n}\nelse {\n I18N_11 = $localize `:kendo.stepper.optional|The text for the optional segment of the step label␟5662ca90a1b7d36b2f55d6e21c0f4f7e166291af␟9222129954657106830:Optional`;\n}\nconst _c13 = [\"optional\", I18N_11];\nfunction StepperComponent_kendo_progressbar_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"kendo-progressbar\", 3);\n} if (rf & 2) {\n const ctx_r76 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"animation\", ctx_r76.progressAnimation)(\"max\", ctx_r76.steps.length - 1)(\"label\", false)(\"orientation\", ctx_r76.orientation)(\"reverse\", !ctx_r76.isHorizontal)(\"value\", ctx_r76.currentStep)(\"ngStyle\", ctx_r76.progressBarStyling);\n ɵngcc0.ɵɵattribute(\"aria-hidden\", true);\n} }\nfunction AvatarComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"customAvatar\"]);\n} }\nfunction AvatarComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"div\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r78 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"background-image\", ctx_r78.imageUrl, ɵngcc0.ɵɵdefaultStyleSanitizer);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r78.cssStyle);\n} }\nfunction AvatarComponent_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelementStart(1, \"span\", 2);\n ɵngcc0.ɵɵtext(2);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r79 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r79.cssStyle);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r79.initials.substring(0, 2));\n} }\nfunction AvatarComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"span\", 3);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r80 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngStyle\", ctx_r80.cssStyle)(\"ngClass\", ctx_r80.iconClasses());\n} }\nfunction CardActionsComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojection(0, 0, [\"*ngIf\", \"!actions\"]);\n} }\nfunction CardActionsComponent_ng_container_1_button_1_Template(rf, ctx) { if (rf & 1) {\n const _r87 = ɵngcc0.ɵɵgetCurrentView();\n ɵngcc0.ɵɵelementStart(0, \"button\", 2);\n ɵngcc0.ɵɵlistener(\"click\", function CardActionsComponent_ng_container_1_button_1_Template_button_click_0_listener() { ɵngcc0.ɵɵrestoreView(_r87); const action_r85 = ctx.$implicit; const ctx_r86 = ɵngcc0.ɵɵnextContext(2); return ctx_r86.onClick(action_r85); });\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const action_r85 = ctx.$implicit;\n ɵngcc0.ɵɵclassProp(\"k-primary\", action_r85.primary)(\"k-flat\", action_r85.flat);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", action_r85.text, \" \");\n} }\nfunction CardActionsComponent_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, CardActionsComponent_ng_container_1_button_1_Template, 2, 5, \"button\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r82 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx_r82.actions);\n} }\nfunction CardActionsComponent_2_ng_template_0_Template(rf, ctx) { }\nfunction CardActionsComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, CardActionsComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r83 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r83.actions);\n} }\nconst _c14 = [\"kendoDrawerItem\", \"\"];\nfunction DrawerItemComponent_0_ng_template_0_Template(rf, ctx) { }\nfunction DrawerItemComponent_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerItemComponent_0_ng_template_0_Template, 0, 0, \"ng-template\", 2);\n} if (rf & 2) {\n const ctx_r89 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r89.itemTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction1(2, _c3, ctx_r89.item));\n} }\nfunction DrawerItemComponent_ng_template_1_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"span\", 4);\n ɵngcc0.ɵɵelementStart(2, \"span\", 5);\n ɵngcc0.ɵɵtext(3);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r93 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r93.iconClasses(ctx_r93.item.icon));\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵtextInterpolate(ctx_r93.item.text);\n} }\nfunction DrawerItemComponent_ng_template_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"span\", 4);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r94 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r94.iconClasses(ctx_r94.item.icon));\n} }\nfunction DrawerItemComponent_ng_template_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerItemComponent_ng_template_1_ng_container_0_Template, 4, 2, \"ng-container\", 3);\n ɵngcc0.ɵɵtemplate(1, DrawerItemComponent_ng_template_1_ng_container_1_Template, 2, 1, \"ng-container\", 3);\n} if (rf & 2) {\n const ctx_r91 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r91.expanded);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r91.mini && !ctx_r91.expanded);\n} }\nconst _c15 = [\"kendoDrawerList\", \"\"];\nfunction DrawerListComponent_ng_container_0_li_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"li\", 3);\n} if (rf & 2) {\n const ctx_r100 = ɵngcc0.ɵɵnextContext();\n const item_r96 = ctx_r100.$implicit;\n const idx_r97 = ctx_r100.index;\n const ctx_r98 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"item\", item_r96)(\"index\", idx_r97)(\"mini\", ctx_r98.mini)(\"expanded\", ctx_r98.expanded)(\"itemTemplate\", ctx_r98.itemTemplate)(\"ngClass\", item_r96.cssClass)(\"ngStyle\", item_r96.cssStyle);\n ɵngcc0.ɵɵattribute(\"data-kendo-drawer-index\", idx_r97);\n} }\nfunction DrawerListComponent_ng_container_0_li_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"li\", 4);\n ɵngcc0.ɵɵtext(1, \" \\u00A0 \");\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const item_r96 = ɵngcc0.ɵɵnextContext().$implicit;\n ɵngcc0.ɵɵproperty(\"ngClass\", item_r96.cssClass)(\"ngStyle\", item_r96.cssStyle);\n} }\nfunction DrawerListComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, DrawerListComponent_ng_container_0_li_1_Template, 1, 8, \"li\", 1);\n ɵngcc0.ɵɵtemplate(2, DrawerListComponent_ng_container_0_li_2_Template, 2, 2, \"li\", 2);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const item_r96 = ctx.$implicit;\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !item_r96.separator);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", item_r96.separator);\n} }\nconst _c16 = [\"stepLink\"];\nconst _c17 = [\"kendoStepperStep\", \"\"];\nfunction StepperStepComponent_2_ng_template_0_Template(rf, ctx) { }\nconst _c18 = function (a0, a1) { return { $implicit: a0, index: a1 }; };\nfunction StepperStepComponent_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, StepperStepComponent_2_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r103 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r103.stepTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c18, ctx_r103.step, ctx_r103.index));\n} }\nfunction StepperStepComponent_ng_container_3_span_1_1_ng_template_0_Template(rf, ctx) { }\nfunction StepperStepComponent_ng_container_3_span_1_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, StepperStepComponent_ng_container_3_span_1_1_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r108 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r108.indicatorTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c18, ctx_r108.step, ctx_r108.index));\n} }\nfunction StepperStepComponent_ng_container_3_span_1_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 9);\n} if (rf & 2) {\n const ctx_r111 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r111.indicatorIconClasses);\n} }\nfunction StepperStepComponent_ng_container_3_span_1_ng_container_2_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 10);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r112 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r112.indicatorText);\n} }\nfunction StepperStepComponent_ng_container_3_span_1_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, StepperStepComponent_ng_container_3_span_1_ng_container_2_span_1_Template, 1, 1, \"span\", 7);\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_ng_container_3_span_1_ng_container_2_span_2_Template, 2, 1, \"span\", 8);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r109 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r109.showIndicatorIcon);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r109.showIndicatorIcon);\n} }\nfunction StepperStepComponent_ng_container_3_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 6);\n ɵngcc0.ɵɵtemplate(1, StepperStepComponent_ng_container_3_span_1_1_Template, 1, 5, undefined, 2);\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_ng_container_3_span_1_ng_container_2_Template, 3, 2, \"ng-container\", 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r106 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵstyleProp(\"transition-duration\", ctx_r106.transitionDuration, \"ms\");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r106.indicatorTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r106.indicatorTemplate);\n} }\nfunction StepperStepComponent_ng_container_3_span_2_1_ng_template_0_Template(rf, ctx) { }\nfunction StepperStepComponent_ng_container_3_span_2_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, StepperStepComponent_ng_container_3_span_2_1_ng_template_0_Template, 0, 0, \"ng-template\", 3);\n} if (rf & 2) {\n const ctx_r113 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx_r113.labelTemplate)(\"ngTemplateOutletContext\", ɵngcc0.ɵɵpureFunction2(2, _c18, ctx_r113.step, ctx_r113.index));\n} }\nfunction StepperStepComponent_ng_container_3_span_2_ng_container_2_span_1_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 15);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r116 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate(ctx_r116.step.label);\n} }\nfunction StepperStepComponent_ng_container_3_span_2_ng_container_2_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelement(0, \"span\", 16);\n} if (rf & 2) {\n const ctx_r117 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵproperty(\"ngClass\", ctx_r117.validationIconClasses);\n} }\nfunction StepperStepComponent_ng_container_3_span_2_ng_container_2_span_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 17);\n ɵngcc0.ɵɵtext(1);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r118 = ɵngcc0.ɵɵnextContext(4);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\"(\", ctx_r118.optionalText, \")\");\n} }\nfunction StepperStepComponent_ng_container_3_span_2_ng_container_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, StepperStepComponent_ng_container_3_span_2_ng_container_2_span_1_Template, 2, 1, \"span\", 12);\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_ng_container_3_span_2_ng_container_2_span_2_Template, 1, 1, \"span\", 13);\n ɵngcc0.ɵɵtemplate(3, StepperStepComponent_ng_container_3_span_2_ng_container_2_span_3_Template, 2, 1, \"span\", 14);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r114 = ɵngcc0.ɵɵnextContext(3);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r114.showLabelText);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r114.showLabelIcon);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r114.step.optional);\n} }\nfunction StepperStepComponent_ng_container_3_span_2_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"span\", 11);\n ɵngcc0.ɵɵtemplate(1, StepperStepComponent_ng_container_3_span_2_1_Template, 1, 5, undefined, 2);\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_ng_container_3_span_2_ng_container_2_Template, 4, 3, \"ng-container\", 2);\n ɵngcc0.ɵɵelementEnd();\n} if (rf & 2) {\n const ctx_r107 = ɵngcc0.ɵɵnextContext(2);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r107.labelTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx_r107.labelTemplate);\n} }\nfunction StepperStepComponent_ng_container_3_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵtemplate(1, StepperStepComponent_ng_container_3_span_1_Template, 3, 4, \"span\", 4);\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_ng_container_3_span_2_Template, 3, 2, \"span\", 5);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const ctx_r104 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r104.showIndicator);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx_r104.showLabel);\n} }\nconst _c19 = [\"kendoStepperList\", \"\"];\nfunction StepperListComponent_ng_container_0_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0);\n ɵngcc0.ɵɵelement(1, \"li\", 1);\n ɵngcc0.ɵɵelementContainerEnd();\n} if (rf & 2) {\n const step_r120 = ctx.$implicit;\n const idx_r121 = ctx.index;\n const ctx_r119 = ɵngcc0.ɵɵnextContext();\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵstyleProp(\"max-width\", ctx_r119.maxStepWidth, \"%\")(\"max-height\", ctx_r119.maxStepHeight, \"%\");\n ɵngcc0.ɵɵclassProp(\"k-step-first\", idx_r121 === 0)(\"k-step-last\", idx_r121 === ctx_r119.steps.length - 1)(\"k-step-done\", idx_r121 < ctx_r119.currentStep)(\"k-step-current\", idx_r121 === ctx_r119.currentStep)(\"k-step-optional\", step_r120.optional)(\"k-step-disabled\", step_r120.disabled);\n ɵngcc0.ɵɵproperty(\"type\", ctx_r119.stepType)(\"step\", step_r120)(\"index\", idx_r121)(\"current\", ctx_r119.currentStep)(\"successIcon\", ctx_r119.successIcon)(\"errorIcon\", ctx_r119.errorIcon)(\"indicatorTemplate\", ctx_r119.indicatorTemplate)(\"labelTemplate\", ctx_r119.labelTemplate)(\"stepTemplate\", ctx_r119.stepTemplate)(\"ngClass\", step_r120.cssClass)(\"ngStyle\", step_r120.cssStyle);\n ɵngcc0.ɵɵattribute(\"data-kendo-stepper-index\", idx_r121);\n} }\nvar PanelBarExpandMode;\n(function (PanelBarExpandMode) {\n /**\n * Allows you to expand only one item at a time.\n * When you expand an item, the item that was previously expanded is coll.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Single\"] = 0] = \"Single\";\n /**\n * Allows you to expand only one item at a time and requires you to set the `height` property.\n * The expanded area occupies the entire height of the PanelBar.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Full\"] = 1] = \"Full\";\n /**\n * The default mode of the PanelBar.\n * Allows you to expand more than one item at a time. Items can also be toggled.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Multiple\"] = 2] = \"Multiple\";\n /**\n * By default, the expand mode is set to `multiple`.\n */\n PanelBarExpandMode[PanelBarExpandMode[\"Default\"] = 2] = \"Default\";\n})(PanelBarExpandMode || (PanelBarExpandMode = {}));\n\n/**\n * @hidden\n */\nlet nextPanelbarId = 0;\n/**\n * @hidden\n */\nclass PanelBarService {\n constructor() {\n this.parentSource = new Subject();\n this.keepContentSource = new BehaviorSubject(false);\n this.childSource = new Subject();\n this.parent$ = this.parentSource.asObservable();\n this.children$ = this.childSource.asObservable();\n this.keepContent$ = this.keepContentSource.asObservable();\n this.pbId = nextPanelbarId++;\n }\n onKeepContent(keepContent) {\n this.keepContentSource.next(keepContent);\n }\n onSelect(event) {\n this.childSource.next(event);\n }\n onFocus() {\n this.parentSource.next(true);\n }\n onBlur() {\n this.parentSource.next(false);\n }\n}\nPanelBarService.ɵfac = function PanelBarService_Factory(t) { return new (t || PanelBarService)(); };\nPanelBarService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: PanelBarService, factory: PanelBarService.ɵfac });\n/** @nocollapse */\nPanelBarService.ctorParameters = () => [];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\n/**\n * Represents the content template of the declaratively initialized PanelBar items.\n * The content can be expanded or collapsed through the item.\n */\nclass PanelBarContentDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarContentDirective.ɵfac = function PanelBarContentDirective_Factory(t) { return new (t || PanelBarContentDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nPanelBarContentDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PanelBarContentDirective, selectors: [[\"\", \"kendoPanelBarContent\", \"\"]] });\n/** @nocollapse */\nPanelBarContentDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarContentDirective, [{\n type: Directive,\n args: [{\n selector: \"[kendoPanelBarContent]\"\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Represents the template directive of the PanelBar which helps to customize the item title\n * ([more information and example]({% slug templates_panelbar %}#toc-customizing-the-appearance-of-the-title)).\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Additional Content\n * \n * \n * \n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass PanelBarItemTitleDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarItemTitleDirective.ɵfac = function PanelBarItemTitleDirective_Factory(t) { return new (t || PanelBarItemTitleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPanelBarItemTitleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PanelBarItemTitleDirective, selectors: [[\"\", \"kendoPanelBarItemTitle\", \"\"]] });\n/** @nocollapse */\nPanelBarItemTitleDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarItemTitleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPanelBarItemTitle]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\nlet nextId = 0;\nconst parsePanelBarItems = (data) => {\n return data.map((item) => {\n if (!item.id) {\n item.id = `default-${nextId++}`;\n }\n if (item.children) {\n item.children = parsePanelBarItems(item.children);\n }\n return item;\n });\n};\nvar util = {\n parsePanelBarItems\n};\n/**\n * @hidden\n */\nconst isPresent = (value) => value !== null && value !== undefined;\n\nconst focusableRegex = /^(?:a|input|select|option|textarea|button|object)$/i;\nconst toClassList = (classNames) => String(classNames).trim().split(' ');\n/**\n * @hidden\n */\nconst isFocusable = (element) => {\n if (element.tagName) {\n const tagName = element.tagName.toLowerCase();\n const tabIndex = element.getAttribute('tabIndex');\n const skipTab = tabIndex === '-1';\n let focusable = tabIndex !== null && !skipTab;\n if (focusableRegex.test(tagName)) {\n focusable = !element.disabled && !skipTab;\n }\n return focusable;\n }\n return false;\n};\n/**\n * @hidden\n */\nconst hasClass = (element, className) => Boolean(toClassList(element.className).find((name) => name === className));\nconst closestInScope = (target, targetAttr, predicate, scope) => {\n while (target && target !== scope && !predicate(target, targetAttr)) {\n target = target.parentNode;\n }\n if (target !== scope) {\n return target;\n }\n};\n/**\n * @hidden\n */\nconst itemIndex = (item, indexAttr) => +item.getAttribute(indexAttr);\nconst hasItemIndex = (item, indexAttr) => isPresent(item.getAttribute(indexAttr));\n/**\n * @hidden\n */\nconst closestItem = (target, targetAttr, scope) => closestInScope(target, targetAttr, hasItemIndex, scope);\n\n/**\n * @hidden\n */\nlet nextId$1 = 0;\n/**\n * Represents the items of the PanelBar.\n */\nclass PanelBarItemComponent {\n constructor(parent, eventService, element) {\n this.parent = parent;\n this.eventService = eventService;\n this.element = element;\n /**\n * Sets the title of the PanelBar item ([see example]({% slug items_panelbar %}#toc-titles)).\n */\n this.title = 'Untitled';\n /**\n * Allows the component to set the `\"id\"` property to each item.\n * Used to set the `id` attributes of the nested elements and to enable the WAI-ARIA support.\n */\n this.id = `default-${nextId$1++}`;\n /**\n * Defines the icon that will be rendered next to the title ([see example]({% slug items_panelbar %}#toc-title-icons)).\n */\n this.icon = '';\n /**\n * Defines the icon that will be rendered next to the title by using a custom CSS class\n * ([see example]({% slug items_panelbar %}#toc-title-icons)).\n */\n this.iconClass = '';\n /**\n * Defines the location of the image that will be displayed next to the title\n * ([see example]({% slug items_panelbar %}#toc-title-images)).\n */\n this.imageUrl = '';\n /**\n * When set to `true`, disables a PanelBar item ([see example]({% slug items_panelbar %}#toc-disabled-state)).\n */\n this.disabled = false;\n /**\n * Sets the selected state of a PanelBar item ([see example]({% slug items_panelbar %}#toc-selected-state)).\n */\n this.selected = false;\n this.keepContent = false;\n this.hasChildItems = false;\n this.hasItems = false;\n this.hasContent = false;\n this.state = \"inactive\";\n this.role = \"treeitem\";\n this.titleAttribute = null; // tslint:disable-line\n this.focused = false;\n this.wrapperFocused = false;\n this.subscriptions = new Subscription(() => { });\n this._expanded = false;\n this.subscriptions.add(eventService.parent$.subscribe(focused => this.onWrapperFocusChange(focused)));\n this.subscriptions.add(eventService.keepContent$.subscribe(keepContent => this.keepContent = keepContent));\n this.wrapperFocused = parent ? parent.focused : false;\n }\n /**\n * When set to `true`, expands the PanelBar item ([see example]({% slug items_panelbar %}#toc-expanded-state)).\n */\n set expanded(value) {\n const activeState = this.animate ? \"active\" : \"activeWithoutAnimation\";\n this.state = value ? activeState : \"inactive\";\n if (!this.keepContent) {\n this.toggleExpandedChildAnimations(value);\n }\n this._expanded = value;\n }\n get expanded() {\n return this._expanded;\n }\n get animate() {\n return this.eventService.animate;\n }\n get kItemClass() {\n return true;\n }\n get kStateDefaultClass() {\n return !this.disabled;\n }\n get kStateDisabledClass() {\n return this.disabled;\n }\n get kStateExpandedClass() {\n return !this.disabled && this.expanded && (this.hasChildItems || this.hasContent);\n }\n get itemId() {\n return 'k-panelbar-' + this.eventService.pbId + '-item-' + this.id;\n }\n get ariaExpanded() {\n return (this.hasChildItems || this.hasContent) ? !this.disabled && this.expanded : null;\n }\n get ariaSelected() {\n return !this.disabled && this.selected;\n }\n get ariaDisabled() {\n return this.disabled ? true : null;\n }\n /**\n * @hidden\n */\n get titleTemplate() {\n return this.titleTemplates.length > 0 ? this.titleTemplates.toArray()[0].templateRef : undefined;\n }\n /**\n * @hidden\n */\n headerHeight() {\n return this.element.nativeElement.offsetHeight - (this.contentWrapper ? this.contentWrapper.nativeElement.offsetHeight : 0);\n }\n /**\n * @hidden\n */\n ngAfterContentChecked() {\n this.hasItems = this.items && this.items.filter(item => !item.hidden).length > 0;\n this.hasChildItems = this.contentItems.filter(item => item !== this).length > 0 || this.hasItems;\n this.hasContent = (this.contentTemplate !== undefined && this.contentTemplate.length > 0) ||\n this.content !== undefined;\n this.validateConfiguration();\n }\n /**\n * @hidden\n */\n ngAfterViewChecked() {\n if (this.items) {\n this.childrenItems = this.viewChildItems.toArray();\n }\n else {\n this.childrenItems = this.contentItems.filter(item => item !== this);\n }\n }\n /**\n * @hidden\n */\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n /**\n * @hidden\n */\n onItemAction() {\n if (!this.disabled) {\n this.eventService.onSelect(this);\n }\n }\n /**\n * @hidden\n */\n onItemClick(e) {\n if (!isFocusable(e.target)) {\n this.onItemAction();\n }\n }\n /**\n * @hidden\n */\n get iconClasses() {\n let icon = this.icon ? 'k-i-' + this.icon : null;\n return {\n [icon || this.iconClass]: true\n };\n }\n /**\n * @hidden\n */\n serialize() {\n return {\n content: this.content,\n disabled: this.disabled,\n expanded: this.expanded,\n focused: this.focused,\n icon: this.icon,\n iconClass: this.iconClass,\n id: this.id,\n imageUrl: this.imageUrl,\n selected: this.selected,\n title: this.title\n };\n }\n /**\n * @hidden\n */\n subTreeViewItems() {\n let subTree = [];\n this.viewChildItems.forEach(item => {\n subTree = subTree.concat(item.subTreeViewItems());\n subTree.push(item);\n });\n return subTree;\n }\n /**\n * @hidden\n */\n validateConfiguration() {\n if (isDevMode()) {\n if (this.content && (this.contentTemplate !== undefined && this.contentTemplate.length > 0)) {\n throw new Error(\"Invalid configuration: mixed template components and component property.\");\n }\n }\n }\n /**\n * @hidden\n */\n toggleAnimationState(value) {\n if (!this.animate) {\n return;\n }\n this.state = value && this.eventService.expandMode !== PanelBarExpandMode.Single ? 'active' : 'activeWithoutAnimation';\n }\n /**\n * @hidden\n */\n toggleExpandedChildAnimations(value) {\n if (this.childrenItems) {\n this.childrenItems.forEach(child => {\n if (child.expanded) {\n child.toggleAnimationState(value);\n child.toggleExpandedChildAnimations(value);\n }\n });\n }\n }\n onWrapperFocusChange(focused) {\n this.wrapperFocused = focused;\n }\n}\nPanelBarItemComponent.ɵfac = function PanelBarItemComponent_Factory(t) { return new (t || PanelBarItemComponent)(ɵngcc0.ɵɵdirectiveInject(PanelBarItemComponent, 13), ɵngcc0.ɵɵdirectiveInject(PanelBarService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nPanelBarItemComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PanelBarItemComponent, selectors: [[\"kendo-panelbar-item\"]], contentQueries: function PanelBarItemComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarItemComponent, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarContentDirective, false);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarItemTitleDirective, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentItems = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentTemplate = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.titleTemplates = _t);\n } }, viewQuery: function PanelBarItemComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c0, true);\n ɵngcc0.ɵɵviewQuery(_c1, true);\n ɵngcc0.ɵɵviewQuery(PanelBarItemComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.header = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentWrapper = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewChildItems = _t);\n } }, hostVars: 14, hostBindings: function PanelBarItemComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵhostProperty(\"id\", ctx.itemId);\n ɵngcc0.ɵɵattribute(\"role\", ctx.role)(\"title\", ctx.titleAttribute)(\"aria-expanded\", ctx.ariaExpanded)(\"aria-selected\", ctx.ariaSelected)(\"aria-disabled\", ctx.ariaDisabled);\n ɵngcc0.ɵɵclassProp(\"k-item\", ctx.kItemClass)(\"k-state-default\", ctx.kStateDefaultClass)(\"k-state-disabled\", ctx.kStateDisabledClass)(\"k-state-expanded\", ctx.kStateExpandedClass);\n } }, inputs: { title: \"title\", id: \"id\", icon: \"icon\", iconClass: \"iconClass\", imageUrl: \"imageUrl\", disabled: \"disabled\", selected: \"selected\", expanded: \"expanded\", content: \"content\", items: \"items\", template: \"template\" }, exportAs: [\"kendoPanelbarItem\"], ngContentSelectors: _c5, decls: 8, vars: 14, consts: [[3, \"click\"], [\"header\", \"\"], [\"class\", \"k-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-image\", \"alt\", \"\", 3, \"src\", 4, \"ngIf\"], [3, \"ngTemplateOutlet\"], [3, \"k-icon\", \"k-i-arrow-n\", \"k-panelbar-collapse\", \"k-i-arrow-s\", \"k-panelbar-expand\", 4, \"ngIf\"], [4, \"ngIf\"], [1, \"k-icon\", 3, \"ngClass\"], [\"alt\", \"\", 1, \"k-image\", 3, \"src\"], [\"contentWrapper\", \"\"], [\"class\", \"k-panel k-group\", 3, \"overflow\", \"height\", 4, \"ngIf\"], [\"class\", \"k-content\", 3, \"overflow\", \"height\", 4, \"ngIf\"], [1, \"k-panel\", \"k-group\"], [1, \"k-content\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [4, \"ngFor\", \"ngForOf\"], [3, \"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"selected\", \"expanded\", \"disabled\", \"template\", \"items\", \"content\", 4, \"ngIf\"], [3, \"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"selected\", \"expanded\", \"disabled\", \"template\", \"items\", \"content\"], [3, \"ngIf\"]], template: function PanelBarItemComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c4);\n ɵngcc0.ɵɵelementStart(0, \"span\", 0, 1);\n ɵngcc0.ɵɵlistener(\"click\", function PanelBarItemComponent_Template_span_click_0_listener($event) { return ctx.onItemClick($event); });\n ɵngcc0.ɵɵtemplate(2, PanelBarItemComponent_span_2_Template, 1, 1, \"span\", 2);\n ɵngcc0.ɵɵtemplate(3, PanelBarItemComponent_img_3_Template, 1, 1, \"img\", 3);\n ɵngcc0.ɵɵtext(4);\n ɵngcc0.ɵɵtemplate(5, PanelBarItemComponent_ng_template_5_Template, 0, 0, \"ng-template\", 4);\n ɵngcc0.ɵɵtemplate(6, PanelBarItemComponent_span_6_Template, 1, 10, \"span\", 5);\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵtemplate(7, PanelBarItemComponent_div_7_Template, 6, 7, \"div\", 6);\n } if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-link\", true)(\"k-header\", !ctx.parent)(\"k-state-selected\", !ctx.disabled && ctx.selected)(\"k-state-focused\", !ctx.disabled && ctx.focused && ctx.wrapperFocused);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon || ctx.iconClass);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.imageUrl);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵtextInterpolate1(\" \", ctx.title, \" \");\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngTemplateOutlet\", ctx.titleTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.hasChildItems || ctx.hasContent);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.keepContent || !ctx.disabled && ctx.expanded && (ctx.hasChildItems || ctx.hasContent));\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgClass, ɵngcc1.NgForOf, PanelBarItemComponent], encapsulation: 2, data: { animation: [\n trigger('toggle', [\n state('inactive', style({ display: 'none' })),\n transition('* => active', [\n style({ overflow: 'hidden', display: 'block', height: 0 }),\n animate(200, style({ height: AUTO_STYLE }))\n ]),\n transition('active => *', [\n style({ overflow: 'hidden', height: AUTO_STYLE }),\n animate(200, style({ height: 0, display: 'none' }))\n ])\n ])\n ] } });\n/** @nocollapse */\nPanelBarItemComponent.ctorParameters = () => [\n { type: PanelBarItemComponent, decorators: [{ type: SkipSelf }, { type: Host }, { type: Optional }] },\n { type: PanelBarService },\n { type: ElementRef }\n];\nPanelBarItemComponent.propDecorators = {\n title: [{ type: Input }],\n id: [{ type: Input }],\n icon: [{ type: Input }],\n iconClass: [{ type: Input }],\n imageUrl: [{ type: Input }],\n disabled: [{ type: Input }],\n expanded: [{ type: Input }],\n selected: [{ type: Input }],\n content: [{ type: Input }],\n items: [{ type: Input }],\n template: [{ type: Input }],\n header: [{ type: ViewChild, args: ['header', {},] }],\n contentWrapper: [{ type: ViewChild, args: ['contentWrapper', {},] }],\n role: [{ type: HostBinding, args: ['attr.role',] }],\n titleAttribute: [{ type: HostBinding, args: ['attr.title',] }],\n kItemClass: [{ type: HostBinding, args: ['class.k-item',] }],\n kStateDefaultClass: [{ type: HostBinding, args: ['class.k-state-default',] }],\n kStateDisabledClass: [{ type: HostBinding, args: ['class.k-state-disabled',] }],\n kStateExpandedClass: [{ type: HostBinding, args: ['class.k-state-expanded',] }],\n itemId: [{ type: HostBinding, args: ['id',] }],\n ariaExpanded: [{ type: HostBinding, args: ['attr.aria-expanded',] }],\n ariaSelected: [{ type: HostBinding, args: ['attr.aria-selected',] }],\n ariaDisabled: [{ type: HostBinding, args: ['attr.aria-disabled',] }],\n viewChildItems: [{ type: ViewChildren, args: [PanelBarItemComponent,] }],\n contentItems: [{ type: ContentChildren, args: [PanelBarItemComponent,] }],\n contentTemplate: [{ type: ContentChildren, args: [PanelBarContentDirective, { descendants: false },] }],\n titleTemplates: [{ type: ContentChildren, args: [PanelBarItemTitleDirective, { descendants: false },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarItemComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('toggle', [\n state('inactive', style({ display: 'none' })),\n transition('* => active', [\n style({ overflow: 'hidden', display: 'block', height: 0 }),\n animate(200, style({ height: AUTO_STYLE }))\n ]),\n transition('active => *', [\n style({ overflow: 'hidden', height: AUTO_STYLE }),\n animate(200, style({ height: 0, display: 'none' }))\n ])\n ])\n ],\n exportAs: 'kendoPanelbarItem',\n selector: \"kendo-panelbar-item\",\n template: `\n \n \n \n {{title}}\n \n \n \n \n
\n \n \n
\n \n \n \n
\n
\n \n \n \n \n
\n \n \n
\n {{content}}\n \n `\n }]\n }], function () { return [{ type: PanelBarItemComponent, decorators: [{\n type: SkipSelf\n }, {\n type: Host\n }, {\n type: Optional\n }] }, { type: PanelBarService }, { type: ɵngcc0.ElementRef }]; }, { title: [{\n type: Input\n }], id: [{\n type: Input\n }], icon: [{\n type: Input\n }], iconClass: [{\n type: Input\n }], imageUrl: [{\n type: Input\n }], disabled: [{\n type: Input\n }], selected: [{\n type: Input\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], titleAttribute: [{\n type: HostBinding,\n args: ['attr.title']\n }], expanded: [{\n type: Input\n }], kItemClass: [{\n type: HostBinding,\n args: ['class.k-item']\n }], kStateDefaultClass: [{\n type: HostBinding,\n args: ['class.k-state-default']\n }], kStateDisabledClass: [{\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], kStateExpandedClass: [{\n type: HostBinding,\n args: ['class.k-state-expanded']\n }], itemId: [{\n type: HostBinding,\n args: ['id']\n }], ariaExpanded: [{\n type: HostBinding,\n args: ['attr.aria-expanded']\n }], ariaSelected: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }], ariaDisabled: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }], content: [{\n type: Input\n }], items: [{\n type: Input\n }], template: [{\n type: Input\n }], header: [{\n type: ViewChild,\n args: ['header', {}]\n }], contentWrapper: [{\n type: ViewChild,\n args: ['contentWrapper', {}]\n }], viewChildItems: [{\n type: ViewChildren,\n args: [PanelBarItemComponent]\n }], contentItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent]\n }], contentTemplate: [{\n type: ContentChildren,\n args: [PanelBarContentDirective, { descendants: false }]\n }], titleTemplates: [{\n type: ContentChildren,\n args: [PanelBarItemTitleDirective, { descendants: false }]\n }] }); })();\n\n/**\n * Represents the template directive of the PanelBar which helps to customize the item content.\n */\nclass PanelBarItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nPanelBarItemTemplateDirective.ɵfac = function PanelBarItemTemplateDirective_Factory(t) { return new (t || PanelBarItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nPanelBarItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: PanelBarItemTemplateDirective, selectors: [[\"\", \"kendoPanelBarItemTemplate\", \"\"]] });\n/** @nocollapse */\nPanelBarItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoPanelBarItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents the [Kendo UI PanelBar component for Angular]({% slug overview_panelbar %}).\n */\n// TODO: add styles as input prop\nclass PanelBarComponent {\n constructor(elementRef, eventService, localization) {\n this.localization = localization;\n /**\n * Sets the expand mode of the PanelBar through the `PanelBarExpandMode` enum ([see example]({% slug expandmodes_panelbar %})).\n *\n * The available modes are:\n * - `\"single\"`—Expands only one item at a time. Expanding an item collapses the item that was previously expanded.\n * - `\"multiple\"`—The default mode of the PanelBar.\n * Expands more than one item at a time. Items can also be toggled.\n * - `\"full\"`—Expands only one item at a time.\n * The expanded area occupies the entire height of the PanelBar. Requires you to set the `height` property.\n */\n this.expandMode = PanelBarExpandMode.Default;\n /**\n * Allows the PanelBar to modify the selected state of the items.\n */\n this.selectable = true;\n /**\n * Sets the animate state of the PanelBar ([see example]({% slug animations_panelbar %})).\n */\n this.animate = true;\n /**\n * Sets the height of the component when the `\"full\"` expand mode is used.\n * This option is ignored in the `\"multiple\"` and `\"single\"` expand modes.\n */\n this.height = \"400px\";\n /**\n * Fires each time the user interacts with a PanelBar item\n * ([see example]({% slug routing_panelbar %}#toc-getting-the-selected-item)).\n * The event data contains all items that are modified.\n */\n this.stateChange = new EventEmitter();\n this.tabIndex = 0;\n this.role = \"tree\";\n this.activeDescendant = \"\";\n this.isViewInit = true;\n this.focused = false;\n this._keepItemContent = false;\n this.updateChildrenHeight = () => {\n let childrenHeight = 0;\n const panelbarHeight = this.elementRef.nativeElement.offsetHeight;\n const contentOverflow = this.expandMode === PanelBarExpandMode.Full ? 'auto' : 'visible';\n this.childrenItems.forEach(item => {\n childrenHeight += item.headerHeight();\n });\n this.childrenItems.forEach(item => {\n item.contentHeight = PanelBarExpandMode.Full === this.expandMode ? (panelbarHeight - childrenHeight) + \"px\" : 'auto';\n item.contentOverflow = contentOverflow;\n });\n };\n this.keyBindings = this.computedKeys;\n this.elementRef = elementRef;\n this.eventService = eventService;\n this.eventService.children$.subscribe(event => this.onItemAction(event));\n }\n /**\n * When set to `true`, the PanelBar renders the content of all items and they are persisted in the DOM\n * ([see example]({% slug templates_panelbar %}#toc-collections)).\n * By default, this option is set to `false`.\n */\n get keepItemContent() {\n return this._keepItemContent;\n }\n set keepItemContent(keepItemContent) {\n this._keepItemContent = keepItemContent;\n this.eventService.onKeepContent(keepItemContent);\n }\n /**\n * Sets the items of the PanelBar as an array of `PanelBarItemModel` instances\n * ([see example]({% slug items_panelbar %})).\n */\n set items(data) {\n if (data) {\n this._items = util.parsePanelBarItems(data);\n }\n }\n get items() {\n return this._items;\n }\n get hostHeight() {\n return this.expandMode === PanelBarExpandMode.Full ? this.height : 'auto';\n }\n get overflow() {\n return this.expandMode === PanelBarExpandMode.Full ? \"hidden\" : \"visible\";\n }\n get dir() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n invertKeys(original, inverted) {\n return this.localization.rtl ? inverted : original;\n }\n get computedKeys() {\n return {\n [Keys.Space]: () => this.selectFocusedItem(),\n [Keys.Enter]: () => this.selectFocusedItem(),\n [Keys.ArrowUp]: () => this.focusPreviousItem(),\n [this.invertKeys(Keys.ArrowLeft, Keys.ArrowRight)]: () => this.collapseItem(),\n [Keys.ArrowDown]: () => this.focusNextItem(),\n [this.invertKeys(Keys.ArrowRight, Keys.ArrowLeft)]: () => this.expandItem(),\n [Keys.End]: () => this.focusLastItem(),\n [Keys.Home]: () => this.focusFirstItem()\n };\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.keyBindings = this.computedKeys);\n this.eventService.animate = this.animate;\n this.eventService.expandMode = this.expandMode;\n }\n ngAfterViewChecked() {\n if (this.items) {\n this.childrenItems = this.viewChildItems.toArray();\n this.allItems = this.viewItems;\n }\n else {\n this.childrenItems = this.contentChildItems.toArray();\n this.allItems = this.contentItems.toArray();\n }\n if (this.isViewInit && this.childrenItems.length) {\n this.isViewInit = false;\n setTimeout(() => this.updateChildrenHeight());\n }\n this.validateConfiguration();\n }\n ngOnChanges(changes) {\n if (changes['height'] || changes['expandMode'] || changes[\"items\"]) { // tslint:disable-line\n if (this.childrenItems) {\n setTimeout(this.updateChildrenHeight);\n }\n }\n if (changes.animate) {\n this.eventService.animate = this.animate;\n }\n if (changes.expandMode) {\n this.eventService.expandMode = this.expandMode;\n }\n }\n get templateRef() {\n return this.template ? this.template.templateRef : undefined;\n }\n /**\n * @hidden\n */\n onComponentClick(event) {\n const itemClicked = this.visibleItems().some((item) => {\n return item.header.nativeElement.contains(event.target);\n });\n if (!this.focused && itemClicked) {\n this.elementRef.nativeElement.focus();\n }\n }\n /**\n * @hidden\n */\n onComponentFocus() {\n this.eventService.onFocus();\n this.focused = true;\n if (this.allItems.length > 0) {\n const visibleItems = this.visibleItems();\n const focusedItems = visibleItems.filter(item => item.focused);\n if (!focusedItems.length && visibleItems.length > 0) {\n visibleItems[0].focused = true;\n this.activeDescendant = visibleItems[0].itemId;\n }\n }\n }\n /**\n * @hidden\n */\n onComponentBlur() {\n this.eventService.onBlur();\n this.focused = false;\n this.activeDescendant = \"\";\n }\n /**\n * @hidden\n */\n onComponentKeyDown(event) {\n if (event.target === this.elementRef.nativeElement) {\n if (event.keyCode === Keys.Space || event.keyCode === Keys.ArrowUp || event.keyCode === Keys.ArrowDown ||\n event.keyCode === Keys.ArrowLeft || event.keyCode === Keys.ArrowRight || event.keyCode === Keys.Home ||\n event.keyCode === Keys.End || event.keyCode === Keys.PageUp || event.keyCode === Keys.PageDown) {\n event.preventDefault();\n }\n const handler = this.keyBindings[event.keyCode];\n //TODO: check if next item is disabled and skip operation?\n if (handler) {\n handler();\n }\n }\n }\n get viewItems() {\n let treeItems = [];\n this.viewChildItems.toArray().forEach(item => {\n treeItems.push(item);\n treeItems = treeItems.concat(item.subTreeViewItems());\n });\n return treeItems;\n }\n validateConfiguration() {\n if (isDevMode()) {\n if (this.items && (this.contentItems && this.contentItems.length > 0)) {\n throw new Error(\"Invalid configuration: mixed template components and items property.\");\n }\n }\n }\n onItemAction(item) {\n if (!item) {\n return;\n }\n let modifiedItems = new Array();\n this.allItems\n .forEach((currentItem) => {\n let selectedState = currentItem === item;\n let focusedState = selectedState;\n selectedState = this.selectable ? selectedState : currentItem.selected;\n if (currentItem.selected !== selectedState || currentItem.focused !== focusedState) {\n currentItem.selected = selectedState;\n currentItem.focused = focusedState;\n this.activeDescendant = focusedState ? currentItem.itemId : \"\";\n modifiedItems.push(currentItem);\n }\n });\n if (this.expandMode === PanelBarExpandMode.Multiple) {\n if (item.hasChildItems || item.hasContent) {\n item.expanded = !item.expanded;\n }\n if (modifiedItems.indexOf(item) < 0) {\n modifiedItems.push(item);\n }\n }\n else {\n let siblings = item.parent ? item.parent.childrenItems : this.childrenItems;\n if (item.hasChildItems || item.hasContent) {\n siblings\n .forEach((currentItem) => {\n let expandedState = currentItem === item;\n if (currentItem.expanded !== expandedState) {\n currentItem.expanded = expandedState;\n if (modifiedItems.indexOf(currentItem) < 0) {\n modifiedItems.push(currentItem);\n }\n }\n });\n }\n }\n if (modifiedItems.length > 0) {\n this.stateChange.emit(modifiedItems.map(currentItem => currentItem.serialize()));\n }\n }\n get hostClasses() {\n return true;\n }\n isVisible(item) {\n const visibleItems = this.visibleItems();\n return visibleItems.some(i => i === item);\n }\n getVisibleParent(item) {\n const visibleItems = this.visibleItems();\n if (!item.parent) {\n return item;\n }\n return visibleItems.some(i => i === item.parent) ? item.parent : this.getVisibleParent(item.parent);\n }\n focusItem(action) {\n const visibleItems = this.visibleItems();\n let currentIndex = visibleItems.findIndex(item => item.focused);\n let currentItem = visibleItems[currentIndex];\n let nextItem;\n if (currentIndex === -1) {\n let focusedItem = this.allItems.find(item => item.focused);\n focusedItem.focused = false;\n currentItem = this.getVisibleParent(focusedItem);\n currentIndex = visibleItems.findIndex(item => item === currentItem);\n }\n switch (action) {\n case \"lastItem\":\n nextItem = visibleItems[visibleItems.length - 1];\n break;\n case \"firstItem\":\n nextItem = visibleItems[0];\n break;\n case \"nextItem\":\n nextItem = visibleItems[currentIndex < visibleItems.length - 1 ? currentIndex + 1 : 0];\n break;\n case \"previousItem\":\n nextItem = visibleItems[currentIndex > 0 ? currentIndex - 1 : visibleItems.length - 1];\n break;\n default:\n }\n if (currentItem && nextItem && currentItem !== nextItem) {\n this.moveFocus(currentItem, nextItem);\n }\n }\n moveFocus(from, to) {\n from.focused = false;\n to.focused = true;\n this.activeDescendant = to.itemId;\n const modifiedItems = new Array(from.serialize(), to.serialize());\n this.stateChange.emit(modifiedItems);\n }\n focusLastItem() {\n this.focusItem(\"lastItem\");\n }\n focusFirstItem() {\n this.focusItem(\"firstItem\");\n }\n focusNextItem() {\n this.focusItem(\"nextItem\");\n }\n focusPreviousItem() {\n this.focusItem(\"previousItem\");\n }\n expandItem() {\n let currentItem = this.allItems.filter(item => item.focused)[0];\n if (!this.isVisible(currentItem)) {\n currentItem.focused = false;\n currentItem = this.getVisibleParent(currentItem);\n }\n if (currentItem.hasChildItems || currentItem.hasContent) {\n if (!currentItem.expanded) {\n this.onItemAction(currentItem);\n }\n else if (currentItem.hasChildItems) {\n const firstChildIndex = currentItem.childrenItems.findIndex(item => !item.disabled);\n if (firstChildIndex > -1) {\n this.moveFocus(currentItem, currentItem.childrenItems[firstChildIndex]);\n }\n }\n }\n }\n collapseItem() {\n const currentItem = this.allItems.filter(item => item.focused)[0];\n if (currentItem.expanded) {\n this.onItemAction(currentItem);\n }\n else if (currentItem.parent) {\n this.moveFocus(currentItem, currentItem.parent);\n }\n }\n selectFocusedItem() {\n let focusedItem = this.allItems.filter(item => item.focused)[0];\n if (!this.isVisible(focusedItem)) {\n focusedItem.focused = false;\n focusedItem = this.getVisibleParent(focusedItem);\n }\n if (focusedItem) {\n focusedItem.onItemAction();\n }\n }\n visibleItems() {\n return this.flatVisibleItems(this.childrenItems);\n }\n flatVisibleItems(listOfItems = new Array(), flattedItems = new Array()) {\n listOfItems.forEach(item => {\n if (!item.disabled) {\n flattedItems.push(item);\n if (item.expanded && item.hasChildItems) {\n this.flatVisibleItems(item.childrenItems, flattedItems);\n }\n }\n });\n return flattedItems;\n }\n}\nPanelBarComponent.ɵfac = function PanelBarComponent_Factory(t) { return new (t || PanelBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(PanelBarService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nPanelBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: PanelBarComponent, selectors: [[\"kendo-panelbar\"]], contentQueries: function PanelBarComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarItemTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarItemComponent, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, PanelBarItemComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.template = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentItems = _t);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.contentChildItems = _t);\n } }, viewQuery: function PanelBarComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(PanelBarItemComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.viewChildItems = _t);\n } }, hostVars: 12, hostBindings: function PanelBarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"click\", function PanelBarComponent_click_HostBindingHandler($event) { return ctx.onComponentClick($event); })(\"focus\", function PanelBarComponent_focus_HostBindingHandler() { return ctx.onComponentFocus(); })(\"blur\", function PanelBarComponent_blur_HostBindingHandler() { return ctx.onComponentBlur(); })(\"keydown\", function PanelBarComponent_keydown_HostBindingHandler($event) { return ctx.onComponentKeyDown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabIndex\", ctx.tabIndex)(\"role\", ctx.role)(\"aria-activedescendant\", ctx.activeDescendant)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵstyleProp(\"height\", ctx.hostHeight)(\"overflow\", ctx.overflow);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-panelbar\", ctx.hostClasses);\n } }, inputs: { expandMode: \"expandMode\", selectable: \"selectable\", animate: \"animate\", height: \"height\", keepItemContent: \"keepItemContent\", items: \"items\" }, outputs: { stateChange: \"stateChange\" }, exportAs: [\"kendoPanelbar\"], features: [ɵngcc0.ɵɵProvidersFeature([\n PanelBarService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.panelbar'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c5, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [3, \"ngIf\"], [4, \"ngFor\", \"ngForOf\"], [3, \"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"selected\", \"expanded\", \"disabled\", \"template\", \"items\", \"content\", 4, \"ngIf\"], [3, \"title\", \"id\", \"icon\", \"iconClass\", \"imageUrl\", \"selected\", \"expanded\", \"disabled\", \"template\", \"items\", \"content\"]], template: function PanelBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c4);\n ɵngcc0.ɵɵtemplate(0, PanelBarComponent_0_Template, 1, 0, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, PanelBarComponent_ng_template_1_Template, 1, 1, \"ng-template\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.contentChildItems && !ctx.items);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.items == null ? null : ctx.items.length);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, PanelBarItemComponent], encapsulation: 2 });\n/** @nocollapse */\nPanelBarComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: PanelBarService },\n { type: LocalizationService }\n];\nPanelBarComponent.propDecorators = {\n expandMode: [{ type: Input }],\n selectable: [{ type: Input }],\n animate: [{ type: Input }],\n height: [{ type: Input }],\n keepItemContent: [{ type: Input }],\n items: [{ type: Input }],\n stateChange: [{ type: Output }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabIndex',] }],\n role: [{ type: HostBinding, args: ['attr.role',] }],\n activeDescendant: [{ type: HostBinding, args: ['attr.aria-activedescendant',] }],\n hostHeight: [{ type: HostBinding, args: ['style.height',] }],\n overflow: [{ type: HostBinding, args: ['style.overflow',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n template: [{ type: ContentChild, args: [PanelBarItemTemplateDirective,] }],\n contentItems: [{ type: ContentChildren, args: [PanelBarItemComponent, { descendants: true },] }],\n contentChildItems: [{ type: ContentChildren, args: [PanelBarItemComponent,] }],\n viewChildItems: [{ type: ViewChildren, args: [PanelBarItemComponent,] }],\n onComponentClick: [{ type: HostListener, args: ['click', ['$event'],] }],\n onComponentFocus: [{ type: HostListener, args: ['focus',] }],\n onComponentBlur: [{ type: HostListener, args: ['blur',] }],\n onComponentKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-panelbar',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoPanelbar',\n providers: [\n PanelBarService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.panelbar'\n }\n ],\n selector: 'kendo-panelbar',\n template: `\n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: PanelBarService }, { type: ɵngcc2.LocalizationService }]; }, { expandMode: [{\n type: Input\n }], selectable: [{\n type: Input\n }], animate: [{\n type: Input\n }], height: [{\n type: Input\n }], stateChange: [{\n type: Output\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabIndex']\n }], role: [{\n type: HostBinding,\n args: ['attr.role']\n }], activeDescendant: [{\n type: HostBinding,\n args: ['attr.aria-activedescendant']\n }], keepItemContent: [{\n type: Input\n }], items: [{\n type: Input\n }], hostHeight: [{\n type: HostBinding,\n args: ['style.height']\n }], overflow: [{\n type: HostBinding,\n args: ['style.overflow']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], onComponentClick: [{\n type: HostListener,\n args: ['click', ['$event']]\n }], onComponentFocus: [{\n type: HostListener,\n args: ['focus']\n }], onComponentBlur: [{\n type: HostListener,\n args: ['blur']\n }], onComponentKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-panelbar']\n }], template: [{\n type: ContentChild,\n args: [PanelBarItemTemplateDirective]\n }], contentItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent, { descendants: true }]\n }], contentChildItems: [{\n type: ContentChildren,\n args: [PanelBarItemComponent]\n }], viewChildItems: [{\n type: ViewChildren,\n args: [PanelBarItemComponent]\n }] }); })();\n\n/**\n * Represents the pane component of the Splitter.\n */\nclass SplitterPaneComponent {\n constructor(element, renderer, cdr) {\n this.element = element;\n this.renderer = renderer;\n this.cdr = cdr;\n /**\n * Specifies if the user is allowed to resize the pane and provide space for other panes.\n */\n this.resizable = true;\n /**\n * Specifies if the user is allowed to hide the pane and provide space for other panes.\n */\n this.collapsible = false;\n /**\n * Specifies if overflowing content is scrollable or hidden.\n */\n this.scrollable = true;\n /**\n * Specifies if the pane is initially collapsed.\n */\n this.collapsed = false;\n /**\n * @hidden\n */\n this.orientation = 'horizontal';\n /**\n * @hidden\n */\n this.containsSplitter = false;\n /**\n * @hidden\n */\n this.overlayContent = false;\n /**\n * Fires each time the user resizes the Splitter pane.\n * The event data contains the new pane size.\n * Allows a two-way binding of the pane `size` property.\n */\n this.sizeChange = new EventEmitter();\n /**\n * Fires each time the `collapsed` property changes.\n * The event data contains the new property state.\n * Allows a two-way binding of the `collapsed` pane property.\n */\n this.collapsedChange = new EventEmitter();\n this.hostClass = true;\n /**\n * @hidden\n */\n this.forceExpand = false;\n }\n /**\n * @hidden\n */\n set order(paneOrder) {\n this._order = paneOrder;\n this.setOrderStyles();\n }\n get order() {\n return this._order;\n }\n /**\n * Sets the initial size of the pane.\n * Has to be between the `min` and `max` properties.\n */\n set size(newSize) {\n this._size = newSize;\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, '-ms-flex-preferred-size', newSize);\n this.renderer.setStyle(element, 'flex-basis', newSize);\n if (this.staticPaneClass) {\n this.renderer.addClass(element, 'k-pane-static');\n }\n else {\n this.renderer.removeClass(element, 'k-pane-static');\n }\n }\n get size() {\n return this._size;\n }\n get isHidden() {\n return this.collapsed;\n }\n get styleDisplayFlex() {\n return this.containsSplitter;\n }\n get staticPaneClass() {\n if (this.forceExpand) {\n return false;\n }\n return !this.resizable && !this.collapsible || this.fixedSize;\n }\n get scrollablePaneClass() {\n return this.scrollable;\n }\n get fixedSize() {\n return this.size && this.size.length > 0;\n }\n ngAfterViewChecked() {\n const element = this.element.nativeElement;\n if (this.isHidden) {\n this.renderer.addClass(element, 'k-state-hidden');\n this.renderer.addClass(element, 'hidden');\n }\n else {\n this.renderer.removeClass(element, 'k-state-hidden');\n this.renderer.removeClass(element, 'hidden');\n }\n }\n /**\n * @hidden\n */\n get computedSize() {\n if (this.orientation === 'vertical') {\n return this.element.nativeElement.offsetHeight;\n }\n else {\n return this.element.nativeElement.offsetWidth;\n }\n }\n /**\n * @hidden\n */\n toggleOverlay(show) {\n this.overlayContent = show;\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n detectChanges() {\n this.cdr.detectChanges();\n }\n /**\n * @hidden\n */\n setOrderStyles() {\n const element = this.element.nativeElement;\n this.renderer.setStyle(element, '-ms-flex-order', this.order);\n this.renderer.setStyle(element, 'order', this.order);\n }\n}\nSplitterPaneComponent.ɵfac = function SplitterPaneComponent_Factory(t) { return new (t || SplitterPaneComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef)); };\nSplitterPaneComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SplitterPaneComponent, selectors: [[\"kendo-splitter-pane\"]], hostVars: 8, hostBindings: function SplitterPaneComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-pane\", ctx.hostClass)(\"k-pane-flex\", ctx.styleDisplayFlex)(\"k-pane-static\", ctx.staticPaneClass)(\"k-scrollable\", ctx.scrollablePaneClass);\n } }, inputs: { resizable: \"resizable\", collapsible: \"collapsible\", scrollable: \"scrollable\", collapsed: \"collapsed\", orientation: \"orientation\", containsSplitter: \"containsSplitter\", overlayContent: \"overlayContent\", order: \"order\", size: \"size\", min: \"min\", max: \"max\" }, outputs: { sizeChange: \"sizeChange\", collapsedChange: \"collapsedChange\" }, exportAs: [\"kendoSplitterPane\"], ngContentSelectors: _c6, decls: 2, vars: 2, consts: [[4, \"ngIf\"], [\"class\", \"k-splitter-overlay k-overlay\", 4, \"ngIf\"], [1, \"k-splitter-overlay\", \"k-overlay\"]], template: function SplitterPaneComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, SplitterPaneComponent_ng_container_0_Template, 2, 0, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, SplitterPaneComponent_div_1_Template, 1, 0, \"div\", 1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.collapsed);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.overlayContent);\n } }, directives: [ɵngcc1.NgIf], encapsulation: 2 });\n/** @nocollapse */\nSplitterPaneComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: Renderer2 },\n { type: ChangeDetectorRef }\n];\nSplitterPaneComponent.propDecorators = {\n order: [{ type: Input }],\n size: [{ type: Input }],\n min: [{ type: Input }],\n max: [{ type: Input }],\n resizable: [{ type: Input }],\n collapsible: [{ type: Input }],\n scrollable: [{ type: Input }],\n collapsed: [{ type: Input }],\n orientation: [{ type: Input }],\n containsSplitter: [{ type: Input }],\n overlayContent: [{ type: Input }],\n sizeChange: [{ type: Output }],\n collapsedChange: [{ type: Output }],\n styleDisplayFlex: [{ type: HostBinding, args: ['class.k-pane-flex',] }],\n hostClass: [{ type: HostBinding, args: ['class.k-pane',] }],\n staticPaneClass: [{ type: HostBinding, args: ['class.k-pane-static',] }],\n scrollablePaneClass: [{ type: HostBinding, args: ['class.k-scrollable',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitterPaneComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitterPane',\n selector: 'kendo-splitter-pane',\n template: `\n \n
\n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ChangeDetectorRef }]; }, { resizable: [{\n type: Input\n }], collapsible: [{\n type: Input\n }], scrollable: [{\n type: Input\n }], collapsed: [{\n type: Input\n }], orientation: [{\n type: Input\n }], containsSplitter: [{\n type: Input\n }], overlayContent: [{\n type: Input\n }], sizeChange: [{\n type: Output\n }], collapsedChange: [{\n type: Output\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-pane']\n }], order: [{\n type: Input\n }], size: [{\n type: Input\n }], styleDisplayFlex: [{\n type: HostBinding,\n args: ['class.k-pane-flex']\n }], staticPaneClass: [{\n type: HostBinding,\n args: ['class.k-pane-static']\n }], scrollablePaneClass: [{\n type: HostBinding,\n args: ['class.k-scrollable']\n }], min: [{\n type: Input\n }], max: [{\n type: Input\n }] }); })();\n\nconst SIZING_DOC_LINK = 'https://www.telerik.com/kendo-angular-ui/components/layout/splitter/panes/#toc-size';\n/**\n * @hidden\n */\nclass SplitterService {\n constructor(zone) {\n this.zone = zone;\n this.layoutChange = new EventEmitter();\n this.containerSize = () => { };\n }\n tryToggle(paneIndex) {\n const pane = this.pane(paneIndex);\n if (pane.collapsible) {\n pane.collapsed = !pane.collapsed;\n pane.collapsedChange.emit(pane.collapsed);\n this.emit(this.layoutChange, {});\n if (pane.collapsed) {\n pane.detectChanges();\n }\n }\n const notCollapsed = this.panes.filter(p => !p.collapsed);\n const allHaveFixedSize = notCollapsed.every(p => p.fixedSize);\n notCollapsed[notCollapsed.length - 1].forceExpand = allHaveFixedSize ? true : false;\n return pane.collapsible;\n }\n toggleContentOverlay(index, show) {\n this.pane(index).toggleOverlay(show);\n this.pane(index + 1).toggleOverlay(show);\n }\n dragState(splitbarIndex) {\n let prev = this.pane(splitbarIndex);\n let next = this.pane(splitbarIndex + 1);\n const total = prev.computedSize + next.computedSize;\n const px = s => this.toPixels(s);\n return {\n prev: {\n index: splitbarIndex,\n initialSize: prev.computedSize,\n min: px(prev.min) || total - px(next.max) || 0,\n max: px(prev.max) || total - px(next.min) || total\n },\n next: {\n index: splitbarIndex + 1,\n initialSize: next.computedSize,\n min: px(next.min) || total - px(prev.max) || 0,\n max: px(next.max) || total - px(prev.min) || total\n }\n };\n }\n setSize(state$$1, delta) {\n const clamp = (min, max, v) => Math.min(max, Math.max(min, v));\n const resize = (paneState, change) => {\n const pane = this.pane(paneState.index);\n const splitterSize = this.containerSize();\n const newSize = clamp(paneState.min, paneState.max, paneState.initialSize + change);\n let size = \"\";\n if (this.isPercent(pane.size)) {\n size = (100 * newSize / splitterSize) + \"%\";\n }\n else {\n size = newSize + \"px\";\n }\n pane.size = size;\n this.emit(pane.sizeChange, size);\n };\n const prev = this.pane(state$$1.prev.index);\n const next = this.pane(state$$1.next.index);\n // determine which pane to resize\n if (prev.fixedSize && next.fixedSize) {\n // resizing both panes\n resize(state$$1.prev, delta);\n resize(state$$1.next, -delta);\n }\n else if (next.collapsible || next.fixedSize) {\n // resizing next\n resize(state$$1.next, -delta);\n }\n else {\n // resizing prev\n resize(state$$1.prev, delta);\n }\n this.emit(this.layoutChange, {});\n }\n isDraggable(splitBarIndex) {\n const prev = this.pane(splitBarIndex);\n const next = this.pane(splitBarIndex + 1);\n const betweenResizablePanes = prev.resizable && next.resizable;\n const nearCollapsedPane = prev.collapsed || next.collapsed;\n return betweenResizablePanes && !nearCollapsedPane;\n }\n isStatic(splitBarIndex) {\n const prev = this.pane(splitBarIndex);\n const next = this.pane(splitBarIndex + 1);\n const betweenResizablePanes = prev.resizable && next.resizable;\n const nearCollapsiblePane = prev.collapsible || next.collapsible;\n return !betweenResizablePanes && !nearCollapsiblePane;\n }\n pane(index) {\n if (!this.panes) {\n throw new Error(\"Panes not initialized\");\n }\n if (index < 0 || index >= this.panes.length) {\n throw new Error(\"Index out of range\");\n }\n return this.panes[index];\n }\n configure({ panes, orientation, containerSize }) {\n this.panes = panes;\n this.panes.forEach((pane, index) => {\n pane.order = index * 2;\n pane.orientation = orientation;\n });\n if (isDevMode()) {\n const allFixed = panes.length && !panes.some(pane => !pane.fixedSize);\n if (allFixed) {\n throw new Error(`\n The Splitter should have at least one pane without a set size.\n See ${SIZING_DOC_LINK} for more information.\n `);\n }\n }\n this.containerSize = containerSize;\n }\n isPercent(size) {\n return /%$/.test(size);\n }\n toPixels(size) {\n let result = parseFloat(size);\n if (this.isPercent(size)) {\n result = (this.containerSize() * result / 100);\n }\n return result;\n }\n emit(emitter, args) {\n if (emitter.observers.length) {\n this.zone.run(() => emitter.emit(args));\n }\n }\n}\nSplitterService.ɵfac = function SplitterService_Factory(t) { return new (t || SplitterService)(ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nSplitterService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: SplitterService, factory: SplitterService.ɵfac });\n/** @nocollapse */\nSplitterService.ctorParameters = () => [\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitterService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.NgZone }]; }, null); })();\n\n/**\n * Represents the [Kendo UI Splitter component for Angular]({% slug overview_splitter %}).\n *\n * ```ts-preview\n *\n * @Component({\n * selector: 'my-app',\n * template: `\n * \n *\n * \n *

Inner splitter / left pane

\n *

Resizable and collapsible.

\n *
\n *\n * \n *

Inner splitter / center pane

\n *

Resizable only.

\n *
\n *\n * \n *

Inner splitter / right pane

\n *

Resizable and collapsible.

\n *
\n *\n *
\n * `,\n * styles: [ `\n * h3 { font-size: 1.2em; }\n * h3, p { margin: 10px; padding: 0; }\n * ` ]\n * })\n * class AppComponent {}\n * ```\n */\nclass SplitterComponent {\n constructor(element, splitterService, localization, enclosingPane) {\n this.element = element;\n this.splitterService = splitterService;\n this.localization = localization;\n /**\n * Specifies the orientation of the panes within the Splitter.\n * Panes in a horizontal Splitter are placed horizontally.\n * Panes in a vertical Splitter are placed vertically.\n */\n this.orientation = 'horizontal';\n this.ariaRole = 'splitter';\n if (enclosingPane) {\n enclosingPane.containsSplitter = true;\n }\n // the handler only runs in NgZone if there are bound handlers\n // this line merges both streams\n this.layoutChange = this.splitterService.layoutChange;\n this.configure = this.configure.bind(this);\n }\n get hostClasses() {\n return true;\n }\n get horizontalHostClasses() {\n return this.orientation === 'horizontal';\n }\n get verticalHostClasses() {\n return this.orientation === 'vertical';\n }\n get dir() {\n return this.direction;\n }\n ngAfterContentInit() {\n this.reconfigure();\n }\n ngOnChanges(changes) {\n if (changes.orientation && !changes.orientation.isFirstChange()) {\n this.reconfigure();\n }\n }\n ngOnDestroy() {\n this.unsubscribeChanges();\n }\n reconfigure() {\n this.unsubscribeChanges();\n this.configure();\n this.paneChangesSubscription = this.panes.changes.subscribe(this.configure);\n }\n unsubscribeChanges() {\n if (this.paneChangesSubscription) {\n this.paneChangesSubscription.unsubscribe();\n this.paneChangesSubscription = null;\n }\n }\n configure() {\n this.splitterService.configure({\n panes: this.panes.toArray(),\n orientation: this.orientation,\n containerSize: () => {\n if (this.orientation === 'vertical') {\n return this.element.nativeElement.clientHeight;\n }\n else {\n return this.element.nativeElement.clientWidth;\n }\n }\n });\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n}\nSplitterComponent.ɵfac = function SplitterComponent_Factory(t) { return new (t || SplitterComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(SplitterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(SplitterPaneComponent, 9)); };\nSplitterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SplitterComponent, selectors: [[\"kendo-splitter\"]], contentQueries: function SplitterComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, SplitterPaneComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.panes = _t);\n } }, hostVars: 12, hostBindings: function SplitterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.ariaRole)(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-splitter\", ctx.hostClasses)(\"k-splitter-flex\", ctx.hostClasses)(\"k-splitter-horizontal\", ctx.horizontalHostClasses)(\"k-splitter-vertical\", ctx.verticalHostClasses);\n } }, inputs: { orientation: \"orientation\" }, outputs: { layoutChange: \"layoutChange\" }, exportAs: [\"kendoSplitter\"], features: [ɵngcc0.ɵɵProvidersFeature([\n SplitterService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.spliter'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], ngContentSelectors: _c8, decls: 2, vars: 1, consts: [[4, \"ngFor\", \"ngForOf\"], [\"kendoDraggable\", \"\", 3, \"index\", \"orientation\", 4, \"ngIf\"], [\"kendoDraggable\", \"\", 3, \"index\", \"orientation\"]], template: function SplitterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef(_c7);\n ɵngcc0.ɵɵprojection(0);\n ɵngcc0.ɵɵtemplate(1, SplitterComponent_ng_container_1_Template, 2, 1, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.panes);\n } }, directives: function () { return [ɵngcc1.NgForOf, ɵngcc1.NgIf, SplitterBarComponent, ɵngcc3.DraggableDirective]; }, encapsulation: 2 });\n/** @nocollapse */\nSplitterComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: SplitterService },\n { type: LocalizationService },\n { type: SplitterPaneComponent, decorators: [{ type: Optional }, { type: Host }, { type: Inject, args: [SplitterPaneComponent,] }] }\n];\nSplitterComponent.propDecorators = {\n orientation: [{ type: Input }],\n layoutChange: [{ type: Output }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-splitter',] }, { type: HostBinding, args: ['class.k-splitter-flex',] }],\n horizontalHostClasses: [{ type: HostBinding, args: ['class.k-splitter-horizontal',] }],\n verticalHostClasses: [{ type: HostBinding, args: ['class.k-splitter-vertical',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n ariaRole: [{ type: HostBinding, args: ['attr.role',] }],\n panes: [{ type: ContentChildren, args: [SplitterPaneComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitterComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoSplitter',\n selector: 'kendo-splitter',\n providers: [\n SplitterService,\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.spliter'\n }\n ],\n template: `\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: SplitterService }, { type: ɵngcc2.LocalizationService }, { type: SplitterPaneComponent, decorators: [{\n type: Optional\n }, {\n type: Host\n }, {\n type: Inject,\n args: [SplitterPaneComponent]\n }] }]; }, { orientation: [{\n type: Input\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], layoutChange: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-splitter']\n }, {\n type: HostBinding,\n args: ['class.k-splitter-flex']\n }], horizontalHostClasses: [{\n type: HostBinding,\n args: ['class.k-splitter-horizontal']\n }], verticalHostClasses: [{\n type: HostBinding,\n args: ['class.k-splitter-vertical']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], panes: [{\n type: ContentChildren,\n args: [SplitterPaneComponent]\n }] }); })();\n\n/**\n * Represents the content template of the Kendo UI TabStrip.\n * To define the template, nest a `` tag with the `kendoTabContent` inside the component tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n *

Content 1

\n *
\n *
\n *\n * \n * \n *

Content 2

\n *
\n *
\n *
\n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass TabContentDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTabContentDirective.ɵfac = function TabContentDirective_Factory(t) { return new (t || TabContentDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nTabContentDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TabContentDirective, selectors: [[\"\", \"kendoTabContent\", \"\"]] });\n/** @nocollapse */\nTabContentDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TabContentDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTabContent]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Represents the title template of the Kendo UI TabStrip.\n * To define the template, nest a `` tag with the `kendoTabTitle` directive inside the component tag.\n *\n * @example\n * ```ts-preview\n *\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * Title\n * \n * \n *

Content 1

\n *
\n *
\n *\n * \n * \n *

Content 2

\n *
\n *
\n *
\n * `\n * })\n *\n * class AppComponent {}\n *\n * ```\n */\nclass TabTitleDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nTabTitleDirective.ɵfac = function TabTitleDirective_Factory(t) { return new (t || TabTitleDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef)); };\nTabTitleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: TabTitleDirective, selectors: [[\"\", \"kendoTabTitle\", \"\"]] });\n/** @nocollapse */\nTabTitleDirective.ctorParameters = () => [\n { type: TemplateRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TabTitleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoTabTitle]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef }]; }, null); })();\n\n/**\n * Represents the tab component of the TabStrip.\n */\nclass TabStripTabComponent {\n constructor() {\n this.active = false;\n this._tabContent = new QueryList();\n }\n get tabContent() {\n return this._tabContent.first;\n }\n ngAfterContentInit() {\n this.active = this.selected;\n }\n ngOnChanges(changes) {\n if (changes['selected'] && !changes['selected'].isFirstChange()) { // tslint:disable-line\n this.active = this.selected;\n }\n }\n}\nTabStripTabComponent.ɵfac = function TabStripTabComponent_Factory(t) { return new (t || TabStripTabComponent)(); };\nTabStripTabComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TabStripTabComponent, selectors: [[\"kendo-tabstrip-tab\"]], contentQueries: function TabStripTabComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, TabTitleDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, TabContentDirective, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tabTitle = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx._tabContent = _t);\n } }, inputs: { title: \"title\", disabled: \"disabled\", cssClass: \"cssClass\", selected: \"selected\" }, exportAs: [\"kendoTabStripTab\"], features: [ɵngcc0.ɵɵNgOnChangesFeature], decls: 0, vars: 0, template: function TabStripTabComponent_Template(rf, ctx) { }, encapsulation: 2 });\nTabStripTabComponent.propDecorators = {\n title: [{ type: Input }],\n disabled: [{ type: Input }],\n cssClass: [{ type: Input }],\n selected: [{ type: Input }],\n _tabContent: [{ type: ContentChildren, args: [TabContentDirective,] }],\n tabTitle: [{ type: ContentChild, args: [TabTitleDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TabStripTabComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoTabStripTab',\n selector: 'kendo-tabstrip-tab',\n template: ``\n }]\n }], function () { return []; }, { _tabContent: [{\n type: ContentChildren,\n args: [TabContentDirective]\n }], title: [{\n type: Input\n }], disabled: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], selected: [{\n type: Input\n }], tabTitle: [{\n type: ContentChild,\n args: [TabTitleDirective]\n }] }); })();\n\n/**\n * @hidden\n */\nclass PreventableEvent {\n /**\n * @hidden\n */\n constructor(args) {\n this.prevented = false;\n Object.assign(this, args);\n }\n /**\n * Prevents the default action for a specified event.\n * In this way, the source component suppresses\n * the built-in behavior that follows the event.\n */\n preventDefault() {\n this.prevented = true;\n }\n /**\n * Returns `true` if the event was prevented\n * by any of its subscribers.\n *\n * @returns `true` if the default action was prevented.\n * Otherwise, returns `false`.\n */\n isDefaultPrevented() {\n return this.prevented;\n }\n}\n\n/**\n * Arguments for the `select` event of the TabStrip.\n * The `select` event fires when a tab is selected (clicked).\n */\nclass SelectEvent extends PreventableEvent {\n /**\n * Constructs the event arguments for the `select` event.\n * @param index - The index of the selected tab.\n * @param title - The title of the selected tab.\n */\n constructor(index, title) {\n super();\n this.index = index;\n this.title = title;\n }\n}\n\n/**\n * Represents the [Kendo UI TabStrip component for Angular]({% slug overview_tabstrip %}).\n */\nclass TabStripComponent {\n constructor(localization, renderer, wrapper) {\n this.localization = localization;\n this.renderer = renderer;\n this.wrapper = wrapper;\n /**\n * Enables the tab animation.\n */\n this.animate = true;\n /**\n * Sets the position of the tabs. Defaults to `top`.\n */\n this.tabPosition = 'top';\n /**\n * When set to `true`, the component renders all tabs and they are persisted in the DOM.\n * By default, `keepTabContent` is `false`.\n */\n this.keepTabContent = false;\n /**\n * Fires each time the user selects a tab ([see example]({% slug overview_tabstrip %}#toc-basic-usage)).\n * The event data contains the index of the selected tab and its title.\n */\n this.tabSelect = new EventEmitter();\n this.hostClasses = true;\n /**\n * @hidden\n */\n this._animate = false;\n this.keyBindings = this.computedKeys;\n }\n /**\n * Sets the height of the TabStrip.\n */\n set height(value) {\n this._height = value;\n this.renderer.setStyle(this.wrapper.nativeElement, 'height', value);\n }\n get height() {\n return this._height;\n }\n get tabsAtTop() {\n return this.tabPosition === 'top';\n }\n get tabsAtRight() {\n return this.tabPosition === 'right';\n }\n get tabsAtBottom() {\n return this.tabPosition === 'bottom';\n }\n get tabsAtLeft() {\n return this.tabPosition === 'left';\n }\n get dir() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n /**\n * @hidden\n */\n contentClass(active) {\n const visible = !this.keepTabContent || active;\n return visible ? 'k-content k-state-active' : 'k-content';\n }\n get computedKeys() {\n return {\n [this.invertKeys(Keys.ArrowLeft, Keys.ArrowRight)]: (selectedIndex) => this.prevNavigatableIndex(selectedIndex),\n [this.invertKeys(Keys.ArrowRight, Keys.ArrowLeft)]: (selectedIndex) => this.nextNavigatableIndex(selectedIndex),\n [this.invertKeys(Keys.ArrowDown, Keys.ArrowUp)]: (selectedIndex) => this.nextNavigatableIndex(selectedIndex),\n [this.invertKeys(Keys.ArrowUp, Keys.ArrowDown)]: (selectedIndex) => this.prevNavigatableIndex(selectedIndex),\n [Keys.Home]: () => this.firstNavigatableIndex(),\n [Keys.End]: () => this.lastNavigatableIndex()\n };\n }\n /**\n * @hidden\n */\n get tabsAlignment() {\n return {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n justify: 'space-between'\n }[this.tabAlignment];\n }\n /**\n * @hidden\n */\n invertKeys(original, inverted) {\n return this.localization.rtl ? inverted : original;\n }\n /**\n * @hidden\n */\n onKeyDown(event) {\n if (event.currentTarget !== this.tablist.nativeElement) {\n return;\n }\n const isHorizontal = this.tabPosition === 'top' || this.tabPosition === 'bottom';\n const isArrowUp = event.keyCode === Keys.ArrowUp;\n const isArrowDown = event.keyCode === Keys.ArrowDown;\n const isArrowLeft = event.keyCode === Keys.ArrowLeft;\n const isArrowRight = event.keyCode === Keys.ArrowRight;\n if (isHorizontal && (isArrowUp || isArrowDown)) {\n return;\n }\n if (!isHorizontal && (isArrowLeft || isArrowRight)) {\n return;\n }\n if (event.keyCode === Keys.Space || isArrowUp || isArrowDown || isArrowLeft || isArrowRight || event.keyCode === Keys.Home ||\n event.keyCode === Keys.End || event.keyCode === Keys.PageUp || event.keyCode === Keys.PageDown) {\n event.preventDefault();\n }\n const selectedIndex = this.tabs.toArray().findIndex(tab => tab.active && !tab.disabled);\n if (selectedIndex === -1) {\n this.selectTab(this.firstNavigatableIndex());\n }\n else {\n const getTabIndex = this.keyBindings[event.keyCode];\n if (getTabIndex) {\n const nextIndex = getTabIndex(selectedIndex);\n if (selectedIndex !== nextIndex) {\n this.selectTab(getTabIndex(selectedIndex));\n }\n }\n }\n }\n /**\n * @hidden\n */\n tabPanelId(id) {\n return 'k-tabstrip-tabpanel-' + id;\n }\n /**\n * @hidden\n */\n tabId(id) {\n return 'k-tabstrip-tab-' + id;\n }\n /**\n * Allows the user to select a tab programmatically.\n * @param {number} index - The index of the tab that will be selected.\n */\n selectTab(index) {\n const tab = this.tabs.toArray()[index];\n if (!tab || Boolean(tab.disabled)) {\n return;\n }\n this.tabHeadingContainers.toArray()[index].nativeElement.focus();\n this.emitEvent(tab, index);\n }\n /**\n * @hidden\n */\n onTabClick(originalEvent, tabIndex) {\n if (isFocusable(originalEvent.target)) {\n return;\n }\n this.selectTab(tabIndex);\n }\n ngOnInit() {\n this.localizationChangeSubscription = this.localization\n .changes.subscribe(() => this.keyBindings = this.computedKeys);\n }\n ngOnDestroy() {\n if (this.localizationChangeSubscription) {\n this.localizationChangeSubscription.unsubscribe();\n }\n }\n firstNavigatableIndex() {\n const tabs = this.tabs.toArray();\n for (let i = 0; i < tabs.length; i++) {\n if (!tabs[i].disabled) {\n return i;\n }\n }\n }\n lastNavigatableIndex() {\n const tabs = this.tabs.toArray();\n for (let i = tabs.length - 1; i > 0; i--) {\n if (!tabs[i].disabled) {\n return i;\n }\n }\n }\n prevNavigatableIndex(selectedIndex) {\n if (selectedIndex - 1 < 0) {\n return this.lastNavigatableIndex();\n }\n const tabs = this.tabs.toArray();\n for (let i = selectedIndex - 1; i > -1; i--) {\n if (!tabs[i].disabled) {\n return i;\n }\n if (i === 0) {\n return this.lastNavigatableIndex();\n }\n }\n return selectedIndex;\n }\n nextNavigatableIndex(selectedIndex) {\n if (selectedIndex + 1 >= this.tabs.length) {\n return this.firstNavigatableIndex();\n }\n const tabs = this.tabs.toArray();\n for (let i = selectedIndex + 1; i < tabs.length; i++) {\n if (!tabs[i].disabled) {\n return i;\n }\n if (i + 1 === tabs.length) {\n return this.firstNavigatableIndex();\n }\n }\n }\n emitEvent(tab, selectedIndex) {\n const selectArgs = new SelectEvent(selectedIndex, tab.title);\n this.tabSelect.emit(selectArgs);\n if (!selectArgs.isDefaultPrevented() && !tab.active) {\n this._animate = this.animate;\n this.deactivateAll();\n tab.active = true;\n }\n }\n deactivateAll() {\n this.tabs.forEach((tab) => {\n tab.active = false;\n });\n }\n}\nTabStripComponent.ɵfac = function TabStripComponent_Factory(t) { return new (t || TabStripComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nTabStripComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: TabStripComponent, selectors: [[\"kendo-tabstrip\"]], contentQueries: function TabStripComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, TabStripTabComponent, false);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tabs = _t);\n } }, viewQuery: function TabStripComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵviewQuery(_c9, true);\n ɵngcc0.ɵɵviewQuery(_c10, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tablist = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.tabHeadingContainers = _t);\n } }, hostVars: 17, hostBindings: function TabStripComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.dir);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-tabstrip\", ctx.hostClasses)(\"k-floatwrap\", ctx.hostClasses)(\"k-header\", ctx.hostClasses)(\"k-tabstrip-top\", ctx.tabsAtTop)(\"k-tabstrip-right\", ctx.tabsAtRight)(\"k-tabstrip-bottom\", ctx.tabsAtBottom)(\"k-tabstrip-left\", ctx.tabsAtLeft);\n } }, inputs: { animate: \"animate\", tabPosition: \"tabPosition\", keepTabContent: \"keepTabContent\", height: \"height\", tabAlignment: \"tabAlignment\" }, outputs: { tabSelect: \"tabSelect\" }, exportAs: [\"kendoTabStrip\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tabstrip'\n }\n ])], decls: 6, vars: 2, consts: [[4, \"ngIf\"], [\"heading\", \"\"], [\"content\", \"\"], [4, \"ngTemplateOutlet\"], [\"role\", \"tablist\", 1, \"k-reset\", \"k-tabstrip-items\", 3, \"keydown\"], [\"tablist\", \"\"], [\"role\", \"tab\", 3, \"id\", \"tabIndex\", \"ngClass\", \"k-item\", \"k-state-default\", \"k-state-active\", \"k-state-disabled\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"role\", \"tab\", 3, \"id\", \"tabIndex\", \"ngClass\", \"click\"], [\"tabHeadingContainer\", \"\"], [1, \"k-link\"], [3, \"ngTemplateOutlet\"], [\"ngFor\", \"\", 3, \"ngForOf\"], [\"role\", \"tabpanel\", 3, \"ngClass\", \"tabIndex\", \"id\", 4, \"ngIf\"], [\"role\", \"tabpanel\", 3, \"ngClass\", \"tabIndex\", \"id\"]], template: function TabStripComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, TabStripComponent_ng_container_0_Template, 3, 2, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(1, TabStripComponent_ng_container_1_Template, 3, 2, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(2, TabStripComponent_ng_template_2_Template, 3, 3, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n ɵngcc0.ɵɵtemplate(4, TabStripComponent_ng_template_4_Template, 1, 1, \"ng-template\", null, 2, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.tabsAtBottom);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.tabsAtBottom);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgForOf, ɵngcc1.NgClass], encapsulation: 2, data: { animation: [\n trigger('state', [\n state('active', style({ opacity: 1 })),\n transition('* => active', [\n style({ opacity: 0 }),\n animate('400ms ease-in')\n ])\n ])\n ] } });\n/** @nocollapse */\nTabStripComponent.ctorParameters = () => [\n { type: LocalizationService },\n { type: Renderer2 },\n { type: ElementRef }\n];\nTabStripComponent.propDecorators = {\n height: [{ type: Input }],\n animate: [{ type: Input }],\n tabAlignment: [{ type: Input }],\n tabPosition: [{ type: Input }],\n keepTabContent: [{ type: Input }],\n tablist: [{ type: ViewChild, args: ['tablist',] }],\n tabSelect: [{ type: Output }],\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-tabstrip',] }, { type: HostBinding, args: ['class.k-floatwrap',] }, { type: HostBinding, args: ['class.k-header',] }],\n tabsAtTop: [{ type: HostBinding, args: ['class.k-tabstrip-top',] }],\n tabsAtRight: [{ type: HostBinding, args: ['class.k-tabstrip-right',] }],\n tabsAtBottom: [{ type: HostBinding, args: ['class.k-tabstrip-bottom',] }],\n tabsAtLeft: [{ type: HostBinding, args: ['class.k-tabstrip-left',] }],\n dir: [{ type: HostBinding, args: ['attr.dir',] }],\n tabs: [{ type: ContentChildren, args: [TabStripTabComponent,] }],\n tabHeadingContainers: [{ type: ViewChildren, args: ['tabHeadingContainer',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TabStripComponent, [{\n type: Component,\n args: [{\n animations: [\n trigger('state', [\n state('active', style({ opacity: 1 })),\n transition('* => active', [\n style({ opacity: 0 }),\n animate('400ms ease-in')\n ])\n ])\n ],\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.tabstrip'\n }\n ],\n exportAs: 'kendoTabStrip',\n selector: 'kendo-tabstrip',\n template: `\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n
  • {{ tab.title }}
  • \n \n
    \n \n \n \n \n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }]; }, { animate: [{\n type: Input\n }], tabPosition: [{\n type: Input\n }], keepTabContent: [{\n type: Input\n }], tabSelect: [{\n type: Output\n }], hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-tabstrip']\n }, {\n type: HostBinding,\n args: ['class.k-floatwrap']\n }, {\n type: HostBinding,\n args: ['class.k-header']\n }], height: [{\n type: Input\n }], tabsAtTop: [{\n type: HostBinding,\n args: ['class.k-tabstrip-top']\n }], tabsAtRight: [{\n type: HostBinding,\n args: ['class.k-tabstrip-right']\n }], tabsAtBottom: [{\n type: HostBinding,\n args: ['class.k-tabstrip-bottom']\n }], tabsAtLeft: [{\n type: HostBinding,\n args: ['class.k-tabstrip-left']\n }], dir: [{\n type: HostBinding,\n args: ['attr.dir']\n }], tabAlignment: [{\n type: Input\n }], tablist: [{\n type: ViewChild,\n args: ['tablist']\n }], tabs: [{\n type: ContentChildren,\n args: [TabStripTabComponent]\n }], tabHeadingContainers: [{\n type: ViewChildren,\n args: ['tabHeadingContainer']\n }] }); })();\n\n/**\n * Represents a template that defines the content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerTemplate` directive inside the `` tag.\n * Using this template directive will override all other templates,\n * for example, `kendoDrawerHeaderTemplate` and `kendoDrawerItemTemplate`.\n */\nclass DrawerTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerTemplateDirective.ɵfac = function DrawerTemplateDirective_Factory(t) { return new (t || DrawerTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDrawerTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DrawerTemplateDirective, selectors: [[\"\", \"kendoDrawerTemplate\", \"\"]] });\n/** @nocollapse */\nDrawerTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents a template that defines the item content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerItemTemplate` directive inside the `` tag.\n */\nclass DrawerItemTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerItemTemplateDirective.ɵfac = function DrawerItemTemplateDirective_Factory(t) { return new (t || DrawerItemTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDrawerItemTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DrawerItemTemplateDirective, selectors: [[\"\", \"kendoDrawerItemTemplate\", \"\"]] });\n/** @nocollapse */\nDrawerItemTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerItemTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerItemTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents a template that defines the header content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerHeaderTemplate` directive inside the `` tag.\n */\nclass DrawerHeaderTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerHeaderTemplateDirective.ɵfac = function DrawerHeaderTemplateDirective_Factory(t) { return new (t || DrawerHeaderTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDrawerHeaderTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DrawerHeaderTemplateDirective, selectors: [[\"\", \"kendoDrawerHeaderTemplate\", \"\"]] });\n/** @nocollapse */\nDrawerHeaderTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerHeaderTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerHeaderTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents a template that defines the footer content of the Drawer.\n * To define the template, nest an `` tag\n * with the `kendoDrawerFooterTemplate` directive inside the `` tag.\n */\nclass DrawerFooterTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nDrawerFooterTemplateDirective.ɵfac = function DrawerFooterTemplateDirective_Factory(t) { return new (t || DrawerFooterTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nDrawerFooterTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: DrawerFooterTemplateDirective, selectors: [[\"\", \"kendoDrawerFooterTemplate\", \"\"]] });\n/** @nocollapse */\nDrawerFooterTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerFooterTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoDrawerFooterTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * @hidden\n */\nfunction miniExpandPush(duration, width, miniWidth) {\n return [\n style({ overflow: 'hidden', flexBasis: `${miniWidth}px` }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction miniCollapsePush(duration, width, miniWidth) {\n return [\n style({ overflow: 'hidden', flexBasis: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${miniWidth}px` }))\n ];\n}\n/**\n * @hidden\n *\n */\nfunction miniExpandOverlay(duration, width, miniWidth) {\n return [\n style({ width: `${miniWidth}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', width: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandPush(duration, width) {\n return [\n style({ overflow: 'hidden', flexBasis: '0px' }),\n animate(`${duration}ms ease-in`, style({ flexBasis: `${width}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapsePush(duration, width) {\n return [\n style({ flexBasis: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', flexBasis: `0px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandRTLOverlay(duration) {\n return [\n style({ transform: `translateX(100%)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(0)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandOverlay(duration, position) {\n const translateDir = position !== 'end' ? `-100%` : `100%`;\n return [\n style({ transform: `translateX(${translateDir})` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(0)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction miniCollapseOverlay(duration, width, miniWidth) {\n return [\n style({ width: `${width}px` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', width: `${miniWidth}px` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapseOverlay(duration, position) {\n const translateDir = position !== 'end' ? '-100%' : '100%';\n return [\n style({ transform: `translateX(0)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(${translateDir})` }))\n ];\n}\n/**\n * @hidden\n */\nfunction collapseRTLOverlay(duration) {\n return [\n style({ transform: `translateX(0)` }),\n animate(`${duration}ms ease-in`, style({ overflow: 'hidden', transform: `translateX(100%)` }))\n ];\n}\n/**\n * @hidden\n */\nfunction expandAnimation(settings) {\n const duration = settings.animation.duration;\n const width = settings.width;\n const miniWidth = settings.miniWidth;\n const mode = settings.mode;\n const mini = settings.mini;\n const rtl = settings.rtl;\n const position = settings.position;\n if (mini && mode === 'push') {\n return miniExpandPush(duration, width, miniWidth);\n }\n if (!mini && mode === 'push') {\n return expandPush(duration, width);\n }\n if (!mini && mode === 'overlay') {\n return rtl ? expandRTLOverlay(duration) : expandOverlay(duration, position);\n }\n if (mini && mode === 'overlay') {\n return miniExpandOverlay(duration, width, miniWidth);\n }\n}\n/**\n * @hidden\n */\nfunction collapseAnimation(settings) {\n const duration = settings.animation.duration;\n const width = settings.width;\n const miniWidth = settings.miniWidth;\n const mode = settings.mode;\n const mini = settings.mini;\n const rtl = settings.rtl;\n const position = settings.position;\n if (mini && mode === 'push') {\n return miniCollapsePush(duration, width, miniWidth);\n }\n if (!mini && mode === 'push') {\n return collapsePush(duration, width);\n }\n if (!mini && mode === 'overlay') {\n return rtl ? collapseRTLOverlay(duration) : collapseOverlay(duration, position);\n }\n if (mini && mode === 'overlay') {\n return miniCollapseOverlay(duration, width, miniWidth);\n }\n}\n\n/**\n * Arguments for the `select` event of the Drawer.\n */\nclass DrawerSelectEvent extends PreventableEvent {\n}\n\n/**\n * @hidden\n */\nclass DrawerService {\n constructor() {\n this.selectedIndices = [];\n }\n emit(event, args) {\n const drawer = this.owner;\n const eventArgs = new DrawerSelectEvent(Object.assign({}, args, { sender: drawer }));\n if (hasObservers(drawer[event])) {\n drawer[event].emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n onSelect(selectedIdx) {\n this.selectedIndices = [selectedIdx];\n const drawer = this.owner;\n if (drawer.autoCollapse && !drawer.minimized) {\n drawer.toggle(false);\n }\n }\n initSelection() {\n const items = this.owner.items;\n this.selectedIndices = [];\n for (let i = 0; i < items.length; i++) {\n if (items[i].selected) {\n this.selectedIndices.push(i);\n }\n }\n }\n}\nDrawerService.ɵfac = function DrawerService_Factory(t) { return new (t || DrawerService)(); };\nDrawerService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: DrawerService, factory: DrawerService.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerService, [{\n type: Injectable\n }], function () { return []; }, null); })();\n\nconst DEFAULT_ANIMATION = { type: 'slide', duration: 200 };\n/**\n * Represents the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * \n * \n * \n * \n * \n * `\n * })\n * class AppComponent {\n * public expanded = false;\n *\n * public items: any[] = [\n * { text: 'Inbox', icon: 'k-i-inbox' },\n * { text: 'Notifications', icon: 'k-i-bell' },\n * { text: 'Date', icon: 'k-i-calendar' }\n * ];\n * }\n * ```\n */\nclass DrawerComponent {\n constructor(element, builder, localizationService, drawerService) {\n this.element = element;\n this.builder = builder;\n this.localizationService = localizationService;\n this.drawerService = drawerService;\n this.hostClasses = true;\n /**\n * Specifies the mode in which the Drawer will be displayed.\n *\n * The possible values are:\n * * (Default) `overlay`\n * * `push`\n */\n this.mode = 'overlay';\n /**\n * Specifies the position of the Drawer\n * ([see example]({% slug positioning_drawer %})).\n *\n * The possible values are:\n * * (Default) `start`\n * * `end`\n */\n this.position = 'start';\n /**\n * Enables the mini (compact) view of the Drawer which is displayed when the component is collapsed\n * ([see example]({% slug expandmodespositions_drawer %}#toc-mini-view)).\n */\n this.mini = false;\n /**\n * Specifies the state of the Drawer.\n */\n this.expanded = false;\n /**\n * Defines the width of the Drawer when it is expanded.\n * Defaults to `240`.\n */\n this.width = 240;\n /**\n * Defines the width of the Drawer when the mini view is enabled\n * and the component is collapsed. Defaults to `60`.\n */\n this.miniWidth = 50;\n /**\n * Specifies if the Drawer will be automatically collapsed when an item\n * or the overlay is clicked. Defaults to `true`.\n */\n this.autoCollapse = true;\n /**\n * Specifies the animation settings of the Drawer.\n * ([see example]({% slug interaction_drawer %}#toc-toggling-between-states)).\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`\n * * `false`\n * * `DrawerAnimation`\n * * (Default) `type?: 'slide'`\n * * `duration`—Accepts a number in milliseconds. Defaults to `300ms`.\n */\n this.animation = DEFAULT_ANIMATION;\n /**\n * Fires when the Drawer is expanded and its animation is complete.\n */\n this.expand = new EventEmitter();\n /**\n * Fires when the Drawer is collapsed and its animation is complete.\n */\n this.collapse = new EventEmitter();\n /**\n * Fires when a Drawer item is selected. This event is preventable.\n */\n this.select = new EventEmitter();\n /**\n * Fires when the `expanded` property of the component was updated.\n * Used to provide a two-way binding for the `expanded` property.\n */\n this.expandedChange = new EventEmitter();\n this.animationEnd = new EventEmitter();\n this.rtl = false;\n this._items = [];\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n this.drawerService.owner = this;\n }\n get startPositionClass() {\n return this.position === 'start';\n }\n get endPositionClass() {\n return this.position === 'end';\n }\n get overlayTransofrmStyles() {\n if (this.mode === 'push') {\n return;\n }\n if (this.expanded || this.minimized) {\n return `translateX(0px)`;\n }\n return `translateX(-100%)`;\n }\n get flexStyles() {\n if (this.mode === 'overlay') {\n return;\n }\n if (!this.expanded && !this.minimized) {\n return 0;\n }\n return this.drawerWidth;\n }\n /**\n * The collection of items that will be rendered in the Drawer.\n */\n set items(items) {\n if (isPresent(items)) {\n this._items = items;\n this.drawerService.initSelection();\n }\n }\n get items() {\n return this._items;\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get minimized() {\n return this.mini && !this.expanded;\n }\n /**\n * @hidden\n */\n get drawerWidth() {\n return this.minimized ? this.miniWidth : this.width;\n }\n /**\n * Toggles the visibility of the Drawer.\n *\n * @param expanded? - Boolean. Specifies if the Drawer will be expanded or collapsed.\n */\n toggle(expanded) {\n const previous = this.expanded;\n const current = isPresent(expanded) ? expanded : !previous;\n if (current === previous) {\n return;\n }\n if (current === true) {\n this.setExpanded(true);\n }\n else if (current === false && !this.animation) {\n this.setExpanded(false);\n }\n if (this.animation) {\n this.animationEnd.pipe(take(1))\n .subscribe(() => { this.onAnimationEnd(current); });\n this.animate(current);\n }\n else {\n this[current ? 'expand' : 'collapse'].emit();\n }\n }\n onAnimationEnd(currentExpanded) {\n if (currentExpanded) {\n this.expand.emit();\n }\n else {\n this.setExpanded(false);\n this.collapse.emit();\n }\n }\n setExpanded(value) {\n this.expanded = value;\n this.expandedChange.emit(value);\n }\n animate(expanded) {\n const settings = {\n mode: this.mode,\n mini: this.mini,\n miniWidth: this.miniWidth,\n width: this.width,\n rtl: this.rtl,\n position: this.position,\n animation: (typeof this.animation !== 'boolean') ? this.animation : DEFAULT_ANIMATION\n };\n const animation = expanded ? expandAnimation(settings) : collapseAnimation(settings);\n const player = this.createPlayer(animation, this.element.nativeElement);\n player.play();\n }\n createPlayer(animation, animatedElement) {\n const factory = this.builder.build(animation);\n let player = factory.create(animatedElement);\n player.onDone(() => {\n if (player) {\n this.animationEnd.emit();\n player.destroy();\n player = null;\n }\n });\n return player;\n }\n}\nDrawerComponent.ɵfac = function DrawerComponent_Factory(t) { return new (t || DrawerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc4.AnimationBuilder), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(DrawerService)); };\nDrawerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DrawerComponent, selectors: [[\"kendo-drawer\"]], contentQueries: function DrawerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DrawerTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DrawerFooterTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DrawerHeaderTemplateDirective, true);\n ɵngcc0.ɵɵcontentQuery(dirIndex, DrawerItemTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.drawerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.footerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.headerTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.itemTemplate = _t.first);\n } }, hostVars: 13, hostBindings: function DrawerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵstyleProp(\"transform\", ctx.overlayTransofrmStyles)(\"flex-basis\", ctx.flexStyles, \"px\");\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-drawer\", ctx.hostClasses)(\"k-drawer-start\", ctx.startPositionClass)(\"k-drawer-end\", ctx.endPositionClass);\n } }, inputs: { mode: \"mode\", position: \"position\", mini: \"mini\", expanded: \"expanded\", width: \"width\", miniWidth: \"miniWidth\", autoCollapse: \"autoCollapse\", animation: \"animation\", items: \"items\" }, outputs: { expand: \"expand\", collapse: \"collapse\", select: \"select\", expandedChange: \"expandedChange\" }, exportAs: [\"kendoDrawer\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n DrawerService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer'\n }\n ])], decls: 1, vars: 1, consts: [[\"class\", \"k-drawer-wrapper\", 3, \"width\", 4, \"ngIf\"], [1, \"k-drawer-wrapper\"], [4, \"ngIf\"], [\"kendoDrawerList\", \"\", 1, \"k-drawer-items\", 3, \"items\", \"mini\", \"expanded\", \"itemTemplate\"], [3, \"ngTemplateOutlet\"]], template: function DrawerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerComponent_div_0_Template, 3, 4, \"div\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.expanded || ctx.mini);\n } }, directives: function () { return [ɵngcc1.NgIf, DrawerListComponent, ɵngcc1.NgTemplateOutlet]; }, encapsulation: 2 });\n/** @nocollapse */\nDrawerComponent.ctorParameters = () => [\n { type: ElementRef },\n { type: AnimationBuilder },\n { type: LocalizationService },\n { type: DrawerService }\n];\nDrawerComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-drawer',] }],\n startPositionClass: [{ type: HostBinding, args: ['class.k-drawer-start',] }],\n endPositionClass: [{ type: HostBinding, args: ['class.k-drawer-end',] }],\n overlayTransofrmStyles: [{ type: HostBinding, args: ['style.transform',] }],\n flexStyles: [{ type: HostBinding, args: ['style.flexBasis.px',] }],\n mode: [{ type: Input }],\n position: [{ type: Input }],\n mini: [{ type: Input }],\n expanded: [{ type: Input }],\n width: [{ type: Input }],\n miniWidth: [{ type: Input }],\n autoCollapse: [{ type: Input }],\n items: [{ type: Input }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n animation: [{ type: Input }],\n expand: [{ type: Output }],\n collapse: [{ type: Output }],\n select: [{ type: Output }],\n expandedChange: [{ type: Output }],\n drawerTemplate: [{ type: ContentChild, args: [DrawerTemplateDirective,] }],\n footerTemplate: [{ type: ContentChild, args: [DrawerFooterTemplateDirective,] }],\n headerTemplate: [{ type: ContentChild, args: [DrawerHeaderTemplateDirective,] }],\n itemTemplate: [{ type: ContentChild, args: [DrawerItemTemplateDirective,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoDrawer',\n providers: [\n LocalizationService,\n DrawerService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer'\n }\n ],\n selector: 'kendo-drawer',\n template: `\n
    \n \n \n \n\n
      \n
    \n\n \n \n
    \n\n \n \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc0.ElementRef }, { type: ɵngcc4.AnimationBuilder }, { type: ɵngcc2.LocalizationService }, { type: DrawerService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-drawer']\n }], mode: [{\n type: Input\n }], position: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }], width: [{\n type: Input\n }], miniWidth: [{\n type: Input\n }], autoCollapse: [{\n type: Input\n }], animation: [{\n type: Input\n }], expand: [{\n type: Output\n }], collapse: [{\n type: Output\n }], select: [{\n type: Output\n }], expandedChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], startPositionClass: [{\n type: HostBinding,\n args: ['class.k-drawer-start']\n }], endPositionClass: [{\n type: HostBinding,\n args: ['class.k-drawer-end']\n }], overlayTransofrmStyles: [{\n type: HostBinding,\n args: ['style.transform']\n }], flexStyles: [{\n type: HostBinding,\n args: ['style.flexBasis.px']\n }], items: [{\n type: Input\n }], drawerTemplate: [{\n type: ContentChild,\n args: [DrawerTemplateDirective]\n }], footerTemplate: [{\n type: ContentChild,\n args: [DrawerFooterTemplateDirective]\n }], headerTemplate: [{\n type: ContentChild,\n args: [DrawerHeaderTemplateDirective]\n }], itemTemplate: [{\n type: ContentChild,\n args: [DrawerItemTemplateDirective]\n }] }); })();\n\n/**\n * Serves as a container for the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}) and its content.\n */\nclass DrawerContainerComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.rtl = false;\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n }\n get hostClass() {\n return true;\n }\n get overlayClass() {\n return this.drawer.mode === 'overlay';\n }\n get miniClass() {\n return this.drawer.mini;\n }\n get pushClass() {\n return this.drawer.mode === 'push';\n }\n get isExpandedClass() {\n return this.drawer.expanded;\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * @hidden\n */\n get overlay() {\n return isPresent(this.drawer) &&\n this.drawer.expanded &&\n this.drawer.mode === 'overlay';\n }\n /**\n * @hidden\n */\n closeDrawer() {\n if (this.overlay && this.drawer.autoCollapse) {\n this.drawer.toggle(false);\n }\n }\n}\nDrawerContainerComponent.ɵfac = function DrawerContainerComponent_Factory(t) { return new (t || DrawerContainerComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nDrawerContainerComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DrawerContainerComponent, selectors: [[\"kendo-drawer-container\"]], contentQueries: function DrawerContainerComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵcontentQuery(dirIndex, DrawerComponent, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.drawer = _t.first);\n } }, hostVars: 11, hostBindings: function DrawerContainerComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵclassProp(\"k-drawer-container\", ctx.hostClass)(\"k-drawer-overlay\", ctx.overlayClass)(\"k-drawer-mini\", ctx.miniClass)(\"k-drawer-push\", ctx.pushClass)(\"k-drawer-expanded\", ctx.isExpandedClass);\n } }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer.container'\n }\n ])], ngContentSelectors: _c6, decls: 2, vars: 1, consts: [[\"class\", \"k-overlay\", 3, \"click\", 4, \"ngIf\"], [1, \"k-overlay\", 3, \"click\"]], template: function DrawerContainerComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, DrawerContainerComponent_div_0_Template, 1, 0, \"div\", 0);\n ɵngcc0.ɵɵprojection(1);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.overlay);\n } }, directives: [ɵngcc1.NgIf], encapsulation: 2 });\n/** @nocollapse */\nDrawerContainerComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nDrawerContainerComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-drawer-container',] }],\n overlayClass: [{ type: HostBinding, args: ['class.k-drawer-overlay',] }],\n miniClass: [{ type: HostBinding, args: ['class.k-drawer-mini',] }],\n pushClass: [{ type: HostBinding, args: ['class.k-drawer-push',] }],\n isExpandedClass: [{ type: HostBinding, args: ['class.k-drawer-expanded',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n drawer: [{ type: ContentChild, args: [DrawerComponent,] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerContainerComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-drawer-container',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.drawer.container'\n }\n ],\n template: `\n
    \n \n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, { direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], hostClass: [{\n type: HostBinding,\n args: ['class.k-drawer-container']\n }], overlayClass: [{\n type: HostBinding,\n args: ['class.k-drawer-overlay']\n }], miniClass: [{\n type: HostBinding,\n args: ['class.k-drawer-mini']\n }], pushClass: [{\n type: HostBinding,\n args: ['class.k-drawer-push']\n }], isExpandedClass: [{\n type: HostBinding,\n args: ['class.k-drawer-expanded']\n }], drawer: [{\n type: ContentChild,\n args: [DrawerComponent]\n }] }); })();\n\n/**\n * Represents the content of the [Kendo UI Drawer component for Angular]({% slug overview_drawer %}).\n */\nclass DrawerContentComponent {\n constructor() {\n this.hostClasses = true;\n }\n}\nDrawerContentComponent.ɵfac = function DrawerContentComponent_Factory(t) { return new (t || DrawerContentComponent)(); };\nDrawerContentComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DrawerContentComponent, selectors: [[\"kendo-drawer-content\"]], hostVars: 2, hostBindings: function DrawerContentComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-drawer-content\", ctx.hostClasses);\n } }, ngContentSelectors: _c6, decls: 1, vars: 0, template: function DrawerContentComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nDrawerContentComponent.ctorParameters = () => [];\nDrawerContentComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-drawer-content',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerContentComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-drawer-content',\n template: `\n \n `,\n encapsulation: ViewEncapsulation.None\n }]\n }], function () { return []; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-drawer-content']\n }] }); })();\n\n/**\n * Represents a template that defines the content of the whole Step.\n * To define the template, nest an `` tag\n * with the `kendoStepperStepTemplate` directive inside the `` tag.\n */\nclass StepperStepTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperStepTemplateDirective.ɵfac = function StepperStepTemplateDirective_Factory(t) { return new (t || StepperStepTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nStepperStepTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: StepperStepTemplateDirective, selectors: [[\"\", \"kendoStepperStepTemplate\", \"\"]] });\n/** @nocollapse */\nStepperStepTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperStepTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoStepperStepTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents a template that defines the content of the Step label.\n * To define the template, nest an `` tag\n * with the `kendoStepperLabelTemplate` directive inside the `` tag.\n */\nclass StepperLabelTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperLabelTemplateDirective.ɵfac = function StepperLabelTemplateDirective_Factory(t) { return new (t || StepperLabelTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nStepperLabelTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: StepperLabelTemplateDirective, selectors: [[\"\", \"kendoStepperLabelTemplate\", \"\"]] });\n/** @nocollapse */\nStepperLabelTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperLabelTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoStepperLabelTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Represents a template that defines the content of the Step indicator.\n * To define the template, nest an `` tag\n * with the `kendoStepperIndicatorTemplate` directive inside the `` tag.\n */\nclass StepperIndicatorTemplateDirective {\n constructor(templateRef) {\n this.templateRef = templateRef;\n }\n}\nStepperIndicatorTemplateDirective.ɵfac = function StepperIndicatorTemplateDirective_Factory(t) { return new (t || StepperIndicatorTemplateDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.TemplateRef, 8)); };\nStepperIndicatorTemplateDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: StepperIndicatorTemplateDirective, selectors: [[\"\", \"kendoStepperIndicatorTemplate\", \"\"]] });\n/** @nocollapse */\nStepperIndicatorTemplateDirective.ctorParameters = () => [\n { type: TemplateRef, decorators: [{ type: Optional }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperIndicatorTemplateDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoStepperIndicatorTemplate]'\n }]\n }], function () { return [{ type: ɵngcc0.TemplateRef, decorators: [{\n type: Optional\n }] }]; }, null); })();\n\n/**\n * Arguments for the `activate` event of the Stepper.\n */\nclass StepperActivateEvent extends PreventableEvent {\n}\n\nconst DEFAULT_CURRENT_STEP = 0;\nconst handlers = {};\nhandlers[Keys.ArrowLeft] = 'left';\nhandlers[Keys.ArrowRight] = 'right';\nhandlers[Keys.ArrowUp] = 'up';\nhandlers[Keys.ArrowDown] = 'down';\nhandlers[Keys.Home] = 'home';\nhandlers[Keys.End] = 'end';\nhandlers[Keys.Enter] = 'enter';\nhandlers[Keys.Space] = 'enter';\nconst handlersRTL = Object.assign({}, handlers);\nhandlersRTL[Keys.ArrowLeft] = 'right';\nhandlersRTL[Keys.ArrowRight] = 'left';\n/**\n * @hidden\n */\nclass StepperService {\n constructor(localization, ngZone, changeDetector) {\n this.localization = localization;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.currentStep = DEFAULT_CURRENT_STEP;\n this.triggerValidation = new EventEmitter();\n this.focusedStepChange = new EventEmitter();\n }\n get handlers() {\n return this.localization.rtl ? handlersRTL : handlers;\n }\n emit(event, eventArgs) {\n const stepper = this.owner;\n if (hasObservers(stepper[event])) {\n stepper[event].emit(eventArgs);\n }\n return eventArgs.isDefaultPrevented();\n }\n onActivate(currentIdx, originalEvent) {\n const eventArgs = new StepperActivateEvent({\n index: currentIdx,\n step: this.owner.steps[currentIdx],\n originalEvent: originalEvent,\n sender: this.owner\n });\n this.ngZone.run(() => {\n if (!this.emit('activate', eventArgs)) {\n this.currentStep = currentIdx;\n this.owner['currentStepChange'].emit(currentIdx);\n this.changeDetector.detectChanges();\n }\n });\n }\n validateSteps() {\n this.triggerValidation.emit();\n }\n keydown(e) {\n const current = this.focusedStep || this.currentStep;\n const handler = this.handlers[e.keyCode];\n if (!isPresent(current)) {\n return;\n }\n if (handler) {\n e.preventDefault();\n this[handler](e);\n }\n }\n left() {\n if (!this.isHorizontal) {\n return;\n }\n this.focusPrevStep();\n }\n right() {\n if (!this.isHorizontal) {\n return;\n }\n this.focusNextStep();\n }\n up() {\n if (this.isHorizontal) {\n return;\n }\n this.focusPrevStep();\n }\n down() {\n if (this.isHorizontal) {\n return;\n }\n this.focusNextStep();\n }\n home() {\n this.focusedStep = 0;\n this.focusedStepChange.emit();\n }\n end() {\n this.focusedStep = this.owner.steps.length - 1;\n this.focusedStepChange.emit();\n }\n enter(event) {\n if (this.focusedStep === this.currentStep) {\n return;\n }\n if (this.isStepDisabled(this.focusedStep)) {\n return;\n }\n if (this.owner.linear && this.isPrevOrNextStep(this.focusedStep) === false) {\n return;\n }\n this.onActivate(this.focusedStep, event);\n }\n focus(focusedIdx) {\n this.focusedStep = focusedIdx;\n }\n focusNextStep() {\n if (this.focusedStep < this.owner.steps.length) {\n this.focusedStep += 1;\n this.focusedStepChange.emit();\n }\n }\n focusPrevStep() {\n if (this.focusedStep > 0) {\n this.focusedStep -= 1;\n this.focusedStepChange.emit();\n }\n }\n isStepDisabled(index) {\n return this.owner.steps[index].disabled;\n }\n isPrevOrNextStep(index) {\n return index === this.currentStep + 1 || index === this.currentStep - 1;\n }\n get isHorizontal() {\n return this.owner.orientation === 'horizontal';\n }\n}\nStepperService.ɵfac = function StepperService_Factory(t) { return new (t || StepperService)(ɵngcc0.ɵɵinject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵinject(ɵngcc0.NgZone), ɵngcc0.ɵɵinject(ɵngcc0.ChangeDetectorRef)); };\nStepperService.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: StepperService, factory: StepperService.ɵfac });\n/** @nocollapse */\nStepperService.ctorParameters = () => [\n { type: LocalizationService },\n { type: NgZone },\n { type: ChangeDetectorRef }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperService, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }]; }, null); })();\n\nconst DEFAULT_ANIMATION_DURATION = 400;\n/**\n * Represents the [Kendo UI Stepper component for Angular]({% slug overview_stepper %}).\n *\n * @example\n * ```ts-preview\n * _@Component({\n * selector: 'my-app',\n * template: `\n * \n * \n * `\n * })\n * class AppComponent {\n * public steps: Array = [\n * { label: 'Step One' }, { label: 'Step Two' }, { label: 'Step Three' }\n * ];\n * }\n * ```\n */\nclass StepperComponent {\n constructor(renderer, elem, localization, stepperService) {\n this.renderer = renderer;\n this.elem = elem;\n this.localization = localization;\n this.stepperService = stepperService;\n this.hostClasses = true;\n this.ariaRole = 'navigation';\n this.displayStyle = 'grid';\n /**\n * Specifies the type of the steps in the Stepper.\n *\n * The possible values are:\n * * (Default) `indicator`\n * * `label`\n * * `full`\n */\n this.stepType = 'indicator';\n /**\n * Specifies the linear flow of the Stepper.\n *\n * @default true\n */\n this.linear = true;\n /**\n * Specifies the orientation of the Stepper\n * ([see example]({% slug orientation_stepper %})).\n *\n * The possible values are:\n * * (Default) `horizontal`\n * * `vertical`\n */\n this.orientation = 'horizontal';\n /**\n * Specifies the duration of the progress indicator animation in milliseconds. Defaults to `400ms`.\n *\n * The possible values are:\n * * Boolean\n * * (Default) `true`\n * * false\n * * Number\n */\n this.animation = true;\n /**\n * Fires when a step is about to be activated. This event is preventable.\n */\n this.activate = new EventEmitter();\n /**\n * Fires when the `currentStep` property of the component was updated.\n * Used to provide a two-way binding for the `currentStep` property.\n */\n this.currentStepChange = new EventEmitter();\n this._steps = [];\n this.dynamicRTLSubscription = this.localization.changes.subscribe(({ rtl }) => {\n this.direction = rtl ? 'rtl' : 'ltr';\n });\n this.stepperService.owner = this;\n }\n get linearClass() {\n return this.linear;\n }\n /**\n * The index of the current step.\n */\n set currentStep(value) {\n this.stepperService.currentStep = value;\n }\n get currentStep() {\n return this.stepperService.currentStep;\n }\n /**\n * The collection of steps that will be rendered in the Stepper.\n * ([see example]({% slug step_appearance_stepper %}))\n */\n set steps(steps) {\n if (isPresent(steps) && steps.length > 0) {\n this._steps = steps;\n }\n }\n get steps() {\n return this._steps;\n }\n ngOnInit() {\n this.applyHostStyling();\n }\n ngOnChanges(changes) {\n if (changes.steps && !changes.steps.firstChange) {\n this.applyHostStyling();\n }\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n /**\n * Manually triggers the validity check configured by the [isValid]({% slug api_layout_stepperstep %}#toc-isvalid) property of the steps.\n *\n * Steps that have their [validate]({% slug api_layout_stepperstep %}#toc-validate) property set to `false`, will not be validated.\n */\n validateSteps() {\n this.stepperService.validateSteps();\n }\n applyHostStyling() {\n const stepFramesStyle = this.orientation === 'horizontal' ? 'grid-template-columns' : 'grid-template-rows';\n const stepFramesValue = `repeat(${this.steps.length * 2}, 1fr)`;\n this.renderer.setStyle(this.elem.nativeElement, stepFramesStyle, stepFramesValue);\n }\n /**\n * @hidden\n */\n get progressAnimation() {\n return { duration: this.animationDuration };\n }\n /**\n * @hidden\n */\n get animationDuration() {\n if (typeof this.animation === 'number') {\n return this.animation;\n }\n if (typeof this.animation === 'boolean' && this.animation) {\n return DEFAULT_ANIMATION_DURATION;\n }\n return 0;\n }\n /**\n * @hidden\n */\n get stepsListStyling() {\n if (this.orientation === 'horizontal') {\n return { 'grid-column-start': 1, 'grid-column-end': -1 };\n }\n return { 'grid-row-start': 1, 'grid-row-end': -1 };\n }\n /**\n * @hidden\n */\n get progressBarStyling() {\n if (this.orientation === 'horizontal') {\n return {\n 'grid-column-start': 2,\n 'grid-column-end': this.steps.length * 2\n };\n }\n return {\n 'grid-row-start': 2,\n 'grid-row-end': this.steps.length * 2\n };\n }\n /***\n * @hidden\n */\n get isHorizontal() {\n return this.stepperService.isHorizontal;\n }\n}\nStepperComponent.ɵfac = function StepperComponent_Factory(t) { return new (t || StepperComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(StepperService)); };\nStepperComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StepperComponent, selectors: [[\"kendo-stepper\"]], contentQueries: function StepperComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, StepperStepTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, StepperLabelTemplateDirective, true);\n ɵngcc0.ɵɵstaticContentQuery(dirIndex, StepperIndicatorTemplateDirective, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.stepTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.labelTemplate = _t.first);\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.indicatorTemplate = _t.first);\n } }, hostVars: 10, hostBindings: function StepperComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"role\", ctx.ariaRole)(\"dir\", ctx.direction);\n ɵngcc0.ɵɵstyleProp(\"display\", ctx.displayStyle);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClasses)(\"k-stepper\", ctx.hostClasses)(\"k-stepper-linear\", ctx.linearClass);\n } }, inputs: { stepType: \"stepType\", linear: \"linear\", orientation: \"orientation\", animation: \"animation\", currentStep: \"currentStep\", steps: \"steps\", successIcon: \"successIcon\", errorIcon: \"errorIcon\" }, outputs: { activate: \"activate\", currentStepChange: \"currentStepChange\" }, exportAs: [\"kendoStepper\"], features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n StepperService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stepper'\n }\n ]), ɵngcc0.ɵɵNgOnChangesFeature], decls: 4, vars: 16, consts: [[\"kendoStepperLocalizedMessages\", \"\", 6, \"optional\"], [\"kendoStepperList\", \"\", 1, \"k-step-list\", 3, \"stepType\", \"linear\", \"orientation\", \"steps\", \"currentStep\", \"successIcon\", \"errorIcon\", \"indicatorTemplate\", \"labelTemplate\", \"stepTemplate\", \"ngStyle\"], [3, \"animation\", \"max\", \"label\", \"orientation\", \"reverse\", \"value\", \"ngStyle\", 4, \"ngIf\"], [3, \"animation\", \"max\", \"label\", \"orientation\", \"reverse\", \"value\", \"ngStyle\"]], template: function StepperComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementContainerStart(0, 0);\n ɵngcc0.ɵɵi18nAttributes(1, _c13);\n ɵngcc0.ɵɵelementContainerEnd();\n ɵngcc0.ɵɵelement(2, \"ol\", 1);\n ɵngcc0.ɵɵtemplate(3, StepperComponent_kendo_progressbar_3_Template, 1, 8, \"kendo-progressbar\", 2);\n } if (rf & 2) {\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassProp(\"k-step-list-horizontal\", ctx.isHorizontal)(\"k-step-list-vertical\", !ctx.isHorizontal);\n ɵngcc0.ɵɵproperty(\"stepType\", ctx.stepType)(\"linear\", ctx.linear)(\"orientation\", ctx.orientation)(\"steps\", ctx.steps)(\"currentStep\", ctx.currentStep)(\"successIcon\", ctx.successIcon)(\"errorIcon\", ctx.errorIcon)(\"indicatorTemplate\", ctx.indicatorTemplate == null ? null : ctx.indicatorTemplate.templateRef)(\"labelTemplate\", ctx.labelTemplate == null ? null : ctx.labelTemplate.templateRef)(\"stepTemplate\", ctx.stepTemplate == null ? null : ctx.stepTemplate.templateRef)(\"ngStyle\", ctx.stepsListStyling);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.steps.length > 0);\n } }, directives: function () { return [LocalizedMessagesDirective,\n StepperListComponent, ɵngcc1.NgStyle, ɵngcc1.NgIf, ɵngcc5.ProgressBarComponent]; }, encapsulation: 2 });\n/** @nocollapse */\nStepperComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef },\n { type: LocalizationService },\n { type: StepperService }\n];\nStepperComponent.propDecorators = {\n hostClasses: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-stepper',] }],\n linearClass: [{ type: HostBinding, args: ['class.k-stepper-linear',] }],\n ariaRole: [{ type: HostBinding, args: ['attr.role',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n displayStyle: [{ type: HostBinding, args: ['style.display',] }],\n stepType: [{ type: Input }],\n linear: [{ type: Input }],\n orientation: [{ type: Input }],\n currentStep: [{ type: Input }],\n steps: [{ type: Input }],\n successIcon: [{ type: Input }],\n errorIcon: [{ type: Input }],\n animation: [{ type: Input }],\n activate: [{ type: Output }],\n currentStepChange: [{ type: Output }],\n stepTemplate: [{ type: ContentChild, args: [StepperStepTemplateDirective, { static: true },] }],\n labelTemplate: [{ type: ContentChild, args: [StepperLabelTemplateDirective, { static: true },] }],\n indicatorTemplate: [{ type: ContentChild, args: [StepperIndicatorTemplateDirective, { static: true },] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperComponent, [{\n type: Component,\n args: [{\n exportAs: 'kendoStepper',\n providers: [\n LocalizationService,\n StepperService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.stepper'\n }\n ],\n selector: 'kendo-stepper',\n template: `\n \n \n
      \n
    \n\n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }, { type: ɵngcc2.LocalizationService }, { type: StepperService }]; }, { hostClasses: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-stepper']\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], displayStyle: [{\n type: HostBinding,\n args: ['style.display']\n }], stepType: [{\n type: Input\n }], linear: [{\n type: Input\n }], orientation: [{\n type: Input\n }], animation: [{\n type: Input\n }], activate: [{\n type: Output\n }], currentStepChange: [{\n type: Output\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], linearClass: [{\n type: HostBinding,\n args: ['class.k-stepper-linear']\n }], currentStep: [{\n type: Input\n }], steps: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], stepTemplate: [{\n type: ContentChild,\n args: [StepperStepTemplateDirective, { static: true }]\n }], labelTemplate: [{\n type: ContentChild,\n args: [StepperLabelTemplateDirective, { static: true }]\n }], indicatorTemplate: [{\n type: ContentChild,\n args: [StepperIndicatorTemplateDirective, { static: true }]\n }] }); })();\n\nconst SIZE_CLASSES = {\n 'small': 'k-avatar-sm',\n 'medium': 'k-avatar-md',\n 'large': 'k-avatar-lg'\n};\nconst SHAPE_CLASSES = {\n 'circle': 'k-avatar-circle',\n 'square': 'k-avatar-square',\n 'rectangle': 'k-avatar-rectangle',\n 'rounded': 'k-avatar-rounded'\n};\n/**\n * Displays images, icons or initials representing people or other entities.\n */\nclass AvatarComponent {\n constructor(renderer, element) {\n this.renderer = renderer;\n this.element = element;\n this.hostClass = true;\n /**\n * Specifies the appearance fill style of the avatar.\n *\n * The possible values are:\n * * `solid` (Default)\n * * `outline`\n *\n */\n this.fill = 'solid';\n /**\n * Sets a border to the avatar.\n */\n this.border = false;\n this._themeColor = 'primary';\n this._size = 'medium';\n this._shape = 'square';\n this.avatar = this.element.nativeElement;\n }\n /**\n * @hidden\n */\n get solidClass() {\n return this.fill === 'solid';\n }\n /**\n * @hidden\n */\n get outlineClass() {\n return this.fill === 'outline';\n }\n /**\n * @hidden\n */\n get borderClass() {\n return this.border;\n }\n /**\n * @hidden\n */\n get flexBasis() {\n return this.width;\n }\n /**\n * Sets the shape for the avatar.\n *\n * Possible values are:\n * * (Default) `square`\n * * `circle`\n * * `rectangle`\n * * `rounded`\n *\n */\n set shape(shape) {\n this.renderer.removeClass(this.avatar, SHAPE_CLASSES[this.shape]);\n this.renderer.addClass(this.avatar, SHAPE_CLASSES[shape]);\n this._shape = shape;\n }\n get shape() {\n return this._shape;\n }\n /**\n * Specifies the size of the avatar\n * ([see example]({% slug appearance_avatar %}#toc-size)).\n *\n * The possible values are:\n * * `small`\n * * `medium` (Default)\n * * `large`\n *\n */\n set size(size) {\n this.renderer.removeClass(this.avatar, SIZE_CLASSES[this.size]);\n this.renderer.addClass(this.avatar, SIZE_CLASSES[size]);\n this._size = size;\n }\n get size() {\n return this._size;\n }\n /**\n * Specifies the theme color of the avatar.\n * The theme color will be applied as background and border color, while also amending the text color accordingly.\n *\n * The possible values are:\n * * `primary` (Default)—Applies coloring based on primary theme color.\n * * `secondary`—Applies coloring based on secondary theme color.\n * * `tertiary`— Applies coloring based on tertiary theme color.\n * * `inherit`— Applies inherited coloring value.\n * * `info`—Applies coloring based on info theme color.\n * * `success`— Applies coloring based on success theme color.\n * * `warning`— Applies coloring based on warning theme color.\n * * `error`— Applies coloring based on error theme color.\n * * `dark`— Applies coloring based on dark theme color.\n * * `light`— Applies coloring based on light theme color.\n * * `inverse`— Applies coloring based on inverted theme color.\n *\n */\n set themeColor(themeColor) {\n this.renderer.removeClass(this.avatar, `k-avatar-${this.themeColor}`);\n this.renderer.addClass(this.avatar, `k-avatar-${themeColor}`);\n this._themeColor = themeColor;\n }\n get themeColor() {\n return this._themeColor;\n }\n /**\n * @hidden\n */\n get avatarWidth() {\n return this.width;\n }\n /**\n * @hidden\n */\n get avatarHeight() {\n return this.height;\n }\n ngAfterViewInit() {\n this.setAvatarClasses();\n }\n /**\n * @hidden\n */\n get imageUrl() {\n return `url(${this.imageSrc})`;\n }\n ngOnInit() {\n this.verifyProperties();\n }\n /**\n * @hidden\n */\n iconClasses() {\n if (this.icon) {\n return `k-icon k-i-${this.icon}`;\n }\n if (this.iconClass) {\n return `${this.iconClass}`;\n }\n }\n /**\n * @hidden\n */\n get customAvatar() {\n return !(this.imageSrc || this.initials || this.icon || this.iconClass);\n }\n verifyProperties() {\n if (!isDevMode()) {\n return;\n }\n const inputs = [this.icon || this.iconClass, this.imageSrc, this.initials];\n const inputsLength = inputs.filter((value) => value).length;\n if (inputsLength > 1) {\n throw new Error(`\n Invalid property configuration given.\n The kendo-avatar component can accept only one of:\n icon, imageSrc or initials properties.\n `);\n }\n }\n setAvatarClasses() {\n this.renderer.addClass(this.avatar, SHAPE_CLASSES[this.shape]);\n this.renderer.addClass(this.avatar, `k-avatar-${this.themeColor}`);\n this.renderer.addClass(this.avatar, SIZE_CLASSES[this.size]);\n }\n}\nAvatarComponent.ɵfac = function AvatarComponent_Factory(t) { return new (t || AvatarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nAvatarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: AvatarComponent, selectors: [[\"kendo-avatar\"]], hostVars: 14, hostBindings: function AvatarComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"flex-basis\", ctx.flexBasis)(\"width\", ctx.avatarWidth)(\"height\", ctx.avatarHeight);\n ɵngcc0.ɵɵclassProp(\"k-avatar\", ctx.hostClass)(\"k-avatar-solid\", ctx.solidClass)(\"k-avatar-outline\", ctx.outlineClass)(\"k-avatar-bordered\", ctx.borderClass);\n } }, inputs: { fill: \"fill\", border: \"border\", shape: \"shape\", size: \"size\", themeColor: \"themeColor\", iconClass: \"iconClass\", width: \"width\", height: \"height\", cssStyle: \"cssStyle\", initials: \"initials\", icon: \"icon\", imageSrc: \"imageSrc\" }, ngContentSelectors: _c6, decls: 4, vars: 4, consts: [[4, \"ngIf\"], [1, \"k-avatar-image\", 3, \"ngStyle\"], [1, \"k-avatar-text\", 3, \"ngStyle\"], [1, \"k-avatar-icon\", 3, \"ngStyle\", \"ngClass\"]], template: function AvatarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, AvatarComponent_0_Template, 1, 0, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, AvatarComponent_ng_container_1_Template, 2, 3, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(2, AvatarComponent_ng_container_2_Template, 3, 2, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(3, AvatarComponent_ng_container_3_Template, 2, 2, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.customAvatar);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.imageSrc);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.initials);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.icon || ctx.iconClass);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgStyle, ɵngcc1.NgClass], encapsulation: 2 });\n/** @nocollapse */\nAvatarComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: ElementRef }\n];\nAvatarComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-avatar',] }],\n solidClass: [{ type: HostBinding, args: ['class.k-avatar-solid',] }],\n outlineClass: [{ type: HostBinding, args: ['class.k-avatar-outline',] }],\n borderClass: [{ type: HostBinding, args: ['class.k-avatar-bordered',] }],\n flexBasis: [{ type: HostBinding, args: ['style.flexBasis',] }],\n shape: [{ type: Input }],\n size: [{ type: Input }],\n themeColor: [{ type: Input }],\n fill: [{ type: Input }],\n border: [{ type: Input }],\n iconClass: [{ type: Input }],\n width: [{ type: Input }],\n avatarWidth: [{ type: HostBinding, args: ['style.width',] }],\n height: [{ type: Input }],\n avatarHeight: [{ type: HostBinding, args: ['style.height',] }],\n cssStyle: [{ type: Input }],\n initials: [{ type: Input }],\n icon: [{ type: Input }],\n imageSrc: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AvatarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-avatar',\n template: `\n \n\n \n
    \n
    \n\n \n {{ initials.substring(0, 2) }}\n \n\n \n \n \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.ElementRef }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-avatar']\n }], fill: [{\n type: Input\n }], border: [{\n type: Input\n }], solidClass: [{\n type: HostBinding,\n args: ['class.k-avatar-solid']\n }], outlineClass: [{\n type: HostBinding,\n args: ['class.k-avatar-outline']\n }], borderClass: [{\n type: HostBinding,\n args: ['class.k-avatar-bordered']\n }], flexBasis: [{\n type: HostBinding,\n args: ['style.flexBasis']\n }], shape: [{\n type: Input\n }], size: [{\n type: Input\n }], themeColor: [{\n type: Input\n }], avatarWidth: [{\n type: HostBinding,\n args: ['style.width']\n }], avatarHeight: [{\n type: HostBinding,\n args: ['style.height']\n }], iconClass: [{\n type: Input\n }], width: [{\n type: Input\n }], height: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }], initials: [{\n type: Input\n }], icon: [{\n type: Input\n }], imageSrc: [{\n type: Input\n }] }); })();\n\n/**\n * Represents the [Kendo UI Card component for Angular]({% slug overview_card %})\n */\nclass CardComponent {\n constructor(localizationService) {\n this.localizationService = localizationService;\n this.hostClass = true;\n /**\n * Specifies the layout of the Card content.\n *\n * The possible values are:\n * * (Default) `vertical`\n * * `horizontal`\n *\n */\n this.orientation = 'vertical';\n /**\n * Defines the width of the Card.\n * Defaults to `285px`.\n */\n this.width = '285px';\n this.rtl = false;\n this.dynamicRTLSubscription = this.localizationService.changes.subscribe(({ rtl }) => {\n this.rtl = rtl;\n this.direction = this.rtl ? 'rtl' : 'ltr';\n });\n }\n get widthStyle() {\n return this.width;\n }\n get vertical() {\n return this.orientation === 'vertical';\n }\n get horizontal() {\n return this.orientation === 'horizontal';\n }\n ngOnDestroy() {\n if (this.dynamicRTLSubscription) {\n this.dynamicRTLSubscription.unsubscribe();\n }\n }\n}\nCardComponent.ɵfac = function CardComponent_Factory(t) { return new (t || CardComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nCardComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CardComponent, selectors: [[\"kendo-card\"]], hostVars: 11, hostBindings: function CardComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"dir\", ctx.direction);\n ɵngcc0.ɵɵstyleProp(\"width\", ctx.widthStyle);\n ɵngcc0.ɵɵclassProp(\"k-widget\", ctx.hostClass)(\"k-card\", ctx.hostClass)(\"k-card-vertical\", ctx.vertical)(\"k-card-horizontal\", ctx.horizontal);\n } }, inputs: { orientation: \"orientation\", width: \"width\" }, features: [ɵngcc0.ɵɵProvidersFeature([\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.card.component'\n }\n ])], ngContentSelectors: _c6, decls: 1, vars: 0, template: function CardComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\n/** @nocollapse */\nCardComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\nCardComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-widget',] }, { type: HostBinding, args: ['class.k-card',] }],\n widthStyle: [{ type: HostBinding, args: ['style.width',] }],\n vertical: [{ type: HostBinding, args: ['class.k-card-vertical',] }],\n horizontal: [{ type: HostBinding, args: ['class.k-card-horizontal',] }],\n direction: [{ type: HostBinding, args: ['attr.dir',] }],\n orientation: [{ type: Input }],\n width: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-card',\n providers: [\n LocalizationService,\n {\n provide: L10N_PREFIX,\n useValue: 'kendo.card.component'\n }\n ],\n template: `\n \n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-widget']\n }, {\n type: HostBinding,\n args: ['class.k-card']\n }], orientation: [{\n type: Input\n }], width: [{\n type: Input\n }], direction: [{\n type: HostBinding,\n args: ['attr.dir']\n }], widthStyle: [{\n type: HostBinding,\n args: ['style.width']\n }], vertical: [{\n type: HostBinding,\n args: ['class.k-card-vertical']\n }], horizontal: [{\n type: HostBinding,\n args: ['class.k-card-horizontal']\n }] }); })();\n\n/**\n * Specifies the content in the Card header.\n */\nclass CardHeaderComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardHeaderComponent.ɵfac = function CardHeaderComponent_Factory(t) { return new (t || CardHeaderComponent)(); };\nCardHeaderComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CardHeaderComponent, selectors: [[\"kendo-card-header\"]], hostVars: 2, hostBindings: function CardHeaderComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-header\", ctx.hostClass);\n } }, ngContentSelectors: _c6, decls: 1, vars: 0, template: function CardHeaderComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nCardHeaderComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-header',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardHeaderComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-card-header',\n template: `\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-header']\n }] }); })();\n\n/**\n * Specifies the content in the Card body.\n */\nclass CardBodyComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardBodyComponent.ɵfac = function CardBodyComponent_Factory(t) { return new (t || CardBodyComponent)(); };\nCardBodyComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CardBodyComponent, selectors: [[\"kendo-card-body\"]], hostVars: 2, hostBindings: function CardBodyComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-body\", ctx.hostClass);\n } }, ngContentSelectors: _c6, decls: 1, vars: 0, template: function CardBodyComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nCardBodyComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-body',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardBodyComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-card-body',\n template: `\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-body']\n }] }); })();\n\n/**\n * Specifies the content in the Card footer.\n */\nclass CardFooterComponent {\n constructor() {\n this.hostClass = true;\n }\n}\nCardFooterComponent.ɵfac = function CardFooterComponent_Factory(t) { return new (t || CardFooterComponent)(); };\nCardFooterComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CardFooterComponent, selectors: [[\"kendo-card-footer\"]], hostVars: 2, hostBindings: function CardFooterComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-footer\", ctx.hostClass);\n } }, ngContentSelectors: _c6, decls: 1, vars: 0, template: function CardFooterComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵprojection(0);\n } }, encapsulation: 2 });\nCardFooterComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-footer',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardFooterComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-card-footer',\n template: `\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-footer']\n }] }); })();\n\n/**\n * Specifies the action buttons of the Card.\n * * ([see example]({% slug actions_card %})).\n */\nclass CardActionsComponent {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the layout of the Card action buttons.\n *\n * * The possible values are:\n * * (Default) `horizontal`\n * * `vertical`\n *\n */\n this.orientation = 'horizontal';\n /**\n * Specifies the layout of the Card action buttons.\n *\n * The possible values are:\n * * (Default) `start`\n * * `center`\n * * `end`\n * * `stretched`\n *\n */\n this.layout = 'start';\n /**\n * Fires when the user clicks an action button.\n */\n this.action = new EventEmitter();\n }\n get stretchedClass() {\n return this.layout === 'stretched';\n }\n get startClass() {\n return this.layout === 'start';\n }\n get endClass() {\n return this.layout === 'end';\n }\n get centerClass() {\n return this.layout === 'center';\n }\n get verticalClass() {\n return this.orientation === 'vertical';\n }\n get horizontalClass() {\n return this.orientation === 'horizontal';\n }\n /**\n * @hidden\n */\n onClick(action) {\n this.action.emit(action);\n }\n /**\n * @hidden\n */\n actionTemplate() {\n return this.actions instanceof TemplateRef;\n }\n}\nCardActionsComponent.ɵfac = function CardActionsComponent_Factory(t) { return new (t || CardActionsComponent)(); };\nCardActionsComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CardActionsComponent, selectors: [[\"kendo-card-actions\"]], hostVars: 14, hostBindings: function CardActionsComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-actions\", ctx.hostClass)(\"k-card-actions-stretched\", ctx.stretchedClass)(\"k-card-actions-start\", ctx.startClass)(\"k-card-actions-end\", ctx.endClass)(\"k-card-actions-center\", ctx.centerClass)(\"k-card-actions-vertical\", ctx.verticalClass)(\"k-card-actions-horizontal\", ctx.horizontalClass);\n } }, inputs: { orientation: \"orientation\", layout: \"layout\", actions: \"actions\" }, outputs: { action: \"action\" }, ngContentSelectors: _c6, decls: 3, vars: 3, consts: [[4, \"ngIf\"], [\"type\", \"button\", \"class\", \"k-button\", 3, \"k-primary\", \"k-flat\", \"click\", 4, \"ngFor\", \"ngForOf\"], [\"type\", \"button\", 1, \"k-button\", 3, \"click\"], [3, \"ngTemplateOutlet\"]], template: function CardActionsComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵprojectionDef();\n ɵngcc0.ɵɵtemplate(0, CardActionsComponent_0_Template, 1, 0, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, CardActionsComponent_ng_container_1_Template, 2, 1, \"ng-container\", 0);\n ɵngcc0.ɵɵtemplate(2, CardActionsComponent_2_Template, 1, 1, undefined, 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actions);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.actionTemplate());\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.actionTemplate());\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgForOf, ɵngcc1.NgTemplateOutlet], encapsulation: 2 });\nCardActionsComponent.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-actions',] }],\n stretchedClass: [{ type: HostBinding, args: ['class.k-card-actions-stretched',] }],\n startClass: [{ type: HostBinding, args: ['class.k-card-actions-start',] }],\n endClass: [{ type: HostBinding, args: ['class.k-card-actions-end',] }],\n centerClass: [{ type: HostBinding, args: ['class.k-card-actions-center',] }],\n verticalClass: [{ type: HostBinding, args: ['class.k-card-actions-vertical',] }],\n horizontalClass: [{ type: HostBinding, args: ['class.k-card-actions-horizontal',] }],\n orientation: [{ type: Input }],\n layout: [{ type: Input }],\n actions: [{ type: Input }],\n action: [{ type: Output }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardActionsComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-card-actions',\n template: `\n \n\n \n \n \n\n \n `\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-actions']\n }], orientation: [{\n type: Input\n }], layout: [{\n type: Input\n }], action: [{\n type: Output\n }], stretchedClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-stretched']\n }], startClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-start']\n }], endClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-end']\n }], centerClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-center']\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-vertical']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-card-actions-horizontal']\n }], actions: [{\n type: Input\n }] }); })();\n\n/**\n * Specifies a separator in the content of the Card.\n */\nclass CardSeparatorDirective {\n constructor() {\n this.hostClass = true;\n /**\n * Specifies the orientation of the Card separator.\n *\n * The possible values are:\n * (Default) `horizontal`\n * `vertical`\n */\n this.orientation = 'horizontal';\n }\n get verticalClass() {\n return this.orientation === 'vertical';\n }\n get horizontalClass() {\n return this.orientation === 'horizontal';\n }\n}\nCardSeparatorDirective.ɵfac = function CardSeparatorDirective_Factory(t) { return new (t || CardSeparatorDirective)(); };\nCardSeparatorDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CardSeparatorDirective, selectors: [[\"\", \"kendoCardSeparator\", \"\"]], hostVars: 8, hostBindings: function CardSeparatorDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵstyleProp(\"color\", ctx.color);\n ɵngcc0.ɵɵclassProp(\"k-card-separator\", ctx.hostClass)(\"k-separator-vertical\", ctx.verticalClass)(\"k-separator-horizontal\", ctx.horizontalClass);\n } }, inputs: { orientation: \"orientation\", color: \"color\" } });\nCardSeparatorDirective.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-separator',] }],\n verticalClass: [{ type: HostBinding, args: ['class.k-separator-vertical',] }],\n horizontalClass: [{ type: HostBinding, args: ['class.k-separator-horizontal',] }],\n color: [{ type: HostBinding, args: ['style.color',] }, { type: Input }],\n orientation: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardSeparatorDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCardSeparator]'\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-separator']\n }], orientation: [{\n type: Input\n }], verticalClass: [{\n type: HostBinding,\n args: ['class.k-separator-vertical']\n }], horizontalClass: [{\n type: HostBinding,\n args: ['class.k-separator-horizontal']\n }], color: [{\n type: HostBinding,\n args: ['style.color']\n }, {\n type: Input\n }] }); })();\n\n/**\n * Specifies the text and styles for the title of the Card.\n */\nclass CardTitleDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardTitleDirective.ɵfac = function CardTitleDirective_Factory(t) { return new (t || CardTitleDirective)(); };\nCardTitleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CardTitleDirective, selectors: [[\"\", \"kendoCardTitle\", \"\"]], hostVars: 2, hostBindings: function CardTitleDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-title\", ctx.hostClass);\n } } });\nCardTitleDirective.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-title',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardTitleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCardTitle]'\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-title']\n }] }); })();\n\n/**\n * Specifies the text and styles for the subtitle of the Card.\n */\nclass CardSubtitleDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardSubtitleDirective.ɵfac = function CardSubtitleDirective_Factory(t) { return new (t || CardSubtitleDirective)(); };\nCardSubtitleDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CardSubtitleDirective, selectors: [[\"\", \"kendoCardSubtitle\", \"\"]], hostVars: 2, hostBindings: function CardSubtitleDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-subtitle\", ctx.hostClass);\n } } });\nCardSubtitleDirective.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-subtitle',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardSubtitleDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCardSubtitle]'\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-subtitle']\n }] }); })();\n\n/**\n * Specifies any media that will be displayed and aligned in the Card.\n */\nclass CardMediaDirective {\n constructor() {\n this.hostClass = true;\n }\n}\nCardMediaDirective.ɵfac = function CardMediaDirective_Factory(t) { return new (t || CardMediaDirective)(); };\nCardMediaDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: CardMediaDirective, selectors: [[\"\", \"kendoCardMedia\", \"\"]], hostVars: 2, hostBindings: function CardMediaDirective_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-card-media\", ctx.hostClass);\n } } });\nCardMediaDirective.propDecorators = {\n hostClass: [{ type: HostBinding, args: ['class.k-card-media',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardMediaDirective, [{\n type: Directive,\n args: [{\n selector: '[kendoCardMedia]'\n }]\n }], function () { return []; }, { hostClass: [{\n type: HostBinding,\n args: ['class.k-card-media']\n }] }); })();\n\n/**\n * The settings of the Card action buttons.\n */\nclass CardAction {\n}\n\nconst exportedModules = [\n AvatarComponent\n];\nconst declarations = [\n ...exportedModules\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Avatar component.\n */\nclass AvatarModule {\n}\nAvatarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: AvatarModule });\nAvatarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function AvatarModule_Factory(t) { return new (t || AvatarModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(AvatarModule, { declarations: function () { return [AvatarComponent]; }, imports: function () { return [CommonModule]; }, exports: function () { return [AvatarComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AvatarModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations],\n exports: [exportedModules],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\nconst cardDirectives = [\n CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective\n];\nconst exportedModules$1 = [\n CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent,\n ...cardDirectives\n];\nconst declarations$1 = [...exportedModules$1];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Card component.\n */\nclass CardModule {\n}\nCardModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: CardModule });\nCardModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function CardModule_Factory(t) { return new (t || CardModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(CardModule, { declarations: function () { return [CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent,\n CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [CardComponent,\n CardHeaderComponent,\n CardBodyComponent,\n CardFooterComponent,\n CardActionsComponent,\n CardTitleDirective,\n CardSubtitleDirective,\n CardSeparatorDirective,\n CardMediaDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CardModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$1],\n exports: [exportedModules$1],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nconst DRAWER_LINK_SELECTOR = '.k-drawer-link';\n/**\n * @hidden\n */\nconst ACTIVE_NESTED_LINK_SELECTOR = ':focus:not(.k-state-disabled) .k-drawer-link';\n/**\n * @hidden\n */\nconst nestedLink = (element, selector) => element.querySelector(selector);\n\n/**\n * @hidden\n */\nclass DrawerItemComponent {\n constructor(drawer, element, renderer) {\n this.drawer = drawer;\n this.element = element;\n this.renderer = renderer;\n }\n get disabledClass() {\n return this.item.disabled;\n }\n get selectedClass() {\n return this.drawer.selectedIndices.indexOf(this.index) >= 0;\n }\n get label() {\n return this.item.text ? this.item.text : null;\n }\n /**\n * @hidden\n */\n ngAfterViewInit() {\n const link = nestedLink(this.element.nativeElement, DRAWER_LINK_SELECTOR);\n if (link) {\n this.renderer.removeAttribute(link, 'tabindex');\n }\n }\n /**\n * @hidden\n */\n iconClasses(icon) {\n return `k-icon ${icon}`;\n }\n}\nDrawerItemComponent.ɵfac = function DrawerItemComponent_Factory(t) { return new (t || DrawerItemComponent)(ɵngcc0.ɵɵdirectiveInject(DrawerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2)); };\nDrawerItemComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DrawerItemComponent, selectors: [[\"\", \"kendoDrawerItem\", \"\"]], hostVars: 7, hostBindings: function DrawerItemComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-disabled\", ctx.disabledClass)(\"aria-selected\", ctx.selectedClass)(\"aria-label\", ctx.label);\n ɵngcc0.ɵɵclassProp(\"k-state-disabled\", ctx.disabledClass)(\"k-state-selected\", ctx.selectedClass);\n } }, inputs: { item: \"item\", index: \"index\", itemTemplate: \"itemTemplate\", mini: \"mini\", expanded: \"expanded\", disabled: \"disabled\", cssClass: \"cssClass\", cssStyle: \"cssStyle\" }, attrs: _c14, decls: 3, vars: 2, consts: [[4, \"ngIf\", \"ngIfElse\"], [\"defaultTemplate\", \"\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [4, \"ngIf\"], [3, \"ngClass\"], [1, \"k-item-text\"]], template: function DrawerItemComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerItemComponent_0_Template, 1, 4, undefined, 0);\n ɵngcc0.ɵɵtemplate(1, DrawerItemComponent_ng_template_1_Template, 2, 2, \"ng-template\", null, 1, ɵngcc0.ɵɵtemplateRefExtractor);\n } if (rf & 2) {\n const _r90 = ɵngcc0.ɵɵreference(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.itemTemplate)(\"ngIfElse\", _r90);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgClass], encapsulation: 2 });\n/** @nocollapse */\nDrawerItemComponent.ctorParameters = () => [\n { type: DrawerService },\n { type: ElementRef },\n { type: Renderer2 }\n];\nDrawerItemComponent.propDecorators = {\n item: [{ type: Input }],\n index: [{ type: Input }],\n itemTemplate: [{ type: Input }],\n mini: [{ type: Input }],\n expanded: [{ type: Input }],\n disabled: [{ type: Input }],\n cssClass: [{ type: Input }],\n cssStyle: [{ type: Input }],\n disabledClass: [{ type: HostBinding, args: ['attr.aria-disabled',] }, { type: HostBinding, args: ['class.k-state-disabled',] }],\n selectedClass: [{ type: HostBinding, args: ['attr.aria-selected',] }, { type: HostBinding, args: ['class.k-state-selected',] }],\n label: [{ type: HostBinding, args: ['attr.aria-label',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerItemComponent, [{\n type: Component,\n args: [{\n selector: '[kendoDrawerItem]',\n template: `\n \n \n\n \n \n \n {{ item.text }}\n \n \n \n \n \n `\n }]\n }], function () { return [{ type: DrawerService }, { type: ɵngcc0.ElementRef }, { type: ɵngcc0.Renderer2 }]; }, { disabledClass: [{\n type: HostBinding,\n args: ['attr.aria-disabled']\n }, {\n type: HostBinding,\n args: ['class.k-state-disabled']\n }], selectedClass: [{\n type: HostBinding,\n args: ['attr.aria-selected']\n }, {\n type: HostBinding,\n args: ['class.k-state-selected']\n }], label: [{\n type: HostBinding,\n args: ['attr.aria-label']\n }], item: [{\n type: Input\n }], index: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }], disabled: [{\n type: Input\n }], cssClass: [{\n type: Input\n }], cssStyle: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nconst DRAWER_ITEM_INDEX = 'data-kendo-drawer-index';\n\n/**\n * @hidden\n */\nclass DrawerListComponent {\n constructor(drawerService, renderer, ngZone, changeDetector, element) {\n this.drawerService = drawerService;\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.changeDetector = changeDetector;\n this.element = element;\n this.subscriptions = new Subscription();\n }\n ngOnInit() {\n this.initialSelection();\n this.initDomEvents();\n }\n ngOnDestroy() {\n this.subscriptions.unsubscribe();\n }\n initialSelection() {\n /* Differentiates a user selected item */\n if (this.drawerService.selectedIndices.length === 0) {\n this.drawerService.initSelection();\n }\n }\n initDomEvents() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n const nativeElement = this.element.nativeElement;\n this.subscriptions.add(this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this)));\n this.subscriptions.add(this.renderer.listen(nativeElement, 'keydown', this.keyDownHandler.bind(this)));\n });\n }\n clickHandler(e) {\n const itemIdx = this.getDrawerItemIndex(e.target);\n const item = this.items[itemIdx];\n if (!item) {\n return;\n }\n if (item.disabled) {\n e.preventDefault();\n return;\n }\n const args = {\n index: itemIdx,\n item: item,\n originalEvent: e\n };\n this.ngZone.run(() => {\n if (!this.drawerService.emit('select', args)) {\n this.drawerService.onSelect(itemIdx);\n this.changeDetector.detectChanges();\n }\n });\n }\n keyDownHandler(e) {\n const isEnterOrSpace = e.keyCode === Keys.Enter || e.keyCode === Keys.Space;\n if (!isEnterOrSpace) {\n return;\n }\n this.clickHandler(e);\n const link = nestedLink(this.element.nativeElement, ACTIVE_NESTED_LINK_SELECTOR);\n if (link) {\n link.click();\n }\n return false;\n }\n getDrawerItemIndex(target) {\n const item = closestItem(target, DRAWER_ITEM_INDEX, this.element.nativeElement);\n if (item) {\n return itemIndex(item, DRAWER_ITEM_INDEX);\n }\n }\n}\nDrawerListComponent.ɵfac = function DrawerListComponent_Factory(t) { return new (t || DrawerListComponent)(ɵngcc0.ɵɵdirectiveInject(DrawerService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ChangeDetectorRef), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nDrawerListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: DrawerListComponent, selectors: [[\"\", \"kendoDrawerList\", \"\"]], inputs: { items: \"items\", itemTemplate: \"itemTemplate\", mini: \"mini\", expanded: \"expanded\" }, attrs: _c15, decls: 1, vars: 1, consts: [[4, \"ngFor\", \"ngForOf\"], [\"kendoDrawerItem\", \"\", \"class\", \"k-drawer-item\", \"tabindex\", \"0\", 3, \"item\", \"index\", \"mini\", \"expanded\", \"itemTemplate\", \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"class\", \"k-drawer-item k-drawer-separator\", 3, \"ngClass\", \"ngStyle\", 4, \"ngIf\"], [\"kendoDrawerItem\", \"\", \"tabindex\", \"0\", 1, \"k-drawer-item\", 3, \"item\", \"index\", \"mini\", \"expanded\", \"itemTemplate\", \"ngClass\", \"ngStyle\"], [1, \"k-drawer-item\", \"k-drawer-separator\", 3, \"ngClass\", \"ngStyle\"]], template: function DrawerListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, DrawerListComponent_ng_container_0_Template, 3, 2, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.items);\n } }, directives: [ɵngcc1.NgForOf, ɵngcc1.NgIf, DrawerItemComponent, ɵngcc1.NgClass, ɵngcc1.NgStyle], encapsulation: 2 });\n/** @nocollapse */\nDrawerListComponent.ctorParameters = () => [\n { type: DrawerService },\n { type: Renderer2 },\n { type: NgZone },\n { type: ChangeDetectorRef },\n { type: ElementRef }\n];\nDrawerListComponent.propDecorators = {\n items: [{ type: Input }],\n itemTemplate: [{ type: Input }],\n mini: [{ type: Input }],\n expanded: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerListComponent, [{\n type: Component,\n args: [{\n selector: '[kendoDrawerList]',\n template: `\n \n
  • \n
  • \n\n
  • \n  \n
  • \n
    \n `\n }]\n }], function () { return [{ type: DrawerService }, { type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: ɵngcc0.ChangeDetectorRef }, { type: ɵngcc0.ElementRef }]; }, { items: [{\n type: Input\n }], itemTemplate: [{\n type: Input\n }], mini: [{\n type: Input\n }], expanded: [{\n type: Input\n }] }); })();\n\nconst templateDirectives = [\n DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective\n];\nconst exportedModules$2 = [\n DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent,\n ...templateDirectives\n];\nconst declarations$2 = [\n DrawerItemComponent,\n DrawerListComponent,\n ...exportedModules$2\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Drawer component.\n */\nclass DrawerModule {\n}\nDrawerModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: DrawerModule });\nDrawerModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function DrawerModule_Factory(t) { return new (t || DrawerModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(DrawerModule, { declarations: function () { return [DrawerItemComponent,\n DrawerListComponent,\n DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent,\n DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [DrawerComponent,\n DrawerContainerComponent,\n DrawerContentComponent,\n DrawerTemplateDirective,\n DrawerHeaderTemplateDirective,\n DrawerFooterTemplateDirective,\n DrawerItemTemplateDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(DrawerModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$2],\n exports: [exportedModules$2],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\nconst exportedModules$3 = [\n PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective\n];\nconst declarations$3 = [\n ...exportedModules$3\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the PanelBar component.\n *\n * The module registers:\n * - `PanelBarComponent`—The `PanelBar` component class.\n * - `PanelBarItemComponent`—The `PanelBarItem` component class.\n * - `PanelBarContentComponent`—The `PanelBarContent` component class.\n * - `PanelBarItemTemplateDirective—The `PanelBarItemTemplate` directive.\n * - `PanelBarItemTitleDirective—The `PanelBarItemTitle` directive.\n */\nclass PanelBarModule {\n}\nPanelBarModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: PanelBarModule });\nPanelBarModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function PanelBarModule_Factory(t) { return new (t || PanelBarModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(PanelBarModule, { declarations: function () { return [PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [PanelBarComponent,\n PanelBarItemComponent,\n PanelBarContentDirective,\n PanelBarItemTemplateDirective,\n PanelBarItemTitleDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(PanelBarModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$3],\n exports: [exportedModules$3],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\nconst stopPropagation = ({ originalEvent: event }) => {\n event.stopPropagation();\n event.preventDefault();\n};\nconst preventOnDblClick = release => mouseDown => of(mouseDown).pipe(delay(150), takeUntil(release));\nconst classFromObject = classes => Object.keys(classes).filter(c => classes[c]).join(' ');\nconst createMoveStream = (draggable) => mouseDown => draggable.kendoDrag\n .pipe(takeUntil(draggable.kendoRelease), map(({ pageX, pageY }) => ({\n originalX: mouseDown.pageX,\n originalY: mouseDown.pageY,\n pageX,\n pageY\n})));\n/**\n * @hidden\n */\nclass SplitterBarComponent {\n constructor(draggable, splitter, localization) {\n this.draggable = draggable;\n this.splitter = splitter;\n this.localization = localization;\n this.orientation = 'horizontal';\n this.index = 0;\n this.ariaRole = 'separator';\n this.focused = false;\n this.subscriptions = new Subscription();\n }\n get direction() {\n return this.localization.rtl ? 'rtl' : 'ltr';\n }\n get tabIndex() {\n return this.splitter.isStatic(this.index) ? -1 : 0;\n }\n get hostClasses() {\n const isHorizontal = this.orientation === 'horizontal';\n const isDraggable = this.splitter.isDraggable(this.index);\n const isStatic = this.splitter.isStatic(this.index);\n return classFromObject({\n 'k-state-focused': this.focused,\n 'k-splitbar': true,\n 'k-splitbar-horizontal': isHorizontal,\n 'k-splitbar-vertical': !isHorizontal,\n 'k-splitbar-draggable-horizontal': isHorizontal && isDraggable,\n 'k-splitbar-draggable-vertical': !isHorizontal && isDraggable,\n 'k-splitbar-static-horizontal': isHorizontal && isStatic,\n 'k-splitbar-static-vertical': !isHorizontal && isStatic\n });\n }\n get touchAction() {\n if (this.splitter.isDraggable(this.index)) {\n return 'none';\n }\n }\n get order() {\n return 2 * this.index + 1;\n }\n collapseAny() {\n if (this.expandLast) {\n this.toggleNext();\n }\n else {\n this.tryToggleNearest();\n }\n }\n onFocusIn() {\n this.focused = true;\n }\n onFocusOut() {\n this.focused = false;\n }\n onKeyDown(event) {\n const keyCode = event && event.keyCode;\n const isHorizontal = this.orientation === 'horizontal';\n const resize = delta => {\n event.preventDefault();\n const state$$1 = this.splitter.dragState(this.index);\n this.splitter.setSize(state$$1, delta);\n };\n if (keyCode === Keys.Enter) {\n event.preventDefault();\n this.collapseAny();\n }\n else if (isHorizontal && keyCode === Keys.ArrowLeft) {\n resize(-10);\n }\n else if (isHorizontal && keyCode === Keys.ArrowRight) {\n resize(10);\n }\n else if (!isHorizontal && keyCode === Keys.ArrowUp) {\n resize(-10);\n }\n else if (!isHorizontal && keyCode === Keys.ArrowDown) {\n resize(10);\n }\n }\n get expandLast() {\n const panes = this.splitter.panes;\n return panes.length === 2 && panes[1].collapsed;\n }\n ngOnInit() {\n let state$$1;\n const listener = this.draggable.kendoPress.pipe(tap(stopPropagation), filter(() => this.splitter.isDraggable(this.index)), tap(() => state$$1 = this.splitter.dragState(this.index)), tap(() => this.splitter.toggleContentOverlay(this.index, true)), switchMap(preventOnDblClick(this.draggable.kendoRelease)), switchMap(createMoveStream(this.draggable))).subscribe(({ pageX, pageY, originalX, originalY }) => {\n let delta;\n if (this.orientation === 'vertical') {\n delta = pageY - originalY;\n }\n else if (this.direction === 'rtl') {\n delta = originalX - pageX;\n }\n else {\n delta = pageX - originalX;\n }\n this.splitter.setSize(state$$1, delta);\n });\n this.subscriptions.add(listener);\n this.subscriptions.add(this.draggable.kendoRelease.subscribe(() => this.splitter.toggleContentOverlay(this.index, false)));\n }\n ngOnDestroy() {\n if (this.subscriptions) {\n this.subscriptions.unsubscribe();\n }\n }\n togglePrevious() {\n this.splitter.tryToggle(this.index);\n }\n toggleNext() {\n this.splitter.tryToggle(this.index + 1);\n }\n previousArrowClass() {\n const pane = this.splitter.pane(this.index);\n const nextPane = this.splitter.pane(this.index + 1);\n const isCollapsible = pane.collapsible;\n const isCollapsed = pane.collapsed;\n const isHorizontal = this.orientation === 'horizontal';\n return classFromObject({\n 'k-icon': true,\n 'k-hidden': !isCollapsible || nextPane.isHidden,\n 'k-collapse-prev': isCollapsible,\n 'k-i-arrow-60-left': isCollapsible && isHorizontal && !isCollapsed,\n 'k-i-arrow-60-right': isCollapsible && isHorizontal && isCollapsed,\n 'k-i-arrow-60-up': isCollapsible && !isHorizontal && !isCollapsed,\n 'k-i-arrow-60-down': isCollapsible && !isHorizontal && isCollapsed\n });\n }\n nextArrowClass() {\n const pane = this.splitter.pane(this.index + 1);\n const prevPane = this.splitter.pane(this.index);\n const isCollapsible = pane.collapsible;\n const isCollapsed = pane.collapsed;\n const isHorizontal = this.orientation === 'horizontal';\n return classFromObject({\n 'k-icon': true,\n 'k-hidden': !isCollapsible || prevPane.isHidden,\n 'k-collapse-next': isCollapsible,\n 'k-i-arrow-60-right': isCollapsible && isHorizontal && !isCollapsed,\n 'k-i-arrow-60-left': isCollapsible && isHorizontal && isCollapsed,\n 'k-i-arrow-60-down': isCollapsible && !isHorizontal && !isCollapsed,\n 'k-i-arrow-60-up': isCollapsible && !isHorizontal && isCollapsed\n });\n }\n tryToggleNearest() {\n const prev = this.index;\n const next = this.index + 1;\n if (!this.splitter.tryToggle(prev)) {\n this.splitter.tryToggle(next);\n }\n }\n}\nSplitterBarComponent.ɵfac = function SplitterBarComponent_Factory(t) { return new (t || SplitterBarComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc3.DraggableDirective, 1), ɵngcc0.ɵɵdirectiveInject(SplitterService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nSplitterBarComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: SplitterBarComponent, selectors: [[\"kendo-splitter-bar\"]], hostVars: 13, hostBindings: function SplitterBarComponent_HostBindings(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵlistener(\"dblclick\", function SplitterBarComponent_dblclick_HostBindingHandler() { return ctx.collapseAny(); })(\"focusin\", function SplitterBarComponent_focusin_HostBindingHandler() { return ctx.onFocusIn(); })(\"focusout\", function SplitterBarComponent_focusout_HostBindingHandler() { return ctx.onFocusOut(); })(\"keydown\", function SplitterBarComponent_keydown_HostBindingHandler($event) { return ctx.onKeyDown($event); });\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"aria-orientation\", ctx.orientation)(\"role\", ctx.ariaRole)(\"tabindex\", ctx.tabIndex);\n ɵngcc0.ɵɵclassMap(ctx.hostClasses);\n ɵngcc0.ɵɵstyleProp(\"touch-action\", ctx.touchAction)(\"-ms-flex-order\", ctx.order)(\"order\", ctx.order);\n ɵngcc0.ɵɵclassProp(\"k-state-focused\", ctx.focused);\n } }, inputs: { orientation: \"orientation\", index: \"index\" }, decls: 3, vars: 4, consts: [[3, \"click\"], [1, \"k-resize-handle\"]], template: function SplitterBarComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function SplitterBarComponent_Template_div_click_0_listener() { return ctx.togglePrevious(); });\n ɵngcc0.ɵɵelementEnd();\n ɵngcc0.ɵɵelement(1, \"div\", 1);\n ɵngcc0.ɵɵelementStart(2, \"div\", 0);\n ɵngcc0.ɵɵlistener(\"click\", function SplitterBarComponent_Template_div_click_2_listener() { return ctx.toggleNext(); });\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵclassMap(ctx.previousArrowClass());\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵclassMap(ctx.nextArrowClass());\n } }, encapsulation: 2 });\n/** @nocollapse */\nSplitterBarComponent.ctorParameters = () => [\n { type: DraggableDirective, decorators: [{ type: Host }] },\n { type: SplitterService },\n { type: LocalizationService }\n];\nSplitterBarComponent.propDecorators = {\n orientation: [{ type: Input }, { type: HostBinding, args: ['attr.aria-orientation',] }],\n index: [{ type: Input }],\n ariaRole: [{ type: HostBinding, args: ['attr.role',] }],\n focused: [{ type: HostBinding, args: ['class.k-state-focused',] }],\n tabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],\n hostClasses: [{ type: HostBinding, args: ['class',] }],\n touchAction: [{ type: HostBinding, args: ['style.touch-action',] }],\n order: [{ type: HostBinding, args: ['style.-ms-flex-order',] }, { type: HostBinding, args: ['style.order',] }],\n collapseAny: [{ type: HostListener, args: ['dblclick',] }],\n onFocusIn: [{ type: HostListener, args: ['focusin',] }],\n onFocusOut: [{ type: HostListener, args: ['focusout',] }],\n onKeyDown: [{ type: HostListener, args: ['keydown', ['$event'],] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitterBarComponent, [{\n type: Component,\n args: [{\n selector: 'kendo-splitter-bar',\n template: `\n
    \n
    \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc3.DraggableDirective, decorators: [{\n type: Host\n }] }, { type: SplitterService }, { type: ɵngcc2.LocalizationService }]; }, { orientation: [{\n type: Input\n }, {\n type: HostBinding,\n args: ['attr.aria-orientation']\n }], index: [{\n type: Input\n }], ariaRole: [{\n type: HostBinding,\n args: ['attr.role']\n }], focused: [{\n type: HostBinding,\n args: ['class.k-state-focused']\n }], tabIndex: [{\n type: HostBinding,\n args: ['attr.tabindex']\n }], hostClasses: [{\n type: HostBinding,\n args: ['class']\n }], touchAction: [{\n type: HostBinding,\n args: ['style.touch-action']\n }], order: [{\n type: HostBinding,\n args: ['style.-ms-flex-order']\n }, {\n type: HostBinding,\n args: ['style.order']\n }], collapseAny: [{\n type: HostListener,\n args: ['dblclick']\n }], onFocusIn: [{\n type: HostListener,\n args: ['focusin']\n }], onFocusOut: [{\n type: HostListener,\n args: ['focusout']\n }], onKeyDown: [{\n type: HostListener,\n args: ['keydown', ['$event']]\n }] }); })();\n\nconst exportedModules$4 = [\n SplitterComponent,\n SplitterPaneComponent\n];\nconst declarations$4 = [\n SplitterBarComponent,\n ...exportedModules$4\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Splitter component.\n *\n * The module registers:\n * - `SplitterComponent`—The `Splitter` component class.\n * - `SplitterPaneComponent`—The `SplitterPane` component class.\n */\nclass SplitterModule {\n}\nSplitterModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: SplitterModule });\nSplitterModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function SplitterModule_Factory(t) { return new (t || SplitterModule)(); }, imports: [[\n CommonModule,\n DraggableModule\n ]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(SplitterModule, { declarations: function () { return [SplitterBarComponent,\n SplitterComponent,\n SplitterPaneComponent]; }, imports: function () { return [CommonModule,\n DraggableModule]; }, exports: function () { return [SplitterComponent,\n SplitterPaneComponent]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(SplitterModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$4],\n exports: [exportedModules$4],\n imports: [\n CommonModule,\n DraggableModule\n ]\n }]\n }], null, null); })();\n\n/**\n * @hidden\n */\nclass StepperStepComponent {\n constructor(service, localization, ngZone) {\n this.service = service;\n this.localization = localization;\n this.ngZone = ngZone;\n this.isStepValid = undefined;\n this.shouldCheckValidity = undefined;\n this.subs = this.service.focusedStepChange.subscribe(() => {\n this.onFocusedStepChange();\n });\n this.subs.add(this.service.triggerValidation.subscribe(() => {\n this.handleValidityChecks();\n }));\n }\n get errorStepClass() {\n if (isPresent(this.isStepValid)) {\n return !this.isStepValid;\n }\n return false;\n }\n get successStepClass() {\n if (isPresent(this.isStepValid)) {\n return this.isStepValid;\n }\n return false;\n }\n ngOnInit() {\n this.handleValidityChecks();\n }\n ngOnChanges(changes) {\n if (changes.current && !changes.current.firstChange) {\n this.handleValidityChecks();\n }\n }\n ngOnDestroy() {\n if (this.subs) {\n this.subs.unsubscribe();\n }\n }\n onFocusedStepChange() {\n this.ngZone.runOutsideAngular(() => {\n if (this.index === this.service.focusedStep) {\n this.stepLink.nativeElement.focus();\n }\n });\n }\n onFocus() {\n this.service.focus(this.index);\n }\n get tabIndexAttr() {\n const active = this.service.focusedStep || this.service.currentStep;\n return this.index === active ? 0 : -1;\n }\n get indicatorIconClasses() {\n if (this.step.icon) {\n return `k-icon k-i-${this.step.icon}`;\n }\n if (this.step.iconClass) {\n return `${this.step.iconClass}`;\n }\n if (this.shouldCheckValidity) {\n return this.validationIconClasses;\n }\n }\n get showIndicatorIcon() {\n if (this.shouldCheckValidity) {\n return true;\n }\n if (this.step.icon || this.step.iconClass) {\n return true;\n }\n return false;\n }\n get showLabelIcon() {\n if (this.shouldCheckValidity) {\n if (this.type === 'label') {\n return true;\n }\n if (this.step.icon || this.step.iconClass) {\n return true;\n }\n }\n return false;\n }\n get showLabelText() {\n return this.type === 'label' || this.type === 'full';\n }\n get validationIconClasses() {\n if (this.isStepValid) {\n return this.successIcon ? `${this.successIcon}` : 'k-icon k-i-check';\n }\n else {\n return this.errorIcon ? `${this.errorIcon}` : 'k-icon k-i-warning';\n }\n }\n get indicatorText() {\n const text = this.step.text;\n return text ? text : this.index + 1;\n }\n updateStepValidity() {\n if (typeof this.step.isValid === 'boolean') {\n return this.step.isValid;\n }\n if (typeof this.step.isValid === 'function') {\n return this.step.isValid(this.index);\n }\n return undefined;\n }\n get showIndicator() {\n return this.type === 'indicator' || this.type === 'full';\n }\n get showLabel() {\n if (this.type === 'label' || this.type === 'full') {\n return true;\n }\n return this.step.optional;\n }\n get optionalText() {\n return this.localization.get('optional');\n }\n get transitionDuration() {\n return this.service.owner.animationDuration;\n }\n _shouldCheckValidity() {\n if (isPresent(this.step.validate)) {\n if (typeof this.step.validate === 'boolean') {\n return this.step.validate;\n }\n if (typeof this.step.validate === 'function') {\n return this.step.validate(this.index);\n }\n }\n return isPresent(this.step.isValid) && this.index < this.current;\n }\n handleValidityChecks() {\n this.isStepValid = undefined;\n this.shouldCheckValidity = this._shouldCheckValidity();\n if (this.shouldCheckValidity) {\n this.isStepValid = this.updateStepValidity();\n }\n }\n}\nStepperStepComponent.ɵfac = function StepperStepComponent_Factory(t) { return new (t || StepperStepComponent)(ɵngcc0.ɵɵdirectiveInject(StepperService), ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone)); };\nStepperStepComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StepperStepComponent, selectors: [[\"\", \"kendoStepperStep\", \"\"]], viewQuery: function StepperStepComponent_Query(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵstaticViewQuery(_c16, true);\n } if (rf & 2) {\n var _t;\n ɵngcc0.ɵɵqueryRefresh(_t = ɵngcc0.ɵɵloadQuery()) && (ctx.stepLink = _t.first);\n } }, hostVars: 4, hostBindings: function StepperStepComponent_HostBindings(rf, ctx) { if (rf & 2) {\n ɵngcc0.ɵɵclassProp(\"k-step-error\", ctx.errorStepClass)(\"k-step-success\", ctx.successStepClass);\n } }, inputs: { step: \"step\", index: \"index\", current: \"current\", type: \"type\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", indicatorTemplate: \"indicatorTemplate\", labelTemplate: \"labelTemplate\", stepTemplate: \"stepTemplate\" }, features: [ɵngcc0.ɵɵNgOnChangesFeature], attrs: _c17, decls: 4, vars: 6, consts: [[\"href\", \"#\", 1, \"k-step-link\", 3, \"focus\"], [\"stepLink\", \"\"], [4, \"ngIf\"], [3, \"ngTemplateOutlet\", \"ngTemplateOutletContext\"], [\"class\", \"k-step-indicator\", \"aria-hidden\", \"true\", 3, \"transition-duration\", 4, \"ngIf\"], [\"class\", \"k-step-label\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", 1, \"k-step-indicator\"], [\"class\", \"k-step-indicator-icon\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-step-indicator-text\", 4, \"ngIf\"], [1, \"k-step-indicator-icon\", 3, \"ngClass\"], [1, \"k-step-indicator-text\"], [1, \"k-step-label\"], [\"class\", \"k-step-text\", 4, \"ngIf\"], [\"aria-hidden\", \"true\", 3, \"ngClass\", 4, \"ngIf\"], [\"class\", \"k-step-label-optional\", 4, \"ngIf\"], [1, \"k-step-text\"], [\"aria-hidden\", \"true\", 3, \"ngClass\"], [1, \"k-step-label-optional\"]], template: function StepperStepComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵelementStart(0, \"a\", 0, 1);\n ɵngcc0.ɵɵlistener(\"focus\", function StepperStepComponent_Template_a_focus_0_listener() { return ctx.onFocus(); });\n ɵngcc0.ɵɵtemplate(2, StepperStepComponent_2_Template, 1, 5, undefined, 2);\n ɵngcc0.ɵɵtemplate(3, StepperStepComponent_ng_container_3_Template, 3, 2, \"ng-container\", 2);\n ɵngcc0.ɵɵelementEnd();\n } if (rf & 2) {\n ɵngcc0.ɵɵattribute(\"tabindex\", ctx.tabIndexAttr)(\"title\", ctx.step.label)(\"aria-disabled\", ctx.step.disabled)(\"aria-current\", ctx.index === ctx.current ? \"step\" : null);\n ɵngcc0.ɵɵadvance(2);\n ɵngcc0.ɵɵproperty(\"ngIf\", ctx.stepTemplate);\n ɵngcc0.ɵɵadvance(1);\n ɵngcc0.ɵɵproperty(\"ngIf\", !ctx.stepTemplate);\n } }, directives: [ɵngcc1.NgIf, ɵngcc1.NgTemplateOutlet, ɵngcc1.NgClass], encapsulation: 2 });\n/** @nocollapse */\nStepperStepComponent.ctorParameters = () => [\n { type: StepperService },\n { type: LocalizationService },\n { type: NgZone }\n];\nStepperStepComponent.propDecorators = {\n step: [{ type: Input }],\n index: [{ type: Input }],\n current: [{ type: Input }],\n type: [{ type: Input }],\n successIcon: [{ type: Input }],\n errorIcon: [{ type: Input }],\n indicatorTemplate: [{ type: Input }],\n labelTemplate: [{ type: Input }],\n stepTemplate: [{ type: Input }],\n stepLink: [{ type: ViewChild, args: ['stepLink', { static: true },] }],\n errorStepClass: [{ type: HostBinding, args: ['class.k-step-error',] }],\n successStepClass: [{ type: HostBinding, args: ['class.k-step-success',] }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperStepComponent, [{\n type: Component,\n args: [{\n selector: '[kendoStepperStep]',\n template: `\n \n \n \n\n \n \n\n \n \n \n\n \n {{ step.label }}\n \n ({{optionalText}})\n \n \n \n \n `\n }]\n }], function () { return [{ type: StepperService }, { type: ɵngcc2.LocalizationService }, { type: ɵngcc0.NgZone }]; }, { errorStepClass: [{\n type: HostBinding,\n args: ['class.k-step-error']\n }], successStepClass: [{\n type: HostBinding,\n args: ['class.k-step-success']\n }], step: [{\n type: Input\n }], index: [{\n type: Input\n }], current: [{\n type: Input\n }], type: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], indicatorTemplate: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], stepTemplate: [{\n type: Input\n }], stepLink: [{\n type: ViewChild,\n args: ['stepLink', { static: true }]\n }] }); })();\n\n/**\n * @hidden\n */\nconst STEPPER_STEP_INDEX = 'data-kendo-stepper-index';\n\n/**\n * @hidden\n */\nclass StepperListComponent {\n constructor(renderer, ngZone, service, element) {\n this.renderer = renderer;\n this.ngZone = ngZone;\n this.service = service;\n this.element = element;\n }\n ngOnInit() {\n this.initDomEvents();\n }\n ngOnDestroy() {\n if (this.domSubs) {\n this.domSubs();\n }\n }\n get maxStepWidth() {\n return this.maxStepDimension('width');\n }\n get maxStepHeight() {\n return this.maxStepDimension('height');\n }\n maxStepDimension(dimension) {\n if (dimension === 'width' && this.orientation === 'vertical') {\n return null;\n }\n if (dimension === 'height' && this.orientation === 'horizontal') {\n return null;\n }\n return 100 / this.steps.length;\n }\n initDomEvents() {\n if (!this.element) {\n return;\n }\n this.ngZone.runOutsideAngular(() => {\n const nativeElement = this.element.nativeElement;\n const clickSubscription = this.renderer.listen(nativeElement, 'click', this.clickHandler.bind(this));\n const keydownSubscription = this.renderer.listen(nativeElement, 'keydown', (e) => {\n if (hasClass(e.target, 'k-step-link')) {\n this.service.keydown(e);\n }\n });\n this.domSubs = () => {\n clickSubscription();\n keydownSubscription();\n };\n });\n }\n clickHandler(e) {\n e.preventDefault();\n const stepIdx = this.getStepIndex(e.target);\n const step = this.steps[stepIdx];\n if (!step || step.disabled) {\n return;\n }\n if (stepIdx === this.currentStep) {\n this.service.focus(stepIdx);\n return;\n }\n if (this.linear && this.service.isPrevOrNextStep(stepIdx) === false) {\n return;\n }\n this.service.onActivate(stepIdx, e);\n }\n getStepIndex(target) {\n const step = closestItem(target, STEPPER_STEP_INDEX, this.element.nativeElement);\n if (step) {\n return itemIndex(step, STEPPER_STEP_INDEX);\n }\n }\n}\nStepperListComponent.ɵfac = function StepperListComponent_Factory(t) { return new (t || StepperListComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc0.Renderer2), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.NgZone), ɵngcc0.ɵɵdirectiveInject(StepperService), ɵngcc0.ɵɵdirectiveInject(ɵngcc0.ElementRef)); };\nStepperListComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: StepperListComponent, selectors: [[\"\", \"kendoStepperList\", \"\"]], inputs: { linear: \"linear\", stepType: \"stepType\", orientation: \"orientation\", currentStep: \"currentStep\", steps: \"steps\", successIcon: \"successIcon\", errorIcon: \"errorIcon\", indicatorTemplate: \"indicatorTemplate\", labelTemplate: \"labelTemplate\", stepTemplate: \"stepTemplate\" }, attrs: _c19, decls: 1, vars: 1, consts: [[4, \"ngFor\", \"ngForOf\"], [\"kendoStepperStep\", \"\", 1, \"k-step\", 3, \"type\", \"step\", \"index\", \"current\", \"successIcon\", \"errorIcon\", \"indicatorTemplate\", \"labelTemplate\", \"stepTemplate\", \"ngClass\", \"ngStyle\"]], template: function StepperListComponent_Template(rf, ctx) { if (rf & 1) {\n ɵngcc0.ɵɵtemplate(0, StepperListComponent_ng_container_0_Template, 2, 28, \"ng-container\", 0);\n } if (rf & 2) {\n ɵngcc0.ɵɵproperty(\"ngForOf\", ctx.steps);\n } }, directives: [ɵngcc1.NgForOf, StepperStepComponent, ɵngcc1.NgClass, ɵngcc1.NgStyle], encapsulation: 2 });\n/** @nocollapse */\nStepperListComponent.ctorParameters = () => [\n { type: Renderer2 },\n { type: NgZone },\n { type: StepperService },\n { type: ElementRef }\n];\nStepperListComponent.propDecorators = {\n linear: [{ type: Input }],\n stepType: [{ type: Input }],\n orientation: [{ type: Input }],\n currentStep: [{ type: Input }],\n steps: [{ type: Input }],\n successIcon: [{ type: Input }],\n errorIcon: [{ type: Input }],\n indicatorTemplate: [{ type: Input }],\n labelTemplate: [{ type: Input }],\n stepTemplate: [{ type: Input }]\n};\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperListComponent, [{\n type: Component,\n args: [{\n selector: '[kendoStepperList]',\n template: `\n \n
  • \n
  • \n
    \n `\n }]\n }], function () { return [{ type: ɵngcc0.Renderer2 }, { type: ɵngcc0.NgZone }, { type: StepperService }, { type: ɵngcc0.ElementRef }]; }, { linear: [{\n type: Input\n }], stepType: [{\n type: Input\n }], orientation: [{\n type: Input\n }], currentStep: [{\n type: Input\n }], steps: [{\n type: Input\n }], successIcon: [{\n type: Input\n }], errorIcon: [{\n type: Input\n }], indicatorTemplate: [{\n type: Input\n }], labelTemplate: [{\n type: Input\n }], stepTemplate: [{\n type: Input\n }] }); })();\n\n/**\n * @hidden\n */\nclass Messages extends ComponentMessages {\n}\nMessages.ɵfac = function Messages_Factory(t) { return ɵMessages_BaseFactory(t || Messages); };\nMessages.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: Messages, inputs: { optional: \"optional\" }, features: [ɵngcc0.ɵɵInheritDefinitionFeature] });\nMessages.propDecorators = {\n optional: [{ type: Input }]\n};\nconst ɵMessages_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(Messages);\n\n/**\n * @hidden\n */\nclass LocalizedMessagesDirective extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n}\nLocalizedMessagesDirective.ɵfac = function LocalizedMessagesDirective_Factory(t) { return new (t || LocalizedMessagesDirective)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nLocalizedMessagesDirective.ɵdir = ɵngcc0.ɵɵdefineDirective({ type: LocalizedMessagesDirective, selectors: [[\"\", \"kendoStepperLocalizedMessages\", \"\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature] });\n/** @nocollapse */\nLocalizedMessagesDirective.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LocalizedMessagesDirective, [{\n type: Directive,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => LocalizedMessagesDirective)\n }\n ],\n selector: `\n [kendoStepperLocalizedMessages]\n `\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n\n/**\n * Custom component messages override default component messages\n * ([see example]({% slug rtl_layout %})).\n */\nclass CustomMessagesComponent extends Messages {\n constructor(service) {\n super();\n this.service = service;\n }\n get override() {\n return true;\n }\n}\nCustomMessagesComponent.ɵfac = function CustomMessagesComponent_Factory(t) { return new (t || CustomMessagesComponent)(ɵngcc0.ɵɵdirectiveInject(ɵngcc2.LocalizationService)); };\nCustomMessagesComponent.ɵcmp = ɵngcc0.ɵɵdefineComponent({ type: CustomMessagesComponent, selectors: [[\"kendo-stepper-messages\"]], features: [ɵngcc0.ɵɵProvidersFeature([\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ]), ɵngcc0.ɵɵInheritDefinitionFeature], decls: 0, vars: 0, template: function CustomMessagesComponent_Template(rf, ctx) { }, encapsulation: 2 });\n/** @nocollapse */\nCustomMessagesComponent.ctorParameters = () => [\n { type: LocalizationService }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(CustomMessagesComponent, [{\n type: Component,\n args: [{\n providers: [\n {\n provide: Messages,\n useExisting: forwardRef(() => CustomMessagesComponent)\n }\n ],\n selector: 'kendo-stepper-messages',\n template: ``\n }]\n }], function () { return [{ type: ɵngcc2.LocalizationService }]; }, null); })();\n\nconst templateDirectives$1 = [\n StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective\n];\nconst exportedModules$5 = [\n StepperComponent,\n CustomMessagesComponent,\n ...templateDirectives$1\n];\nconst declarations$5 = [\n StepperStepComponent,\n StepperListComponent,\n LocalizedMessagesDirective,\n ...exportedModules$5\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Stepper component.\n */\nclass StepperModule {\n}\nStepperModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: StepperModule });\nStepperModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function StepperModule_Factory(t) { return new (t || StepperModule)(); }, imports: [[CommonModule, ProgressBarModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(StepperModule, { declarations: function () { return [StepperStepComponent,\n StepperListComponent,\n LocalizedMessagesDirective,\n StepperComponent,\n CustomMessagesComponent,\n StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective]; }, imports: function () { return [CommonModule, ProgressBarModule]; }, exports: function () { return [StepperComponent,\n CustomMessagesComponent,\n StepperStepTemplateDirective,\n StepperLabelTemplateDirective,\n StepperIndicatorTemplateDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(StepperModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$5],\n exports: [exportedModules$5],\n imports: [CommonModule, ProgressBarModule]\n }]\n }], null, null); })();\n\nconst exportedModules$6 = [\n TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective\n];\nconst declarations$6 = [\n ...exportedModules$6\n];\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the TabStrip component.\n *\n * The module registers:\n * - `TabStripComponent`—The `TabStrip` component class.\n * - `TabStripTabComponent`—The `TabStripTab` component class.\n * - `TabContentDirective`—The tab content directive used on the `` tag.\n * - `TabTitleDirective`—The tab title directive used on the `` tag.\n */\nclass TabStripModule {\n}\nTabStripModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: TabStripModule });\nTabStripModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function TabStripModule_Factory(t) { return new (t || TabStripModule)(); }, imports: [[CommonModule]] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(TabStripModule, { declarations: function () { return [TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective]; }, imports: function () { return [CommonModule]; }, exports: function () { return [TabStripComponent,\n TabStripTabComponent,\n TabContentDirective,\n TabTitleDirective]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(TabStripModule, [{\n type: NgModule,\n args: [{\n declarations: [declarations$6],\n exports: [exportedModules$6],\n imports: [CommonModule]\n }]\n }], null, null); })();\n\n/**\n * Represents the [NgModule]({{ site.data.urls.angular['ngmoduleapi'] }})\n * definition for the Layout components.\n *\n * @example\n *\n * ```ts-no-run\n * // Import the Layout module\n * import { LayoutModule } from '@progress/kendo-angular-layout';\n *\n * // The browser platform with a compiler\n * import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n *\n * import { NgModule } from '@angular/core';\n *\n * // Import the app component\n * import { AppComponent } from './app.component';\n *\n * // Define the app module\n * _@NgModule({\n * declarations: [AppComponent], // declare app component\n * imports: [BrowserModule, LayoutModule], // import Layout module\n * bootstrap: [AppComponent]\n * })\n * export class AppModule {}\n *\n * // Compile and launch the module\n * platformBrowserDynamic().bootstrapModule(AppModule);\n *\n * ```\n */\nclass LayoutModule {\n}\nLayoutModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: LayoutModule });\nLayoutModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function LayoutModule_Factory(t) { return new (t || LayoutModule)(); }, imports: [AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n SplitterModule,\n StepperModule,\n TabStripModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(LayoutModule, { exports: [AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n SplitterModule,\n StepperModule,\n TabStripModule] }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(LayoutModule, [{\n type: NgModule,\n args: [{\n exports: [\n AvatarModule,\n CardModule,\n DrawerModule,\n PanelBarModule,\n SplitterModule,\n StepperModule,\n TabStripModule\n ]\n }]\n }], null, null); })();\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { PreventableEvent, DrawerService, DrawerItemComponent, DrawerListComponent, DRAWER_ITEM_INDEX, CustomMessagesComponent, LocalizedMessagesDirective, Messages, PanelBarService, SplitterBarComponent, SplitterService, StepperListComponent, STEPPER_STEP_INDEX, StepperStepComponent, StepperService, PanelBarComponent, PanelBarItemComponent, PanelBarContentDirective, PanelBarItemTemplateDirective, PanelBarItemTitleDirective, PanelBarExpandMode, SplitterComponent, SplitterPaneComponent, TabStripComponent, TabStripTabComponent, TabContentDirective, TabTitleDirective, SelectEvent, DrawerComponent, DrawerContainerComponent, DrawerContentComponent, DrawerSelectEvent, StepperComponent, StepperActivateEvent, AvatarComponent, CardComponent, CardHeaderComponent, CardBodyComponent, CardFooterComponent, CardActionsComponent, CardSeparatorDirective, CardTitleDirective, CardSubtitleDirective, CardMediaDirective, CardAction, AvatarModule, CardModule, DrawerModule, LayoutModule, PanelBarModule, SplitterModule, StepperModule, TabStripModule, DrawerTemplateDirective, DrawerItemTemplateDirective, DrawerHeaderTemplateDirective, DrawerFooterTemplateDirective, StepperIndicatorTemplateDirective, StepperLabelTemplateDirective, StepperStepTemplateDirective };\n\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs2R0FHRTtBQUNGO0FBQ0E7OztnREFBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzRJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7a0pBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7ZUFzSEU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzJKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0ZBbUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozt3REFVRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7NkdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O3VFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUpBNkJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzZIQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs0RUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7dUhBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7OzRFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7c1JBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2VBZ0ZFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3lJQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7cUpBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzsySkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OzJKQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2dEQUdFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs4SEFxQ0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt3REFnQkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7NkJBU0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7d0pBS0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7a0NBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzsySkFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OztrQ0FBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O3VLQUtFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7O2tDQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7MEdBR0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztpSkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztnSEFnREU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0ZBb0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs2QkFlRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs2QkFRRTtBQUNGO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7OzZCQVFFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7NkJBUUU7QUFDRjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7aUdBc0JFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzttRUFLRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O1dBS0U7QUFDRjtBQUNBO0FBQ0E7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztXQUtFO0FBQ0Y7QUFDQTtBQUNBOzs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FLRTtBQUNGO0FBQ0E7QUFDQTs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFPRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7aUdBcUJFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs2SEE0QkU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQU9FO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs2QkFVRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkFVRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztpR0FrREU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7b0JBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7aUhBaUNFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OElBQUM7QUFDRDtBQUNBO0FBQ0E7cUVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7OztrREFhRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7eUpBWUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztvRkFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBT0U7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MEJBYUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzQ29udGVudCI6WyIvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKiBDb3B5cmlnaHQgwqkgMjAyMCBQcm9ncmVzcyBTb2Z0d2FyZSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiogTGljZW5zZWQgdW5kZXIgY29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgTElDRU5TRS5tZCBpbiB0aGUgcHJvamVjdCByb290IGZvciBtb3JlIGluZm9ybWF0aW9uXG4qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBEaXJlY3RpdmUsIFRlbXBsYXRlUmVmLCBPcHRpb25hbCwgaXNEZXZNb2RlLCBDb21wb25lbnQsIFNraXBTZWxmLCBIb3N0LCBFbGVtZW50UmVmLCBJbnB1dCwgVmlld0NoaWxkLCBIb3N0QmluZGluZywgVmlld0NoaWxkcmVuLCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBDb250ZW50Q2hpbGQsIEhvc3RMaXN0ZW5lciwgUmVuZGVyZXIyLCBDaGFuZ2VEZXRlY3RvclJlZiwgTmdab25lLCBJbmplY3QsIFF1ZXJ5TGlzdCwgVmlld0VuY2Fwc3VsYXRpb24sIE5nTW9kdWxlLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb25TZXJ2aWNlLCBMMTBOX1BSRUZJWCwgQ29tcG9uZW50TWVzc2FnZXMgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1sMTBuJztcbmltcG9ydCB7IEtleXMsIGhhc09ic2VydmVycywgRHJhZ2dhYmxlRGlyZWN0aXZlLCBEcmFnZ2FibGVNb2R1bGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1jb21tb24nO1xuaW1wb3J0IHsgdHJpZ2dlciwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCBhbmltYXRlLCBBVVRPX1NUWUxFLCBBbmltYXRpb25CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTdWJqZWN0LCBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2UsIHRhcCwgZmlsdGVyLCBzd2l0Y2hNYXAsIGRlbGF5LCB0YWtlVW50aWwsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXByb2dyZXNzYmFyJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBleHBhbmQgbW9kZXMgb2YgdGhlIFBhbmVsQmFyLlxuICogQnkgZGVmYXVsdCwgdGhlIGV4cGFuZCBtb2RlIGlzIHNldCB0byBgbXVsdGlwbGVgLlxuICovXG52YXIgUGFuZWxCYXJFeHBhbmRNb2RlO1xuKGZ1bmN0aW9uIChQYW5lbEJhckV4cGFuZE1vZGUpIHtcbiAgICAvKipcbiAgICAgKiBBbGxvd3MgeW91IHRvIGV4cGFuZCBvbmx5IG9uZSBpdGVtIGF0IGEgdGltZS5cbiAgICAgKiBXaGVuIHlvdSBleHBhbmQgYW4gaXRlbSwgdGhlIGl0ZW0gdGhhdCB3YXMgcHJldmlvdXNseSBleHBhbmRlZCBpcyBjb2xsLlxuICAgICAqL1xuICAgIFBhbmVsQmFyRXhwYW5kTW9kZVtQYW5lbEJhckV4cGFuZE1vZGVbXCJTaW5nbGVcIl0gPSAwXSA9IFwiU2luZ2xlXCI7XG4gICAgLyoqXG4gICAgICogQWxsb3dzIHlvdSB0byBleHBhbmQgb25seSBvbmUgaXRlbSBhdCBhIHRpbWUgYW5kIHJlcXVpcmVzIHlvdSB0byBzZXQgdGhlIGBoZWlnaHRgIHByb3BlcnR5LlxuICAgICAqIFRoZSBleHBhbmRlZCBhcmVhIG9jY3VwaWVzIHRoZSBlbnRpcmUgaGVpZ2h0IG9mIHRoZSBQYW5lbEJhci5cbiAgICAgKi9cbiAgICBQYW5lbEJhckV4cGFuZE1vZGVbUGFuZWxCYXJFeHBhbmRNb2RlW1wiRnVsbFwiXSA9IDFdID0gXCJGdWxsXCI7XG4gICAgLyoqXG4gICAgICogVGhlIGRlZmF1bHQgbW9kZSBvZiB0aGUgUGFuZWxCYXIuXG4gICAgICogQWxsb3dzIHlvdSB0byBleHBhbmQgbW9yZSB0aGFuIG9uZSBpdGVtIGF0IGEgdGltZS4gSXRlbXMgY2FuIGFsc28gYmUgdG9nZ2xlZC5cbiAgICAgKi9cbiAgICBQYW5lbEJhckV4cGFuZE1vZGVbUGFuZWxCYXJFeHBhbmRNb2RlW1wiTXVsdGlwbGVcIl0gPSAyXSA9IFwiTXVsdGlwbGVcIjtcbiAgICAvKipcbiAgICAgKiBCeSBkZWZhdWx0LCB0aGUgZXhwYW5kIG1vZGUgaXMgc2V0IHRvIGBtdWx0aXBsZWAuXG4gICAgICovXG4gICAgUGFuZWxCYXJFeHBhbmRNb2RlW1BhbmVsQmFyRXhwYW5kTW9kZVtcIkRlZmF1bHRcIl0gPSAyXSA9IFwiRGVmYXVsdFwiO1xufSkoUGFuZWxCYXJFeHBhbmRNb2RlIHx8IChQYW5lbEJhckV4cGFuZE1vZGUgPSB7fSkpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xubGV0IG5leHRQYW5lbGJhcklkID0gMDtcbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBQYW5lbEJhclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBhcmVudFNvdXJjZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMua2VlcENvbnRlbnRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgICAgICAgdGhpcy5jaGlsZFNvdXJjZSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMucGFyZW50JCA9IHRoaXMucGFyZW50U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuJCA9IHRoaXMuY2hpbGRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMua2VlcENvbnRlbnQkID0gdGhpcy5rZWVwQ29udGVudFNvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgICAgICAgdGhpcy5wYklkID0gbmV4dFBhbmVsYmFySWQrKztcbiAgICB9XG4gICAgb25LZWVwQ29udGVudChrZWVwQ29udGVudCkge1xuICAgICAgICB0aGlzLmtlZXBDb250ZW50U291cmNlLm5leHQoa2VlcENvbnRlbnQpO1xuICAgIH1cbiAgICBvblNlbGVjdChldmVudCkge1xuICAgICAgICB0aGlzLmNoaWxkU291cmNlLm5leHQoZXZlbnQpO1xuICAgIH1cbiAgICBvbkZvY3VzKCkge1xuICAgICAgICB0aGlzLnBhcmVudFNvdXJjZS5uZXh0KHRydWUpO1xuICAgIH1cbiAgICBvbkJsdXIoKSB7XG4gICAgICAgIHRoaXMucGFyZW50U291cmNlLm5leHQoZmFsc2UpO1xuICAgIH1cbn1cblBhbmVsQmFyU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuUGFuZWxCYXJTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW107XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29udGVudCB0ZW1wbGF0ZSBvZiB0aGUgZGVjbGFyYXRpdmVseSBpbml0aWFsaXplZCBQYW5lbEJhciBpdGVtcy5cbiAqIFRoZSBjb250ZW50IGNhbiBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQgdGhyb3VnaCB0aGUgaXRlbS5cbiAqL1xuY2xhc3MgUGFuZWxCYXJDb250ZW50RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuUGFuZWxCYXJDb250ZW50RGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IFwiW2tlbmRvUGFuZWxCYXJDb250ZW50XVwiXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhbmVsQmFyQ29udGVudERpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgdGVtcGxhdGUgZGlyZWN0aXZlIG9mIHRoZSBQYW5lbEJhciB3aGljaCBoZWxwcyB0byBjdXN0b21pemUgdGhlIGl0ZW0gdGl0bGVcbiAqIChbbW9yZSBpbmZvcm1hdGlvbiBhbmQgZXhhbXBsZV0oeyUgc2x1ZyB0ZW1wbGF0ZXNfcGFuZWxiYXIgJX0jdG9jLWN1c3RvbWl6aW5nLXRoZS1hcHBlYXJhbmNlLW9mLXRoZS10aXRsZSkpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1wYW5lbGJhcj5cbiAqICAgICAgICAgICAgPGtlbmRvLXBhbmVsYmFyLWl0ZW0gW3RpdGxlXT1cIidQYXJpcydcIiBbZXhwYW5kZWRdPVwidHJ1ZVwiPlxuICogICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvUGFuZWxCYXJJdGVtVGl0bGU+XG4gKiAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBDb250ZW50XG4gKiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICA8L2tlbmRvLXBhbmVsYmFyLWl0ZW0+XG4gKiAgICAgICAgPC9rZW5kby1wYW5lbGJhcj5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7fVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBQYW5lbEJhckl0ZW1UaXRsZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cblBhbmVsQmFySXRlbVRpdGxlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9QYW5lbEJhckl0ZW1UaXRsZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhbmVsQmFySXRlbVRpdGxlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbmxldCBuZXh0SWQgPSAwO1xuY29uc3QgcGFyc2VQYW5lbEJhckl0ZW1zID0gKGRhdGEpID0+IHtcbiAgICByZXR1cm4gZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCFpdGVtLmlkKSB7XG4gICAgICAgICAgICBpdGVtLmlkID0gYGRlZmF1bHQtJHtuZXh0SWQrK31gO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gcGFyc2VQYW5lbEJhckl0ZW1zKGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtO1xuICAgIH0pO1xufTtcbnZhciB1dGlsID0ge1xuICAgIHBhcnNlUGFuZWxCYXJJdGVtc1xufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpc1ByZXNlbnQgPSAodmFsdWUpID0+IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IGZvY3VzYWJsZVJlZ2V4ID0gL14oPzphfGlucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2k7XG5jb25zdCB0b0NsYXNzTGlzdCA9IChjbGFzc05hbWVzKSA9PiBTdHJpbmcoY2xhc3NOYW1lcykudHJpbSgpLnNwbGl0KCcgJyk7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaXNGb2N1c2FibGUgPSAoZWxlbWVudCkgPT4ge1xuICAgIGlmIChlbGVtZW50LnRhZ05hbWUpIHtcbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCB0YWJJbmRleCA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0YWJJbmRleCcpO1xuICAgICAgICBjb25zdCBza2lwVGFiID0gdGFiSW5kZXggPT09ICctMSc7XG4gICAgICAgIGxldCBmb2N1c2FibGUgPSB0YWJJbmRleCAhPT0gbnVsbCAmJiAhc2tpcFRhYjtcbiAgICAgICAgaWYgKGZvY3VzYWJsZVJlZ2V4LnRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICAgIGZvY3VzYWJsZSA9ICFlbGVtZW50LmRpc2FibGVkICYmICFza2lwVGFiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2N1c2FibGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgaGFzQ2xhc3MgPSAoZWxlbWVudCwgY2xhc3NOYW1lKSA9PiBCb29sZWFuKHRvQ2xhc3NMaXN0KGVsZW1lbnQuY2xhc3NOYW1lKS5maW5kKChuYW1lKSA9PiBuYW1lID09PSBjbGFzc05hbWUpKTtcbmNvbnN0IGNsb3Nlc3RJblNjb3BlID0gKHRhcmdldCwgdGFyZ2V0QXR0ciwgcHJlZGljYXRlLCBzY29wZSkgPT4ge1xuICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0ICE9PSBzY29wZSAmJiAhcHJlZGljYXRlKHRhcmdldCwgdGFyZ2V0QXR0cikpIHtcbiAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XG4gICAgfVxuICAgIGlmICh0YXJnZXQgIT09IHNjb3BlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxufTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBpdGVtSW5kZXggPSAoaXRlbSwgaW5kZXhBdHRyKSA9PiAraXRlbS5nZXRBdHRyaWJ1dGUoaW5kZXhBdHRyKTtcbmNvbnN0IGhhc0l0ZW1JbmRleCA9IChpdGVtLCBpbmRleEF0dHIpID0+IGlzUHJlc2VudChpdGVtLmdldEF0dHJpYnV0ZShpbmRleEF0dHIpKTtcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBjbG9zZXN0SXRlbSA9ICh0YXJnZXQsIHRhcmdldEF0dHIsIHNjb3BlKSA9PiBjbG9zZXN0SW5TY29wZSh0YXJnZXQsIHRhcmdldEF0dHIsIGhhc0l0ZW1JbmRleCwgc2NvcGUpO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xubGV0IG5leHRJZCQxID0gMDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaXRlbXMgb2YgdGhlIFBhbmVsQmFyLlxuICovXG5jbGFzcyBQYW5lbEJhckl0ZW1Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgZXZlbnRTZXJ2aWNlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZSA9IGV2ZW50U2VydmljZTtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBQYW5lbEJhciBpdGVtIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgaXRlbXNfcGFuZWxiYXIgJX0jdG9jLXRpdGxlcykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy50aXRsZSA9ICdVbnRpdGxlZCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3MgdGhlIGNvbXBvbmVudCB0byBzZXQgdGhlIGBcImlkXCJgIHByb3BlcnR5IHRvIGVhY2ggaXRlbS5cbiAgICAgICAgICogVXNlZCB0byBzZXQgdGhlIGBpZGAgYXR0cmlidXRlcyBvZiB0aGUgbmVzdGVkIGVsZW1lbnRzIGFuZCB0byBlbmFibGUgdGhlIFdBSS1BUklBIHN1cHBvcnQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlkID0gYGRlZmF1bHQtJHtuZXh0SWQkMSsrfWA7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSBpY29uIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBuZXh0IHRvIHRoZSB0aXRsZSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGl0ZW1zX3BhbmVsYmFyICV9I3RvYy10aXRsZS1pY29ucykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pY29uID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzICB0aGUgaWNvbiB0aGF0IHdpbGwgYmUgcmVuZGVyZWQgbmV4dCB0byB0aGUgdGl0bGUgYnkgdXNpbmcgYSBjdXN0b20gQ1NTIGNsYXNzXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgaXRlbXNfcGFuZWxiYXIgJX0jdG9jLXRpdGxlLWljb25zKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmljb25DbGFzcyA9ICcnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRGVmaW5lcyB0aGUgbG9jYXRpb24gb2YgdGhlIGltYWdlIHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgbmV4dCB0byB0aGUgdGl0bGVcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBpdGVtc19wYW5lbGJhciAlfSN0b2MtdGl0bGUtaW1hZ2VzKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmltYWdlVXJsID0gJyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIGRpc2FibGVzIGEgUGFuZWxCYXIgaXRlbSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGl0ZW1zX3BhbmVsYmFyICV9I3RvYy1kaXNhYmxlZC1zdGF0ZSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU2V0cyB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgYSBQYW5lbEJhciBpdGVtIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgaXRlbXNfcGFuZWxiYXIgJX0jdG9jLXNlbGVjdGVkLXN0YXRlKSkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMua2VlcENvbnRlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNDaGlsZEl0ZW1zID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oYXNDb250ZW50ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBcImluYWN0aXZlXCI7XG4gICAgICAgIHRoaXMucm9sZSA9IFwidHJlZWl0ZW1cIjtcbiAgICAgICAgdGhpcy50aXRsZUF0dHJpYnV0ZSA9IG51bGw7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMud3JhcHBlckZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7IH0pO1xuICAgICAgICB0aGlzLl9leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGV2ZW50U2VydmljZS5wYXJlbnQkLnN1YnNjcmliZShmb2N1c2VkID0+IHRoaXMub25XcmFwcGVyRm9jdXNDaGFuZ2UoZm9jdXNlZCkpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChldmVudFNlcnZpY2Uua2VlcENvbnRlbnQkLnN1YnNjcmliZShrZWVwQ29udGVudCA9PiB0aGlzLmtlZXBDb250ZW50ID0ga2VlcENvbnRlbnQpKTtcbiAgICAgICAgdGhpcy53cmFwcGVyRm9jdXNlZCA9IHBhcmVudCA/IHBhcmVudC5mb2N1c2VkIDogZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgZXhwYW5kcyB0aGUgUGFuZWxCYXIgaXRlbSAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGl0ZW1zX3BhbmVsYmFyICV9I3RvYy1leHBhbmRlZC1zdGF0ZSkpLlxuICAgICAqL1xuICAgIHNldCBleHBhbmRlZCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhY3RpdmVTdGF0ZSA9IHRoaXMuYW5pbWF0ZSA/IFwiYWN0aXZlXCIgOiBcImFjdGl2ZVdpdGhvdXRBbmltYXRpb25cIjtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHZhbHVlID8gYWN0aXZlU3RhdGUgOiBcImluYWN0aXZlXCI7XG4gICAgICAgIGlmICghdGhpcy5rZWVwQ29udGVudCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVFeHBhbmRlZENoaWxkQW5pbWF0aW9ucyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXhwYW5kZWQgPSB2YWx1ZTtcbiAgICB9XG4gICAgZ2V0IGV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWQ7XG4gICAgfVxuICAgIGdldCBhbmltYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2UuYW5pbWF0ZTtcbiAgICB9XG4gICAgZ2V0IGtJdGVtQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQga1N0YXRlRGVmYXVsdENsYXNzKCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuZGlzYWJsZWQ7XG4gICAgfVxuICAgIGdldCBrU3RhdGVEaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG4gICAgZ2V0IGtTdGF0ZUV4cGFuZGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLmV4cGFuZGVkICYmICh0aGlzLmhhc0NoaWxkSXRlbXMgfHwgdGhpcy5oYXNDb250ZW50KTtcbiAgICB9XG4gICAgZ2V0IGl0ZW1JZCgpIHtcbiAgICAgICAgcmV0dXJuICdrLXBhbmVsYmFyLScgKyB0aGlzLmV2ZW50U2VydmljZS5wYklkICsgJy1pdGVtLScgKyB0aGlzLmlkO1xuICAgIH1cbiAgICBnZXQgYXJpYUV4cGFuZGVkKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaGFzQ2hpbGRJdGVtcyB8fCB0aGlzLmhhc0NvbnRlbnQpID8gIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5leHBhbmRlZCA6IG51bGw7XG4gICAgfVxuICAgIGdldCBhcmlhU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnNlbGVjdGVkO1xuICAgIH1cbiAgICBnZXQgYXJpYURpc2FibGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IHRydWUgOiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHRpdGxlVGVtcGxhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpdGxlVGVtcGxhdGVzLmxlbmd0aCA+IDAgPyB0aGlzLnRpdGxlVGVtcGxhdGVzLnRvQXJyYXkoKVswXS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGhlYWRlckhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCAtICh0aGlzLmNvbnRlbnRXcmFwcGVyID8gdGhpcy5jb250ZW50V3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA6IDApO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xuICAgICAgICB0aGlzLmhhc0l0ZW1zID0gdGhpcy5pdGVtcyAmJiB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmhpZGRlbikubGVuZ3RoID4gMDtcbiAgICAgICAgdGhpcy5oYXNDaGlsZEl0ZW1zID0gdGhpcy5jb250ZW50SXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbSAhPT0gdGhpcykubGVuZ3RoID4gMCB8fCB0aGlzLmhhc0l0ZW1zO1xuICAgICAgICB0aGlzLmhhc0NvbnRlbnQgPSAodGhpcy5jb250ZW50VGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRlbnRUZW1wbGF0ZS5sZW5ndGggPiAwKSB8fFxuICAgICAgICAgICAgdGhpcy5jb250ZW50ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb25maWd1cmF0aW9uKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLml0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuSXRlbXMgPSB0aGlzLnZpZXdDaGlsZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5JdGVtcyA9IHRoaXMuY29udGVudEl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0gIT09IHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkl0ZW1BY3Rpb24oKSB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uub25TZWxlY3QodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uSXRlbUNsaWNrKGUpIHtcbiAgICAgICAgaWYgKCFpc0ZvY3VzYWJsZShlLnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBpY29uQ2xhc3NlcygpIHtcbiAgICAgICAgbGV0IGljb24gPSB0aGlzLmljb24gPyAnay1pLScgKyB0aGlzLmljb24gOiBudWxsO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgW2ljb24gfHwgdGhpcy5pY29uQ2xhc3NdOiB0cnVlXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb250ZW50OiB0aGlzLmNvbnRlbnQsXG4gICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZCxcbiAgICAgICAgICAgIGV4cGFuZGVkOiB0aGlzLmV4cGFuZGVkLFxuICAgICAgICAgICAgZm9jdXNlZDogdGhpcy5mb2N1c2VkLFxuICAgICAgICAgICAgaWNvbjogdGhpcy5pY29uLFxuICAgICAgICAgICAgaWNvbkNsYXNzOiB0aGlzLmljb25DbGFzcyxcbiAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgaW1hZ2VVcmw6IHRoaXMuaW1hZ2VVcmwsXG4gICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCxcbiAgICAgICAgICAgIHRpdGxlOiB0aGlzLnRpdGxlXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzdWJUcmVlVmlld0l0ZW1zKCkge1xuICAgICAgICBsZXQgc3ViVHJlZSA9IFtdO1xuICAgICAgICB0aGlzLnZpZXdDaGlsZEl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBzdWJUcmVlID0gc3ViVHJlZS5jb25jYXQoaXRlbS5zdWJUcmVlVmlld0l0ZW1zKCkpO1xuICAgICAgICAgICAgc3ViVHJlZS5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN1YlRyZWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB2YWxpZGF0ZUNvbmZpZ3VyYXRpb24oKSB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udGVudCAmJiAodGhpcy5jb250ZW50VGVtcGxhdGUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbnRlbnRUZW1wbGF0ZS5sZW5ndGggPiAwKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29uZmlndXJhdGlvbjogbWl4ZWQgdGVtcGxhdGUgY29tcG9uZW50cyBhbmQgY29tcG9uZW50IHByb3BlcnR5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlQW5pbWF0aW9uU3RhdGUodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFuaW1hdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN0YXRlID0gdmFsdWUgJiYgdGhpcy5ldmVudFNlcnZpY2UuZXhwYW5kTW9kZSAhPT0gUGFuZWxCYXJFeHBhbmRNb2RlLlNpbmdsZSA/ICdhY3RpdmUnIDogJ2FjdGl2ZVdpdGhvdXRBbmltYXRpb24nO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgdG9nZ2xlRXhwYW5kZWRDaGlsZEFuaW1hdGlvbnModmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRyZW5JdGVtcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkl0ZW1zLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZC5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZC50b2dnbGVBbmltYXRpb25TdGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkLnRvZ2dsZUV4cGFuZGVkQ2hpbGRBbmltYXRpb25zKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbldyYXBwZXJGb2N1c0NoYW5nZShmb2N1c2VkKSB7XG4gICAgICAgIHRoaXMud3JhcHBlckZvY3VzZWQgPSBmb2N1c2VkO1xuICAgIH1cbn1cblBhbmVsQmFySXRlbUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcigndG9nZ2xlJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUoJ2luYWN0aXZlJywgc3R5bGUoeyBkaXNwbGF5OiAnbm9uZScgfSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbignKiA9PiBhY3RpdmUnLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIGRpc3BsYXk6ICdibG9jaycsIGhlaWdodDogMCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRlKDIwMCwgc3R5bGUoeyBoZWlnaHQ6IEFVVE9fU1RZTEUgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb24oJ2FjdGl2ZSA9PiAqJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBoZWlnaHQ6IEFVVE9fU1RZTEUgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZSgyMDAsIHN0eWxlKHsgaGVpZ2h0OiAwLCBkaXNwbGF5OiAnbm9uZScgfSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1BhbmVsYmFySXRlbScsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6IFwia2VuZG8tcGFuZWxiYXItaXRlbVwiLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgPHNwYW5cbiAgICAgICAgICAgICAgICAjaGVhZGVyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstbGlua109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1oZWFkZXJdPVwiIXBhcmVudFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtc2VsZWN0ZWRdPVwiIWRpc2FibGVkICYmIHNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGF0ZS1mb2N1c2VkXT1cIiFkaXNhYmxlZCAmJiBmb2N1c2VkICYmIHdyYXBwZXJGb2N1c2VkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAqbmdJZj1cImljb24gfHwgaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstaWNvblwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzZXNcIj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAqbmdJZj1cImltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstaW1hZ2VcIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiaW1hZ2VVcmxcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlwiPlxuICAgICAgICAgICAge3t0aXRsZX19XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGl0bGVUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImhhc0NoaWxkSXRlbXMgfHwgaGFzQ29udGVudFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstaWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1pLWFycm93LW5dPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLXBhbmVsYmFyLWNvbGxhcHNlXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1pLWFycm93LXNdPVwiIWV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1wYW5lbGJhci1leHBhbmRdPVwiIWV4cGFuZGVkXCI+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGRpdiAjY29udGVudFdyYXBwZXJcbiAgICAgICAgICAgICpuZ0lmPVwia2VlcENvbnRlbnQgfHwgKCFkaXNhYmxlZCAmJiBleHBhbmRlZCAmJiAoaGFzQ2hpbGRJdGVtcyB8fCBoYXNDb250ZW50KSlcIlxuICAgICAgICAgICAgW0B0b2dnbGVdPVwic3RhdGVcIlxuICAgICAgICAgICAgW2F0dHIucm9sZV09XCInZ3JvdXAnXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFkaXNhYmxlZCAmJiAhZXhwYW5kZWRcIj5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhhc0NoaWxkSXRlbXMgJiYgIWl0ZW1zPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5vdmVyZmxvd109XCJjb250ZW50T3ZlcmZsb3dcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiY29udGVudEhlaWdodFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLXBhbmVsIGstZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwia2VuZG8tcGFuZWxiYXItaXRlbVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzQ29udGVudCAmJiAhY29udGVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm92ZXJmbG93XT1cImNvbnRlbnRPdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjb250ZW50SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb250ZW50VGVtcGxhdGUuZmlyc3QudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBpY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsOiBpbWFnZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImhhc0l0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUub3ZlcmZsb3ddPVwiY29udGVudE92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cImNvbnRlbnRIZWlnaHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1wYW5lbCBrLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tcGFuZWxiYXItaXRlbSAqbmdJZj1cIiFpdGVtLmhpZGRlblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS50aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWNvbl09XCJpdGVtLmljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25DbGFzc109XCJpdGVtLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRdPVwiISFpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCIhIWl0ZW0uZXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiEhaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwidGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIml0ZW0uY2hpbGRyZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiaXRlbS5jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDwva2VuZG8tcGFuZWxiYXItaXRlbT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udGVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm92ZXJmbG93XT1cImNvbnRlbnRPdmVyZmxvd1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodF09XCJjb250ZW50SGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImstY29udGVudFwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VVcmw6IGltYWdlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhdGVtcGxhdGVcIj57e2NvbnRlbnR9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYW5lbEJhckl0ZW1Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBQYW5lbEJhckl0ZW1Db21wb25lbnQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IFNraXBTZWxmIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IE9wdGlvbmFsIH1dIH0sXG4gICAgeyB0eXBlOiBQYW5lbEJhclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfVxuXTtcblBhbmVsQmFySXRlbUNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICB0aXRsZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW1hZ2VVcmw6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBleHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2VsZWN0ZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbnRlbnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGl0ZW1zOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0ZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaGVhZGVyOiBbeyB0eXBlOiBWaWV3Q2hpbGQsIGFyZ3M6IFsnaGVhZGVyJywge30sXSB9XSxcbiAgICBjb250ZW50V3JhcHBlcjogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ2NvbnRlbnRXcmFwcGVyJywge30sXSB9XSxcbiAgICByb2xlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLnJvbGUnLF0gfV0sXG4gICAgdGl0bGVBdHRyaWJ1dGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGl0bGUnLF0gfV0sXG4gICAga0l0ZW1DbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1pdGVtJyxdIH1dLFxuICAgIGtTdGF0ZURlZmF1bHRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1kZWZhdWx0JyxdIH1dLFxuICAgIGtTdGF0ZURpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAga1N0YXRlRXhwYW5kZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1leHBhbmRlZCcsXSB9XSxcbiAgICBpdGVtSWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2lkJyxdIH1dLFxuICAgIGFyaWFFeHBhbmRlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLWV4cGFuZGVkJyxdIH1dLFxuICAgIGFyaWFTZWxlY3RlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLXNlbGVjdGVkJyxdIH1dLFxuICAgIGFyaWFEaXNhYmxlZDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLWRpc2FibGVkJyxdIH1dLFxuICAgIHZpZXdDaGlsZEl0ZW1zOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtQYW5lbEJhckl0ZW1Db21wb25lbnQsXSB9XSxcbiAgICBjb250ZW50SXRlbXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1BhbmVsQmFySXRlbUNvbXBvbmVudCxdIH1dLFxuICAgIGNvbnRlbnRUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbUGFuZWxCYXJDb250ZW50RGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9LF0gfV0sXG4gICAgdGl0bGVUZW1wbGF0ZXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1BhbmVsQmFySXRlbVRpdGxlRGlyZWN0aXZlLCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9LF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgdGVtcGxhdGUgZGlyZWN0aXZlIG9mIHRoZSBQYW5lbEJhciB3aGljaCBoZWxwcyB0byBjdXN0b21pemUgdGhlIGl0ZW0gY29udGVudC5cbiAqL1xuY2xhc3MgUGFuZWxCYXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5QYW5lbEJhckl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvUGFuZWxCYXJJdGVtVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5QYW5lbEJhckl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBQYW5lbEJhciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfcGFuZWxiYXIgJX0pLlxuICovXG4vLyBUT0RPOiBhZGQgc3R5bGVzIGFzIGlucHV0IHByb3BcbmNsYXNzIFBhbmVsQmFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmLCBldmVudFNlcnZpY2UsIGxvY2FsaXphdGlvbikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGV4cGFuZCBtb2RlIG9mIHRoZSBQYW5lbEJhciB0aHJvdWdoIHRoZSBgUGFuZWxCYXJFeHBhbmRNb2RlYCBlbnVtIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgZXhwYW5kbW9kZXNfcGFuZWxiYXIgJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIGF2YWlsYWJsZSBtb2RlcyBhcmU6XG4gICAgICAgICAqIC0gYFwic2luZ2xlXCJgJm1kYXNoO0V4cGFuZHMgb25seSBvbmUgaXRlbSBhdCBhIHRpbWUuIEV4cGFuZGluZyBhbiBpdGVtIGNvbGxhcHNlcyB0aGUgaXRlbSB0aGF0IHdhcyBwcmV2aW91c2x5IGV4cGFuZGVkLlxuICAgICAgICAgKiAtIGBcIm11bHRpcGxlXCJgJm1kYXNoO1RoZSBkZWZhdWx0IG1vZGUgb2YgdGhlIFBhbmVsQmFyLlxuICAgICAgICAgKiBFeHBhbmRzIG1vcmUgdGhhbiBvbmUgaXRlbSBhdCBhIHRpbWUuIEl0ZW1zIGNhbiBhbHNvIGJlIHRvZ2dsZWQuXG4gICAgICAgICAqIC0gYFwiZnVsbFwiYCZtZGFzaDtFeHBhbmRzIG9ubHkgb25lIGl0ZW0gYXQgYSB0aW1lLlxuICAgICAgICAgKiBUaGUgZXhwYW5kZWQgYXJlYSBvY2N1cGllcyB0aGUgZW50aXJlIGhlaWdodCBvZiB0aGUgUGFuZWxCYXIuIFJlcXVpcmVzIHlvdSB0byBzZXQgdGhlIGBoZWlnaHRgIHByb3BlcnR5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5leHBhbmRNb2RlID0gUGFuZWxCYXJFeHBhbmRNb2RlLkRlZmF1bHQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBbGxvd3MgdGhlIFBhbmVsQmFyIHRvIG1vZGlmeSB0aGUgc2VsZWN0ZWQgc3RhdGUgb2YgdGhlIGl0ZW1zLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3RhYmxlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGFuaW1hdGUgc3RhdGUgb2YgdGhlIFBhbmVsQmFyIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgYW5pbWF0aW9uc19wYW5lbGJhciAlfSkpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIGhlaWdodCBvZiB0aGUgY29tcG9uZW50IHdoZW4gdGhlIGBcImZ1bGxcImAgZXhwYW5kIG1vZGUgaXMgdXNlZC5cbiAgICAgICAgICogVGhpcyBvcHRpb24gaXMgaWdub3JlZCBpbiB0aGUgYFwibXVsdGlwbGVcImAgYW5kIGBcInNpbmdsZVwiYCBleHBhbmQgbW9kZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmhlaWdodCA9IFwiNDAwcHhcIjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIGVhY2ggdGltZSB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCBhIFBhbmVsQmFyIGl0ZW1cbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyByb3V0aW5nX3BhbmVsYmFyICV9I3RvYy1nZXR0aW5nLXRoZS1zZWxlY3RlZC1pdGVtKSkuXG4gICAgICAgICAqIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIGFsbCBpdGVtcyB0aGF0IGFyZSBtb2RpZmllZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICAgICAgICB0aGlzLnJvbGUgPSBcInRyZWVcIjtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gXCJcIjtcbiAgICAgICAgdGhpcy5pc1ZpZXdJbml0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2tlZXBJdGVtQ29udGVudCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuSGVpZ2h0ID0gKCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNoaWxkcmVuSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGNvbnN0IHBhbmVsYmFySGVpZ2h0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgY29udGVudE92ZXJmbG93ID0gdGhpcy5leHBhbmRNb2RlID09PSBQYW5lbEJhckV4cGFuZE1vZGUuRnVsbCA/ICdhdXRvJyA6ICd2aXNpYmxlJztcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5JdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGNoaWxkcmVuSGVpZ2h0ICs9IGl0ZW0uaGVhZGVySGVpZ2h0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5JdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGVudEhlaWdodCA9IFBhbmVsQmFyRXhwYW5kTW9kZS5GdWxsID09PSB0aGlzLmV4cGFuZE1vZGUgPyAocGFuZWxiYXJIZWlnaHQgLSBjaGlsZHJlbkhlaWdodCkgKyBcInB4XCIgOiAnYXV0byc7XG4gICAgICAgICAgICAgICAgaXRlbS5jb250ZW50T3ZlcmZsb3cgPSBjb250ZW50T3ZlcmZsb3c7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5rZXlCaW5kaW5ncyA9IHRoaXMuY29tcHV0ZWRLZXlzO1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBlbGVtZW50UmVmO1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZSA9IGV2ZW50U2VydmljZTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuY2hpbGRyZW4kLnN1YnNjcmliZShldmVudCA9PiB0aGlzLm9uSXRlbUFjdGlvbihldmVudCkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBQYW5lbEJhciByZW5kZXJzIHRoZSBjb250ZW50IG9mIGFsbCBpdGVtcyBhbmQgdGhleSBhcmUgcGVyc2lzdGVkIGluIHRoZSBET01cbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHRlbXBsYXRlc19wYW5lbGJhciAlfSN0b2MtY29sbGVjdGlvbnMpKS5cbiAgICAgKiBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICBnZXQga2VlcEl0ZW1Db250ZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fa2VlcEl0ZW1Db250ZW50O1xuICAgIH1cbiAgICBzZXQga2VlcEl0ZW1Db250ZW50KGtlZXBJdGVtQ29udGVudCkge1xuICAgICAgICB0aGlzLl9rZWVwSXRlbUNvbnRlbnQgPSBrZWVwSXRlbUNvbnRlbnQ7XG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLm9uS2VlcENvbnRlbnQoa2VlcEl0ZW1Db250ZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgaXRlbXMgb2YgdGhlIFBhbmVsQmFyIGFzIGFuIGFycmF5IG9mIGBQYW5lbEJhckl0ZW1Nb2RlbGAgaW5zdGFuY2VzXG4gICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBpdGVtc19wYW5lbGJhciAlfSkpLlxuICAgICAqL1xuICAgIHNldCBpdGVtcyhkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pdGVtcyA9IHV0aWwucGFyc2VQYW5lbEJhckl0ZW1zKGRhdGEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICAgIH1cbiAgICBnZXQgaG9zdEhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwYW5kTW9kZSA9PT0gUGFuZWxCYXJFeHBhbmRNb2RlLkZ1bGwgPyB0aGlzLmhlaWdodCA6ICdhdXRvJztcbiAgICB9XG4gICAgZ2V0IG92ZXJmbG93KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5leHBhbmRNb2RlID09PSBQYW5lbEJhckV4cGFuZE1vZGUuRnVsbCA/IFwiaGlkZGVuXCIgOiBcInZpc2libGVcIjtcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBpbnZlcnRLZXlzKG9yaWdpbmFsLCBpbnZlcnRlZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gaW52ZXJ0ZWQgOiBvcmlnaW5hbDtcbiAgICB9XG4gICAgZ2V0IGNvbXB1dGVkS2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFtLZXlzLlNwYWNlXTogKCkgPT4gdGhpcy5zZWxlY3RGb2N1c2VkSXRlbSgpLFxuICAgICAgICAgICAgW0tleXMuRW50ZXJdOiAoKSA9PiB0aGlzLnNlbGVjdEZvY3VzZWRJdGVtKCksXG4gICAgICAgICAgICBbS2V5cy5BcnJvd1VwXTogKCkgPT4gdGhpcy5mb2N1c1ByZXZpb3VzSXRlbSgpLFxuICAgICAgICAgICAgW3RoaXMuaW52ZXJ0S2V5cyhLZXlzLkFycm93TGVmdCwgS2V5cy5BcnJvd1JpZ2h0KV06ICgpID0+IHRoaXMuY29sbGFwc2VJdGVtKCksXG4gICAgICAgICAgICBbS2V5cy5BcnJvd0Rvd25dOiAoKSA9PiB0aGlzLmZvY3VzTmV4dEl0ZW0oKSxcbiAgICAgICAgICAgIFt0aGlzLmludmVydEtleXMoS2V5cy5BcnJvd1JpZ2h0LCBLZXlzLkFycm93TGVmdCldOiAoKSA9PiB0aGlzLmV4cGFuZEl0ZW0oKSxcbiAgICAgICAgICAgIFtLZXlzLkVuZF06ICgpID0+IHRoaXMuZm9jdXNMYXN0SXRlbSgpLFxuICAgICAgICAgICAgW0tleXMuSG9tZV06ICgpID0+IHRoaXMuZm9jdXNGaXJzdEl0ZW0oKVxuICAgICAgICB9O1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxpemF0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5rZXlCaW5kaW5ncyA9IHRoaXMuY29tcHV0ZWRLZXlzKTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuYW5pbWF0ZSA9IHRoaXMuYW5pbWF0ZTtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZXhwYW5kTW9kZSA9IHRoaXMuZXhwYW5kTW9kZTtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbkl0ZW1zID0gdGhpcy52aWV3Q2hpbGRJdGVtcy50b0FycmF5KCk7XG4gICAgICAgICAgICB0aGlzLmFsbEl0ZW1zID0gdGhpcy52aWV3SXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoaWxkcmVuSXRlbXMgPSB0aGlzLmNvbnRlbnRDaGlsZEl0ZW1zLnRvQXJyYXkoKTtcbiAgICAgICAgICAgIHRoaXMuYWxsSXRlbXMgPSB0aGlzLmNvbnRlbnRJdGVtcy50b0FycmF5KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdCAmJiB0aGlzLmNoaWxkcmVuSXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlld0luaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVDaGlsZHJlbkhlaWdodCgpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlQ29uZmlndXJhdGlvbigpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSB8fCBjaGFuZ2VzWydleHBhbmRNb2RlJ10gfHwgY2hhbmdlc1tcIml0ZW1zXCJdKSB7IC8vIHRzbGludDpkaXNhYmxlLWxpbmVcbiAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkcmVuSXRlbXMpIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KHRoaXMudXBkYXRlQ2hpbGRyZW5IZWlnaHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzLmFuaW1hdGUpIHtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmFuaW1hdGUgPSB0aGlzLmFuaW1hdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXMuZXhwYW5kTW9kZSkge1xuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZXhwYW5kTW9kZSA9IHRoaXMuZXhwYW5kTW9kZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdGVtcGxhdGVSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlID8gdGhpcy50ZW1wbGF0ZS50ZW1wbGF0ZVJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIG9uQ29tcG9uZW50Q2xpY2soZXZlbnQpIHtcbiAgICAgICAgY29uc3QgaXRlbUNsaWNrZWQgPSB0aGlzLnZpc2libGVJdGVtcygpLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmhlYWRlci5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBpdGVtQ2xpY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Db21wb25lbnRGb2N1cygpIHtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uub25Gb2N1cygpO1xuICAgICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hbGxJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLnZpc2libGVJdGVtcygpO1xuICAgICAgICAgICAgY29uc3QgZm9jdXNlZEl0ZW1zID0gdmlzaWJsZUl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uZm9jdXNlZCk7XG4gICAgICAgICAgICBpZiAoIWZvY3VzZWRJdGVtcy5sZW5ndGggJiYgdmlzaWJsZUl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB2aXNpYmxlSXRlbXNbMF0uZm9jdXNlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gdmlzaWJsZUl0ZW1zWzBdLml0ZW1JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgb25Db21wb25lbnRCbHVyKCkge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vbkJsdXIoKTtcbiAgICAgICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9IFwiXCI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNvbXBvbmVudEtleURvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBLZXlzLlNwYWNlIHx8IGV2ZW50LmtleUNvZGUgPT09IEtleXMuQXJyb3dVcCB8fCBldmVudC5rZXlDb2RlID09PSBLZXlzLkFycm93RG93biB8fFxuICAgICAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgPT09IEtleXMuQXJyb3dMZWZ0IHx8IGV2ZW50LmtleUNvZGUgPT09IEtleXMuQXJyb3dSaWdodCB8fCBldmVudC5rZXlDb2RlID09PSBLZXlzLkhvbWUgfHxcbiAgICAgICAgICAgICAgICBldmVudC5rZXlDb2RlID09PSBLZXlzLkVuZCB8fCBldmVudC5rZXlDb2RlID09PSBLZXlzLlBhZ2VVcCB8fCBldmVudC5rZXlDb2RlID09PSBLZXlzLlBhZ2VEb3duKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmtleUJpbmRpbmdzW2V2ZW50LmtleUNvZGVdO1xuICAgICAgICAgICAgLy9UT0RPOiBjaGVjayBpZiBuZXh0IGl0ZW0gaXMgZGlzYWJsZWQgYW5kIHNraXAgb3BlcmF0aW9uP1xuICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHZpZXdJdGVtcygpIHtcbiAgICAgICAgbGV0IHRyZWVJdGVtcyA9IFtdO1xuICAgICAgICB0aGlzLnZpZXdDaGlsZEl0ZW1zLnRvQXJyYXkoKS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdHJlZUl0ZW1zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB0cmVlSXRlbXMgPSB0cmVlSXRlbXMuY29uY2F0KGl0ZW0uc3ViVHJlZVZpZXdJdGVtcygpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0cmVlSXRlbXM7XG4gICAgfVxuICAgIHZhbGlkYXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtcyAmJiAodGhpcy5jb250ZW50SXRlbXMgJiYgdGhpcy5jb250ZW50SXRlbXMubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvbmZpZ3VyYXRpb246IG1peGVkIHRlbXBsYXRlIGNvbXBvbmVudHMgYW5kIGl0ZW1zIHByb3BlcnR5LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkl0ZW1BY3Rpb24oaXRlbSkge1xuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbW9kaWZpZWRJdGVtcyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLmFsbEl0ZW1zXG4gICAgICAgICAgICAuZm9yRWFjaCgoY3VycmVudEl0ZW0pID0+IHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZFN0YXRlID0gY3VycmVudEl0ZW0gPT09IGl0ZW07XG4gICAgICAgICAgICBsZXQgZm9jdXNlZFN0YXRlID0gc2VsZWN0ZWRTdGF0ZTtcbiAgICAgICAgICAgIHNlbGVjdGVkU3RhdGUgPSB0aGlzLnNlbGVjdGFibGUgPyBzZWxlY3RlZFN0YXRlIDogY3VycmVudEl0ZW0uc2VsZWN0ZWQ7XG4gICAgICAgICAgICBpZiAoY3VycmVudEl0ZW0uc2VsZWN0ZWQgIT09IHNlbGVjdGVkU3RhdGUgfHwgY3VycmVudEl0ZW0uZm9jdXNlZCAhPT0gZm9jdXNlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudEl0ZW0uc2VsZWN0ZWQgPSBzZWxlY3RlZFN0YXRlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRJdGVtLmZvY3VzZWQgPSBmb2N1c2VkU3RhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gZm9jdXNlZFN0YXRlID8gY3VycmVudEl0ZW0uaXRlbUlkIDogXCJcIjtcbiAgICAgICAgICAgICAgICBtb2RpZmllZEl0ZW1zLnB1c2goY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kTW9kZSA9PT0gUGFuZWxCYXJFeHBhbmRNb2RlLk11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS5oYXNDaGlsZEl0ZW1zIHx8IGl0ZW0uaGFzQ29udGVudCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtb2RpZmllZEl0ZW1zLmluZGV4T2YoaXRlbSkgPCAwKSB7XG4gICAgICAgICAgICAgICAgbW9kaWZpZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IHNpYmxpbmdzID0gaXRlbS5wYXJlbnQgPyBpdGVtLnBhcmVudC5jaGlsZHJlbkl0ZW1zIDogdGhpcy5jaGlsZHJlbkl0ZW1zO1xuICAgICAgICAgICAgaWYgKGl0ZW0uaGFzQ2hpbGRJdGVtcyB8fCBpdGVtLmhhc0NvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBzaWJsaW5nc1xuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoY3VycmVudEl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4cGFuZGVkU3RhdGUgPSBjdXJyZW50SXRlbSA9PT0gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmV4cGFuZGVkICE9PSBleHBhbmRlZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50SXRlbS5leHBhbmRlZCA9IGV4cGFuZGVkU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kaWZpZWRJdGVtcy5pbmRleE9mKGN1cnJlbnRJdGVtKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEl0ZW1zLnB1c2goY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vZGlmaWVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZS5lbWl0KG1vZGlmaWVkSXRlbXMubWFwKGN1cnJlbnRJdGVtID0+IGN1cnJlbnRJdGVtLnNlcmlhbGl6ZSgpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaXNWaXNpYmxlKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy52aXNpYmxlSXRlbXMoKTtcbiAgICAgICAgcmV0dXJuIHZpc2libGVJdGVtcy5zb21lKGkgPT4gaSA9PT0gaXRlbSk7XG4gICAgfVxuICAgIGdldFZpc2libGVQYXJlbnQoaXRlbSkge1xuICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLnZpc2libGVJdGVtcygpO1xuICAgICAgICBpZiAoIWl0ZW0ucGFyZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmlzaWJsZUl0ZW1zLnNvbWUoaSA9PiBpID09PSBpdGVtLnBhcmVudCkgPyBpdGVtLnBhcmVudCA6IHRoaXMuZ2V0VmlzaWJsZVBhcmVudChpdGVtLnBhcmVudCk7XG4gICAgfVxuICAgIGZvY3VzSXRlbShhY3Rpb24pIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZUl0ZW1zID0gdGhpcy52aXNpYmxlSXRlbXMoKTtcbiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IHZpc2libGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmZvY3VzZWQpO1xuICAgICAgICBsZXQgY3VycmVudEl0ZW0gPSB2aXNpYmxlSXRlbXNbY3VycmVudEluZGV4XTtcbiAgICAgICAgbGV0IG5leHRJdGVtO1xuICAgICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgbGV0IGZvY3VzZWRJdGVtID0gdGhpcy5hbGxJdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS5mb2N1c2VkKTtcbiAgICAgICAgICAgIGZvY3VzZWRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtID0gdGhpcy5nZXRWaXNpYmxlUGFyZW50KGZvY3VzZWRJdGVtKTtcbiAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHZpc2libGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiBpdGVtID09PSBjdXJyZW50SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYXN0SXRlbVwiOlxuICAgICAgICAgICAgICAgIG5leHRJdGVtID0gdmlzaWJsZUl0ZW1zW3Zpc2libGVJdGVtcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJmaXJzdEl0ZW1cIjpcbiAgICAgICAgICAgICAgICBuZXh0SXRlbSA9IHZpc2libGVJdGVtc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJuZXh0SXRlbVwiOlxuICAgICAgICAgICAgICAgIG5leHRJdGVtID0gdmlzaWJsZUl0ZW1zW2N1cnJlbnRJbmRleCA8IHZpc2libGVJdGVtcy5sZW5ndGggLSAxID8gY3VycmVudEluZGV4ICsgMSA6IDBdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInByZXZpb3VzSXRlbVwiOlxuICAgICAgICAgICAgICAgIG5leHRJdGVtID0gdmlzaWJsZUl0ZW1zW2N1cnJlbnRJbmRleCA+IDAgPyBjdXJyZW50SW5kZXggLSAxIDogdmlzaWJsZUl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudEl0ZW0gJiYgbmV4dEl0ZW0gJiYgY3VycmVudEl0ZW0gIT09IG5leHRJdGVtKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVGb2N1cyhjdXJyZW50SXRlbSwgbmV4dEl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1vdmVGb2N1cyhmcm9tLCB0bykge1xuICAgICAgICBmcm9tLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdG8uZm9jdXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYWN0aXZlRGVzY2VuZGFudCA9IHRvLml0ZW1JZDtcbiAgICAgICAgY29uc3QgbW9kaWZpZWRJdGVtcyA9IG5ldyBBcnJheShmcm9tLnNlcmlhbGl6ZSgpLCB0by5zZXJpYWxpemUoKSk7XG4gICAgICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdChtb2RpZmllZEl0ZW1zKTtcbiAgICB9XG4gICAgZm9jdXNMYXN0SXRlbSgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oXCJsYXN0SXRlbVwiKTtcbiAgICB9XG4gICAgZm9jdXNGaXJzdEl0ZW0oKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKFwiZmlyc3RJdGVtXCIpO1xuICAgIH1cbiAgICBmb2N1c05leHRJdGVtKCkge1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShcIm5leHRJdGVtXCIpO1xuICAgIH1cbiAgICBmb2N1c1ByZXZpb3VzSXRlbSgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oXCJwcmV2aW91c0l0ZW1cIik7XG4gICAgfVxuICAgIGV4cGFuZEl0ZW0oKSB7XG4gICAgICAgIGxldCBjdXJyZW50SXRlbSA9IHRoaXMuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5mb2N1c2VkKVswXTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZShjdXJyZW50SXRlbSkpIHtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtLmZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGN1cnJlbnRJdGVtID0gdGhpcy5nZXRWaXNpYmxlUGFyZW50KGN1cnJlbnRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3VycmVudEl0ZW0uaGFzQ2hpbGRJdGVtcyB8fCBjdXJyZW50SXRlbS5oYXNDb250ZW50KSB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkl0ZW1BY3Rpb24oY3VycmVudEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudEl0ZW0uaGFzQ2hpbGRJdGVtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGRJbmRleCA9IGN1cnJlbnRJdGVtLmNoaWxkcmVuSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkSW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVGb2N1cyhjdXJyZW50SXRlbSwgY3VycmVudEl0ZW0uY2hpbGRyZW5JdGVtc1tmaXJzdENoaWxkSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29sbGFwc2VJdGVtKCkge1xuICAgICAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuYWxsSXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5mb2N1c2VkKVswXTtcbiAgICAgICAgaWYgKGN1cnJlbnRJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9uSXRlbUFjdGlvbihjdXJyZW50SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudEl0ZW0ucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVGb2N1cyhjdXJyZW50SXRlbSwgY3VycmVudEl0ZW0ucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZWxlY3RGb2N1c2VkSXRlbSgpIHtcbiAgICAgICAgbGV0IGZvY3VzZWRJdGVtID0gdGhpcy5hbGxJdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmZvY3VzZWQpWzBdO1xuICAgICAgICBpZiAoIXRoaXMuaXNWaXNpYmxlKGZvY3VzZWRJdGVtKSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0uZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0gPSB0aGlzLmdldFZpc2libGVQYXJlbnQoZm9jdXNlZEl0ZW0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb2N1c2VkSXRlbSkge1xuICAgICAgICAgICAgZm9jdXNlZEl0ZW0ub25JdGVtQWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmlzaWJsZUl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0VmlzaWJsZUl0ZW1zKHRoaXMuY2hpbGRyZW5JdGVtcyk7XG4gICAgfVxuICAgIGZsYXRWaXNpYmxlSXRlbXMobGlzdE9mSXRlbXMgPSBuZXcgQXJyYXkoKSwgZmxhdHRlZEl0ZW1zID0gbmV3IEFycmF5KCkpIHtcbiAgICAgICAgbGlzdE9mSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIGZsYXR0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4cGFuZGVkICYmIGl0ZW0uaGFzQ2hpbGRJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZsYXRWaXNpYmxlSXRlbXMoaXRlbS5jaGlsZHJlbkl0ZW1zLCBmbGF0dGVkSXRlbXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmbGF0dGVkSXRlbXM7XG4gICAgfVxufVxuUGFuZWxCYXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvUGFuZWxiYXInLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBQYW5lbEJhclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5wYW5lbGJhcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1wYW5lbGJhcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJjb250ZW50Q2hpbGRJdGVtcyAmJiAhaXRlbXNcIiBzZWxlY3Q9XCJrZW5kby1wYW5lbGJhci1pdGVtXCI+PC9uZy1jb250ZW50PlxuICAgICAgICA8bmctdGVtcGxhdGUgW25nSWZdPVwiaXRlbXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtc1wiPlxuICAgICAgICAgICAgICAgIDxrZW5kby1wYW5lbGJhci1pdGVtICpuZ0lmPVwiIWl0ZW0uaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cIml0ZW0uaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICBbaWNvbkNsYXNzXT1cIml0ZW0uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgIFtpbWFnZVVybF09XCJpdGVtLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCIhIWl0ZW0uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgW2V4cGFuZGVkXT1cIiEhaXRlbS5leHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISFpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV09XCJ0ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbS5jaGlsZHJlblwiXG4gICAgICAgICAgICAgICAgICAgICBbY29udGVudF09XCJpdGVtLmNvbnRlbnRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L2tlbmRvLXBhbmVsYmFyLWl0ZW0+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblBhbmVsQmFyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogUGFuZWxCYXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5QYW5lbEJhckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBleHBhbmRNb2RlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzZWxlY3RhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhbmltYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBoZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGtlZXBJdGVtQ29udGVudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0YXRlQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgdGFiSW5kZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIudGFiSW5kZXgnLF0gfV0sXG4gICAgcm9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGFjdGl2ZURlc2NlbmRhbnQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50JyxdIH1dLFxuICAgIGhvc3RIZWlnaHQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmhlaWdodCcsXSB9XSxcbiAgICBvdmVyZmxvdzogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUub3ZlcmZsb3cnLF0gfV0sXG4gICAgZGlyOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICB0ZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbUGFuZWxCYXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUsXSB9XSxcbiAgICBjb250ZW50SXRlbXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1BhbmVsQmFySXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9LF0gfV0sXG4gICAgY29udGVudENoaWxkSXRlbXM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1BhbmVsQmFySXRlbUNvbXBvbmVudCxdIH1dLFxuICAgIHZpZXdDaGlsZEl0ZW1zOiBbeyB0eXBlOiBWaWV3Q2hpbGRyZW4sIGFyZ3M6IFtQYW5lbEJhckl0ZW1Db21wb25lbnQsXSB9XSxcbiAgICBvbkNvbXBvbmVudENsaWNrOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsnY2xpY2snLCBbJyRldmVudCddLF0gfV0sXG4gICAgb25Db21wb25lbnRGb2N1czogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2ZvY3VzJyxdIH1dLFxuICAgIG9uQ29tcG9uZW50Qmx1cjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2JsdXInLF0gfV0sXG4gICAgb25Db21wb25lbnRLZXlEb3duOiBbeyB0eXBlOiBIb3N0TGlzdGVuZXIsIGFyZ3M6IFsna2V5ZG93bicsIFsnJGV2ZW50J10sXSB9XSxcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXBhbmVsYmFyJyxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHBhbmUgY29tcG9uZW50IG9mIHRoZSBTcGxpdHRlci5cbiAqL1xuY2xhc3MgU3BsaXR0ZXJQYW5lQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCByZW5kZXJlciwgY2RyKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5jZHIgPSBjZHI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byByZXNpemUgdGhlIHBhbmUgYW5kIHByb3ZpZGUgc3BhY2UgZm9yIG90aGVyIHBhbmVzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZXNpemFibGUgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIGlmIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gaGlkZSB0aGUgcGFuZSBhbmQgcHJvdmlkZSBzcGFjZSBmb3Igb3RoZXIgcGFuZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbGxhcHNpYmxlID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgb3ZlcmZsb3dpbmcgY29udGVudCBpcyBzY3JvbGxhYmxlIG9yIGhpZGRlbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZSA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgaWYgdGhlIHBhbmUgaXMgaW5pdGlhbGx5IGNvbGxhcHNlZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnO1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jb250YWluc1NwbGl0dGVyID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm92ZXJsYXlDb250ZW50ID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIHVzZXIgcmVzaXplcyB0aGUgU3BsaXR0ZXIgcGFuZS5cbiAgICAgICAgICogVGhlIGV2ZW50IGRhdGEgY29udGFpbnMgdGhlIG5ldyBwYW5lIHNpemUuXG4gICAgICAgICAqIEFsbG93cyBhIHR3by13YXkgYmluZGluZyBvZiB0aGUgcGFuZSBgc2l6ZWAgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNpemVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyBlYWNoIHRpbWUgdGhlIGBjb2xsYXBzZWRgIHByb3BlcnR5IGNoYW5nZXMuXG4gICAgICAgICAqIFRoZSBldmVudCBkYXRhIGNvbnRhaW5zIHRoZSBuZXcgcHJvcGVydHkgc3RhdGUuXG4gICAgICAgICAqIEFsbG93cyBhIHR3by13YXkgYmluZGluZyBvZiB0aGUgYGNvbGxhcHNlZGAgcGFuZSBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY29sbGFwc2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmZvcmNlRXhwYW5kID0gZmFsc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBzZXQgb3JkZXIocGFuZU9yZGVyKSB7XG4gICAgICAgIHRoaXMuX29yZGVyID0gcGFuZU9yZGVyO1xuICAgICAgICB0aGlzLnNldE9yZGVyU3R5bGVzKCk7XG4gICAgfVxuICAgIGdldCBvcmRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIHBhbmUuXG4gICAgICogSGFzIHRvIGJlIGJldHdlZW4gdGhlIGBtaW5gIGFuZCBgbWF4YCBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIHNldCBzaXplKG5ld1NpemUpIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IG5ld1NpemU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnLW1zLWZsZXgtcHJlZmVycmVkLXNpemUnLCBuZXdTaXplKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlbGVtZW50LCAnZmxleC1iYXNpcycsIG5ld1NpemUpO1xuICAgICAgICBpZiAodGhpcy5zdGF0aWNQYW5lQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZWxlbWVudCwgJ2stcGFuZS1zdGF0aWMnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZWxlbWVudCwgJ2stcGFuZS1zdGF0aWMnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIGdldCBpc0hpZGRlbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuICAgIH1cbiAgICBnZXQgc3R5bGVEaXNwbGF5RmxleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnNTcGxpdHRlcjtcbiAgICB9XG4gICAgZ2V0IHN0YXRpY1BhbmVDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9yY2VFeHBhbmQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIXRoaXMucmVzaXphYmxlICYmICF0aGlzLmNvbGxhcHNpYmxlIHx8IHRoaXMuZml4ZWRTaXplO1xuICAgIH1cbiAgICBnZXQgc2Nyb2xsYWJsZVBhbmVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYWJsZTtcbiAgICB9XG4gICAgZ2V0IGZpeGVkU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l6ZSAmJiB0aGlzLnNpemUubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmlzSGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWhpZGRlbicpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbGVtZW50LCAnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGVsZW1lbnQsICdrLXN0YXRlLWhpZGRlbicpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbGVtZW50LCAnaGlkZGVuJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBjb21wdXRlZFNpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICB0b2dnbGVPdmVybGF5KHNob3cpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5Q29udGVudCA9IHNob3c7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHNldE9yZGVyU3R5bGVzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJy1tcy1mbGV4LW9yZGVyJywgdGhpcy5vcmRlcik7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgJ29yZGVyJywgdGhpcy5vcmRlcik7XG4gICAgfVxufVxuU3BsaXR0ZXJQYW5lQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1NwbGl0dGVyUGFuZScsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zcGxpdHRlci1wYW5lJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbGxhcHNlZFwiPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIm92ZXJsYXlDb250ZW50XCIgY2xhc3M9XCJrLXNwbGl0dGVyLW92ZXJsYXkgay1vdmVybGF5XCI+PC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TcGxpdHRlclBhbmVDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IENoYW5nZURldGVjdG9yUmVmIH1cbl07XG5TcGxpdHRlclBhbmVDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3JkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNpemU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG1pbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWF4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICByZXNpemFibGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGNvbGxhcHNpYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzY3JvbGxhYmxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb2xsYXBzZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9yaWVudGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjb250YWluc1NwbGl0dGVyOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvdmVybGF5Q29udGVudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc2l6ZUNoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGNvbGxhcHNlZENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHN0eWxlRGlzcGxheUZsZXg6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstcGFuZS1mbGV4JyxdIH1dLFxuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1wYW5lJyxdIH1dLFxuICAgIHN0YXRpY1BhbmVDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1wYW5lLXN0YXRpYycsXSB9XSxcbiAgICBzY3JvbGxhYmxlUGFuZUNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXNjcm9sbGFibGUnLF0gfV1cbn07XG5cbmNvbnN0IFNJWklOR19ET0NfTElOSyA9ICdodHRwczovL3d3dy50ZWxlcmlrLmNvbS9rZW5kby1hbmd1bGFyLXVpL2NvbXBvbmVudHMvbGF5b3V0L3NwbGl0dGVyL3BhbmVzLyN0b2Mtc2l6ZSc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU3BsaXR0ZXJTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3Rvcih6b25lKSB7XG4gICAgICAgIHRoaXMuem9uZSA9IHpvbmU7XG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lclNpemUgPSAoKSA9PiB7IH07XG4gICAgfVxuICAgIHRyeVRvZ2dsZShwYW5lSW5kZXgpIHtcbiAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZShwYW5lSW5kZXgpO1xuICAgICAgICBpZiAocGFuZS5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgcGFuZS5jb2xsYXBzZWQgPSAhcGFuZS5jb2xsYXBzZWQ7XG4gICAgICAgICAgICBwYW5lLmNvbGxhcHNlZENoYW5nZS5lbWl0KHBhbmUuY29sbGFwc2VkKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLmxheW91dENoYW5nZSwge30pO1xuICAgICAgICAgICAgaWYgKHBhbmUuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgcGFuZS5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgbm90Q29sbGFwc2VkID0gdGhpcy5wYW5lcy5maWx0ZXIocCA9PiAhcC5jb2xsYXBzZWQpO1xuICAgICAgICBjb25zdCBhbGxIYXZlRml4ZWRTaXplID0gbm90Q29sbGFwc2VkLmV2ZXJ5KHAgPT4gcC5maXhlZFNpemUpO1xuICAgICAgICBub3RDb2xsYXBzZWRbbm90Q29sbGFwc2VkLmxlbmd0aCAtIDFdLmZvcmNlRXhwYW5kID0gYWxsSGF2ZUZpeGVkU2l6ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHBhbmUuY29sbGFwc2libGU7XG4gICAgfVxuICAgIHRvZ2dsZUNvbnRlbnRPdmVybGF5KGluZGV4LCBzaG93KSB7XG4gICAgICAgIHRoaXMucGFuZShpbmRleCkudG9nZ2xlT3ZlcmxheShzaG93KTtcbiAgICAgICAgdGhpcy5wYW5lKGluZGV4ICsgMSkudG9nZ2xlT3ZlcmxheShzaG93KTtcbiAgICB9XG4gICAgZHJhZ1N0YXRlKHNwbGl0YmFySW5kZXgpIHtcbiAgICAgICAgbGV0IHByZXYgPSB0aGlzLnBhbmUoc3BsaXRiYXJJbmRleCk7XG4gICAgICAgIGxldCBuZXh0ID0gdGhpcy5wYW5lKHNwbGl0YmFySW5kZXggKyAxKTtcbiAgICAgICAgY29uc3QgdG90YWwgPSBwcmV2LmNvbXB1dGVkU2l6ZSArIG5leHQuY29tcHV0ZWRTaXplO1xuICAgICAgICBjb25zdCBweCA9IHMgPT4gdGhpcy50b1BpeGVscyhzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHByZXY6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogc3BsaXRiYXJJbmRleCxcbiAgICAgICAgICAgICAgICBpbml0aWFsU2l6ZTogcHJldi5jb21wdXRlZFNpemUsXG4gICAgICAgICAgICAgICAgbWluOiBweChwcmV2Lm1pbikgfHwgdG90YWwgLSBweChuZXh0Lm1heCkgfHwgMCxcbiAgICAgICAgICAgICAgICBtYXg6IHB4KHByZXYubWF4KSB8fCB0b3RhbCAtIHB4KG5leHQubWluKSB8fCB0b3RhbFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5leHQ6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogc3BsaXRiYXJJbmRleCArIDEsXG4gICAgICAgICAgICAgICAgaW5pdGlhbFNpemU6IG5leHQuY29tcHV0ZWRTaXplLFxuICAgICAgICAgICAgICAgIG1pbjogcHgobmV4dC5taW4pIHx8IHRvdGFsIC0gcHgocHJldi5tYXgpIHx8IDAsXG4gICAgICAgICAgICAgICAgbWF4OiBweChuZXh0Lm1heCkgfHwgdG90YWwgLSBweChwcmV2Lm1pbikgfHwgdG90YWxcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc2V0U2l6ZShzdGF0ZSQkMSwgZGVsdGEpIHtcbiAgICAgICAgY29uc3QgY2xhbXAgPSAobWluLCBtYXgsIHYpID0+IE1hdGgubWluKG1heCwgTWF0aC5tYXgobWluLCB2KSk7XG4gICAgICAgIGNvbnN0IHJlc2l6ZSA9IChwYW5lU3RhdGUsIGNoYW5nZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZShwYW5lU3RhdGUuaW5kZXgpO1xuICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZXJTaXplID0gdGhpcy5jb250YWluZXJTaXplKCk7XG4gICAgICAgICAgICBjb25zdCBuZXdTaXplID0gY2xhbXAocGFuZVN0YXRlLm1pbiwgcGFuZVN0YXRlLm1heCwgcGFuZVN0YXRlLmluaXRpYWxTaXplICsgY2hhbmdlKTtcbiAgICAgICAgICAgIGxldCBzaXplID0gXCJcIjtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzUGVyY2VudChwYW5lLnNpemUpKSB7XG4gICAgICAgICAgICAgICAgc2l6ZSA9ICgxMDAgKiBuZXdTaXplIC8gc3BsaXR0ZXJTaXplKSArIFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2l6ZSA9IG5ld1NpemUgKyBcInB4XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYW5lLnNpemUgPSBzaXplO1xuICAgICAgICAgICAgdGhpcy5lbWl0KHBhbmUuc2l6ZUNoYW5nZSwgc2l6ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLnBhbmUoc3RhdGUkJDEucHJldi5pbmRleCk7XG4gICAgICAgIGNvbnN0IG5leHQgPSB0aGlzLnBhbmUoc3RhdGUkJDEubmV4dC5pbmRleCk7XG4gICAgICAgIC8vIGRldGVybWluZSB3aGljaCBwYW5lIHRvIHJlc2l6ZVxuICAgICAgICBpZiAocHJldi5maXhlZFNpemUgJiYgbmV4dC5maXhlZFNpemUpIHtcbiAgICAgICAgICAgIC8vIHJlc2l6aW5nIGJvdGggcGFuZXNcbiAgICAgICAgICAgIHJlc2l6ZShzdGF0ZSQkMS5wcmV2LCBkZWx0YSk7XG4gICAgICAgICAgICByZXNpemUoc3RhdGUkJDEubmV4dCwgLWRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChuZXh0LmNvbGxhcHNpYmxlIHx8IG5leHQuZml4ZWRTaXplKSB7XG4gICAgICAgICAgICAvLyByZXNpemluZyBuZXh0XG4gICAgICAgICAgICByZXNpemUoc3RhdGUkJDEubmV4dCwgLWRlbHRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlc2l6aW5nIHByZXZcbiAgICAgICAgICAgIHJlc2l6ZShzdGF0ZSQkMS5wcmV2LCBkZWx0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0KHRoaXMubGF5b3V0Q2hhbmdlLCB7fSk7XG4gICAgfVxuICAgIGlzRHJhZ2dhYmxlKHNwbGl0QmFySW5kZXgpIHtcbiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMucGFuZShzcGxpdEJhckluZGV4KTtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMucGFuZShzcGxpdEJhckluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGJldHdlZW5SZXNpemFibGVQYW5lcyA9IHByZXYucmVzaXphYmxlICYmIG5leHQucmVzaXphYmxlO1xuICAgICAgICBjb25zdCBuZWFyQ29sbGFwc2VkUGFuZSA9IHByZXYuY29sbGFwc2VkIHx8IG5leHQuY29sbGFwc2VkO1xuICAgICAgICByZXR1cm4gYmV0d2VlblJlc2l6YWJsZVBhbmVzICYmICFuZWFyQ29sbGFwc2VkUGFuZTtcbiAgICB9XG4gICAgaXNTdGF0aWMoc3BsaXRCYXJJbmRleCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5wYW5lKHNwbGl0QmFySW5kZXgpO1xuICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5wYW5lKHNwbGl0QmFySW5kZXggKyAxKTtcbiAgICAgICAgY29uc3QgYmV0d2VlblJlc2l6YWJsZVBhbmVzID0gcHJldi5yZXNpemFibGUgJiYgbmV4dC5yZXNpemFibGU7XG4gICAgICAgIGNvbnN0IG5lYXJDb2xsYXBzaWJsZVBhbmUgPSBwcmV2LmNvbGxhcHNpYmxlIHx8IG5leHQuY29sbGFwc2libGU7XG4gICAgICAgIHJldHVybiAhYmV0d2VlblJlc2l6YWJsZVBhbmVzICYmICFuZWFyQ29sbGFwc2libGVQYW5lO1xuICAgIH1cbiAgICBwYW5lKGluZGV4KSB7XG4gICAgICAgIGlmICghdGhpcy5wYW5lcykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFuZXMgbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gdGhpcy5wYW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wYW5lc1tpbmRleF07XG4gICAgfVxuICAgIGNvbmZpZ3VyZSh7IHBhbmVzLCBvcmllbnRhdGlvbiwgY29udGFpbmVyU2l6ZSB9KSB7XG4gICAgICAgIHRoaXMucGFuZXMgPSBwYW5lcztcbiAgICAgICAgdGhpcy5wYW5lcy5mb3JFYWNoKChwYW5lLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcGFuZS5vcmRlciA9IGluZGV4ICogMjtcbiAgICAgICAgICAgIHBhbmUub3JpZW50YXRpb24gPSBvcmllbnRhdGlvbjtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgY29uc3QgYWxsRml4ZWQgPSBwYW5lcy5sZW5ndGggJiYgIXBhbmVzLnNvbWUocGFuZSA9PiAhcGFuZS5maXhlZFNpemUpO1xuICAgICAgICAgICAgaWYgKGFsbEZpeGVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBcbiAgICAgICAgICAgICAgICAgICAgVGhlIFNwbGl0dGVyIHNob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBwYW5lIHdpdGhvdXQgYSBzZXQgc2l6ZS5cbiAgICAgICAgICAgICAgICAgICAgU2VlICR7U0laSU5HX0RPQ19MSU5LfSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgICAgICAgICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRhaW5lclNpemUgPSBjb250YWluZXJTaXplO1xuICAgIH1cbiAgICBpc1BlcmNlbnQoc2l6ZSkge1xuICAgICAgICByZXR1cm4gLyUkLy50ZXN0KHNpemUpO1xuICAgIH1cbiAgICB0b1BpeGVscyhzaXplKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSBwYXJzZUZsb2F0KHNpemUpO1xuICAgICAgICBpZiAodGhpcy5pc1BlcmNlbnQoc2l6ZSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9ICh0aGlzLmNvbnRhaW5lclNpemUoKSAqIHJlc3VsdCAvIDEwMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZW1pdChlbWl0dGVyLCBhcmdzKSB7XG4gICAgICAgIGlmIChlbWl0dGVyLm9ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gZW1pdHRlci5lbWl0KGFyZ3MpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblNwbGl0dGVyU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3BsaXR0ZXJTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTmdab25lIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFNwbGl0dGVyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19zcGxpdHRlciAlfSkuXG4gKlxuICogYGBgdHMtcHJldmlld1xuICpcbiAqICBAQ29tcG9uZW50KHtcbiAqICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgPGtlbmRvLXNwbGl0dGVyIHN0eWxlPVwiaGVpZ2h0OiAyODBweDtcIj5cbiAqXG4gKiAgICAgICAgICA8a2VuZG8tc3BsaXR0ZXItcGFuZSBbY29sbGFwc2libGVdPVwidHJ1ZVwiIHNpemU9XCIzMCVcIj5cbiAqICAgICAgICAgICAgPGgzPklubmVyIHNwbGl0dGVyIC8gbGVmdCBwYW5lPC9oMz5cbiAqICAgICAgICAgICAgPHA+UmVzaXphYmxlIGFuZCBjb2xsYXBzaWJsZS48L3A+XG4gKiAgICAgICAgICA8L2tlbmRvLXNwbGl0dGVyLXBhbmU+XG4gKlxuICogICAgICAgICAgPGtlbmRvLXNwbGl0dGVyLXBhbmU+XG4gKiAgICAgICAgICAgIDxoMz5Jbm5lciBzcGxpdHRlciAvIGNlbnRlciBwYW5lPC9oMz5cbiAqICAgICAgICAgICAgPHA+UmVzaXphYmxlIG9ubHkuPC9wPlxuICogICAgICAgICAgPC9rZW5kby1zcGxpdHRlci1wYW5lPlxuICpcbiAqICAgICAgICAgIDxrZW5kby1zcGxpdHRlci1wYW5lIFtjb2xsYXBzaWJsZV09XCJ0cnVlXCIgc2l6ZT1cIjMwJVwiPlxuICogICAgICAgICAgICA8aDM+SW5uZXIgc3BsaXR0ZXIgLyByaWdodCBwYW5lPC9oMz5cbiAqICAgICAgICAgICAgPHA+UmVzaXphYmxlIGFuZCBjb2xsYXBzaWJsZS48L3A+XG4gKiAgICAgICAgICA8L2tlbmRvLXNwbGl0dGVyLXBhbmU+XG4gKlxuICogICAgICAgIDwva2VuZG8tc3BsaXR0ZXI+XG4gKiAgICAgIGAsXG4gKiAgICBzdHlsZXM6IFsgYFxuICogICAgICAgIGgzIHsgZm9udC1zaXplOiAxLjJlbTsgfVxuICogICAgICAgIGgzLCBwIHsgbWFyZ2luOiAxMHB4OyBwYWRkaW5nOiAwOyB9XG4gKiAgICBgIF1cbiAqICB9KVxuICogIGNsYXNzIEFwcENvbXBvbmVudCB7fVxuICogYGBgXG4gKi9cbmNsYXNzIFNwbGl0dGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzcGxpdHRlclNlcnZpY2UsIGxvY2FsaXphdGlvbiwgZW5jbG9zaW5nUGFuZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNwbGl0dGVyU2VydmljZSA9IHNwbGl0dGVyU2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIG9yaWVudGF0aW9uIG9mIHRoZSBwYW5lcyB3aXRoaW4gdGhlIFNwbGl0dGVyLlxuICAgICAgICAgKiBQYW5lcyBpbiBhIGhvcml6b250YWwgU3BsaXR0ZXIgYXJlIHBsYWNlZCBob3Jpem9udGFsbHkuXG4gICAgICAgICAqIFBhbmVzIGluIGEgdmVydGljYWwgU3BsaXR0ZXIgYXJlIHBsYWNlZCB2ZXJ0aWNhbGx5LlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcbiAgICAgICAgdGhpcy5hcmlhUm9sZSA9ICdzcGxpdHRlcic7XG4gICAgICAgIGlmIChlbmNsb3NpbmdQYW5lKSB7XG4gICAgICAgICAgICBlbmNsb3NpbmdQYW5lLmNvbnRhaW5zU3BsaXR0ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoZSBoYW5kbGVyIG9ubHkgcnVucyBpbiBOZ1pvbmUgaWYgdGhlcmUgYXJlIGJvdW5kIGhhbmRsZXJzXG4gICAgICAgIC8vIHRoaXMgbGluZSBtZXJnZXMgYm90aCBzdHJlYW1zXG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlID0gdGhpcy5zcGxpdHRlclNlcnZpY2UubGF5b3V0Q2hhbmdlO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyZSA9IHRoaXMuY29uZmlndXJlLmJpbmQodGhpcyk7XG4gICAgfVxuICAgIGdldCBob3N0Q2xhc3NlcygpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGdldCBob3Jpem9udGFsSG9zdENsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIGdldCB2ZXJ0aWNhbEhvc3RDbGFzc2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlyZWN0aW9uO1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMucmVjb25maWd1cmUoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5vcmllbnRhdGlvbiAmJiAhY2hhbmdlcy5vcmllbnRhdGlvbi5pc0ZpcnN0Q2hhbmdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb25maWd1cmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNoYW5nZXMoKTtcbiAgICB9XG4gICAgcmVjb25maWd1cmUoKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJlKCk7XG4gICAgICAgIHRoaXMucGFuZUNoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnBhbmVzLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMuY29uZmlndXJlKTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmVDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5wYW5lQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wYW5lQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5wYW5lQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uZmlndXJlKCkge1xuICAgICAgICB0aGlzLnNwbGl0dGVyU2VydmljZS5jb25maWd1cmUoe1xuICAgICAgICAgICAgcGFuZXM6IHRoaXMucGFuZXMudG9BcnJheSgpLFxuICAgICAgICAgICAgb3JpZW50YXRpb246IHRoaXMub3JpZW50YXRpb24sXG4gICAgICAgICAgICBjb250YWluZXJTaXplOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgZGlyZWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGl6YXRpb24ucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICB9XG59XG5TcGxpdHRlckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydEFzOiAna2VuZG9TcGxpdHRlcicsXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zcGxpdHRlcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIFNwbGl0dGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLnNwbGl0ZXInXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJrZW5kby1zcGxpdHRlci1wYW5lXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJcbiAgICAgICAgbGV0IHBhbmUgb2YgcGFuZXM7XG4gICAgICAgIGxldCBpbmRleCA9IGluZGV4O1xuICAgICAgICBsZXQgbGFzdCA9IGxhc3Q7XG4gICAgICBcIj5cbiAgICAgICAgPGtlbmRvLXNwbGl0dGVyLWJhclxuICAgICAgICAgIGtlbmRvRHJhZ2dhYmxlXG4gICAgICAgICAgKm5nSWY9XCIhbGFzdFwiXG4gICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICBbb3JpZW50YXRpb25dPVwib3JpZW50YXRpb25cIj5cbiAgICAgICAgPC9rZW5kby1zcGxpdHRlci1iYXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblNwbGl0dGVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9LFxuICAgIHsgdHlwZTogU3BsaXR0ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBTcGxpdHRlclBhbmVDb21wb25lbnQsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH0sIHsgdHlwZTogSG9zdCB9LCB7IHR5cGU6IEluamVjdCwgYXJnczogW1NwbGl0dGVyUGFuZUNvbXBvbmVudCxdIH1dIH1cbl07XG5TcGxpdHRlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBvcmllbnRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbGF5b3V0Q2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zcGxpdHRlcicsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3BsaXR0ZXItZmxleCcsXSB9XSxcbiAgICBob3Jpem9udGFsSG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3BsaXR0ZXItaG9yaXpvbnRhbCcsXSB9XSxcbiAgICB2ZXJ0aWNhbEhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXNwbGl0dGVyLXZlcnRpY2FsJyxdIH1dLFxuICAgIGRpcjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgYXJpYVJvbGU6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIucm9sZScsXSB9XSxcbiAgICBwYW5lczogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbU3BsaXR0ZXJQYW5lQ29tcG9uZW50LF0gfV1cbn07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgY29udGVudCB0ZW1wbGF0ZSBvZiB0aGUgS2VuZG8gVUkgVGFiU3RyaXAuXG4gKiBUbyBkZWZpbmUgdGhlIHRlbXBsYXRlLCBuZXN0IGEgYDxuZy10ZW1wbGF0ZT5gIHRhZyB3aXRoIHRoZSBga2VuZG9UYWJDb250ZW50YCBpbnNpZGUgdGhlIGNvbXBvbmVudCB0YWcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzLXByZXZpZXdcbiAqXG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgIHRlbXBsYXRlOiBgXG4gKiAgICAgICAgIDxrZW5kby10YWJzdHJpcCBbbmdTdHlsZV09XCJ7J3dpZHRoJzogJzQwMHB4J31cIiBbYW5pbWF0ZV09XCJ0cnVlXCI+XG4gKiAgICAgICAgICAgPGtlbmRvLXRhYnN0cmlwLXRhYiBbdGl0bGVdPVwiJ1BhcmlzJ1wiIFtzZWxlY3RlZF09XCJ0cnVlXCI+XG4gKiAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UYWJDb250ZW50PlxuICogICAgICAgICAgICAgICA8aDM+Q29udGVudCAxPC9oMz5cbiAqICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgPC9rZW5kby10YWJzdHJpcC10YWI+XG4gKlxuICogICAgICAgICAgIDxrZW5kby10YWJzdHJpcC10YWIgW3RpdGxlXT1cIidTb2ZpYSdcIj5cbiAqICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RhYkNvbnRlbnQ+XG4gKiAgICAgICAgICAgICAgIDxoMz5Db250ZW50IDI8L2gzPlxuICogICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAqICAgICAgICAgICA8L2tlbmRvLXRhYnN0cmlwLXRhYj5cbiAqICAgICAgICAgPC9rZW5kby10YWJzdHJpcD5cbiAqICAgICBgXG4gKiB9KVxuICpcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7fVxuICpcbiAqIGBgYFxuICovXG5jbGFzcyBUYWJDb250ZW50RGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuVGFiQ29udGVudERpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvVGFiQ29udGVudF0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblRhYkNvbnRlbnREaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHRpdGxlIHRlbXBsYXRlIG9mIHRoZSBLZW5kbyBVSSBUYWJTdHJpcC5cbiAqIFRvIGRlZmluZSB0aGUgdGVtcGxhdGUsIG5lc3QgYSBgPG5nLXRlbXBsYXRlPmAgdGFnIHdpdGggdGhlIGBrZW5kb1RhYlRpdGxlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBjb21wb25lbnQgdGFnLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKlxuICogX0BDb21wb25lbnQoe1xuICogICAgIHNlbGVjdG9yOiAnbXktYXBwJyxcbiAqICAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgICA8a2VuZG8tdGFic3RyaXAgW25nU3R5bGVdPVwieyd3aWR0aCc6ICc0MDBweCd9XCIgW2FuaW1hdGVdPVwidHJ1ZVwiPlxuICogICAgICAgICAgIDxrZW5kby10YWJzdHJpcC10YWIgW3RpdGxlXT1cIidQYXJpcydcIiBbc2VsZWN0ZWRdPVwidHJ1ZVwiPlxuICogICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVGFiVGl0bGU+XG4gKiAgICAgICAgICAgICAgIFRpdGxlXG4gKiAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVGFiQ29udGVudD5cbiAqICAgICAgICAgICAgICAgPGgzPkNvbnRlbnQgMTwvaDM+XG4gKiAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICogICAgICAgICAgIDwva2VuZG8tdGFic3RyaXAtdGFiPlxuICpcbiAqICAgICAgICAgICA8a2VuZG8tdGFic3RyaXAtdGFiIFt0aXRsZV09XCInU29maWEnXCI+XG4gKiAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UYWJDb250ZW50PlxuICogICAgICAgICAgICAgICA8aDM+Q29udGVudCAyPC9oMz5cbiAqICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gKiAgICAgICAgICAgPC9rZW5kby10YWJzdHJpcC10YWI+XG4gKiAgICAgICAgIDwva2VuZG8tdGFic3RyaXA+XG4gKiAgICAgYFxuICogfSlcbiAqXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge31cbiAqXG4gKiBgYGBcbiAqL1xuY2xhc3MgVGFiVGl0bGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5UYWJUaXRsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvVGFiVGl0bGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UYWJUaXRsZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgdGFiIGNvbXBvbmVudCBvZiB0aGUgVGFiU3RyaXAuXG4gKi9cbmNsYXNzIFRhYlN0cmlwVGFiQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdGFiQ29udGVudCA9IG5ldyBRdWVyeUxpc3QoKTtcbiAgICB9XG4gICAgZ2V0IHRhYkNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YWJDb250ZW50LmZpcnN0O1xuICAgIH1cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdGhpcy5zZWxlY3RlZDtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWQnXSAmJiAhY2hhbmdlc1snc2VsZWN0ZWQnXS5pc0ZpcnN0Q2hhbmdlKCkpIHsgLy8gdHNsaW50OmRpc2FibGUtbGluZVxuICAgICAgICAgICAgdGhpcy5hY3RpdmUgPSB0aGlzLnNlbGVjdGVkO1xuICAgICAgICB9XG4gICAgfVxufVxuVGFiU3RyaXBUYWJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvVGFiU3RyaXBUYWInLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tdGFic3RyaXAtdGFiJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblRhYlN0cmlwVGFiQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHRpdGxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBkaXNhYmxlZDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3NzQ2xhc3M6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHNlbGVjdGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBfdGFiQ29udGVudDogW3sgdHlwZTogQ29udGVudENoaWxkcmVuLCBhcmdzOiBbVGFiQ29udGVudERpcmVjdGl2ZSxdIH1dLFxuICAgIHRhYlRpdGxlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtUYWJUaXRsZURpcmVjdGl2ZSxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgUHJldmVudGFibGVFdmVudCB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGFyZ3MpIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJldmVudHMgdGhlIGRlZmF1bHQgYWN0aW9uIGZvciBhIHNwZWNpZmllZCBldmVudC5cbiAgICAgKiBJbiB0aGlzIHdheSwgdGhlIHNvdXJjZSBjb21wb25lbnQgc3VwcHJlc3Nlc1xuICAgICAqIHRoZSBidWlsdC1pbiBiZWhhdmlvciB0aGF0IGZvbGxvd3MgdGhlIGV2ZW50LlxuICAgICAqL1xuICAgIHByZXZlbnREZWZhdWx0KCkge1xuICAgICAgICB0aGlzLnByZXZlbnRlZCA9IHRydWU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBldmVudCB3YXMgcHJldmVudGVkXG4gICAgICogYnkgYW55IG9mIGl0cyBzdWJzY3JpYmVycy5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZGVmYXVsdCBhY3Rpb24gd2FzIHByZXZlbnRlZC5cbiAgICAgKiBPdGhlcndpc2UsIHJldHVybnMgYGZhbHNlYC5cbiAgICAgKi9cbiAgICBpc0RlZmF1bHRQcmV2ZW50ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXZlbnRlZDtcbiAgICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYHNlbGVjdGAgZXZlbnQgb2YgdGhlIFRhYlN0cmlwLlxuICogVGhlIGBzZWxlY3RgIGV2ZW50IGZpcmVzIHdoZW4gYSB0YWIgaXMgc2VsZWN0ZWQgKGNsaWNrZWQpLlxuICovXG5jbGFzcyBTZWxlY3RFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgdGhlIGV2ZW50IGFyZ3VtZW50cyBmb3IgdGhlIGBzZWxlY3RgIGV2ZW50LlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgdGFiLlxuICAgICAqIEBwYXJhbSB0aXRsZSAtIFRoZSB0aXRsZSBvZiB0aGUgc2VsZWN0ZWQgdGFiLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGluZGV4LCB0aXRsZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFRhYlN0cmlwIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld190YWJzdHJpcCAlfSkuXG4gKi9cbmNsYXNzIFRhYlN0cmlwQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb24sIHJlbmRlcmVyLCB3cmFwcGVyKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMud3JhcHBlciA9IHdyYXBwZXI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSB0YWIgYW5pbWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSB0YWJzLiBEZWZhdWx0cyB0byBgdG9wYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiUG9zaXRpb24gPSAndG9wJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGNvbXBvbmVudCByZW5kZXJzIGFsbCB0YWJzIGFuZCB0aGV5IGFyZSBwZXJzaXN0ZWQgaW4gdGhlIERPTS5cbiAgICAgICAgICogQnkgZGVmYXVsdCwgYGtlZXBUYWJDb250ZW50YCBpcyBgZmFsc2VgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5rZWVwVGFiQ29udGVudCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgZWFjaCB0aW1lIHRoZSB1c2VyIHNlbGVjdHMgYSB0YWIgKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBvdmVydmlld190YWJzdHJpcCAlfSN0b2MtYmFzaWMtdXNhZ2UpKS5cbiAgICAgICAgICogVGhlIGV2ZW50IGRhdGEgY29udGFpbnMgdGhlIGluZGV4IG9mIHRoZSBzZWxlY3RlZCB0YWIgYW5kIGl0cyB0aXRsZS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGFiU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmhvc3RDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX2FuaW1hdGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5rZXlCaW5kaW5ncyA9IHRoaXMuY29tcHV0ZWRLZXlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIFRhYlN0cmlwLlxuICAgICAqL1xuICAgIHNldCBoZWlnaHQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5faGVpZ2h0ID0gdmFsdWU7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy53cmFwcGVyLm5hdGl2ZUVsZW1lbnQsICdoZWlnaHQnLCB2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBoZWlnaHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oZWlnaHQ7XG4gICAgfVxuICAgIGdldCB0YWJzQXRUb3AoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYlBvc2l0aW9uID09PSAndG9wJztcbiAgICB9XG4gICAgZ2V0IHRhYnNBdFJpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJQb3NpdGlvbiA9PT0gJ3JpZ2h0JztcbiAgICB9XG4gICAgZ2V0IHRhYnNBdEJvdHRvbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiUG9zaXRpb24gPT09ICdib3R0b20nO1xuICAgIH1cbiAgICBnZXQgdGFic0F0TGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFiUG9zaXRpb24gPT09ICdsZWZ0JztcbiAgICB9XG4gICAgZ2V0IGRpcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBjb250ZW50Q2xhc3MoYWN0aXZlKSB7XG4gICAgICAgIGNvbnN0IHZpc2libGUgPSAhdGhpcy5rZWVwVGFiQ29udGVudCB8fCBhY3RpdmU7XG4gICAgICAgIHJldHVybiB2aXNpYmxlID8gJ2stY29udGVudCBrLXN0YXRlLWFjdGl2ZScgOiAnay1jb250ZW50JztcbiAgICB9XG4gICAgZ2V0IGNvbXB1dGVkS2V5cygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIFt0aGlzLmludmVydEtleXMoS2V5cy5BcnJvd0xlZnQsIEtleXMuQXJyb3dSaWdodCldOiAoc2VsZWN0ZWRJbmRleCkgPT4gdGhpcy5wcmV2TmF2aWdhdGFibGVJbmRleChzZWxlY3RlZEluZGV4KSxcbiAgICAgICAgICAgIFt0aGlzLmludmVydEtleXMoS2V5cy5BcnJvd1JpZ2h0LCBLZXlzLkFycm93TGVmdCldOiAoc2VsZWN0ZWRJbmRleCkgPT4gdGhpcy5uZXh0TmF2aWdhdGFibGVJbmRleChzZWxlY3RlZEluZGV4KSxcbiAgICAgICAgICAgIFt0aGlzLmludmVydEtleXMoS2V5cy5BcnJvd0Rvd24sIEtleXMuQXJyb3dVcCldOiAoc2VsZWN0ZWRJbmRleCkgPT4gdGhpcy5uZXh0TmF2aWdhdGFibGVJbmRleChzZWxlY3RlZEluZGV4KSxcbiAgICAgICAgICAgIFt0aGlzLmludmVydEtleXMoS2V5cy5BcnJvd1VwLCBLZXlzLkFycm93RG93bildOiAoc2VsZWN0ZWRJbmRleCkgPT4gdGhpcy5wcmV2TmF2aWdhdGFibGVJbmRleChzZWxlY3RlZEluZGV4KSxcbiAgICAgICAgICAgIFtLZXlzLkhvbWVdOiAoKSA9PiB0aGlzLmZpcnN0TmF2aWdhdGFibGVJbmRleCgpLFxuICAgICAgICAgICAgW0tleXMuRW5kXTogKCkgPT4gdGhpcy5sYXN0TmF2aWdhdGFibGVJbmRleCgpXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgdGFic0FsaWdubWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0OiAnZmxleC1zdGFydCcsXG4gICAgICAgICAgICBlbmQ6ICdmbGV4LWVuZCcsXG4gICAgICAgICAgICBjZW50ZXI6ICdjZW50ZXInLFxuICAgICAgICAgICAganVzdGlmeTogJ3NwYWNlLWJldHdlZW4nXG4gICAgICAgIH1bdGhpcy50YWJBbGlnbm1lbnRdO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgaW52ZXJ0S2V5cyhvcmlnaW5hbCwgaW52ZXJ0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLnJ0bCA/IGludmVydGVkIDogb3JpZ2luYWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmN1cnJlbnRUYXJnZXQgIT09IHRoaXMudGFibGlzdC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy50YWJQb3NpdGlvbiA9PT0gJ3RvcCcgfHwgdGhpcy50YWJQb3NpdGlvbiA9PT0gJ2JvdHRvbSc7XG4gICAgICAgIGNvbnN0IGlzQXJyb3dVcCA9IGV2ZW50LmtleUNvZGUgPT09IEtleXMuQXJyb3dVcDtcbiAgICAgICAgY29uc3QgaXNBcnJvd0Rvd24gPSBldmVudC5rZXlDb2RlID09PSBLZXlzLkFycm93RG93bjtcbiAgICAgICAgY29uc3QgaXNBcnJvd0xlZnQgPSBldmVudC5rZXlDb2RlID09PSBLZXlzLkFycm93TGVmdDtcbiAgICAgICAgY29uc3QgaXNBcnJvd1JpZ2h0ID0gZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5BcnJvd1JpZ2h0O1xuICAgICAgICBpZiAoaXNIb3Jpem9udGFsICYmIChpc0Fycm93VXAgfHwgaXNBcnJvd0Rvd24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0hvcml6b250YWwgJiYgKGlzQXJyb3dMZWZ0IHx8IGlzQXJyb3dSaWdodCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5TcGFjZSB8fCBpc0Fycm93VXAgfHwgaXNBcnJvd0Rvd24gfHwgaXNBcnJvd0xlZnQgfHwgaXNBcnJvd1JpZ2h0IHx8IGV2ZW50LmtleUNvZGUgPT09IEtleXMuSG9tZSB8fFxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5FbmQgfHwgZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5QYWdlVXAgfHwgZXZlbnQua2V5Q29kZSA9PT0gS2V5cy5QYWdlRG93bikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy50YWJzLnRvQXJyYXkoKS5maW5kSW5kZXgodGFiID0+IHRhYi5hY3RpdmUgJiYgIXRhYi5kaXNhYmxlZCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWIodGhpcy5maXJzdE5hdmlnYXRhYmxlSW5kZXgoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWJJbmRleCA9IHRoaXMua2V5QmluZGluZ3NbZXZlbnQua2V5Q29kZV07XG4gICAgICAgICAgICBpZiAoZ2V0VGFiSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBnZXRUYWJJbmRleChzZWxlY3RlZEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAhPT0gbmV4dEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0VGFiKGdldFRhYkluZGV4KHNlbGVjdGVkSW5kZXgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRhYlBhbmVsSWQoaWQpIHtcbiAgICAgICAgcmV0dXJuICdrLXRhYnN0cmlwLXRhYnBhbmVsLScgKyBpZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHRhYklkKGlkKSB7XG4gICAgICAgIHJldHVybiAnay10YWJzdHJpcC10YWItJyArIGlkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGEgdGFiIHByb2dyYW1tYXRpY2FsbHkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSB0YWIgdGhhdCB3aWxsIGJlIHNlbGVjdGVkLlxuICAgICAqL1xuICAgIHNlbGVjdFRhYihpbmRleCkge1xuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnMudG9BcnJheSgpW2luZGV4XTtcbiAgICAgICAgaWYgKCF0YWIgfHwgQm9vbGVhbih0YWIuZGlzYWJsZWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJIZWFkaW5nQ29udGFpbmVycy50b0FycmF5KClbaW5kZXhdLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5lbWl0RXZlbnQodGFiLCBpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblRhYkNsaWNrKG9yaWdpbmFsRXZlbnQsIHRhYkluZGV4KSB7XG4gICAgICAgIGlmIChpc0ZvY3VzYWJsZShvcmlnaW5hbEV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFRhYih0YWJJbmRleCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uXG4gICAgICAgICAgICAuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5rZXlCaW5kaW5ncyA9IHRoaXMuY29tcHV0ZWRLZXlzKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsaXphdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmaXJzdE5hdmlnYXRhYmxlSW5kZXgoKSB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYnMudG9BcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGFic1tpXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGxhc3ROYXZpZ2F0YWJsZUluZGV4KCkge1xuICAgICAgICBjb25zdCB0YWJzID0gdGhpcy50YWJzLnRvQXJyYXkoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRhYnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKCF0YWJzW2ldLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJldk5hdmlnYXRhYmxlSW5kZXgoc2VsZWN0ZWRJbmRleCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCAtIDEgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0TmF2aWdhdGFibGVJbmRleCgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYnMudG9BcnJheSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0ZWRJbmRleCAtIDE7IGkgPiAtMTsgaS0tKSB7XG4gICAgICAgICAgICBpZiAoIXRhYnNbaV0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdE5hdmlnYXRhYmxlSW5kZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJbmRleDtcbiAgICB9XG4gICAgbmV4dE5hdmlnYXRhYmxlSW5kZXgoc2VsZWN0ZWRJbmRleCkge1xuICAgICAgICBpZiAoc2VsZWN0ZWRJbmRleCArIDEgPj0gdGhpcy50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3ROYXZpZ2F0YWJsZUluZGV4KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFicy50b0FycmF5KCk7XG4gICAgICAgIGZvciAobGV0IGkgPSBzZWxlY3RlZEluZGV4ICsgMTsgaSA8IHRhYnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGFic1tpXS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgKyAxID09PSB0YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpcnN0TmF2aWdhdGFibGVJbmRleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGVtaXRFdmVudCh0YWIsIHNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0QXJncyA9IG5ldyBTZWxlY3RFdmVudChzZWxlY3RlZEluZGV4LCB0YWIudGl0bGUpO1xuICAgICAgICB0aGlzLnRhYlNlbGVjdC5lbWl0KHNlbGVjdEFyZ3MpO1xuICAgICAgICBpZiAoIXNlbGVjdEFyZ3MuaXNEZWZhdWx0UHJldmVudGVkKCkgJiYgIXRhYi5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuX2FuaW1hdGUgPSB0aGlzLmFuaW1hdGU7XG4gICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBbGwoKTtcbiAgICAgICAgICAgIHRhYi5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRlYWN0aXZhdGVBbGwoKSB7XG4gICAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWIpID0+IHtcbiAgICAgICAgICAgIHRhYi5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuVGFiU3RyaXBDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBhbmltYXRpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXIoJ3N0YXRlJywgW1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUoJ2FjdGl2ZScsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uKCcqID0+IGFjdGl2ZScsIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSh7IG9wYWNpdHk6IDAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0ZSgnNDAwbXMgZWFzZS1pbicpXG4gICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby50YWJzdHJpcCdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgZXhwb3J0QXM6ICdrZW5kb1RhYlN0cmlwJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLXRhYnN0cmlwJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYnNBdEJvdHRvbVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRpbmdcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFic0F0Qm90dG9tXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGluZ1wiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjaGVhZGluZz5cbiAgICAgICAgICAgIDx1bFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1yZXNldCBrLXRhYnN0cmlwLWl0ZW1zXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuanVzdGlmeUNvbnRlbnRdPVwidGFic0FsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInRhYmxpc3RcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAjdGFibGlzdFxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnM7IGxldCBpID0gaW5kZXg7XCIgKGNsaWNrKT1cIm9uVGFiQ2xpY2soJGV2ZW50LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICN0YWJIZWFkaW5nQ29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwidGFiSWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwidGFiLmFjdGl2ZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInRhYi5jc3NDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLWl0ZW1dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWRlZmF1bHRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rLXN0YXRlLWFjdGl2ZV09XCJ0YWIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmstc3RhdGUtZGlzYWJsZWRdPVwidGFiLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJ0YWIuYWN0aXZlXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJ0YWJQYW5lbElkKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJ0YWIuZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgID48c3BhbiBjbGFzcz1cImstbGlua1wiPnt7IHRhYi50aXRsZSB9fTxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJ0YWIudGFiVGl0bGU/LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT48L3NwYW4+PC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtdGFiIFtuZ0Zvck9mXT1cInRhYnNcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBbQHN0YXRlXT1cInRhYi5hY3RpdmUgJiYgX2FuaW1hdGUgPyAnYWN0aXZlJyA6ICdpbmFjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYi5hY3RpdmUgfHwga2VlcFRhYkNvbnRlbnRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb250ZW50Q2xhc3ModGFiLmFjdGl2ZSlcIlxuICAgICAgICAgICAgICAgICAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0YWJwYW5lbFwiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCJ0YWJQYW5lbElkKGkpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIXRhYi5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cInRhYi5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwidGFiSWQoaSlcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cInRhYi5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLnRhYkNvbnRlbnQ/LnRlbXBsYXRlUmVmXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5UYWJTdHJpcENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9XG5dO1xuVGFiU3RyaXBDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaGVpZ2h0OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhbmltYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0YWJBbGlnbm1lbnQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHRhYlBvc2l0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBrZWVwVGFiQ29udGVudDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgdGFibGlzdDogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3RhYmxpc3QnLF0gfV0sXG4gICAgdGFiU2VsZWN0OiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10YWJzdHJpcCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZmxvYXR3cmFwJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1oZWFkZXInLF0gfV0sXG4gICAgdGFic0F0VG9wOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXRhYnN0cmlwLXRvcCcsXSB9XSxcbiAgICB0YWJzQXRSaWdodDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay10YWJzdHJpcC1yaWdodCcsXSB9XSxcbiAgICB0YWJzQXRCb3R0b206IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstdGFic3RyaXAtYm90dG9tJyxdIH1dLFxuICAgIHRhYnNBdExlZnQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstdGFic3RyaXAtbGVmdCcsXSB9XSxcbiAgICBkaXI6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIHRhYnM6IFt7IHR5cGU6IENvbnRlbnRDaGlsZHJlbiwgYXJnczogW1RhYlN0cmlwVGFiQ29tcG9uZW50LF0gfV0sXG4gICAgdGFiSGVhZGluZ0NvbnRhaW5lcnM6IFt7IHR5cGU6IFZpZXdDaGlsZHJlbiwgYXJnczogWyd0YWJIZWFkaW5nQ29udGFpbmVyJyxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGNvbnRlbnQgb2YgdGhlIERyYXdlci5cbiAqIFRvIGRlZmluZSB0aGUgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZ1xuICogd2l0aCB0aGUgYGtlbmRvRHJhd2VyVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tZHJhd2VyPmAgdGFnLlxuICogVXNpbmcgdGhpcyB0ZW1wbGF0ZSBkaXJlY3RpdmUgd2lsbCBvdmVycmlkZSBhbGwgb3RoZXIgdGVtcGxhdGVzLFxuICogZm9yIGV4YW1wbGUsIGBrZW5kb0RyYXdlckhlYWRlclRlbXBsYXRlYCBhbmQgYGtlbmRvRHJhd2VySXRlbVRlbXBsYXRlYC5cbiAqL1xuY2xhc3MgRHJhd2VyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5EcmF3ZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJhd2VyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmF3ZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGl0ZW0gY29udGVudCBvZiB0aGUgRHJhd2VyLlxuICogVG8gZGVmaW5lIHRoZSB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9EcmF3ZXJJdGVtVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tZHJhd2VyPmAgdGFnLlxuICovXG5jbGFzcyBEcmF3ZXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5EcmF3ZXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb0RyYXdlckl0ZW1UZW1wbGF0ZV0nXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyYXdlckl0ZW1UZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGhlYWRlciBjb250ZW50IG9mIHRoZSBEcmF3ZXIuXG4gKiBUbyBkZWZpbmUgdGhlIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWdcbiAqIHdpdGggdGhlIGBrZW5kb0RyYXdlckhlYWRlclRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBgPGtlbmRvLWRyYXdlcj5gIHRhZy5cbiAqL1xuY2xhc3MgRHJhd2VySGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5EcmF3ZXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJhd2VySGVhZGVyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmF3ZXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGZvb3RlciBjb250ZW50IG9mIHRoZSBEcmF3ZXIuXG4gKiBUbyBkZWZpbmUgdGhlIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWdcbiAqIHdpdGggdGhlIGBrZW5kb0RyYXdlckZvb3RlclRlbXBsYXRlYCBkaXJlY3RpdmUgaW5zaWRlIHRoZSBgPGtlbmRvLWRyYXdlcj5gIHRhZy5cbiAqL1xuY2xhc3MgRHJhd2VyRm9vdGVyVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5EcmF3ZXJGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJhd2VyRm9vdGVyVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmF3ZXJGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gbWluaUV4cGFuZFB1c2goZHVyYXRpb24sIHdpZHRoLCBtaW5pV2lkdGgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdHlsZSh7IG92ZXJmbG93OiAnaGlkZGVuJywgZmxleEJhc2lzOiBgJHttaW5pV2lkdGh9cHhgIH0pLFxuICAgICAgICBhbmltYXRlKGAke2R1cmF0aW9ufW1zIGVhc2UtaW5gLCBzdHlsZSh7IGZsZXhCYXNpczogYCR7d2lkdGh9cHhgIH0pKVxuICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gbWluaUNvbGxhcHNlUHVzaChkdXJhdGlvbiwgd2lkdGgsIG1pbmlXaWR0aCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0eWxlKHsgb3ZlcmZsb3c6ICdoaWRkZW4nLCBmbGV4QmFzaXM6IGAke3dpZHRofXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBmbGV4QmFzaXM6IGAke21pbmlXaWR0aH1weGAgfSkpXG4gICAgXTtcbn1cbi8qKlxuICogQGhpZGRlblxuICpcbiAqL1xuZnVuY3Rpb24gbWluaUV4cGFuZE92ZXJsYXkoZHVyYXRpb24sIHdpZHRoLCBtaW5pV2lkdGgpIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdHlsZSh7IHdpZHRoOiBgJHttaW5pV2lkdGh9cHhgIH0pLFxuICAgICAgICBhbmltYXRlKGAke2R1cmF0aW9ufW1zIGVhc2UtaW5gLCBzdHlsZSh7IG92ZXJmbG93OiAnaGlkZGVuJywgd2lkdGg6IGAke3dpZHRofXB4YCB9KSlcbiAgICBdO1xufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGV4cGFuZFB1c2goZHVyYXRpb24sIHdpZHRoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIGZsZXhCYXNpczogJzBweCcgfSksXG4gICAgICAgIGFuaW1hdGUoYCR7ZHVyYXRpb259bXMgZWFzZS1pbmAsIHN0eWxlKHsgZmxleEJhc2lzOiBgJHt3aWR0aH1weGAgfSkpXG4gICAgXTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBjb2xsYXBzZVB1c2goZHVyYXRpb24sIHdpZHRoKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3R5bGUoeyBmbGV4QmFzaXM6IGAke3dpZHRofXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIGZsZXhCYXNpczogYDBweGAgfSkpXG4gICAgXTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBleHBhbmRSVExPdmVybGF5KGR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKDEwMCUpYCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIHRyYW5zZm9ybTogYHRyYW5zbGF0ZVgoMClgIH0pKVxuICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gZXhwYW5kT3ZlcmxheShkdXJhdGlvbiwgcG9zaXRpb24pIHtcbiAgICBjb25zdCB0cmFuc2xhdGVEaXIgPSBwb3NpdGlvbiAhPT0gJ2VuZCcgPyBgLTEwMCVgIDogYDEwMCVgO1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgke3RyYW5zbGF0ZURpcn0pYCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIHRyYW5zZm9ybTogYHRyYW5zbGF0ZVgoMClgIH0pKVxuICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gbWluaUNvbGxhcHNlT3ZlcmxheShkdXJhdGlvbiwgd2lkdGgsIG1pbmlXaWR0aCkge1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0eWxlKHsgd2lkdGg6IGAke3dpZHRofXB4YCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIHdpZHRoOiBgJHttaW5pV2lkdGh9cHhgIH0pKVxuICAgIF07XG59XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZnVuY3Rpb24gY29sbGFwc2VPdmVybGF5KGR1cmF0aW9uLCBwb3NpdGlvbikge1xuICAgIGNvbnN0IHRyYW5zbGF0ZURpciA9IHBvc2l0aW9uICE9PSAnZW5kJyA/ICctMTAwJScgOiAnMTAwJSc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKDApYCB9KSxcbiAgICAgICAgYW5pbWF0ZShgJHtkdXJhdGlvbn1tcyBlYXNlLWluYCwgc3R5bGUoeyBvdmVyZmxvdzogJ2hpZGRlbicsIHRyYW5zZm9ybTogYHRyYW5zbGF0ZVgoJHt0cmFuc2xhdGVEaXJ9KWAgfSkpXG4gICAgXTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBjb2xsYXBzZVJUTE92ZXJsYXkoZHVyYXRpb24pIHtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdHlsZSh7IHRyYW5zZm9ybTogYHRyYW5zbGF0ZVgoMClgIH0pLFxuICAgICAgICBhbmltYXRlKGAke2R1cmF0aW9ufW1zIGVhc2UtaW5gLCBzdHlsZSh7IG92ZXJmbG93OiAnaGlkZGVuJywgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgxMDAlKWAgfSkpXG4gICAgXTtcbn1cbi8qKlxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBleHBhbmRBbmltYXRpb24oc2V0dGluZ3MpIHtcbiAgICBjb25zdCBkdXJhdGlvbiA9IHNldHRpbmdzLmFuaW1hdGlvbi5kdXJhdGlvbjtcbiAgICBjb25zdCB3aWR0aCA9IHNldHRpbmdzLndpZHRoO1xuICAgIGNvbnN0IG1pbmlXaWR0aCA9IHNldHRpbmdzLm1pbmlXaWR0aDtcbiAgICBjb25zdCBtb2RlID0gc2V0dGluZ3MubW9kZTtcbiAgICBjb25zdCBtaW5pID0gc2V0dGluZ3MubWluaTtcbiAgICBjb25zdCBydGwgPSBzZXR0aW5ncy5ydGw7XG4gICAgY29uc3QgcG9zaXRpb24gPSBzZXR0aW5ncy5wb3NpdGlvbjtcbiAgICBpZiAobWluaSAmJiBtb2RlID09PSAncHVzaCcpIHtcbiAgICAgICAgcmV0dXJuIG1pbmlFeHBhbmRQdXNoKGR1cmF0aW9uLCB3aWR0aCwgbWluaVdpZHRoKTtcbiAgICB9XG4gICAgaWYgKCFtaW5pICYmIG1vZGUgPT09ICdwdXNoJykge1xuICAgICAgICByZXR1cm4gZXhwYW5kUHVzaChkdXJhdGlvbiwgd2lkdGgpO1xuICAgIH1cbiAgICBpZiAoIW1pbmkgJiYgbW9kZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIHJldHVybiBydGwgPyBleHBhbmRSVExPdmVybGF5KGR1cmF0aW9uKSA6IGV4cGFuZE92ZXJsYXkoZHVyYXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG4gICAgaWYgKG1pbmkgJiYgbW9kZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIHJldHVybiBtaW5pRXhwYW5kT3ZlcmxheShkdXJhdGlvbiwgd2lkdGgsIG1pbmlXaWR0aCk7XG4gICAgfVxufVxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmZ1bmN0aW9uIGNvbGxhcHNlQW5pbWF0aW9uKHNldHRpbmdzKSB7XG4gICAgY29uc3QgZHVyYXRpb24gPSBzZXR0aW5ncy5hbmltYXRpb24uZHVyYXRpb247XG4gICAgY29uc3Qgd2lkdGggPSBzZXR0aW5ncy53aWR0aDtcbiAgICBjb25zdCBtaW5pV2lkdGggPSBzZXR0aW5ncy5taW5pV2lkdGg7XG4gICAgY29uc3QgbW9kZSA9IHNldHRpbmdzLm1vZGU7XG4gICAgY29uc3QgbWluaSA9IHNldHRpbmdzLm1pbmk7XG4gICAgY29uc3QgcnRsID0gc2V0dGluZ3MucnRsO1xuICAgIGNvbnN0IHBvc2l0aW9uID0gc2V0dGluZ3MucG9zaXRpb247XG4gICAgaWYgKG1pbmkgJiYgbW9kZSA9PT0gJ3B1c2gnKSB7XG4gICAgICAgIHJldHVybiBtaW5pQ29sbGFwc2VQdXNoKGR1cmF0aW9uLCB3aWR0aCwgbWluaVdpZHRoKTtcbiAgICB9XG4gICAgaWYgKCFtaW5pICYmIG1vZGUgPT09ICdwdXNoJykge1xuICAgICAgICByZXR1cm4gY29sbGFwc2VQdXNoKGR1cmF0aW9uLCB3aWR0aCk7XG4gICAgfVxuICAgIGlmICghbWluaSAmJiBtb2RlID09PSAnb3ZlcmxheScpIHtcbiAgICAgICAgcmV0dXJuIHJ0bCA/IGNvbGxhcHNlUlRMT3ZlcmxheShkdXJhdGlvbikgOiBjb2xsYXBzZU92ZXJsYXkoZHVyYXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG4gICAgaWYgKG1pbmkgJiYgbW9kZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgIHJldHVybiBtaW5pQ29sbGFwc2VPdmVybGF5KGR1cmF0aW9uLCB3aWR0aCwgbWluaVdpZHRoKTtcbiAgICB9XG59XG5cbi8qKlxuICogQXJndW1lbnRzIGZvciB0aGUgYHNlbGVjdGAgZXZlbnQgb2YgdGhlIERyYXdlci5cbiAqL1xuY2xhc3MgRHJhd2VyU2VsZWN0RXZlbnQgZXh0ZW5kcyBQcmV2ZW50YWJsZUV2ZW50IHtcbn1cblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIERyYXdlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kaWNlcyA9IFtdO1xuICAgIH1cbiAgICBlbWl0KGV2ZW50LCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMub3duZXI7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBEcmF3ZXJTZWxlY3RFdmVudChPYmplY3QuYXNzaWduKHt9LCBhcmdzLCB7IHNlbmRlcjogZHJhd2VyIH0pKTtcbiAgICAgICAgaWYgKGhhc09ic2VydmVycyhkcmF3ZXJbZXZlbnRdKSkge1xuICAgICAgICAgICAgZHJhd2VyW2V2ZW50XS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgb25TZWxlY3Qoc2VsZWN0ZWRJZHgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGljZXMgPSBbc2VsZWN0ZWRJZHhdO1xuICAgICAgICBjb25zdCBkcmF3ZXIgPSB0aGlzLm93bmVyO1xuICAgICAgICBpZiAoZHJhd2VyLmF1dG9Db2xsYXBzZSAmJiAhZHJhd2VyLm1pbmltaXplZCkge1xuICAgICAgICAgICAgZHJhd2VyLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdFNlbGVjdGlvbigpIHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLm93bmVyLml0ZW1zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSW5kaWNlcyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXRlbXNbaV0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kaWNlcy5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuRHJhd2VyU2VydmljZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogSW5qZWN0YWJsZSB9LFxuXTtcblxuY29uc3QgREVGQVVMVF9BTklNQVRJT04gPSB7IHR5cGU6ICdzbGlkZScsIGR1cmF0aW9uOiAyMDAgfTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIERyYXdlciBjb21wb25lbnQgZm9yIEFuZ3VsYXJdKHslIHNsdWcgb3ZlcnZpZXdfZHJhd2VyICV9KS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHMtcHJldmlld1xuICogX0BDb21wb25lbnQoe1xuICogICAgc2VsZWN0b3I6ICdteS1hcHAnLFxuICogICAgdGVtcGxhdGU6IGBcbiAqICAgICAgICA8a2VuZG8tZHJhd2VyLWNvbnRhaW5lcj5cbiAqICAgICAgICAgICAgIDxrZW5kby1kcmF3ZXIgI2RyYXdlclxuICogICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIlxuICogICAgICAgICAgICAgICAgICBbbW9kZV09XCInb3ZlcmxheSdcIlxuICogICAgICAgICAgICAgICAgICBbKGV4cGFuZGVkKV09XCJleHBhbmRlZFwiPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZHJhd2VyPlxuICogICAgICAgICAgICAgIDxrZW5kby1kcmF3ZXItY29udGVudD5cbiAqICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImstYnV0dG9uXCIgKGNsaWNrKT1cImRyYXdlci50b2dnbGUoKVwiPk9wZW4gdGhlIERyYXdlcjwvYnV0dG9uPlxuICogICAgICAgICAgICAgIDwva2VuZG8tZHJhd2VyLWNvbnRlbnQ+XG4gKiAgICAgICAgPC9rZW5kby1kcmF3ZXItY29udGFpbmVyPlxuICogICAgYFxuICogfSlcbiAqIGNsYXNzIEFwcENvbXBvbmVudCB7XG4gKiAgICBwdWJsaWMgZXhwYW5kZWQgPSBmYWxzZTtcbiAqXG4gKiAgICBwdWJsaWMgaXRlbXM6IGFueVtdID0gW1xuICogICAgICB7IHRleHQ6ICdJbmJveCcsIGljb246ICdrLWktaW5ib3gnIH0sXG4gKiAgICAgIHsgdGV4dDogJ05vdGlmaWNhdGlvbnMnLCBpY29uOiAnay1pLWJlbGwnIH0sXG4gKiAgICAgIHsgdGV4dDogJ0RhdGUnLCBpY29uOiAnay1pLWNhbGVuZGFyJyB9XG4gKiAgICBdO1xuICogfVxuICogYGBgXG4gKi9cbmNsYXNzIERyYXdlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgYnVpbGRlciwgbG9jYWxpemF0aW9uU2VydmljZSwgZHJhd2VyU2VydmljZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyO1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvblNlcnZpY2UgPSBsb2NhbGl6YXRpb25TZXJ2aWNlO1xuICAgICAgICB0aGlzLmRyYXdlclNlcnZpY2UgPSBkcmF3ZXJTZXJ2aWNlO1xuICAgICAgICB0aGlzLmhvc3RDbGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbW9kZSBpbiB3aGljaCB0aGUgRHJhd2VyIHdpbGwgYmUgZGlzcGxheWVkLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYG92ZXJsYXlgXG4gICAgICAgICAqICogYHB1c2hgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1vZGUgPSAnb3ZlcmxheSc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBEcmF3ZXJcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBwb3NpdGlvbmluZ19kcmF3ZXIgJX0pKS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogKERlZmF1bHQpIGBzdGFydGBcbiAgICAgICAgICogKiBgZW5kYFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9ICdzdGFydCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbmFibGVzIHRoZSBtaW5pIChjb21wYWN0KSB2aWV3IG9mIHRoZSBEcmF3ZXIgd2hpY2ggaXMgZGlzcGxheWVkIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBjb2xsYXBzZWRcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBleHBhbmRtb2Rlc3Bvc2l0aW9uc19kcmF3ZXIgJX0jdG9jLW1pbmktdmlldykpLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5taW5pID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIHN0YXRlIG9mIHRoZSBEcmF3ZXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEZWZpbmVzIHRoZSB3aWR0aCBvZiB0aGUgRHJhd2VyIHdoZW4gaXQgaXMgZXhwYW5kZWQuXG4gICAgICAgICAqIERlZmF1bHRzIHRvIGAyNDBgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53aWR0aCA9IDI0MDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBEcmF3ZXIgd2hlbiB0aGUgbWluaSB2aWV3IGlzIGVuYWJsZWRcbiAgICAgICAgICogYW5kIHRoZSBjb21wb25lbnQgaXMgY29sbGFwc2VkLiBEZWZhdWx0cyB0byBgNjBgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5taW5pV2lkdGggPSA1MDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyBpZiB0aGUgRHJhd2VyIHdpbGwgYmUgYXV0b21hdGljYWxseSBjb2xsYXBzZWQgd2hlbiBhbiBpdGVtXG4gICAgICAgICAqIG9yIHRoZSBvdmVybGF5IGlzIGNsaWNrZWQuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYXV0b0NvbGxhcHNlID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgYW5pbWF0aW9uIHNldHRpbmdzIG9mIHRoZSBEcmF3ZXIuXG4gICAgICAgICAqIChbc2VlIGV4YW1wbGVdKHslIHNsdWcgaW50ZXJhY3Rpb25fZHJhd2VyICV9I3RvYy10b2dnbGluZy1iZXR3ZWVuLXN0YXRlcykpLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiBCb29sZWFuXG4gICAgICAgICAqICAgICogKERlZmF1bHQpIGB0cnVlYFxuICAgICAgICAgKiAgICAqIGBmYWxzZWBcbiAgICAgICAgICogKiBgRHJhd2VyQW5pbWF0aW9uYFxuICAgICAgICAgKiAgICAqIChEZWZhdWx0KSBgdHlwZT86ICdzbGlkZSdgXG4gICAgICAgICAqICAgICogYGR1cmF0aW9uYCZtZGFzaDtBY2NlcHRzIGEgbnVtYmVyIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdHMgdG8gYDMwMG1zYC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYW5pbWF0aW9uID0gREVGQVVMVF9BTklNQVRJT047XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBEcmF3ZXIgaXMgZXhwYW5kZWQgYW5kIGl0cyBhbmltYXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIERyYXdlciBpcyBjb2xsYXBzZWQgYW5kIGl0cyBhbmltYXRpb24gaXMgY29tcGxldGUuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbGxhcHNlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiBhIERyYXdlciBpdGVtIGlzIHNlbGVjdGVkLiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGaXJlcyB3aGVuIHRoZSBgZXhwYW5kZWRgIHByb3BlcnR5IG9mIHRoZSBjb21wb25lbnQgd2FzIHVwZGF0ZWQuXG4gICAgICAgICAqIFVzZWQgdG8gcHJvdmlkZSBhIHR3by13YXkgYmluZGluZyBmb3IgdGhlIGBleHBhbmRlZGAgcHJvcGVydHkuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmV4cGFuZGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgdGhpcy5ydGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGl6YXRpb25TZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJ0bCA9IHJ0bDtcbiAgICAgICAgICAgIHRoaXMuZGlyZWN0aW9uID0gdGhpcy5ydGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcmF3ZXJTZXJ2aWNlLm93bmVyID0gdGhpcztcbiAgICB9XG4gICAgZ2V0IHN0YXJ0UG9zaXRpb25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zaXRpb24gPT09ICdzdGFydCc7XG4gICAgfVxuICAgIGdldCBlbmRQb3NpdGlvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3NpdGlvbiA9PT0gJ2VuZCc7XG4gICAgfVxuICAgIGdldCBvdmVybGF5VHJhbnNvZnJtU3R5bGVzKCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlID09PSAncHVzaCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5leHBhbmRlZCB8fCB0aGlzLm1pbmltaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIGB0cmFuc2xhdGVYKDBweClgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgdHJhbnNsYXRlWCgtMTAwJSlgO1xuICAgIH1cbiAgICBnZXQgZmxleFN0eWxlcygpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ292ZXJsYXknKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmV4cGFuZGVkICYmICF0aGlzLm1pbmltaXplZCkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd2VyV2lkdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgRHJhd2VyLlxuICAgICAqL1xuICAgIHNldCBpdGVtcyhpdGVtcykge1xuICAgICAgICBpZiAoaXNQcmVzZW50KGl0ZW1zKSkge1xuICAgICAgICAgICAgdGhpcy5faXRlbXMgPSBpdGVtcztcbiAgICAgICAgICAgIHRoaXMuZHJhd2VyU2VydmljZS5pbml0U2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IG1pbmltaXplZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaSAmJiAhdGhpcy5leHBhbmRlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBkcmF3ZXJXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluaW1pemVkID8gdGhpcy5taW5pV2lkdGggOiB0aGlzLndpZHRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUb2dnbGVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBEcmF3ZXIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwYW5kZWQ/IC0gQm9vbGVhbi4gU3BlY2lmaWVzIGlmIHRoZSBEcmF3ZXIgd2lsbCBiZSBleHBhbmRlZCBvciBjb2xsYXBzZWQuXG4gICAgICovXG4gICAgdG9nZ2xlKGV4cGFuZGVkKSB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5leHBhbmRlZDtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IGlzUHJlc2VudChleHBhbmRlZCkgPyBleHBhbmRlZCA6ICFwcmV2aW91cztcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHByZXZpb3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RXhwYW5kZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY3VycmVudCA9PT0gZmFsc2UgJiYgIXRoaXMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uRW5kLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHsgdGhpcy5vbkFuaW1hdGlvbkVuZChjdXJyZW50KTsgfSk7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGUoY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzW2N1cnJlbnQgPyAnZXhwYW5kJyA6ICdjb2xsYXBzZSddLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkFuaW1hdGlvbkVuZChjdXJyZW50RXhwYW5kZWQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRFeHBhbmRlZCkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmQuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZXRFeHBhbmRlZCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmV4cGFuZGVkID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgfVxuICAgIGFuaW1hdGUoZXhwYW5kZWQpIHtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgICAgICBtb2RlOiB0aGlzLm1vZGUsXG4gICAgICAgICAgICBtaW5pOiB0aGlzLm1pbmksXG4gICAgICAgICAgICBtaW5pV2lkdGg6IHRoaXMubWluaVdpZHRoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMud2lkdGgsXG4gICAgICAgICAgICBydGw6IHRoaXMucnRsLFxuICAgICAgICAgICAgcG9zaXRpb246IHRoaXMucG9zaXRpb24sXG4gICAgICAgICAgICBhbmltYXRpb246ICh0eXBlb2YgdGhpcy5hbmltYXRpb24gIT09ICdib29sZWFuJykgPyB0aGlzLmFuaW1hdGlvbiA6IERFRkFVTFRfQU5JTUFUSU9OXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFuaW1hdGlvbiA9IGV4cGFuZGVkID8gZXhwYW5kQW5pbWF0aW9uKHNldHRpbmdzKSA6IGNvbGxhcHNlQW5pbWF0aW9uKHNldHRpbmdzKTtcbiAgICAgICAgY29uc3QgcGxheWVyID0gdGhpcy5jcmVhdGVQbGF5ZXIoYW5pbWF0aW9uLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHBsYXllci5wbGF5KCk7XG4gICAgfVxuICAgIGNyZWF0ZVBsYXllcihhbmltYXRpb24sIGFuaW1hdGVkRWxlbWVudCkge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5idWlsZGVyLmJ1aWxkKGFuaW1hdGlvbik7XG4gICAgICAgIGxldCBwbGF5ZXIgPSBmYWN0b3J5LmNyZWF0ZShhbmltYXRlZEVsZW1lbnQpO1xuICAgICAgICBwbGF5ZXIub25Eb25lKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChwbGF5ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFuaW1hdGlvbkVuZC5lbWl0KCk7XG4gICAgICAgICAgICAgICAgcGxheWVyLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICBwbGF5ZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBsYXllcjtcbiAgICB9XG59XG5EcmF3ZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvRHJhd2VyJyxcbiAgICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgRHJhd2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTDEwTl9QUkVGSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogJ2tlbmRvLmRyYXdlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kcmF3ZXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJrLWRyYXdlci13cmFwcGVyXCIgKm5nSWY9XCJleHBhbmRlZCB8fCBtaW5pXCIgW3N0eWxlLndpZHRoLnB4XT1cImRyYXdlcldpZHRoXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRyYXdlclRlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaGVhZGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJUZW1wbGF0ZT8udGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgPHVsIGtlbmRvRHJhd2VyTGlzdFxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXNcIiBbbWluaV09XCJtaW5pXCIgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgW2l0ZW1UZW1wbGF0ZV09XCJpdGVtVGVtcGxhdGU/LnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJrLWRyYXdlci1pdGVtc1wiPlxuICAgICAgICAgICAgICAgIDwvdWw+XG5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJmb290ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZvb3RlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiZHJhd2VyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImRyYXdlclRlbXBsYXRlPy50ZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmF3ZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBBbmltYXRpb25CdWlsZGVyIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBEcmF3ZXJTZXJ2aWNlIH1cbl07XG5EcmF3ZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstd2lkZ2V0JyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kcmF3ZXInLF0gfV0sXG4gICAgc3RhcnRQb3NpdGlvbkNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRyYXdlci1zdGFydCcsXSB9XSxcbiAgICBlbmRQb3NpdGlvbkNsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRyYXdlci1lbmQnLF0gfV0sXG4gICAgb3ZlcmxheVRyYW5zb2ZybVN0eWxlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUudHJhbnNmb3JtJyxdIH1dLFxuICAgIGZsZXhTdHlsZXM6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLmZsZXhCYXNpcy5weCcsXSB9XSxcbiAgICBtb2RlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBwb3NpdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluaTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXhwYW5kZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHdpZHRoOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW5pV2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF1dG9Db2xsYXBzZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbXM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgYW5pbWF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBleHBhbmQ6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjb2xsYXBzZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHNlbGVjdDogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIGV4cGFuZGVkQ2hhbmdlOiBbeyB0eXBlOiBPdXRwdXQgfV0sXG4gICAgZHJhd2VyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RyYXdlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgZm9vdGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RyYXdlckZvb3RlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgaGVhZGVyVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RyYXdlckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLF0gfV0sXG4gICAgaXRlbVRlbXBsYXRlOiBbeyB0eXBlOiBDb250ZW50Q2hpbGQsIGFyZ3M6IFtEcmF3ZXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUsXSB9XVxufTtcblxuLyoqXG4gKiBTZXJ2ZXMgYXMgYSBjb250YWluZXIgZm9yIHRoZSBbS2VuZG8gVUkgRHJhd2VyIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19kcmF3ZXIgJX0pIGFuZCBpdHMgY29udGVudC5cbiAqL1xuY2xhc3MgRHJhd2VyQ29udGFpbmVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZSA9IGxvY2FsaXphdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMucnRsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ydGwgPSBydGw7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBob3N0Q2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBnZXQgb3ZlcmxheUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3ZXIubW9kZSA9PT0gJ292ZXJsYXknO1xuICAgIH1cbiAgICBnZXQgbWluaUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kcmF3ZXIubWluaTtcbiAgICB9XG4gICAgZ2V0IHB1c2hDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd2VyLm1vZGUgPT09ICdwdXNoJztcbiAgICB9XG4gICAgZ2V0IGlzRXhwYW5kZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd2VyLmV4cGFuZGVkO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBvdmVybGF5KCkge1xuICAgICAgICByZXR1cm4gaXNQcmVzZW50KHRoaXMuZHJhd2VyKSAmJlxuICAgICAgICAgICAgdGhpcy5kcmF3ZXIuZXhwYW5kZWQgJiZcbiAgICAgICAgICAgIHRoaXMuZHJhd2VyLm1vZGUgPT09ICdvdmVybGF5JztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGNsb3NlRHJhd2VyKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5ICYmIHRoaXMuZHJhd2VyLmF1dG9Db2xsYXBzZSkge1xuICAgICAgICAgICAgdGhpcy5kcmF3ZXIudG9nZ2xlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkRyYXdlckNvbnRhaW5lckNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tZHJhd2VyLWNvbnRhaW5lcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEwxME5fUFJFRklYLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6ICdrZW5kby5kcmF3ZXIuY29udGFpbmVyJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8ZGl2IGNsYXNzPVwiay1vdmVybGF5XCIgKm5nSWY9XCJvdmVybGF5XCIgKGNsaWNrKT1cImNsb3NlRHJhd2VyKClcIj48L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRHJhd2VyQ29udGFpbmVyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuRHJhd2VyQ29udGFpbmVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kcmF3ZXItY29udGFpbmVyJyxdIH1dLFxuICAgIG92ZXJsYXlDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kcmF3ZXItb3ZlcmxheScsXSB9XSxcbiAgICBtaW5pQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstZHJhd2VyLW1pbmknLF0gfV0sXG4gICAgcHVzaENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRyYXdlci1wdXNoJyxdIH1dLFxuICAgIGlzRXhwYW5kZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1kcmF3ZXItZXhwYW5kZWQnLF0gfV0sXG4gICAgZGlyZWN0aW9uOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydhdHRyLmRpcicsXSB9XSxcbiAgICBkcmF3ZXI6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW0RyYXdlckNvbXBvbmVudCxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGNvbnRlbnQgb2YgdGhlIFtLZW5kbyBVSSBEcmF3ZXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X2RyYXdlciAlfSkuXG4gKi9cbmNsYXNzIERyYXdlckNvbnRlbnRDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhvc3RDbGFzc2VzID0gdHJ1ZTtcbiAgICB9XG59XG5EcmF3ZXJDb250ZW50Q29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1kcmF3ZXItY29udGVudCcsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgICAgICAgICAgICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5EcmF3ZXJDb250ZW50Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW107XG5EcmF3ZXJDb250ZW50Q29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWRyYXdlci1jb250ZW50JyxdIH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGNvbnRlbnQgb2YgdGhlIHdob2xlIFN0ZXAuXG4gKiBUbyBkZWZpbmUgdGhlIHRlbXBsYXRlLCBuZXN0IGFuIGA8bmctdGVtcGxhdGU+YCB0YWdcbiAqIHdpdGggdGhlIGBrZW5kb1N0ZXBwZXJTdGVwVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tc3RlcHBlcj5gIHRhZy5cbiAqL1xuY2xhc3MgU3RlcHBlclN0ZXBUZW1wbGF0ZURpcmVjdGl2ZSB7XG4gICAgY29uc3RydWN0b3IodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVJlZiA9IHRlbXBsYXRlUmVmO1xuICAgIH1cbn1cblN0ZXBwZXJTdGVwVGVtcGxhdGVEaXJlY3RpdmUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IERpcmVjdGl2ZSwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ1trZW5kb1N0ZXBwZXJTdGVwVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TdGVwcGVyU3RlcFRlbXBsYXRlRGlyZWN0aXZlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogVGVtcGxhdGVSZWYsIGRlY29yYXRvcnM6IFt7IHR5cGU6IE9wdGlvbmFsIH1dIH1cbl07XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRlbXBsYXRlIHRoYXQgZGVmaW5lcyB0aGUgY29udGVudCBvZiB0aGUgU3RlcCBsYWJlbC5cbiAqIFRvIGRlZmluZSB0aGUgdGVtcGxhdGUsIG5lc3QgYW4gYDxuZy10ZW1wbGF0ZT5gIHRhZ1xuICogd2l0aCB0aGUgYGtlbmRvU3RlcHBlckxhYmVsVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tc3RlcHBlcj5gIHRhZy5cbiAqL1xuY2xhc3MgU3RlcHBlckxhYmVsVGVtcGxhdGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKHRlbXBsYXRlUmVmKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVSZWYgPSB0ZW1wbGF0ZVJlZjtcbiAgICB9XG59XG5TdGVwcGVyTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvU3RlcHBlckxhYmVsVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TdGVwcGVyTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFRlbXBsYXRlUmVmLCBkZWNvcmF0b3JzOiBbeyB0eXBlOiBPcHRpb25hbCB9XSB9XG5dO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0ZW1wbGF0ZSB0aGF0IGRlZmluZXMgdGhlIGNvbnRlbnQgb2YgdGhlIFN0ZXAgaW5kaWNhdG9yLlxuICogVG8gZGVmaW5lIHRoZSB0ZW1wbGF0ZSwgbmVzdCBhbiBgPG5nLXRlbXBsYXRlPmAgdGFnXG4gKiB3aXRoIHRoZSBga2VuZG9TdGVwcGVySW5kaWNhdG9yVGVtcGxhdGVgIGRpcmVjdGl2ZSBpbnNpZGUgdGhlIGA8a2VuZG8tc3RlcHBlcj5gIHRhZy5cbiAqL1xuY2xhc3MgU3RlcHBlckluZGljYXRvclRlbXBsYXRlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZW1wbGF0ZVJlZikge1xuICAgICAgICB0aGlzLnRlbXBsYXRlUmVmID0gdGVtcGxhdGVSZWY7XG4gICAgfVxufVxuU3RlcHBlckluZGljYXRvclRlbXBsYXRlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9TdGVwcGVySW5kaWNhdG9yVGVtcGxhdGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TdGVwcGVySW5kaWNhdG9yVGVtcGxhdGVEaXJlY3RpdmUuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBUZW1wbGF0ZVJlZiwgZGVjb3JhdG9yczogW3sgdHlwZTogT3B0aW9uYWwgfV0gfVxuXTtcblxuLyoqXG4gKiBBcmd1bWVudHMgZm9yIHRoZSBgYWN0aXZhdGVgIGV2ZW50IG9mIHRoZSBTdGVwcGVyLlxuICovXG5jbGFzcyBTdGVwcGVyQWN0aXZhdGVFdmVudCBleHRlbmRzIFByZXZlbnRhYmxlRXZlbnQge1xufVxuXG5jb25zdCBERUZBVUxUX0NVUlJFTlRfU1RFUCA9IDA7XG5jb25zdCBoYW5kbGVycyA9IHt9O1xuaGFuZGxlcnNbS2V5cy5BcnJvd0xlZnRdID0gJ2xlZnQnO1xuaGFuZGxlcnNbS2V5cy5BcnJvd1JpZ2h0XSA9ICdyaWdodCc7XG5oYW5kbGVyc1tLZXlzLkFycm93VXBdID0gJ3VwJztcbmhhbmRsZXJzW0tleXMuQXJyb3dEb3duXSA9ICdkb3duJztcbmhhbmRsZXJzW0tleXMuSG9tZV0gPSAnaG9tZSc7XG5oYW5kbGVyc1tLZXlzLkVuZF0gPSAnZW5kJztcbmhhbmRsZXJzW0tleXMuRW50ZXJdID0gJ2VudGVyJztcbmhhbmRsZXJzW0tleXMuU3BhY2VdID0gJ2VudGVyJztcbmNvbnN0IGhhbmRsZXJzUlRMID0gT2JqZWN0LmFzc2lnbih7fSwgaGFuZGxlcnMpO1xuaGFuZGxlcnNSVExbS2V5cy5BcnJvd0xlZnRdID0gJ3JpZ2h0JztcbmhhbmRsZXJzUlRMW0tleXMuQXJyb3dSaWdodF0gPSAnbGVmdCc7XG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgU3RlcHBlclNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKGxvY2FsaXphdGlvbiwgbmdab25lLCBjaGFuZ2VEZXRlY3Rvcikge1xuICAgICAgICB0aGlzLmxvY2FsaXphdGlvbiA9IGxvY2FsaXphdGlvbjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IgPSBjaGFuZ2VEZXRlY3RvcjtcbiAgICAgICAgdGhpcy5jdXJyZW50U3RlcCA9IERFRkFVTFRfQ1VSUkVOVF9TVEVQO1xuICAgICAgICB0aGlzLnRyaWdnZXJWYWxpZGF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB0aGlzLmZvY3VzZWRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBnZXQgaGFuZGxlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyBoYW5kbGVyc1JUTCA6IGhhbmRsZXJzO1xuICAgIH1cbiAgICBlbWl0KGV2ZW50LCBldmVudEFyZ3MpIHtcbiAgICAgICAgY29uc3Qgc3RlcHBlciA9IHRoaXMub3duZXI7XG4gICAgICAgIGlmIChoYXNPYnNlcnZlcnMoc3RlcHBlcltldmVudF0pKSB7XG4gICAgICAgICAgICBzdGVwcGVyW2V2ZW50XS5lbWl0KGV2ZW50QXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50QXJncy5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgb25BY3RpdmF0ZShjdXJyZW50SWR4LCBvcmlnaW5hbEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50QXJncyA9IG5ldyBTdGVwcGVyQWN0aXZhdGVFdmVudCh7XG4gICAgICAgICAgICBpbmRleDogY3VycmVudElkeCxcbiAgICAgICAgICAgIHN0ZXA6IHRoaXMub3duZXIuc3RlcHNbY3VycmVudElkeF0sXG4gICAgICAgICAgICBvcmlnaW5hbEV2ZW50OiBvcmlnaW5hbEV2ZW50LFxuICAgICAgICAgICAgc2VuZGVyOiB0aGlzLm93bmVyXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmVtaXQoJ2FjdGl2YXRlJywgZXZlbnRBcmdzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN0ZXAgPSBjdXJyZW50SWR4O1xuICAgICAgICAgICAgICAgIHRoaXMub3duZXJbJ2N1cnJlbnRTdGVwQ2hhbmdlJ10uZW1pdChjdXJyZW50SWR4KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHZhbGlkYXRlU3RlcHMoKSB7XG4gICAgICAgIHRoaXMudHJpZ2dlclZhbGlkYXRpb24uZW1pdCgpO1xuICAgIH1cbiAgICBrZXlkb3duKGUpIHtcbiAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuZm9jdXNlZFN0ZXAgfHwgdGhpcy5jdXJyZW50U3RlcDtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnNbZS5rZXlDb2RlXTtcbiAgICAgICAgaWYgKCFpc1ByZXNlbnQoY3VycmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpc1toYW5kbGVyXShlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZWZ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c1ByZXZTdGVwKCk7XG4gICAgfVxuICAgIHJpZ2h0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c05leHRTdGVwKCk7XG4gICAgfVxuICAgIHVwKCkge1xuICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzUHJldlN0ZXAoKTtcbiAgICB9XG4gICAgZG93bigpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2N1c05leHRTdGVwKCk7XG4gICAgfVxuICAgIGhvbWUoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZFN0ZXAgPSAwO1xuICAgICAgICB0aGlzLmZvY3VzZWRTdGVwQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gICAgZW5kKCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRTdGVwID0gdGhpcy5vd25lci5zdGVwcy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmZvY3VzZWRTdGVwQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG4gICAgZW50ZXIoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZFN0ZXAgPT09IHRoaXMuY3VycmVudFN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1N0ZXBEaXNhYmxlZCh0aGlzLmZvY3VzZWRTdGVwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm93bmVyLmxpbmVhciAmJiB0aGlzLmlzUHJldk9yTmV4dFN0ZXAodGhpcy5mb2N1c2VkU3RlcCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkFjdGl2YXRlKHRoaXMuZm9jdXNlZFN0ZXAsIGV2ZW50KTtcbiAgICB9XG4gICAgZm9jdXMoZm9jdXNlZElkeCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRTdGVwID0gZm9jdXNlZElkeDtcbiAgICB9XG4gICAgZm9jdXNOZXh0U3RlcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZFN0ZXAgPCB0aGlzLm93bmVyLnN0ZXBzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkU3RlcCArPSAxO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkU3RlcENoYW5nZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9jdXNQcmV2U3RlcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZFN0ZXAgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRTdGVwIC09IDE7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRTdGVwQ2hhbmdlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc1N0ZXBEaXNhYmxlZChpbmRleCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vd25lci5zdGVwc1tpbmRleF0uZGlzYWJsZWQ7XG4gICAgfVxuICAgIGlzUHJldk9yTmV4dFN0ZXAoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGluZGV4ID09PSB0aGlzLmN1cnJlbnRTdGVwICsgMSB8fCBpbmRleCA9PT0gdGhpcy5jdXJyZW50U3RlcCAtIDE7XG4gICAgfVxuICAgIGdldCBpc0hvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm93bmVyLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxufVxuU3RlcHBlclNlcnZpY2UuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IEluamVjdGFibGUgfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN0ZXBwZXJTZXJ2aWNlLmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9XG5dO1xuXG5jb25zdCBERUZBVUxUX0FOSU1BVElPTl9EVVJBVElPTiA9IDQwMDtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW0tlbmRvIFVJIFN0ZXBwZXIgY29tcG9uZW50IGZvciBBbmd1bGFyXSh7JSBzbHVnIG92ZXJ2aWV3X3N0ZXBwZXIgJX0pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0cy1wcmV2aWV3XG4gKiBfQENvbXBvbmVudCh7XG4gKiAgICBzZWxlY3RvcjogJ215LWFwcCcsXG4gKiAgICB0ZW1wbGF0ZTogYFxuICogICAgICAgIDxrZW5kby1zdGVwcGVyIFtzdGVwc109XCJzdGVwc1wiPlxuICogICAgICAgIDwva2VuZG8tc3RlcHBlcj5cbiAqICAgIGBcbiAqIH0pXG4gKiBjbGFzcyBBcHBDb21wb25lbnQge1xuICogICAgcHVibGljIHN0ZXBzOiBBcnJheTxTdGVwcGVyU3RlcD4gPSBbXG4gKiAgICAgIHsgbGFiZWw6ICdTdGVwIE9uZScgfSwgeyBsYWJlbDogJ1N0ZXAgVHdvJyB9LCB7IGxhYmVsOiAnU3RlcCBUaHJlZScgfVxuICogICAgXTtcbiAqIH1cbiAqIGBgYFxuICovXG5jbGFzcyBTdGVwcGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlciwgZWxlbSwgbG9jYWxpemF0aW9uLCBzdGVwcGVyU2VydmljZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgICAgIHRoaXMuZWxlbSA9IGVsZW07XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uID0gbG9jYWxpemF0aW9uO1xuICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlID0gc3RlcHBlclNlcnZpY2U7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzZXMgPSB0cnVlO1xuICAgICAgICB0aGlzLmFyaWFSb2xlID0gJ25hdmlnYXRpb24nO1xuICAgICAgICB0aGlzLmRpc3BsYXlTdHlsZSA9ICdncmlkJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiB0aGUgc3RlcHMgaW4gdGhlIFN0ZXBwZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIChEZWZhdWx0KSBgaW5kaWNhdG9yYFxuICAgICAgICAgKiAqIGBsYWJlbGBcbiAgICAgICAgICogKiBgZnVsbGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuc3RlcFR5cGUgPSAnaW5kaWNhdG9yJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbGluZWFyIGZsb3cgb2YgdGhlIFN0ZXBwZXIuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBkZWZhdWx0IHRydWVcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubGluZWFyID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgb3JpZW50YXRpb24gb2YgdGhlIFN0ZXBwZXJcbiAgICAgICAgICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBvcmllbnRhdGlvbl9zdGVwcGVyICV9KSkuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIChEZWZhdWx0KSBgaG9yaXpvbnRhbGBcbiAgICAgICAgICogKiBgdmVydGljYWxgXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBkdXJhdGlvbiBvZiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHRzIHRvIGA0MDBtc2AuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAgKiBCb29sZWFuXG4gICAgICAgICAqICAgICogKERlZmF1bHQpIGB0cnVlYFxuICAgICAgICAgKiAgICAqIGZhbHNlXG4gICAgICAgICAqICAqIE51bWJlclxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hbmltYXRpb24gPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiBhIHN0ZXAgaXMgYWJvdXQgdG8gYmUgYWN0aXZhdGVkLiBUaGlzIGV2ZW50IGlzIHByZXZlbnRhYmxlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5hY3RpdmF0ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZpcmVzIHdoZW4gdGhlIGBjdXJyZW50U3RlcGAgcHJvcGVydHkgb2YgdGhlIGNvbXBvbmVudCB3YXMgdXBkYXRlZC5cbiAgICAgICAgICogVXNlZCB0byBwcm92aWRlIGEgdHdvLXdheSBiaW5kaW5nIGZvciB0aGUgYGN1cnJlbnRTdGVwYCBwcm9wZXJ0eS5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3VycmVudFN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgICAgIHRoaXMuX3N0ZXBzID0gW107XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uLmNoYW5nZXMuc3Vic2NyaWJlKCh7IHJ0bCB9KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHJ0bCA/ICdydGwnIDogJ2x0cic7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLm93bmVyID0gdGhpcztcbiAgICB9XG4gICAgZ2V0IGxpbmVhckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5lYXI7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBzdGVwLlxuICAgICAqL1xuICAgIHNldCBjdXJyZW50U3RlcCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnN0ZXBwZXJTZXJ2aWNlLmN1cnJlbnRTdGVwID0gdmFsdWU7XG4gICAgfVxuICAgIGdldCBjdXJyZW50U3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UuY3VycmVudFN0ZXA7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSBjb2xsZWN0aW9uIG9mIHN0ZXBzIHRoYXQgd2lsbCBiZSByZW5kZXJlZCBpbiB0aGUgU3RlcHBlci5cbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHN0ZXBfYXBwZWFyYW5jZV9zdGVwcGVyICV9KSlcbiAgICAgKi9cbiAgICBzZXQgc3RlcHMoc3RlcHMpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudChzdGVwcykgJiYgc3RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc3RlcHMgPSBzdGVwcztcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc3RlcHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdGVwcztcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlIb3N0U3R5bGluZygpO1xuICAgIH1cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnN0ZXBzICYmICFjaGFuZ2VzLnN0ZXBzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5SG9zdFN0eWxpbmcoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWFudWFsbHkgdHJpZ2dlcnMgdGhlIHZhbGlkaXR5IGNoZWNrIGNvbmZpZ3VyZWQgYnkgdGhlIFtpc1ZhbGlkXSh7JSBzbHVnIGFwaV9sYXlvdXRfc3RlcHBlcnN0ZXAgJX0jdG9jLWlzdmFsaWQpIHByb3BlcnR5IG9mIHRoZSBzdGVwcy5cbiAgICAgKlxuICAgICAqIFN0ZXBzIHRoYXQgaGF2ZSB0aGVpciBbdmFsaWRhdGVdKHslIHNsdWcgYXBpX2xheW91dF9zdGVwcGVyc3RlcCAlfSN0b2MtdmFsaWRhdGUpIHByb3BlcnR5IHNldCB0byBgZmFsc2VgLCB3aWxsIG5vdCBiZSB2YWxpZGF0ZWQuXG4gICAgICovXG4gICAgdmFsaWRhdGVTdGVwcygpIHtcbiAgICAgICAgdGhpcy5zdGVwcGVyU2VydmljZS52YWxpZGF0ZVN0ZXBzKCk7XG4gICAgfVxuICAgIGFwcGx5SG9zdFN0eWxpbmcoKSB7XG4gICAgICAgIGNvbnN0IHN0ZXBGcmFtZXNTdHlsZSA9IHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJyA/ICdncmlkLXRlbXBsYXRlLWNvbHVtbnMnIDogJ2dyaWQtdGVtcGxhdGUtcm93cyc7XG4gICAgICAgIGNvbnN0IHN0ZXBGcmFtZXNWYWx1ZSA9IGByZXBlYXQoJHt0aGlzLnN0ZXBzLmxlbmd0aCAqIDJ9LCAxZnIpYDtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW0ubmF0aXZlRWxlbWVudCwgc3RlcEZyYW1lc1N0eWxlLCBzdGVwRnJhbWVzVmFsdWUpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHByb2dyZXNzQW5pbWF0aW9uKCkge1xuICAgICAgICByZXR1cm4geyBkdXJhdGlvbjogdGhpcy5hbmltYXRpb25EdXJhdGlvbiB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGFuaW1hdGlvbkR1cmF0aW9uKCkge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYW5pbWF0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5pbWF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hbmltYXRpb24gPT09ICdib29sZWFuJyAmJiB0aGlzLmFuaW1hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIERFRkFVTFRfQU5JTUFUSU9OX0RVUkFUSU9OO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHN0ZXBzTGlzdFN0eWxpbmcoKSB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7ICdncmlkLWNvbHVtbi1zdGFydCc6IDEsICdncmlkLWNvbHVtbi1lbmQnOiAtMSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7ICdncmlkLXJvdy1zdGFydCc6IDEsICdncmlkLXJvdy1lbmQnOiAtMSB9O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IHByb2dyZXNzQmFyU3R5bGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAnZ3JpZC1jb2x1bW4tc3RhcnQnOiAyLFxuICAgICAgICAgICAgICAgICdncmlkLWNvbHVtbi1lbmQnOiB0aGlzLnN0ZXBzLmxlbmd0aCAqIDJcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdncmlkLXJvdy1zdGFydCc6IDIsXG4gICAgICAgICAgICAnZ3JpZC1yb3ctZW5kJzogdGhpcy5zdGVwcy5sZW5ndGggKiAyXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGlzSG9yaXpvbnRhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHBlclNlcnZpY2UuaXNIb3Jpem9udGFsO1xuICAgIH1cbn1cblN0ZXBwZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBleHBvcnRBczogJ2tlbmRvU3RlcHBlcicsXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIExvY2FsaXphdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgIFN0ZXBwZXJTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uc3RlcHBlcidcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zdGVwcGVyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyIGtlbmRvU3RlcHBlckxvY2FsaXplZE1lc3NhZ2VzXG4gICAgICAgICAgICBpMThuLW9wdGlvbmFsPVwia2VuZG8uc3RlcHBlci5vcHRpb25hbHxUaGUgdGV4dCBmb3IgdGhlIG9wdGlvbmFsIHNlZ21lbnQgb2YgdGhlIHN0ZXAgbGFiZWxcIlxuICAgICAgICAgICAgb3B0aW9uYWw9XCJPcHRpb25hbFwiXG4gICAgICAgICA+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8b2wga2VuZG9TdGVwcGVyTGlzdFxuICAgICAgICAgICAgW3N0ZXBUeXBlXT0nc3RlcFR5cGUnXG4gICAgICAgICAgICBbbGluZWFyXT0nbGluZWFyJ1xuICAgICAgICAgICAgW29yaWVudGF0aW9uXT0nb3JpZW50YXRpb24nXG4gICAgICAgICAgICBbc3RlcHNdPSdzdGVwcydcbiAgICAgICAgICAgIFtjdXJyZW50U3RlcF09J2N1cnJlbnRTdGVwJ1xuICAgICAgICAgICAgW3N1Y2Nlc3NJY29uXT0nc3VjY2Vzc0ljb24nXG4gICAgICAgICAgICBbZXJyb3JJY29uXT0nZXJyb3JJY29uJ1xuICAgICAgICAgICAgW2luZGljYXRvclRlbXBsYXRlXT0naW5kaWNhdG9yVGVtcGxhdGU/LnRlbXBsYXRlUmVmJ1xuICAgICAgICAgICAgW2xhYmVsVGVtcGxhdGVdPSdsYWJlbFRlbXBsYXRlPy50ZW1wbGF0ZVJlZidcbiAgICAgICAgICAgIFtzdGVwVGVtcGxhdGVdPSdzdGVwVGVtcGxhdGU/LnRlbXBsYXRlUmVmJ1xuICAgICAgICAgICAgY2xhc3M9J2stc3RlcC1saXN0J1xuICAgICAgICAgICAgW2NsYXNzLmstc3RlcC1saXN0LWhvcml6b250YWxdPSdpc0hvcml6b250YWwnXG4gICAgICAgICAgICBbY2xhc3Muay1zdGVwLWxpc3QtdmVydGljYWxdPSchaXNIb3Jpem9udGFsJ1xuICAgICAgICAgICAgW25nU3R5bGVdPSdzdGVwc0xpc3RTdHlsaW5nJz5cbiAgICAgICAgPC9vbD5cblxuICAgICAgICA8a2VuZG8tcHJvZ3Jlc3NiYXIgKm5nSWY9J3N0ZXBzLmxlbmd0aCA+IDAnXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09J3RydWUnXG4gICAgICAgICAgICBbYW5pbWF0aW9uXT0ncHJvZ3Jlc3NBbmltYXRpb24nXG4gICAgICAgICAgICBbbWF4XT0nc3RlcHMubGVuZ3RoIC0gMSdcbiAgICAgICAgICAgIFtsYWJlbF09J2ZhbHNlJ1xuICAgICAgICAgICAgW29yaWVudGF0aW9uXT0nb3JpZW50YXRpb24nXG4gICAgICAgICAgICBbcmV2ZXJzZV09JyFpc0hvcml6b250YWwnXG4gICAgICAgICAgICBbdmFsdWVdPSdjdXJyZW50U3RlcCdcbiAgICAgICAgICAgIFtuZ1N0eWxlXT0ncHJvZ3Jlc3NCYXJTdHlsaW5nJz5cbiAgICAgICAgPC9rZW5kby1wcm9ncmVzc2Jhcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN0ZXBwZXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfSxcbiAgICB7IHR5cGU6IEVsZW1lbnRSZWYgfSxcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFN0ZXBwZXJTZXJ2aWNlIH1cbl07XG5TdGVwcGVyQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzc2VzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXdpZGdldCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RlcHBlcicsXSB9XSxcbiAgICBsaW5lYXJDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGVwcGVyLWxpbmVhcicsXSB9XSxcbiAgICBhcmlhUm9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGRpcmVjdGlvbjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5kaXInLF0gfV0sXG4gICAgZGlzcGxheVN0eWxlOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5kaXNwbGF5JyxdIH1dLFxuICAgIHN0ZXBUeXBlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBsaW5lYXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIG9yaWVudGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjdXJyZW50U3RlcDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcHM6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN1Y2Nlc3NJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBlcnJvckljb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGFuaW1hdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aXZhdGU6IFt7IHR5cGU6IE91dHB1dCB9XSxcbiAgICBjdXJyZW50U3RlcENoYW5nZTogW3sgdHlwZTogT3V0cHV0IH1dLFxuICAgIHN0ZXBUZW1wbGF0ZTogW3sgdHlwZTogQ29udGVudENoaWxkLCBhcmdzOiBbU3RlcHBlclN0ZXBUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGxhYmVsVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1N0ZXBwZXJMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9LF0gfV0sXG4gICAgaW5kaWNhdG9yVGVtcGxhdGU6IFt7IHR5cGU6IENvbnRlbnRDaGlsZCwgYXJnczogW1N0ZXBwZXJJbmRpY2F0b3JUZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSxdIH1dXG59O1xuXG5jb25zdCBTSVpFX0NMQVNTRVMgPSB7XG4gICAgJ3NtYWxsJzogJ2stYXZhdGFyLXNtJyxcbiAgICAnbWVkaXVtJzogJ2stYXZhdGFyLW1kJyxcbiAgICAnbGFyZ2UnOiAnay1hdmF0YXItbGcnXG59O1xuY29uc3QgU0hBUEVfQ0xBU1NFUyA9IHtcbiAgICAnY2lyY2xlJzogJ2stYXZhdGFyLWNpcmNsZScsXG4gICAgJ3NxdWFyZSc6ICdrLWF2YXRhci1zcXVhcmUnLFxuICAgICdyZWN0YW5nbGUnOiAnay1hdmF0YXItcmVjdGFuZ2xlJyxcbiAgICAncm91bmRlZCc6ICdrLWF2YXRhci1yb3VuZGVkJ1xufTtcbi8qKlxuICogRGlzcGxheXMgaW1hZ2VzLCBpY29ucyBvciBpbml0aWFscyByZXByZXNlbnRpbmcgcGVvcGxlIG9yIG90aGVyIGVudGl0aWVzLlxuICovXG5jbGFzcyBBdmF0YXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHJlbmRlcmVyLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZWxlbWVudDtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBhcHBlYXJhbmNlIGZpbGwgc3R5bGUgb2YgdGhlIGF2YXRhci5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmU6XG4gICAgICAgICAqICogYHNvbGlkYCAoRGVmYXVsdClcbiAgICAgICAgICogKiBgb3V0bGluZWBcbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuZmlsbCA9ICdzb2xpZCc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTZXRzIGEgYm9yZGVyIHRvIHRoZSBhdmF0YXIuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvcmRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90aGVtZUNvbG9yID0gJ3ByaW1hcnknO1xuICAgICAgICB0aGlzLl9zaXplID0gJ21lZGl1bSc7XG4gICAgICAgIHRoaXMuX3NoYXBlID0gJ3NxdWFyZSc7XG4gICAgICAgIHRoaXMuYXZhdGFyID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgc29saWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsbCA9PT0gJ3NvbGlkJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBvdXRsaW5lQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbGwgPT09ICdvdXRsaW5lJztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGdldCBib3JkZXJDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9yZGVyO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGZsZXhCYXNpcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2lkdGg7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHNoYXBlIGZvciB0aGUgYXZhdGFyLlxuICAgICAqXG4gICAgICogUG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgKiAqIChEZWZhdWx0KSBgc3F1YXJlYFxuICAgICAqICogYGNpcmNsZWBcbiAgICAgKiAqIGByZWN0YW5nbGVgXG4gICAgICogKiBgcm91bmRlZGBcbiAgICAgKlxuICAgICAqL1xuICAgIHNldCBzaGFwZShzaGFwZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuYXZhdGFyLCBTSEFQRV9DTEFTU0VTW3RoaXMuc2hhcGVdKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmF2YXRhciwgU0hBUEVfQ0xBU1NFU1tzaGFwZV0pO1xuICAgICAgICB0aGlzLl9zaGFwZSA9IHNoYXBlO1xuICAgIH1cbiAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaGFwZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBhdmF0YXJcbiAgICAgKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIGFwcGVhcmFuY2VfYXZhdGFyICV9I3RvYy1zaXplKSkuXG4gICAgICpcbiAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgKiAqIGBzbWFsbGBcbiAgICAgKiAqIGBtZWRpdW1gIChEZWZhdWx0KVxuICAgICAqICogYGxhcmdlYFxuICAgICAqXG4gICAgICovXG4gICAgc2V0IHNpemUoc2l6ZSkge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuYXZhdGFyLCBTSVpFX0NMQVNTRVNbdGhpcy5zaXplXSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5hdmF0YXIsIFNJWkVfQ0xBU1NFU1tzaXplXSk7XG4gICAgICAgIHRoaXMuX3NpemUgPSBzaXplO1xuICAgIH1cbiAgICBnZXQgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgdGhlbWUgY29sb3Igb2YgdGhlIGF2YXRhci5cbiAgICAgKiBUaGUgdGhlbWUgY29sb3Igd2lsbCBiZSBhcHBsaWVkIGFzIGJhY2tncm91bmQgYW5kIGJvcmRlciBjb2xvciwgd2hpbGUgYWxzbyBhbWVuZGluZyB0aGUgdGV4dCBjb2xvciBhY2NvcmRpbmdseS5cbiAgICAgKlxuICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAqICogYHByaW1hcnlgIChEZWZhdWx0KSZtZGFzaDtBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIHByaW1hcnkgdGhlbWUgY29sb3IuXG4gICAgICogKiBgc2Vjb25kYXJ5YCZtZGFzaDtBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIHNlY29uZGFyeSB0aGVtZSBjb2xvci5cbiAgICAgKiAqIGB0ZXJ0aWFyeWAmbWRhc2g7IEFwcGxpZXMgY29sb3JpbmcgYmFzZWQgb24gdGVydGlhcnkgdGhlbWUgY29sb3IuXG4gICAgICogKiBgaW5oZXJpdGAmbWRhc2g7IEFwcGxpZXMgaW5oZXJpdGVkIGNvbG9yaW5nIHZhbHVlLlxuICAgICAqICogYGluZm9gJm1kYXNoO0FwcGxpZXMgY29sb3JpbmcgYmFzZWQgb24gaW5mbyB0aGVtZSBjb2xvci5cbiAgICAgKiAqIGBzdWNjZXNzYCZtZGFzaDsgQXBwbGllcyBjb2xvcmluZyBiYXNlZCBvbiBzdWNjZXNzIHRoZW1lIGNvbG9yLlxuICAgICAqICogYHdhcm5pbmdgJm1kYXNoOyBBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIHdhcm5pbmcgdGhlbWUgY29sb3IuXG4gICAgICogKiBgZXJyb3JgJm1kYXNoOyBBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIGVycm9yIHRoZW1lIGNvbG9yLlxuICAgICAqICogYGRhcmtgJm1kYXNoOyBBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIGRhcmsgdGhlbWUgY29sb3IuXG4gICAgICogKiBgbGlnaHRgJm1kYXNoOyBBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIGxpZ2h0IHRoZW1lIGNvbG9yLlxuICAgICAqICogYGludmVyc2VgJm1kYXNoOyBBcHBsaWVzIGNvbG9yaW5nIGJhc2VkIG9uIGludmVydGVkIHRoZW1lIGNvbG9yLlxuICAgICAqXG4gICAgICovXG4gICAgc2V0IHRoZW1lQ29sb3IodGhlbWVDb2xvcikge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuYXZhdGFyLCBgay1hdmF0YXItJHt0aGlzLnRoZW1lQ29sb3J9YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5hdmF0YXIsIGBrLWF2YXRhci0ke3RoZW1lQ29sb3J9YCk7XG4gICAgICAgIHRoaXMuX3RoZW1lQ29sb3IgPSB0aGVtZUNvbG9yO1xuICAgIH1cbiAgICBnZXQgdGhlbWVDb2xvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RoZW1lQ29sb3I7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgYXZhdGFyV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndpZHRoO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGF2YXRhckhlaWdodCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVpZ2h0O1xuICAgIH1cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuc2V0QXZhdGFyQ2xhc3NlcygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IGltYWdlVXJsKCkge1xuICAgICAgICByZXR1cm4gYHVybCgke3RoaXMuaW1hZ2VTcmN9KWA7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZlcmlmeVByb3BlcnRpZXMoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGljb25DbGFzc2VzKCkge1xuICAgICAgICBpZiAodGhpcy5pY29uKSB7XG4gICAgICAgICAgICByZXR1cm4gYGstaWNvbiBrLWktJHt0aGlzLmljb259YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmljb25DbGFzc31gO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBnZXQgY3VzdG9tQXZhdGFyKCkge1xuICAgICAgICByZXR1cm4gISh0aGlzLmltYWdlU3JjIHx8IHRoaXMuaW5pdGlhbHMgfHwgdGhpcy5pY29uIHx8IHRoaXMuaWNvbkNsYXNzKTtcbiAgICB9XG4gICAgdmVyaWZ5UHJvcGVydGllcygpIHtcbiAgICAgICAgaWYgKCFpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0cyA9IFt0aGlzLmljb24gfHwgdGhpcy5pY29uQ2xhc3MsIHRoaXMuaW1hZ2VTcmMsIHRoaXMuaW5pdGlhbHNdO1xuICAgICAgICBjb25zdCBpbnB1dHNMZW5ndGggPSBpbnB1dHMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUpLmxlbmd0aDtcbiAgICAgICAgaWYgKGlucHV0c0xlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgXG4gICAgICAgICAgICAgICAgSW52YWxpZCBwcm9wZXJ0eSBjb25maWd1cmF0aW9uIGdpdmVuLlxuICAgICAgICAgICAgICAgIFRoZSBrZW5kby1hdmF0YXIgY29tcG9uZW50IGNhbiBhY2NlcHQgb25seSBvbmUgb2Y6XG4gICAgICAgICAgICAgICAgaWNvbiwgaW1hZ2VTcmMgb3IgaW5pdGlhbHMgcHJvcGVydGllcy5cbiAgICAgICAgICAgIGApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldEF2YXRhckNsYXNzZXMoKSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5hdmF0YXIsIFNIQVBFX0NMQVNTRVNbdGhpcy5zaGFwZV0pO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuYXZhdGFyLCBgay1hdmF0YXItJHt0aGlzLnRoZW1lQ29sb3J9YCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5hdmF0YXIsIFNJWkVfQ0xBU1NFU1t0aGlzLnNpemVdKTtcbiAgICB9XG59XG5BdmF0YXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWF2YXRhcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgKm5nSWY9XCJjdXN0b21BdmF0YXJcIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImltYWdlU3JjXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiay1hdmF0YXItaW1hZ2VcIiBbbmdTdHlsZV09XCJjc3NTdHlsZVwiIFtzdHlsZS5iYWNrZ3JvdW5kSW1hZ2VdPVwiaW1hZ2VVcmxcIj48L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImluaXRpYWxzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstYXZhdGFyLXRleHRcIiBbbmdTdHlsZV09XCJjc3NTdHlsZVwiPnt7IGluaXRpYWxzLnN1YnN0cmluZygwLCAyKSB9fTwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImljb24gfHwgaWNvbkNsYXNzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstYXZhdGFyLWljb25cIiBbbmdTdHlsZV09XCJjc3NTdHlsZVwiIFtuZ0NsYXNzXT1cImljb25DbGFzc2VzKClcIj48L3NwYW4+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuQXZhdGFyQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5BdmF0YXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWF2YXRhcicsXSB9XSxcbiAgICBzb2xpZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWF2YXRhci1zb2xpZCcsXSB9XSxcbiAgICBvdXRsaW5lQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYXZhdGFyLW91dGxpbmUnLF0gfV0sXG4gICAgYm9yZGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstYXZhdGFyLWJvcmRlcmVkJyxdIH1dLFxuICAgIGZsZXhCYXNpczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuZmxleEJhc2lzJyxdIH1dLFxuICAgIHNoYXBlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzaXplOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0aGVtZUNvbG9yOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBmaWxsOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBib3JkZXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGljb25DbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgd2lkdGg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF2YXRhcldpZHRoOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS53aWR0aCcsXSB9XSxcbiAgICBoZWlnaHQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGF2YXRhckhlaWdodDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuaGVpZ2h0JyxdIH1dLFxuICAgIGNzc1N0eWxlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbml0aWFsczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW1hZ2VTcmM6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtLZW5kbyBVSSBDYXJkIGNvbXBvbmVudCBmb3IgQW5ndWxhcl0oeyUgc2x1ZyBvdmVydmlld19jYXJkICV9KVxuICovXG5jbGFzcyBDYXJkQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3Rvcihsb2NhbGl6YXRpb25TZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubG9jYWxpemF0aW9uU2VydmljZSA9IGxvY2FsaXphdGlvblNlcnZpY2U7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbGF5b3V0IG9mIHRoZSBDYXJkIGNvbnRlbnQuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAqIChEZWZhdWx0KSBgdmVydGljYWxgXG4gICAgICAgICAqICogYGhvcml6b250YWxgXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIERlZmluZXMgdGhlIHdpZHRoIG9mIHRoZSBDYXJkLlxuICAgICAgICAgKiBEZWZhdWx0cyB0byBgMjg1cHhgLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy53aWR0aCA9ICcyODVweCc7XG4gICAgICAgIHRoaXMucnRsID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZHluYW1pY1JUTFN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYWxpemF0aW9uU2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoeyBydGwgfSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ydGwgPSBydGw7XG4gICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IHRoaXMucnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCB3aWR0aFN0eWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53aWR0aDtcbiAgICB9XG4gICAgZ2V0IHZlcnRpY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICB9XG4gICAgZ2V0IGhvcml6b250YWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5keW5hbWljUlRMU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmR5bmFtaWNSVExTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbkNhcmRDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNhcmQnLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25TZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBMMTBOX1BSRUZJWCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiAna2VuZG8uY2FyZC5jb21wb25lbnQnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkNhcmRDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH1cbl07XG5DYXJkQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay13aWRnZXQnLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQnLF0gfV0sXG4gICAgd2lkdGhTdHlsZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUud2lkdGgnLF0gfV0sXG4gICAgdmVydGljYWw6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC12ZXJ0aWNhbCcsXSB9XSxcbiAgICBob3Jpem9udGFsOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtaG9yaXpvbnRhbCcsXSB9XSxcbiAgICBkaXJlY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuZGlyJyxdIH1dLFxuICAgIG9yaWVudGF0aW9uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB3aWR0aDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb250ZW50IGluIHRoZSBDYXJkIGhlYWRlci5cbiAqL1xuY2xhc3MgQ2FyZEhlYWRlckNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICB9XG59XG5DYXJkSGVhZGVyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYXJkLWhlYWRlcicsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNhcmRIZWFkZXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtaGVhZGVyJyxdIH1dXG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgY29udGVudCBpbiB0aGUgQ2FyZCBib2R5LlxuICovXG5jbGFzcyBDYXJkQm9keUNvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaG9zdENsYXNzID0gdHJ1ZTtcbiAgICB9XG59XG5DYXJkQm9keUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tY2FyZC1ib2R5JyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuQ2FyZEJvZHlDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtYm9keScsXSB9XVxufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIGNvbnRlbnQgaW4gdGhlIENhcmQgZm9vdGVyLlxuICovXG5jbGFzcyBDYXJkRm9vdGVyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cbkNhcmRGb290ZXJDb21wb25lbnQuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IENvbXBvbmVudCwgYXJnczogW3tcbiAgICAgICAgICAgICAgICBzZWxlY3RvcjogJ2tlbmRvLWNhcmQtZm9vdGVyJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuQ2FyZEZvb3RlckNvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC1mb290ZXInLF0gfV1cbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBhY3Rpb24gYnV0dG9ucyBvZiB0aGUgQ2FyZC5cbiAqICogKFtzZWUgZXhhbXBsZV0oeyUgc2x1ZyBhY3Rpb25zX2NhcmQgJX0pKS5cbiAqL1xuY2xhc3MgQ2FyZEFjdGlvbnNDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTcGVjaWZpZXMgdGhlIGxheW91dCBvZiB0aGUgQ2FyZCBhY3Rpb24gYnV0dG9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYGhvcml6b250YWxgXG4gICAgICAgICAqICogYHZlcnRpY2FsYFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFNwZWNpZmllcyB0aGUgbGF5b3V0IG9mIHRoZSBDYXJkIGFjdGlvbiBidXR0b25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGUgcG9zc2libGUgdmFsdWVzIGFyZTpcbiAgICAgICAgICogKiAoRGVmYXVsdCkgYHN0YXJ0YFxuICAgICAgICAgKiAqIGBjZW50ZXJgXG4gICAgICAgICAqICogYGVuZGBcbiAgICAgICAgICogKiBgc3RyZXRjaGVkYFxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXlvdXQgPSAnc3RhcnQnO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgYW4gYWN0aW9uIGJ1dHRvbi5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIH1cbiAgICBnZXQgc3RyZXRjaGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxheW91dCA9PT0gJ3N0cmV0Y2hlZCc7XG4gICAgfVxuICAgIGdldCBzdGFydENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQgPT09ICdzdGFydCc7XG4gICAgfVxuICAgIGdldCBlbmRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGF5b3V0ID09PSAnZW5kJztcbiAgICB9XG4gICAgZ2V0IGNlbnRlckNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYXlvdXQgPT09ICdjZW50ZXInO1xuICAgIH1cbiAgICBnZXQgdmVydGljYWxDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCc7XG4gICAgfVxuICAgIGdldCBob3Jpem9udGFsQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbkNsaWNrKGFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGlvbi5lbWl0KGFjdGlvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBhY3Rpb25UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9ucyBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cbn1cbkNhcmRBY3Rpb25zQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1jYXJkLWFjdGlvbnMnLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250ZW50ICpuZ0lmPVwiIWFjdGlvbnNcIj48L25nLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhY3Rpb25UZW1wbGF0ZSgpXCI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1idXR0b25cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLXByaW1hcnldPVwiYWN0aW9uLnByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5rLWZsYXRdPVwiYWN0aW9uLmZsYXRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKGFjdGlvbilcIlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgYWN0aW9uLnRleHQgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiYWN0aW9uc1wiICpuZ0lmPVwiYWN0aW9uVGVtcGxhdGUoKVwiPjwvbmctdGVtcGxhdGU+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuQ2FyZEFjdGlvbnNDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtYWN0aW9ucycsXSB9XSxcbiAgICBzdHJldGNoZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jYXJkLWFjdGlvbnMtc3RyZXRjaGVkJyxdIH1dLFxuICAgIHN0YXJ0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC1hY3Rpb25zLXN0YXJ0JyxdIH1dLFxuICAgIGVuZENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtYWN0aW9ucy1lbmQnLF0gfV0sXG4gICAgY2VudGVyQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC1hY3Rpb25zLWNlbnRlcicsXSB9XSxcbiAgICB2ZXJ0aWNhbENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtYWN0aW9ucy12ZXJ0aWNhbCcsXSB9XSxcbiAgICBob3Jpem9udGFsQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC1hY3Rpb25zLWhvcml6b250YWwnLF0gfV0sXG4gICAgb3JpZW50YXRpb246IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGxheW91dDogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgYWN0aW9uOiBbeyB0eXBlOiBPdXRwdXQgfV1cbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIGEgc2VwYXJhdG9yIGluIHRoZSBjb250ZW50IG9mIHRoZSBDYXJkLlxuICovXG5jbGFzcyBDYXJkU2VwYXJhdG9yRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3BlY2lmaWVzIHRoZSBvcmllbnRhdGlvbiBvZiB0aGUgQ2FyZCBzZXBhcmF0b3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOlxuICAgICAgICAgKiAoRGVmYXVsdCkgYGhvcml6b250YWxgXG4gICAgICAgICAqIGB2ZXJ0aWNhbGBcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG4gICAgfVxuICAgIGdldCB2ZXJ0aWNhbENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJztcbiAgICB9XG4gICAgZ2V0IGhvcml6b250YWxDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgICB9XG59XG5DYXJkU2VwYXJhdG9yRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYXJkU2VwYXJhdG9yXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNhcmRTZXBhcmF0b3JEaXJlY3RpdmUucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaG9zdENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLWNhcmQtc2VwYXJhdG9yJyxdIH1dLFxuICAgIHZlcnRpY2FsQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc2VwYXJhdG9yLXZlcnRpY2FsJyxdIH1dLFxuICAgIGhvcml6b250YWxDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zZXBhcmF0b3ItaG9yaXpvbnRhbCcsXSB9XSxcbiAgICBjb2xvcjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuY29sb3InLF0gfSwgeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcmllbnRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSB0ZXh0IGFuZCBzdHlsZXMgZm9yIHRoZSB0aXRsZSBvZiB0aGUgQ2FyZC5cbiAqL1xuY2xhc3MgQ2FyZFRpdGxlRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cbkNhcmRUaXRsZURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FyZFRpdGxlXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNhcmRUaXRsZURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC10aXRsZScsXSB9XVxufTtcblxuLyoqXG4gKiBTcGVjaWZpZXMgdGhlIHRleHQgYW5kIHN0eWxlcyBmb3IgdGhlIHN1YnRpdGxlIG9mIHRoZSBDYXJkLlxuICovXG5jbGFzcyBDYXJkU3VidGl0bGVEaXJlY3RpdmUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRydWU7XG4gICAgfVxufVxuQ2FyZFN1YnRpdGxlRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdba2VuZG9DYXJkU3VidGl0bGVdJ1xuICAgICAgICAgICAgfSxdIH0sXG5dO1xuQ2FyZFN1YnRpdGxlRGlyZWN0aXZlLnByb3BEZWNvcmF0b3JzID0ge1xuICAgIGhvc3RDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1jYXJkLXN1YnRpdGxlJyxdIH1dXG59O1xuXG4vKipcbiAqIFNwZWNpZmllcyBhbnkgbWVkaWEgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBhbmQgYWxpZ25lZCBpbiB0aGUgQ2FyZC5cbiAqL1xuY2xhc3MgQ2FyZE1lZGlhRGlyZWN0aXZlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0cnVlO1xuICAgIH1cbn1cbkNhcmRNZWRpYURpcmVjdGl2ZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogRGlyZWN0aXZlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvQ2FyZE1lZGlhXSdcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbkNhcmRNZWRpYURpcmVjdGl2ZS5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBob3N0Q2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstY2FyZC1tZWRpYScsXSB9XVxufTtcblxuLyoqXG4gKiBUaGUgc2V0dGluZ3Mgb2YgdGhlIENhcmQgYWN0aW9uIGJ1dHRvbnMuXG4gKi9cbmNsYXNzIENhcmRBY3Rpb24ge1xufVxuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMgPSBbXG4gICAgQXZhdGFyQ29tcG9uZW50XG5dO1xuY29uc3QgZGVjbGFyYXRpb25zID0gW1xuICAgIC4uLmV4cG9ydGVkTW9kdWxlc1xuXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIEF2YXRhciBjb21wb25lbnQuXG4gKi9cbmNsYXNzIEF2YXRhck1vZHVsZSB7XG59XG5BdmF0YXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9uc10sXG4gICAgICAgICAgICAgICAgZXhwb3J0czogW2V4cG9ydGVkTW9kdWxlc10sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY29uc3QgY2FyZERpcmVjdGl2ZXMgPSBbXG4gICAgQ2FyZFRpdGxlRGlyZWN0aXZlLFxuICAgIENhcmRTdWJ0aXRsZURpcmVjdGl2ZSxcbiAgICBDYXJkU2VwYXJhdG9yRGlyZWN0aXZlLFxuICAgIENhcmRNZWRpYURpcmVjdGl2ZVxuXTtcbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQxID0gW1xuICAgIENhcmRDb21wb25lbnQsXG4gICAgQ2FyZEhlYWRlckNvbXBvbmVudCxcbiAgICBDYXJkQm9keUNvbXBvbmVudCxcbiAgICBDYXJkRm9vdGVyQ29tcG9uZW50LFxuICAgIENhcmRBY3Rpb25zQ29tcG9uZW50LFxuICAgIC4uLmNhcmREaXJlY3RpdmVzXG5dO1xuY29uc3QgZGVjbGFyYXRpb25zJDEgPSBbLi4uZXhwb3J0ZWRNb2R1bGVzJDFdO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgQ2FyZCBjb21wb25lbnQuXG4gKi9cbmNsYXNzIENhcmRNb2R1bGUge1xufVxuQ2FyZE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zJDFdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkMV0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IERSQVdFUl9MSU5LX1NFTEVDVE9SID0gJy5rLWRyYXdlci1saW5rJztcbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBBQ1RJVkVfTkVTVEVEX0xJTktfU0VMRUNUT1IgPSAnOmZvY3VzOm5vdCguay1zdGF0ZS1kaXNhYmxlZCkgLmstZHJhd2VyLWxpbmsnO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNvbnN0IG5lc3RlZExpbmsgPSAoZWxlbWVudCwgc2VsZWN0b3IpID0+IGVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBEcmF3ZXJJdGVtQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihkcmF3ZXIsIGVsZW1lbnQsIHJlbmRlcmVyKSB7XG4gICAgICAgIHRoaXMuZHJhd2VyID0gZHJhd2VyO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgfVxuICAgIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmRpc2FibGVkO1xuICAgIH1cbiAgICBnZXQgc2VsZWN0ZWRDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJhd2VyLnNlbGVjdGVkSW5kaWNlcy5pbmRleE9mKHRoaXMuaW5kZXgpID49IDA7XG4gICAgfVxuICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS50ZXh0ID8gdGhpcy5pdGVtLnRleHQgOiBudWxsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBsaW5rID0gbmVzdGVkTGluayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgRFJBV0VSX0xJTktfU0VMRUNUT1IpO1xuICAgICAgICBpZiAobGluaykge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUobGluaywgJ3RhYmluZGV4Jyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGljb25DbGFzc2VzKGljb24pIHtcbiAgICAgICAgcmV0dXJuIGBrLWljb24gJHtpY29ufWA7XG4gICAgfVxufVxuRHJhd2VySXRlbUNvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJhd2VySXRlbV0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIml0ZW1UZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJpY29uQ2xhc3NlcyhpdGVtLmljb24pXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pdGVtLXRleHRcIj57eyBpdGVtLnRleHQgfX08L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtaW5pICYmICFleHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT1cImljb25DbGFzc2VzKGl0ZW0uaWNvbilcIj48L3NwYW4+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkRyYXdlckl0ZW1Db21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEcmF3ZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH0sXG4gICAgeyB0eXBlOiBSZW5kZXJlcjIgfVxuXTtcbkRyYXdlckl0ZW1Db21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgaXRlbTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaW5kZXg6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGl0ZW1UZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbWluaTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXhwYW5kZWQ6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjc3NDbGFzczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3NzU3R5bGU6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGRpc2FibGVkQ2xhc3M6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2F0dHIuYXJpYS1kaXNhYmxlZCcsXSB9LCB7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZGlzYWJsZWQnLF0gfV0sXG4gICAgc2VsZWN0ZWRDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLXNlbGVjdGVkJyxdIH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGF0ZS1zZWxlY3RlZCcsXSB9XSxcbiAgICBsYWJlbDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLWxhYmVsJyxdIH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY29uc3QgRFJBV0VSX0lURU1fSU5ERVggPSAnZGF0YS1rZW5kby1kcmF3ZXItaW5kZXgnO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgRHJhd2VyTGlzdENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3IoZHJhd2VyU2VydmljZSwgcmVuZGVyZXIsIG5nWm9uZSwgY2hhbmdlRGV0ZWN0b3IsIGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5kcmF3ZXJTZXJ2aWNlID0gZHJhd2VyU2VydmljZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJlbmRlcmVyO1xuICAgICAgICB0aGlzLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvciA9IGNoYW5nZURldGVjdG9yO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXRpYWxTZWxlY3Rpb24oKTtcbiAgICAgICAgdGhpcy5pbml0RG9tRXZlbnRzKCk7XG4gICAgfVxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaW5pdGlhbFNlbGVjdGlvbigpIHtcbiAgICAgICAgLyogRGlmZmVyZW50aWF0ZXMgYSB1c2VyIHNlbGVjdGVkIGl0ZW0gKi9cbiAgICAgICAgaWYgKHRoaXMuZHJhd2VyU2VydmljZS5zZWxlY3RlZEluZGljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdlclNlcnZpY2UuaW5pdFNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGluaXREb21FdmVudHMoKSB7XG4gICAgICAgIGlmICghdGhpcy5lbGVtZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLnJlbmRlcmVyLmxpc3RlbihuYXRpdmVFbGVtZW50LCAnY2xpY2snLCB0aGlzLmNsaWNrSGFuZGxlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKHRoaXMucmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgdGhpcy5rZXlEb3duSGFuZGxlci5iaW5kKHRoaXMpKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGlja0hhbmRsZXIoZSkge1xuICAgICAgICBjb25zdCBpdGVtSWR4ID0gdGhpcy5nZXREcmF3ZXJJdGVtSW5kZXgoZS50YXJnZXQpO1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5pdGVtc1tpdGVtSWR4XTtcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgaW5kZXg6IGl0ZW1JZHgsXG4gICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgb3JpZ2luYWxFdmVudDogZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRyYXdlclNlcnZpY2UuZW1pdCgnc2VsZWN0JywgYXJncykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYXdlclNlcnZpY2Uub25TZWxlY3QoaXRlbUlkeCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrZXlEb3duSGFuZGxlcihlKSB7XG4gICAgICAgIGNvbnN0IGlzRW50ZXJPclNwYWNlID0gZS5rZXlDb2RlID09PSBLZXlzLkVudGVyIHx8IGUua2V5Q29kZSA9PT0gS2V5cy5TcGFjZTtcbiAgICAgICAgaWYgKCFpc0VudGVyT3JTcGFjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xpY2tIYW5kbGVyKGUpO1xuICAgICAgICBjb25zdCBsaW5rID0gbmVzdGVkTGluayh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwgQUNUSVZFX05FU1RFRF9MSU5LX1NFTEVDVE9SKTtcbiAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgIGxpbmsuY2xpY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldERyYXdlckl0ZW1JbmRleCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IGNsb3Nlc3RJdGVtKHRhcmdldCwgRFJBV0VSX0lURU1fSU5ERVgsIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtSW5kZXgoaXRlbSwgRFJBV0VSX0lURU1fSU5ERVgpO1xuICAgICAgICB9XG4gICAgfVxufVxuRHJhd2VyTGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvRHJhd2VyTGlzdF0nLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaXRlbXM7IGxldCBpZHggPSBpbmRleFwiPlxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiIWl0ZW0uc2VwYXJhdG9yXCIga2VuZG9EcmF3ZXJJdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJrLWRyYXdlci1pdGVtXCJcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbaW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICAgICAgICBbbWluaV09XCJtaW5pXCJcbiAgICAgICAgICAgICAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgIFtpdGVtVGVtcGxhdGVdPVwiaXRlbVRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci4ke0RSQVdFUl9JVEVNX0lOREVYfV09XCJpZHhcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIml0ZW0uY3NzU3R5bGVcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiPlxuICAgICAgICAgICAgPC9saT5cblxuICAgICAgICAgICAgPGxpICpuZ0lmPVwiaXRlbS5zZXBhcmF0b3JcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiay1kcmF3ZXItaXRlbSBrLWRyYXdlci1zZXBhcmF0b3JcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIml0ZW0uY3NzQ2xhc3NcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIml0ZW0uY3NzU3R5bGVcIj5cbiAgICAgICAgICAgICAgICAmbmJzcDtcbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuRHJhd2VyTGlzdENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IERyYXdlclNlcnZpY2UgfSxcbiAgICB7IHR5cGU6IFJlbmRlcmVyMiB9LFxuICAgIHsgdHlwZTogTmdab25lIH0sXG4gICAgeyB0eXBlOiBDaGFuZ2VEZXRlY3RvclJlZiB9LFxuICAgIHsgdHlwZTogRWxlbWVudFJlZiB9XG5dO1xuRHJhd2VyTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBpdGVtczogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgaXRlbVRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBtaW5pOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBleHBhbmRlZDogW3sgdHlwZTogSW5wdXQgfV1cbn07XG5cbmNvbnN0IHRlbXBsYXRlRGlyZWN0aXZlcyA9IFtcbiAgICBEcmF3ZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEcmF3ZXJIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEcmF3ZXJGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEcmF3ZXJJdGVtVGVtcGxhdGVEaXJlY3RpdmVcbl07XG5jb25zdCBleHBvcnRlZE1vZHVsZXMkMiA9IFtcbiAgICBEcmF3ZXJDb21wb25lbnQsXG4gICAgRHJhd2VyQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIERyYXdlckNvbnRlbnRDb21wb25lbnQsXG4gICAgLi4udGVtcGxhdGVEaXJlY3RpdmVzXG5dO1xuY29uc3QgZGVjbGFyYXRpb25zJDIgPSBbXG4gICAgRHJhd2VySXRlbUNvbXBvbmVudCxcbiAgICBEcmF3ZXJMaXN0Q29tcG9uZW50LFxuICAgIC4uLmV4cG9ydGVkTW9kdWxlcyQyXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgRHJhd2VyIGNvbXBvbmVudC5cbiAqL1xuY2xhc3MgRHJhd2VyTW9kdWxlIHtcbn1cbkRyYXdlck1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zJDJdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkMl0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuY29uc3QgZXhwb3J0ZWRNb2R1bGVzJDMgPSBbXG4gICAgUGFuZWxCYXJDb21wb25lbnQsXG4gICAgUGFuZWxCYXJJdGVtQ29tcG9uZW50LFxuICAgIFBhbmVsQmFyQ29udGVudERpcmVjdGl2ZSxcbiAgICBQYW5lbEJhckl0ZW1UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBQYW5lbEJhckl0ZW1UaXRsZURpcmVjdGl2ZVxuXTtcbmNvbnN0IGRlY2xhcmF0aW9ucyQzID0gW1xuICAgIC4uLmV4cG9ydGVkTW9kdWxlcyQzXG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgUGFuZWxCYXIgY29tcG9uZW50LlxuICpcbiAqIFRoZSBtb2R1bGUgcmVnaXN0ZXJzOlxuICogLSBgUGFuZWxCYXJDb21wb25lbnRgJm1kYXNoO1RoZSBgUGFuZWxCYXJgIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYFBhbmVsQmFySXRlbUNvbXBvbmVudGAmbWRhc2g7VGhlIGBQYW5lbEJhckl0ZW1gIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYFBhbmVsQmFyQ29udGVudENvbXBvbmVudGAmbWRhc2g7VGhlIGBQYW5lbEJhckNvbnRlbnRgIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYFBhbmVsQmFySXRlbVRlbXBsYXRlRGlyZWN0aXZlJm1kYXNoO1RoZSBgUGFuZWxCYXJJdGVtVGVtcGxhdGVgIGRpcmVjdGl2ZS5cbiAqIC0gYFBhbmVsQmFySXRlbVRpdGxlRGlyZWN0aXZlJm1kYXNoO1RoZSBgUGFuZWxCYXJJdGVtVGl0bGVgIGRpcmVjdGl2ZS5cbiAqL1xuY2xhc3MgUGFuZWxCYXJNb2R1bGUge1xufVxuUGFuZWxCYXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9ucyQzXSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzJDNdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbmNvbnN0IHN0b3BQcm9wYWdhdGlvbiA9ICh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xufTtcbmNvbnN0IHByZXZlbnRPbkRibENsaWNrID0gcmVsZWFzZSA9PiBtb3VzZURvd24gPT4gb2YobW91c2VEb3duKS5waXBlKGRlbGF5KDE1MCksIHRha2VVbnRpbChyZWxlYXNlKSk7XG5jb25zdCBjbGFzc0Zyb21PYmplY3QgPSBjbGFzc2VzID0+IE9iamVjdC5rZXlzKGNsYXNzZXMpLmZpbHRlcihjID0+IGNsYXNzZXNbY10pLmpvaW4oJyAnKTtcbmNvbnN0IGNyZWF0ZU1vdmVTdHJlYW0gPSAoZHJhZ2dhYmxlKSA9PiBtb3VzZURvd24gPT4gZHJhZ2dhYmxlLmtlbmRvRHJhZ1xuICAgIC5waXBlKHRha2VVbnRpbChkcmFnZ2FibGUua2VuZG9SZWxlYXNlKSwgbWFwKCh7IHBhZ2VYLCBwYWdlWSB9KSA9PiAoe1xuICAgIG9yaWdpbmFsWDogbW91c2VEb3duLnBhZ2VYLFxuICAgIG9yaWdpbmFsWTogbW91c2VEb3duLnBhZ2VZLFxuICAgIHBhZ2VYLFxuICAgIHBhZ2VZXG59KSkpO1xuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFNwbGl0dGVyQmFyQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihkcmFnZ2FibGUsIHNwbGl0dGVyLCBsb2NhbGl6YXRpb24pIHtcbiAgICAgICAgdGhpcy5kcmFnZ2FibGUgPSBkcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuc3BsaXR0ZXIgPSBzcGxpdHRlcjtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMub3JpZW50YXRpb24gPSAnaG9yaXpvbnRhbCc7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmFyaWFSb2xlID0gJ3NlcGFyYXRvcic7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIGdldCBkaXJlY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsaXphdGlvbi5ydGwgPyAncnRsJyA6ICdsdHInO1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNwbGl0dGVyLmlzU3RhdGljKHRoaXMuaW5kZXgpID8gLTEgOiAwO1xuICAgIH1cbiAgICBnZXQgaG9zdENsYXNzZXMoKSB7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgY29uc3QgaXNEcmFnZ2FibGUgPSB0aGlzLnNwbGl0dGVyLmlzRHJhZ2dhYmxlKHRoaXMuaW5kZXgpO1xuICAgICAgICBjb25zdCBpc1N0YXRpYyA9IHRoaXMuc3BsaXR0ZXIuaXNTdGF0aWModGhpcy5pbmRleCk7XG4gICAgICAgIHJldHVybiBjbGFzc0Zyb21PYmplY3Qoe1xuICAgICAgICAgICAgJ2stc3RhdGUtZm9jdXNlZCc6IHRoaXMuZm9jdXNlZCxcbiAgICAgICAgICAgICdrLXNwbGl0YmFyJzogdHJ1ZSxcbiAgICAgICAgICAgICdrLXNwbGl0YmFyLWhvcml6b250YWwnOiBpc0hvcml6b250YWwsXG4gICAgICAgICAgICAnay1zcGxpdGJhci12ZXJ0aWNhbCc6ICFpc0hvcml6b250YWwsXG4gICAgICAgICAgICAnay1zcGxpdGJhci1kcmFnZ2FibGUtaG9yaXpvbnRhbCc6IGlzSG9yaXpvbnRhbCAmJiBpc0RyYWdnYWJsZSxcbiAgICAgICAgICAgICdrLXNwbGl0YmFyLWRyYWdnYWJsZS12ZXJ0aWNhbCc6ICFpc0hvcml6b250YWwgJiYgaXNEcmFnZ2FibGUsXG4gICAgICAgICAgICAnay1zcGxpdGJhci1zdGF0aWMtaG9yaXpvbnRhbCc6IGlzSG9yaXpvbnRhbCAmJiBpc1N0YXRpYyxcbiAgICAgICAgICAgICdrLXNwbGl0YmFyLXN0YXRpYy12ZXJ0aWNhbCc6ICFpc0hvcml6b250YWwgJiYgaXNTdGF0aWNcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCB0b3VjaEFjdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc3BsaXR0ZXIuaXNEcmFnZ2FibGUodGhpcy5pbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbm9uZSc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG9yZGVyKCkge1xuICAgICAgICByZXR1cm4gMiAqIHRoaXMuaW5kZXggKyAxO1xuICAgIH1cbiAgICBjb2xsYXBzZUFueSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZXhwYW5kTGFzdCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVOZXh0KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyeVRvZ2dsZU5lYXJlc3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkZvY3VzSW4oKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IHRydWU7XG4gICAgfVxuICAgIG9uRm9jdXNPdXQoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50ICYmIGV2ZW50LmtleUNvZGU7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgY29uc3QgcmVzaXplID0gZGVsdGEgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlJCQxID0gdGhpcy5zcGxpdHRlci5kcmFnU3RhdGUodGhpcy5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnNwbGl0dGVyLnNldFNpemUoc3RhdGUkJDEsIGRlbHRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IEtleXMuRW50ZXIpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLmNvbGxhcHNlQW55KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNIb3Jpem9udGFsICYmIGtleUNvZGUgPT09IEtleXMuQXJyb3dMZWZ0KSB7XG4gICAgICAgICAgICByZXNpemUoLTEwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0hvcml6b250YWwgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1JpZ2h0KSB7XG4gICAgICAgICAgICByZXNpemUoMTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYga2V5Q29kZSA9PT0gS2V5cy5BcnJvd1VwKSB7XG4gICAgICAgICAgICByZXNpemUoLTEwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIGtleUNvZGUgPT09IEtleXMuQXJyb3dEb3duKSB7XG4gICAgICAgICAgICByZXNpemUoMTApO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBleHBhbmRMYXN0KCkge1xuICAgICAgICBjb25zdCBwYW5lcyA9IHRoaXMuc3BsaXR0ZXIucGFuZXM7XG4gICAgICAgIHJldHVybiBwYW5lcy5sZW5ndGggPT09IDIgJiYgcGFuZXNbMV0uY29sbGFwc2VkO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgbGV0IHN0YXRlJCQxO1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9IHRoaXMuZHJhZ2dhYmxlLmtlbmRvUHJlc3MucGlwZSh0YXAoc3RvcFByb3BhZ2F0aW9uKSwgZmlsdGVyKCgpID0+IHRoaXMuc3BsaXR0ZXIuaXNEcmFnZ2FibGUodGhpcy5pbmRleCkpLCB0YXAoKCkgPT4gc3RhdGUkJDEgPSB0aGlzLnNwbGl0dGVyLmRyYWdTdGF0ZSh0aGlzLmluZGV4KSksIHRhcCgoKSA9PiB0aGlzLnNwbGl0dGVyLnRvZ2dsZUNvbnRlbnRPdmVybGF5KHRoaXMuaW5kZXgsIHRydWUpKSwgc3dpdGNoTWFwKHByZXZlbnRPbkRibENsaWNrKHRoaXMuZHJhZ2dhYmxlLmtlbmRvUmVsZWFzZSkpLCBzd2l0Y2hNYXAoY3JlYXRlTW92ZVN0cmVhbSh0aGlzLmRyYWdnYWJsZSkpKS5zdWJzY3JpYmUoKHsgcGFnZVgsIHBhZ2VZLCBvcmlnaW5hbFgsIG9yaWdpbmFsWSB9KSA9PiB7XG4gICAgICAgICAgICBsZXQgZGVsdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5vcmllbnRhdGlvbiA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgICAgICAgIGRlbHRhID0gcGFnZVkgLSBvcmlnaW5hbFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgICAgICBkZWx0YSA9IG9yaWdpbmFsWCAtIHBhZ2VYO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVsdGEgPSBwYWdlWCAtIG9yaWdpbmFsWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3BsaXR0ZXIuc2V0U2l6ZShzdGF0ZSQkMSwgZGVsdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChsaXN0ZW5lcik7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5kcmFnZ2FibGUua2VuZG9SZWxlYXNlLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNwbGl0dGVyLnRvZ2dsZUNvbnRlbnRPdmVybGF5KHRoaXMuaW5kZXgsIGZhbHNlKSkpO1xuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9nZ2xlUHJldmlvdXMoKSB7XG4gICAgICAgIHRoaXMuc3BsaXR0ZXIudHJ5VG9nZ2xlKHRoaXMuaW5kZXgpO1xuICAgIH1cbiAgICB0b2dnbGVOZXh0KCkge1xuICAgICAgICB0aGlzLnNwbGl0dGVyLnRyeVRvZ2dsZSh0aGlzLmluZGV4ICsgMSk7XG4gICAgfVxuICAgIHByZXZpb3VzQXJyb3dDbGFzcygpIHtcbiAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuc3BsaXR0ZXIucGFuZSh0aGlzLmluZGV4KTtcbiAgICAgICAgY29uc3QgbmV4dFBhbmUgPSB0aGlzLnNwbGl0dGVyLnBhbmUodGhpcy5pbmRleCArIDEpO1xuICAgICAgICBjb25zdCBpc0NvbGxhcHNpYmxlID0gcGFuZS5jb2xsYXBzaWJsZTtcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBwYW5lLmNvbGxhcHNlZDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICByZXR1cm4gY2xhc3NGcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICdrLWljb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2staGlkZGVuJzogIWlzQ29sbGFwc2libGUgfHwgbmV4dFBhbmUuaXNIaWRkZW4sXG4gICAgICAgICAgICAnay1jb2xsYXBzZS1wcmV2JzogaXNDb2xsYXBzaWJsZSxcbiAgICAgICAgICAgICdrLWktYXJyb3ctNjAtbGVmdCc6IGlzQ29sbGFwc2libGUgJiYgaXNIb3Jpem9udGFsICYmICFpc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICdrLWktYXJyb3ctNjAtcmlnaHQnOiBpc0NvbGxhcHNpYmxlICYmIGlzSG9yaXpvbnRhbCAmJiBpc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICdrLWktYXJyb3ctNjAtdXAnOiBpc0NvbGxhcHNpYmxlICYmICFpc0hvcml6b250YWwgJiYgIWlzQ29sbGFwc2VkLFxuICAgICAgICAgICAgJ2staS1hcnJvdy02MC1kb3duJzogaXNDb2xsYXBzaWJsZSAmJiAhaXNIb3Jpem9udGFsICYmIGlzQ29sbGFwc2VkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBuZXh0QXJyb3dDbGFzcygpIHtcbiAgICAgICAgY29uc3QgcGFuZSA9IHRoaXMuc3BsaXR0ZXIucGFuZSh0aGlzLmluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IHByZXZQYW5lID0gdGhpcy5zcGxpdHRlci5wYW5lKHRoaXMuaW5kZXgpO1xuICAgICAgICBjb25zdCBpc0NvbGxhcHNpYmxlID0gcGFuZS5jb2xsYXBzaWJsZTtcbiAgICAgICAgY29uc3QgaXNDb2xsYXBzZWQgPSBwYW5lLmNvbGxhcHNlZDtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICByZXR1cm4gY2xhc3NGcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICdrLWljb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2staGlkZGVuJzogIWlzQ29sbGFwc2libGUgfHwgcHJldlBhbmUuaXNIaWRkZW4sXG4gICAgICAgICAgICAnay1jb2xsYXBzZS1uZXh0JzogaXNDb2xsYXBzaWJsZSxcbiAgICAgICAgICAgICdrLWktYXJyb3ctNjAtcmlnaHQnOiBpc0NvbGxhcHNpYmxlICYmIGlzSG9yaXpvbnRhbCAmJiAhaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICAnay1pLWFycm93LTYwLWxlZnQnOiBpc0NvbGxhcHNpYmxlICYmIGlzSG9yaXpvbnRhbCAmJiBpc0NvbGxhcHNlZCxcbiAgICAgICAgICAgICdrLWktYXJyb3ctNjAtZG93bic6IGlzQ29sbGFwc2libGUgJiYgIWlzSG9yaXpvbnRhbCAmJiAhaXNDb2xsYXBzZWQsXG4gICAgICAgICAgICAnay1pLWFycm93LTYwLXVwJzogaXNDb2xsYXBzaWJsZSAmJiAhaXNIb3Jpem9udGFsICYmIGlzQ29sbGFwc2VkXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB0cnlUb2dnbGVOZWFyZXN0KCkge1xuICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5pbmRleDtcbiAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMuaW5kZXggKyAxO1xuICAgICAgICBpZiAoIXRoaXMuc3BsaXR0ZXIudHJ5VG9nZ2xlKHByZXYpKSB7XG4gICAgICAgICAgICB0aGlzLnNwbGl0dGVyLnRyeVRvZ2dsZShuZXh0KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblNwbGl0dGVyQmFyQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgc2VsZWN0b3I6ICdrZW5kby1zcGxpdHRlci1iYXInLFxuICAgICAgICAgICAgICAgIHRlbXBsYXRlOiBgXG4gICAgICA8ZGl2IFtjbGFzc109XCJwcmV2aW91c0Fycm93Q2xhc3MoKVwiIChjbGljayk9XCJ0b2dnbGVQcmV2aW91cygpXCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiay1yZXNpemUtaGFuZGxlXCI+PC9kaXY+XG4gICAgICA8ZGl2IFtjbGFzc109XCJuZXh0QXJyb3dDbGFzcygpXCIgKGNsaWNrKT1cInRvZ2dsZU5leHQoKVwiPjwvZGl2PlxuICAgIGBcbiAgICAgICAgICAgIH0sXSB9LFxuXTtcbi8qKiBAbm9jb2xsYXBzZSAqL1xuU3BsaXR0ZXJCYXJDb21wb25lbnQuY3RvclBhcmFtZXRlcnMgPSAoKSA9PiBbXG4gICAgeyB0eXBlOiBEcmFnZ2FibGVEaXJlY3RpdmUsIGRlY29yYXRvcnM6IFt7IHR5cGU6IEhvc3QgfV0gfSxcbiAgICB7IHR5cGU6IFNwbGl0dGVyU2VydmljZSB9LFxuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuU3BsaXR0ZXJCYXJDb21wb25lbnQucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3JpZW50YXRpb246IFt7IHR5cGU6IElucHV0IH0sIHsgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5hcmlhLW9yaWVudGF0aW9uJyxdIH1dLFxuICAgIGluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBhcmlhUm9sZTogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci5yb2xlJyxdIH1dLFxuICAgIGZvY3VzZWQ6IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ2NsYXNzLmstc3RhdGUtZm9jdXNlZCcsXSB9XSxcbiAgICB0YWJJbmRleDogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnYXR0ci50YWJpbmRleCcsXSB9XSxcbiAgICBob3N0Q2xhc3NlczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3MnLF0gfV0sXG4gICAgdG91Y2hBY3Rpb246IFt7IHR5cGU6IEhvc3RCaW5kaW5nLCBhcmdzOiBbJ3N0eWxlLnRvdWNoLWFjdGlvbicsXSB9XSxcbiAgICBvcmRlcjogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnc3R5bGUuLW1zLWZsZXgtb3JkZXInLF0gfSwgeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydzdHlsZS5vcmRlcicsXSB9XSxcbiAgICBjb2xsYXBzZUFueTogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2RibGNsaWNrJyxdIH1dLFxuICAgIG9uRm9jdXNJbjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2ZvY3VzaW4nLF0gfV0sXG4gICAgb25Gb2N1c091dDogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2ZvY3Vzb3V0JyxdIH1dLFxuICAgIG9uS2V5RG93bjogW3sgdHlwZTogSG9zdExpc3RlbmVyLCBhcmdzOiBbJ2tleWRvd24nLCBbJyRldmVudCddLF0gfV1cbn07XG5cbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQ0ID0gW1xuICAgIFNwbGl0dGVyQ29tcG9uZW50LFxuICAgIFNwbGl0dGVyUGFuZUNvbXBvbmVudFxuXTtcbmNvbnN0IGRlY2xhcmF0aW9ucyQ0ID0gW1xuICAgIFNwbGl0dGVyQmFyQ29tcG9uZW50LFxuICAgIC4uLmV4cG9ydGVkTW9kdWxlcyQ0XG5dO1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgU3BsaXR0ZXIgY29tcG9uZW50LlxuICpcbiAqIFRoZSBtb2R1bGUgcmVnaXN0ZXJzOlxuICogLSBgU3BsaXR0ZXJDb21wb25lbnRgJm1kYXNoO1RoZSBgU3BsaXR0ZXJgIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYFNwbGl0dGVyUGFuZUNvbXBvbmVudGAmbWRhc2g7VGhlIGBTcGxpdHRlclBhbmVgIGNvbXBvbmVudCBjbGFzcy5cbiAqL1xuY2xhc3MgU3BsaXR0ZXJNb2R1bGUge1xufVxuU3BsaXR0ZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9ucyQ0XSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzJDRdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBEcmFnZ2FibGVNb2R1bGVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jbGFzcyBTdGVwcGVyU3RlcENvbXBvbmVudCB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSwgbG9jYWxpemF0aW9uLCBuZ1pvbmUpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gc2VydmljZTtcbiAgICAgICAgdGhpcy5sb2NhbGl6YXRpb24gPSBsb2NhbGl6YXRpb247XG4gICAgICAgIHRoaXMubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLmlzU3RlcFZhbGlkID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnNob3VsZENoZWNrVmFsaWRpdHkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc3VicyA9IHRoaXMuc2VydmljZS5mb2N1c2VkU3RlcENoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkZvY3VzZWRTdGVwQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnMuYWRkKHRoaXMuc2VydmljZS50cmlnZ2VyVmFsaWRhdGlvbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVWYWxpZGl0eUNoZWNrcygpO1xuICAgICAgICB9KSk7XG4gICAgfVxuICAgIGdldCBlcnJvclN0ZXBDbGFzcygpIHtcbiAgICAgICAgaWYgKGlzUHJlc2VudCh0aGlzLmlzU3RlcFZhbGlkKSkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzU3RlcFZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHN1Y2Nlc3NTdGVwQ2xhc3MoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5pc1N0ZXBWYWxpZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzU3RlcFZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlVmFsaWRpdHlDaGVja3MoKTtcbiAgICB9XG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5jdXJyZW50ICYmICFjaGFuZ2VzLmN1cnJlbnQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVmFsaWRpdHlDaGVja3MoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vicykge1xuICAgICAgICAgICAgdGhpcy5zdWJzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25Gb2N1c2VkU3RlcENoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXggPT09IHRoaXMuc2VydmljZS5mb2N1c2VkU3RlcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcExpbmsubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmZvY3VzKHRoaXMuaW5kZXgpO1xuICAgIH1cbiAgICBnZXQgdGFiSW5kZXhBdHRyKCkge1xuICAgICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLnNlcnZpY2UuZm9jdXNlZFN0ZXAgfHwgdGhpcy5zZXJ2aWNlLmN1cnJlbnRTdGVwO1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRleCA9PT0gYWN0aXZlID8gMCA6IC0xO1xuICAgIH1cbiAgICBnZXQgaW5kaWNhdG9ySWNvbkNsYXNzZXMoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0ZXAuaWNvbikge1xuICAgICAgICAgICAgcmV0dXJuIGBrLWljb24gay1pLSR7dGhpcy5zdGVwLmljb259YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGVwLmljb25DbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGAke3RoaXMuc3RlcC5pY29uQ2xhc3N9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zaG91bGRDaGVja1ZhbGlkaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uSWNvbkNsYXNzZXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHNob3dJbmRpY2F0b3JJY29uKCkge1xuICAgICAgICBpZiAodGhpcy5zaG91bGRDaGVja1ZhbGlkaXR5KSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zdGVwLmljb24gfHwgdGhpcy5zdGVwLmljb25DbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBnZXQgc2hvd0xhYmVsSWNvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkQ2hlY2tWYWxpZGl0eSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xhYmVsJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc3RlcC5pY29uIHx8IHRoaXMuc3RlcC5pY29uQ2xhc3MpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGdldCBzaG93TGFiZWxUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnbGFiZWwnIHx8IHRoaXMudHlwZSA9PT0gJ2Z1bGwnO1xuICAgIH1cbiAgICBnZXQgdmFsaWRhdGlvbkljb25DbGFzc2VzKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0ZXBWYWxpZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VjY2Vzc0ljb24gPyBgJHt0aGlzLnN1Y2Nlc3NJY29ufWAgOiAnay1pY29uIGstaS1jaGVjayc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvckljb24gPyBgJHt0aGlzLmVycm9ySWNvbn1gIDogJ2staWNvbiBrLWktd2FybmluZyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGluZGljYXRvclRleHQoKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnN0ZXAudGV4dDtcbiAgICAgICAgcmV0dXJuIHRleHQgPyB0ZXh0IDogdGhpcy5pbmRleCArIDE7XG4gICAgfVxuICAgIHVwZGF0ZVN0ZXBWYWxpZGl0eSgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0ZXAuaXNWYWxpZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdGVwLmlzVmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0ZXAuaXNWYWxpZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RlcC5pc1ZhbGlkKHRoaXMuaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGdldCBzaG93SW5kaWNhdG9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW5kaWNhdG9yJyB8fCB0aGlzLnR5cGUgPT09ICdmdWxsJztcbiAgICB9XG4gICAgZ2V0IHNob3dMYWJlbCgpIHtcbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ2xhYmVsJyB8fCB0aGlzLnR5cGUgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcC5vcHRpb25hbDtcbiAgICB9XG4gICAgZ2V0IG9wdGlvbmFsVGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxpemF0aW9uLmdldCgnb3B0aW9uYWwnKTtcbiAgICB9XG4gICAgZ2V0IHRyYW5zaXRpb25EdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5vd25lci5hbmltYXRpb25EdXJhdGlvbjtcbiAgICB9XG4gICAgX3Nob3VsZENoZWNrVmFsaWRpdHkoKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQodGhpcy5zdGVwLnZhbGlkYXRlKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnN0ZXAudmFsaWRhdGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXAudmFsaWRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc3RlcC52YWxpZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0ZXAudmFsaWRhdGUodGhpcy5pbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzUHJlc2VudCh0aGlzLnN0ZXAuaXNWYWxpZCkgJiYgdGhpcy5pbmRleCA8IHRoaXMuY3VycmVudDtcbiAgICB9XG4gICAgaGFuZGxlVmFsaWRpdHlDaGVja3MoKSB7XG4gICAgICAgIHRoaXMuaXNTdGVwVmFsaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2hvdWxkQ2hlY2tWYWxpZGl0eSA9IHRoaXMuX3Nob3VsZENoZWNrVmFsaWRpdHkoKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkQ2hlY2tWYWxpZGl0eSkge1xuICAgICAgICAgICAgdGhpcy5pc1N0ZXBWYWxpZCA9IHRoaXMudXBkYXRlU3RlcFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5TdGVwcGVyU3RlcENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvU3RlcHBlclN0ZXBdJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8YSBocmVmPScjJyBjbGFzcz0nay1zdGVwLWxpbmsnICNzdGVwTGlua1xuICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPSd0YWJJbmRleEF0dHInXG4gICAgICAgICAgICBbYXR0ci50aXRsZV09J3N0ZXAubGFiZWwnXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT0nc3RlcC5kaXNhYmxlZCdcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09J2luZGV4ID09PSBjdXJyZW50ID8gXCJzdGVwXCIgOiBudWxsJ1xuICAgICAgICAgICAgKGZvY3VzKT0nb25Gb2N1cygpJ1xuICAgICAgICA+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J3N0ZXBUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09J3N0ZXBUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPSd7ICRpbXBsaWNpdDogc3RlcCwgaW5kZXg6IGluZGV4IH0nPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nIXN0ZXBUZW1wbGF0ZSc+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9J3Nob3dJbmRpY2F0b3InXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSdrLXN0ZXAtaW5kaWNhdG9yJ1xuICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj0ndHJ1ZSdcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zaXRpb24tZHVyYXRpb24ubXNdPSd0cmFuc2l0aW9uRHVyYXRpb24nXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9J2luZGljYXRvclRlbXBsYXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPSdpbmRpY2F0b3JUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09J3sgJGltcGxpY2l0OiBzdGVwLCBpbmRleDogaW5kZXggfSc+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nIWluZGljYXRvclRlbXBsYXRlJz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPSdzaG93SW5kaWNhdG9ySWNvbicgY2xhc3M9J2stc3RlcC1pbmRpY2F0b3ItaWNvbicgW25nQ2xhc3NdPSdpbmRpY2F0b3JJY29uQ2xhc3Nlcyc+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2stc3RlcC1pbmRpY2F0b3ItdGV4dCcgKm5nSWY9JyFzaG93SW5kaWNhdG9ySWNvbic+e3sgaW5kaWNhdG9yVGV4dCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2stc3RlcC1sYWJlbCcgKm5nSWY9J3Nob3dMYWJlbCc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj0nbGFiZWxUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT0nbGFiZWxUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09J3sgJGltcGxpY2l0OiBzdGVwLCBpbmRleDogaW5kZXggfSc+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj0nIWxhYmVsVGVtcGxhdGUnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9J2stc3RlcC10ZXh0JyAqbmdJZj0nc2hvd0xhYmVsVGV4dCc+e3sgc3RlcC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtuZ0NsYXNzXT0ndmFsaWRhdGlvbkljb25DbGFzc2VzJyAqbmdJZj0nc2hvd0xhYmVsSWNvbicgYXJpYS1oaWRkZW49J3RydWUnPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSdrLXN0ZXAtbGFiZWwtb3B0aW9uYWwnICpuZ0lmPSdzdGVwLm9wdGlvbmFsJz4oe3tvcHRpb25hbFRleHR9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2E+XG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5TdGVwcGVyU3RlcENvbXBvbmVudC5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IFN0ZXBwZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBMb2NhbGl6YXRpb25TZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfVxuXTtcblN0ZXBwZXJTdGVwQ29tcG9uZW50LnByb3BEZWNvcmF0b3JzID0ge1xuICAgIHN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIGluZGV4OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBjdXJyZW50OiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICB0eXBlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdWNjZXNzSWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXJyb3JJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmRpY2F0b3JUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbGFiZWxUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdGVwTGluazogW3sgdHlwZTogVmlld0NoaWxkLCBhcmdzOiBbJ3N0ZXBMaW5rJywgeyBzdGF0aWM6IHRydWUgfSxdIH1dLFxuICAgIGVycm9yU3RlcENsYXNzOiBbeyB0eXBlOiBIb3N0QmluZGluZywgYXJnczogWydjbGFzcy5rLXN0ZXAtZXJyb3InLF0gfV0sXG4gICAgc3VjY2Vzc1N0ZXBDbGFzczogW3sgdHlwZTogSG9zdEJpbmRpbmcsIGFyZ3M6IFsnY2xhc3Muay1zdGVwLXN1Y2Nlc3MnLF0gfV1cbn07XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5jb25zdCBTVEVQUEVSX1NURVBfSU5ERVggPSAnZGF0YS1rZW5kby1zdGVwcGVyLWluZGV4JztcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIFN0ZXBwZXJMaXN0Q29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlciwgbmdab25lLCBzZXJ2aWNlLCBlbGVtZW50KSB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByZW5kZXJlcjtcbiAgICAgICAgdGhpcy5uZ1pvbmUgPSBuZ1pvbmU7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHNlcnZpY2U7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXREb21FdmVudHMoKTtcbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbVN1YnMpIHtcbiAgICAgICAgICAgIHRoaXMuZG9tU3VicygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBtYXhTdGVwV2lkdGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1heFN0ZXBEaW1lbnNpb24oJ3dpZHRoJyk7XG4gICAgfVxuICAgIGdldCBtYXhTdGVwSGVpZ2h0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhTdGVwRGltZW5zaW9uKCdoZWlnaHQnKTtcbiAgICB9XG4gICAgbWF4U3RlcERpbWVuc2lvbihkaW1lbnNpb24pIHtcbiAgICAgICAgaWYgKGRpbWVuc2lvbiA9PT0gJ3dpZHRoJyAmJiB0aGlzLm9yaWVudGF0aW9uID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGltZW5zaW9uID09PSAnaGVpZ2h0JyAmJiB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAxMDAgLyB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgICB9XG4gICAgaW5pdERvbUV2ZW50cygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBjbGlja1N1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsICdjbGljaycsIHRoaXMuY2xpY2tIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgY29uc3Qga2V5ZG93blN1YnNjcmlwdGlvbiA9IHRoaXMucmVuZGVyZXIubGlzdGVuKG5hdGl2ZUVsZW1lbnQsICdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ2xhc3MoZS50YXJnZXQsICdrLXN0ZXAtbGluaycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VydmljZS5rZXlkb3duKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kb21TdWJzID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNsaWNrU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgICAgICAgICAga2V5ZG93blN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsaWNrSGFuZGxlcihlKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3Qgc3RlcElkeCA9IHRoaXMuZ2V0U3RlcEluZGV4KGUudGFyZ2V0KTtcbiAgICAgICAgY29uc3Qgc3RlcCA9IHRoaXMuc3RlcHNbc3RlcElkeF07XG4gICAgICAgIGlmICghc3RlcCB8fCBzdGVwLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXBJZHggPT09IHRoaXMuY3VycmVudFN0ZXApIHtcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5mb2N1cyhzdGVwSWR4KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5saW5lYXIgJiYgdGhpcy5zZXJ2aWNlLmlzUHJldk9yTmV4dFN0ZXAoc3RlcElkeCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXJ2aWNlLm9uQWN0aXZhdGUoc3RlcElkeCwgZSk7XG4gICAgfVxuICAgIGdldFN0ZXBJbmRleCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGNsb3Nlc3RJdGVtKHRhcmdldCwgU1RFUFBFUl9TVEVQX0lOREVYLCB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbUluZGV4KHN0ZXAsIFNURVBQRVJfU1RFUF9JTkRFWCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5TdGVwcGVyTGlzdENvbXBvbmVudC5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogQ29tcG9uZW50LCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAnW2tlbmRvU3RlcHBlckxpc3RdJyxcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj0nbGV0IHN0ZXAgb2Ygc3RlcHM7IGxldCBpZHggPSBpbmRleCc+XG4gICAgICAgICAgICA8bGkga2VuZG9TdGVwcGVyU3RlcFxuICAgICAgICAgICAgICAgIFthdHRyLiR7U1RFUFBFUl9TVEVQX0lOREVYfV09J2lkeCdcbiAgICAgICAgICAgICAgICBbdHlwZV09J3N0ZXBUeXBlJ1xuICAgICAgICAgICAgICAgIFtzdGVwXT0nc3RlcCdcbiAgICAgICAgICAgICAgICBbaW5kZXhdPSdpZHgnXG4gICAgICAgICAgICAgICAgW2N1cnJlbnRdPSdjdXJyZW50U3RlcCdcbiAgICAgICAgICAgICAgICBbc3VjY2Vzc0ljb25dPSdzdWNjZXNzSWNvbidcbiAgICAgICAgICAgICAgICBbZXJyb3JJY29uXT0nZXJyb3JJY29uJ1xuICAgICAgICAgICAgICAgIFtpbmRpY2F0b3JUZW1wbGF0ZV09J2luZGljYXRvclRlbXBsYXRlJ1xuICAgICAgICAgICAgICAgIFtsYWJlbFRlbXBsYXRlXT0nbGFiZWxUZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICBbc3RlcFRlbXBsYXRlXT0nc3RlcFRlbXBsYXRlJ1xuICAgICAgICAgICAgICAgIGNsYXNzPSdrLXN0ZXAnXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RlcC1maXJzdF09J2lkeCA9PT0gMCdcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGVwLWxhc3RdPSdpZHggPT09IHN0ZXBzLmxlbmd0aCAtIDEnXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RlcC1kb25lXT0naWR4IDwgY3VycmVudFN0ZXAnXG4gICAgICAgICAgICAgICAgW2NsYXNzLmstc3RlcC1jdXJyZW50XT0naWR4ID09PSBjdXJyZW50U3RlcCdcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGVwLW9wdGlvbmFsXT0nc3RlcC5vcHRpb25hbCdcbiAgICAgICAgICAgICAgICBbY2xhc3Muay1zdGVwLWRpc2FibGVkXT0nc3RlcC5kaXNhYmxlZCdcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109J3N0ZXAuY3NzQ2xhc3MnXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPSdzdGVwLmNzc1N0eWxlJ1xuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGguJV0gPSAnbWF4U3RlcFdpZHRoJ1xuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtaGVpZ2h0LiVdID0gJ21heFN0ZXBIZWlnaHQnXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cblN0ZXBwZXJMaXN0Q29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogUmVuZGVyZXIyIH0sXG4gICAgeyB0eXBlOiBOZ1pvbmUgfSxcbiAgICB7IHR5cGU6IFN0ZXBwZXJTZXJ2aWNlIH0sXG4gICAgeyB0eXBlOiBFbGVtZW50UmVmIH1cbl07XG5TdGVwcGVyTGlzdENvbXBvbmVudC5wcm9wRGVjb3JhdG9ycyA9IHtcbiAgICBsaW5lYXI6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXBUeXBlOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBvcmllbnRhdGlvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgY3VycmVudFN0ZXA6IFt7IHR5cGU6IElucHV0IH1dLFxuICAgIHN0ZXBzOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBzdWNjZXNzSWNvbjogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgZXJyb3JJY29uOiBbeyB0eXBlOiBJbnB1dCB9XSxcbiAgICBpbmRpY2F0b3JUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgbGFiZWxUZW1wbGF0ZTogW3sgdHlwZTogSW5wdXQgfV0sXG4gICAgc3RlcFRlbXBsYXRlOiBbeyB0eXBlOiBJbnB1dCB9XVxufTtcblxuLyoqXG4gKiBAaGlkZGVuXG4gKi9cbmNsYXNzIE1lc3NhZ2VzIGV4dGVuZHMgQ29tcG9uZW50TWVzc2FnZXMge1xufVxuTWVzc2FnZXMucHJvcERlY29yYXRvcnMgPSB7XG4gICAgb3B0aW9uYWw6IFt7IHR5cGU6IElucHV0IH1dXG59O1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuY2xhc3MgTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbn1cbkxvY2FsaXplZE1lc3NhZ2VzRGlyZWN0aXZlLmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBEaXJlY3RpdmUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTG9jYWxpemVkTWVzc2FnZXNEaXJlY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiBgXG4gICAgICBba2VuZG9TdGVwcGVyTG9jYWxpemVkTWVzc2FnZXNdXG4gICAgYFxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuLyoqIEBub2NvbGxhcHNlICovXG5Mb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZS5jdG9yUGFyYW1ldGVycyA9ICgpID0+IFtcbiAgICB7IHR5cGU6IExvY2FsaXphdGlvblNlcnZpY2UgfVxuXTtcblxuLyoqXG4gKiBDdXN0b20gY29tcG9uZW50IG1lc3NhZ2VzIG92ZXJyaWRlIGRlZmF1bHQgY29tcG9uZW50IG1lc3NhZ2VzXG4gKiAoW3NlZSBleGFtcGxlXSh7JSBzbHVnIHJ0bF9sYXlvdXQgJX0pKS5cbiAqL1xuY2xhc3MgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQgZXh0ZW5kcyBNZXNzYWdlcyB7XG4gICAgY29uc3RydWN0b3Ioc2VydmljZSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgIH1cbiAgICBnZXQgb3ZlcnJpZGUoKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmRlY29yYXRvcnMgPSBbXG4gICAgeyB0eXBlOiBDb21wb25lbnQsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IE1lc3NhZ2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHNlbGVjdG9yOiAna2VuZG8tc3RlcHBlci1tZXNzYWdlcycsXG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IGBgXG4gICAgICAgICAgICB9LF0gfSxcbl07XG4vKiogQG5vY29sbGFwc2UgKi9cbkN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LmN0b3JQYXJhbWV0ZXJzID0gKCkgPT4gW1xuICAgIHsgdHlwZTogTG9jYWxpemF0aW9uU2VydmljZSB9XG5dO1xuXG5jb25zdCB0ZW1wbGF0ZURpcmVjdGl2ZXMkMSA9IFtcbiAgICBTdGVwcGVyU3RlcFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFN0ZXBwZXJMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIFN0ZXBwZXJJbmRpY2F0b3JUZW1wbGF0ZURpcmVjdGl2ZVxuXTtcbmNvbnN0IGV4cG9ydGVkTW9kdWxlcyQ1ID0gW1xuICAgIFN0ZXBwZXJDb21wb25lbnQsXG4gICAgQ3VzdG9tTWVzc2FnZXNDb21wb25lbnQsXG4gICAgLi4udGVtcGxhdGVEaXJlY3RpdmVzJDFcbl07XG5jb25zdCBkZWNsYXJhdGlvbnMkNSA9IFtcbiAgICBTdGVwcGVyU3RlcENvbXBvbmVudCxcbiAgICBTdGVwcGVyTGlzdENvbXBvbmVudCxcbiAgICBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSxcbiAgICAuLi5leHBvcnRlZE1vZHVsZXMkNVxuXTtcbi8qKlxuICogUmVwcmVzZW50cyB0aGUgW05nTW9kdWxlXSh7eyBzaXRlLmRhdGEudXJscy5hbmd1bGFyWyduZ21vZHVsZWFwaSddIH19KVxuICogZGVmaW5pdGlvbiBmb3IgdGhlIFN0ZXBwZXIgY29tcG9uZW50LlxuICovXG5jbGFzcyBTdGVwcGVyTW9kdWxlIHtcbn1cblN0ZXBwZXJNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uczogW2RlY2xhcmF0aW9ucyQ1XSxcbiAgICAgICAgICAgICAgICBleHBvcnRzOiBbZXhwb3J0ZWRNb2R1bGVzJDVdLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFByb2dyZXNzQmFyTW9kdWxlXVxuICAgICAgICAgICAgfSxdIH0sXG5dO1xuXG5jb25zdCBleHBvcnRlZE1vZHVsZXMkNiA9IFtcbiAgICBUYWJTdHJpcENvbXBvbmVudCxcbiAgICBUYWJTdHJpcFRhYkNvbXBvbmVudCxcbiAgICBUYWJDb250ZW50RGlyZWN0aXZlLFxuICAgIFRhYlRpdGxlRGlyZWN0aXZlXG5dO1xuY29uc3QgZGVjbGFyYXRpb25zJDYgPSBbXG4gICAgLi4uZXhwb3J0ZWRNb2R1bGVzJDZcbl07XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIFtOZ01vZHVsZV0oe3sgc2l0ZS5kYXRhLnVybHMuYW5ndWxhclsnbmdtb2R1bGVhcGknXSB9fSlcbiAqIGRlZmluaXRpb24gZm9yIHRoZSBUYWJTdHJpcCBjb21wb25lbnQuXG4gKlxuICogVGhlIG1vZHVsZSByZWdpc3RlcnM6XG4gKiAtIGBUYWJTdHJpcENvbXBvbmVudGAmbWRhc2g7VGhlIGBUYWJTdHJpcGAgY29tcG9uZW50IGNsYXNzLlxuICogLSBgVGFiU3RyaXBUYWJDb21wb25lbnRgJm1kYXNoO1RoZSBgVGFiU3RyaXBUYWJgIGNvbXBvbmVudCBjbGFzcy5cbiAqIC0gYFRhYkNvbnRlbnREaXJlY3RpdmVgJm1kYXNoO1RoZSB0YWIgY29udGVudCBkaXJlY3RpdmUgdXNlZCBvbiB0aGUgYDxuZy10ZW1wbGF0ZT5gIHRhZy5cbiAqIC0gYFRhYlRpdGxlRGlyZWN0aXZlYCZtZGFzaDtUaGUgdGFiIHRpdGxlIGRpcmVjdGl2ZSB1c2VkIG9uIHRoZSBgPG5nLXRlbXBsYXRlPmAgdGFnLlxuICovXG5jbGFzcyBUYWJTdHJpcE1vZHVsZSB7XG59XG5UYWJTdHJpcE1vZHVsZS5kZWNvcmF0b3JzID0gW1xuICAgIHsgdHlwZTogTmdNb2R1bGUsIGFyZ3M6IFt7XG4gICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zOiBbZGVjbGFyYXRpb25zJDZdLFxuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtleHBvcnRlZE1vZHVsZXMkNl0sXG4gICAgICAgICAgICAgICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV1cbiAgICAgICAgICAgIH0sXSB9LFxuXTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBbTmdNb2R1bGVdKHt7IHNpdGUuZGF0YS51cmxzLmFuZ3VsYXJbJ25nbW9kdWxlYXBpJ10gfX0pXG4gKiBkZWZpbml0aW9uIGZvciB0aGUgTGF5b3V0IGNvbXBvbmVudHMuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGB0cy1uby1ydW5cbiAqIC8vIEltcG9ydCB0aGUgTGF5b3V0IG1vZHVsZVxuICogaW1wb3J0IHsgTGF5b3V0TW9kdWxlIH0gZnJvbSAnQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItbGF5b3V0JztcbiAqXG4gKiAvLyBUaGUgYnJvd3NlciBwbGF0Zm9ybSB3aXRoIGEgY29tcGlsZXJcbiAqIGltcG9ydCB7IHBsYXRmb3JtQnJvd3NlckR5bmFtaWMgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMnO1xuICpcbiAqIGltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKlxuICogLy8gSW1wb3J0IHRoZSBhcHAgY29tcG9uZW50XG4gKiBpbXBvcnQgeyBBcHBDb21wb25lbnQgfSBmcm9tICcuL2FwcC5jb21wb25lbnQnO1xuICpcbiAqIC8vIERlZmluZSB0aGUgYXBwIG1vZHVsZVxuICogX0BOZ01vZHVsZSh7XG4gKiAgICAgZGVjbGFyYXRpb25zOiBbQXBwQ29tcG9uZW50XSwgLy8gZGVjbGFyZSBhcHAgY29tcG9uZW50XG4gKiAgICAgaW1wb3J0czogICAgICBbQnJvd3Nlck1vZHVsZSwgTGF5b3V0TW9kdWxlXSwgLy8gaW1wb3J0IExheW91dCBtb2R1bGVcbiAqICAgICBib290c3RyYXA6ICAgIFtBcHBDb21wb25lbnRdXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICpcbiAqIC8vIENvbXBpbGUgYW5kIGxhdW5jaCB0aGUgbW9kdWxlXG4gKiBwbGF0Zm9ybUJyb3dzZXJEeW5hbWljKCkuYm9vdHN0cmFwTW9kdWxlKEFwcE1vZHVsZSk7XG4gKlxuICogYGBgXG4gKi9cbmNsYXNzIExheW91dE1vZHVsZSB7XG59XG5MYXlvdXRNb2R1bGUuZGVjb3JhdG9ycyA9IFtcbiAgICB7IHR5cGU6IE5nTW9kdWxlLCBhcmdzOiBbe1xuICAgICAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICAgICAgQXZhdGFyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBDYXJkTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBEcmF3ZXJNb2R1bGUsXG4gICAgICAgICAgICAgICAgICAgIFBhbmVsQmFyTW9kdWxlLFxuICAgICAgICAgICAgICAgICAgICBTcGxpdHRlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgU3RlcHBlck1vZHVsZSxcbiAgICAgICAgICAgICAgICAgICAgVGFiU3RyaXBNb2R1bGVcbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9LF0gfSxcbl07XG5cbi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0IHsgUHJldmVudGFibGVFdmVudCwgRHJhd2VyU2VydmljZSwgRHJhd2VySXRlbUNvbXBvbmVudCwgRHJhd2VyTGlzdENvbXBvbmVudCwgRFJBV0VSX0lURU1fSU5ERVgsIEN1c3RvbU1lc3NhZ2VzQ29tcG9uZW50LCBMb2NhbGl6ZWRNZXNzYWdlc0RpcmVjdGl2ZSwgTWVzc2FnZXMsIFBhbmVsQmFyU2VydmljZSwgU3BsaXR0ZXJCYXJDb21wb25lbnQsIFNwbGl0dGVyU2VydmljZSwgU3RlcHBlckxpc3RDb21wb25lbnQsIFNURVBQRVJfU1RFUF9JTkRFWCwgU3RlcHBlclN0ZXBDb21wb25lbnQsIFN0ZXBwZXJTZXJ2aWNlLCBQYW5lbEJhckNvbXBvbmVudCwgUGFuZWxCYXJJdGVtQ29tcG9uZW50LCBQYW5lbEJhckNvbnRlbnREaXJlY3RpdmUsIFBhbmVsQmFySXRlbVRlbXBsYXRlRGlyZWN0aXZlLCBQYW5lbEJhckl0ZW1UaXRsZURpcmVjdGl2ZSwgUGFuZWxCYXJFeHBhbmRNb2RlLCBTcGxpdHRlckNvbXBvbmVudCwgU3BsaXR0ZXJQYW5lQ29tcG9uZW50LCBUYWJTdHJpcENvbXBvbmVudCwgVGFiU3RyaXBUYWJDb21wb25lbnQsIFRhYkNvbnRlbnREaXJlY3RpdmUsIFRhYlRpdGxlRGlyZWN0aXZlLCBTZWxlY3RFdmVudCwgRHJhd2VyQ29tcG9uZW50LCBEcmF3ZXJDb250YWluZXJDb21wb25lbnQsIERyYXdlckNvbnRlbnRDb21wb25lbnQsIERyYXdlclNlbGVjdEV2ZW50LCBTdGVwcGVyQ29tcG9uZW50LCBTdGVwcGVyQWN0aXZhdGVFdmVudCwgQXZhdGFyQ29tcG9uZW50LCBDYXJkQ29tcG9uZW50LCBDYXJkSGVhZGVyQ29tcG9uZW50LCBDYXJkQm9keUNvbXBvbmVudCwgQ2FyZEZvb3RlckNvbXBvbmVudCwgQ2FyZEFjdGlvbnNDb21wb25lbnQsIENhcmRTZXBhcmF0b3JEaXJlY3RpdmUsIENhcmRUaXRsZURpcmVjdGl2ZSwgQ2FyZFN1YnRpdGxlRGlyZWN0aXZlLCBDYXJkTWVkaWFEaXJlY3RpdmUsIENhcmRBY3Rpb24sIEF2YXRhck1vZHVsZSwgQ2FyZE1vZHVsZSwgRHJhd2VyTW9kdWxlLCBMYXlvdXRNb2R1bGUsIFBhbmVsQmFyTW9kdWxlLCBTcGxpdHRlck1vZHVsZSwgU3RlcHBlck1vZHVsZSwgVGFiU3RyaXBNb2R1bGUsIERyYXdlclRlbXBsYXRlRGlyZWN0aXZlLCBEcmF3ZXJJdGVtVGVtcGxhdGVEaXJlY3RpdmUsIERyYXdlckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBEcmF3ZXJGb290ZXJUZW1wbGF0ZURpcmVjdGl2ZSwgU3RlcHBlckluZGljYXRvclRlbXBsYXRlRGlyZWN0aXZlLCBTdGVwcGVyTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgU3RlcHBlclN0ZXBUZW1wbGF0ZURpcmVjdGl2ZSB9O1xuIl19","
    \n Customer Health Alerts\n \n
    \n\n
    \n \n
    \n

    Customer Health Alerts are generated to prompt Ambassadors to proactively engage the client regarding Alinity and Architect product lines. Alerts are generated when an instrument falls below the instrument’s normal statistical range in the past 24 hours or meets a defined threshold indicating an issue. New alerts are highlighted in red and indicated as 'New'. Alerts are coded as Low, Medium, or High priority. Alerts will clear from the table after 3 to 7 days, depending on the alert. There are seven alerts:

    \n

    Daily System Maintenance: Triggers from 4 or more failures of daily maintenance in the past 24 hours. Available for Alinity and Architect. Priority = High; Retention = 3 days

    \n

    AbbottLink Connection: Triggers if an instrument has not pinged AbbottLink or logged a test in the past 5 days. Available for Alinity and Architect. Priority = High; Retention = 3 days

    \n

    Test Completion Rate: Triggers when the percentage of tests (specimens, calibrators, and controls) completing without error in the past 24 hours drops below the normal statistical range of that instrument over the past 60 days. Available for Alinity and Architect. Priority = High; Retention = 3 days

    \n

    Controls Out of Range: Triggers when the percentage of controls out of range in the past 24 hours exceeds the normal statistical range of that instrument compared to the previous 60 days. Control range must be configured on the instrument for this alert to function. Available for Alinity and Architect. Priority = High; Retention = 3 days

    \n

    Hard Stops: A \"hard stop\" is defined as the event of an instrument switching directly from Running (or Processing) state to the Stopped state. This indicates that an instrument issue led to an abrupt halt of testing on an instrument. The hard stop alert is available only for Alinity product lines. The Hard Stops alert triggers when the rate of hard stops in the past 24 hours exceeds the normal statistical range of that instrument compared to the previous 60 days. When data is available, the Hard Stop alert will identify the root cause of the instrument's most recent hard stop. Hard stop root cause data is only available for some Alinity i instruments and provides the high level description of root cause provided by instrument software. Priority = Medium; Retention = 3 days

    \n

    Repeat Tests: A \"repeat test\" is a specimen that produced a result two or more times for the same assay and on the same instrument, indicating that the customer chose to rerun a specimen that already generated a result. The Repeat Tests alert triggers when the percentage of repeat tests in the past 24 hours exceeds the normal statistical range of that instrument compared to the previous 60 days. Available for Alinity and Architect. Priority = Medium; Retention = 3 days

    \n

    Total Test Volume: Triggers when an instrument’s weekly test volume from the most recent complete week falls below the normal statistical range of weekly test volumes over the past 6 months. Available for Alinity and Architect. Priority = Low; Retention = 7 days

    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref].value}}
    \n {{dataItem.customerNum.value}}\n
    \n \n {{dataItem[col.ref].value}}\n \n \n {{dataItem[col.ref].value}}\n \n
    \n \n
    \n \n \n \n \n \n \n
    \n
    \n\n \n\n","import { Component, OnInit, OnDestroy, Output, EventEmitter, Renderer2 } from '@angular/core';\nimport {GridComponent} from '../../details/grid.component';\nimport {Location} from '@angular/common';\nimport {CtServiceService} from '../ct-service.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {environment} from '../../../environments/environment';\n\ninterface CustomerHealthAlertGridRow {\n uniqueCustomerKey: string;\n customerName: string;\n countryName: string;\n area: string;\n alertPriority: string;\n alertMessage: string;\n alertAge: string;\n alertDateVal: string;\n alertAction: string;\n alertStyle: string;\n}\n\n@Component({\n selector: 'app-customer-health-alerts-grid',\n templateUrl: './customer-health-alerts-grid.component.html',\n styleUrls: ['./customer-health-alerts-grid.component.scss']\n})\nexport class CustomerHealthAlertsGridComponent extends GridComponent implements OnInit, OnDestroy {\n apiUrl = 'cua/customer_health_alerts';\n apiData = null;\n state = null;\n customerId = null;\n tooltips = {\n alertHelp: false\n };\n opened = false;\n faInfoCircle = faInfoCircle;\n @Output() onUpdate = new EventEmitter();\n refreshIndexes = [];\n requestHandler;\n stateChangeHandler;\n showContextMenu = false;\n offset: any;\n selectedSn;\n selectedPl;\n gsrUrl = environment.gsrUrl;\n private documentClickSubscription: any;\n\n dataCols = [\n {ref: 'uniqueCustomerKey', description: 'CustomerKey', width: 80, hidden: true, filterable: true, export: false},\n {ref: 'alertAge', description: 'Age', width: 80, hidden: false, filterable: false, export: true},\n {ref: 'alertPriority', description: 'Priority', width: 120, hidden: false, filterable: false, export: true},\n {ref: 'customerName', description: 'Customer', width: 150, hidden: false, filterable: true, export: true},\n {ref: 'customerNum', description: 'Customer #', width: 10, hidden: true, filterable: false, export: true},\n {ref: 'alertDateVal', description: 'Date/Time (UTC)', width: 120, hidden: false, filterable: false, export: true},\n {ref: 'alertMessage', description: 'Alert', width: 200, hidden: false, filterable: true, export: true},\n {ref: 'sn', description: 'SN', width: 100, hidden: false, filterable: true, export: true},\n {ref: 'pl', description: 'PL', width: 100, hidden: true, filterable: false, export: true},\n // {ref: 'alertAction', description: 'Action', width: '150', hidden: false, filterable: true},\n ];\n dataRows = [];\n\n constructor(\n private apiService: ApiService,\n private refreshHandler: RefreshHandlerService,\n private personaService: PersonaService,\n private ctService: CtServiceService,\n private renderer: Renderer2\n ) {\n super();\n this.onCellClick = this.onCellClick.bind(this);\n this.documentClickSubscription = this.renderer.listen('document', 'click', () => {\n this.showContextMenu = false;\n });\n }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n // console.log('refresh params', requestHandler.getRelativeParams(this.apiUrl));\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest(this.apiUrl);\n },\n this.requestHandler.getRelativeParams(this.apiUrl)\n ));\n\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n // format dataRows for kendo component\n this.dataRows = [];\n this.onUpdate.emit(this.apiData.data.length);\n for (let i = 0; i < this.apiData.data.length; i++) {\n const apiDataRow: CustomerHealthAlertGridRow = this.apiData.data[i];\n const dataRow = {};\n for (const dataColConfig of this.dataCols) {\n let bgColorStyle = '';\n let textColor = 'black';\n if (dataColConfig.ref === 'alertPriority') {\n bgColorStyle = apiDataRow.alertStyle;\n }\n if (bgColorStyle === 'red') {\n bgColorStyle = '#FF6347';\n textColor = 'white';\n }\n // if (dataColConfig.ref )\n dataRow[dataColConfig.ref] = {\n value: apiDataRow[dataColConfig.ref],\n bgcolor: bgColorStyle,\n color: textColor\n };\n }\n this.dataRows.push(dataRow);\n }\n this.updateGrid();\n this.updateCustomerIdSelection();\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.updateGrid();\n\n /*this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.updateCustomerIdSelection();\n },\n ['ct_persona_type', 'ct_persona_value']\n ));*/\n }\n\n ngOnDestroy(): void {\n for (const index of this.refreshIndexes) {\n this.refreshHandler.cancelRefreshEvent(index);\n }\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n\n inArray(array, index) {\n return (index in array);\n }\n\n updateCustomerIdSelection() {\n const level1PersonaChoice = this.personaService.getLevel1Choice();\n if (level1PersonaChoice.type === 'Customer') {\n this.customerId = level1PersonaChoice.value;\n this.ctService.setCustomerId(level1PersonaChoice.value, level1PersonaChoice.label);\n }\n }\n\n selectCustomer(dataItem) {\n this.customerId = dataItem.uniqueCustomerKey.value;\n const customerName = dataItem.customerName.value;\n this.personaService.setCustomerOverride(true);\n this.personaService.setPersonaOption(PersonaTypes.Customer, this.customerId, customerName);\n this.ctService.setCustomerId(this.customerId, customerName);\n }\n\n toggleTooltip(type, changeTo = null) {\n this.opened = true;\n if (changeTo === null) {\n this.tooltips[type] = !this.tooltips[type];\n } else {\n this.tooltips[type] = changeTo;\n }\n if (this.tooltips[type]) {\n for (const type1 in this.tooltips) {\n if (type1 !== type) {\n this.tooltips[type1] = false;\n }\n }\n }\n }\n\n public close() {\n this.opened = false;\n }\n\n public onCellClick({dataItem, column, type, originalEvent}): void {\n if (type === 'click' && column.field === 'sn.value') {\n originalEvent.preventDefault();\n this.showContextMenu = true;\n this.selectedPl = dataItem.pl.value;\n this.selectedSn = dataItem.sn.value;\n this.offset = { left: originalEvent.pageX, top: originalEvent.pageY };\n } else {\n this.showContextMenu = false;\n }\n }\n}\n","w
    \n Customer Health Metrics\n
    \n\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n

    Overall health is a customer-level aggregate score\n to indicate the operational health of a customer site.\n The Overall Health Score is computed by the AlwaysOn Health algorithm and incorporates\n instrument operational and customer satisfaction metrics.\n The algorithm scores each customer SN on each instrument metric in relation to other\n customer's SNs in the same geographic area. Scores are then rolled up at the customer\n level and weighted together with NPS data (if available) to arrive at an Overall health\n score. Weightings: tNPS (50%), test volume (10%), reactive tickets (10%),\n test completion (10%), hard stops (5%), controls out of range (5%), repeat tests (5%),\n daily maintenance failures (5%). Where data for a metric is unavailable,\n weightings are uniformly redistributed between available metrics.\n Color indicates customer health as\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n If Overall Health cannot be calculated due to insufficient data,\n no score is provided and coloring is set to gray.\n

    \n \n \n \n \n \n \n \n \n \n
    \n
    \n

    Survey responses to the Likelihood to Recommend question\n (\"On a scale of 0-10, how likely are you to recommend Abbott to a\n colleague or friend?\") on the Transactional NPS (tNPS) survey for\n a customer site over the past 1 year. Scores are averaged for a customer site\n if data from more than one interview is available. Color indicates a customer\n is a\n promoter (green),\n passive (yellow), or\n detractor (red)

    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n

    Number of customer IA instruments. For Alinity, this is the number of IA serial numbers\n that are test-of-record.

    \n
    \n
    \n

    Number of customer CC instruments. For Alinity, this is the number of CC serial numbers\n that are test-of-record.

    \n
    \n
    \n

    The average weekly test volume for all customer IA instruments. Color coding indicates\n how a customer’s level of IA test volume was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., an IA test volume value color coded as good for one customer\n may be only satisfactory for another).

    \n
    \n
    \n

    The average weekly test volume for all customer CC instruments. Color coding indicates how\n a customer’s level of CC test volume was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., a CC test volume value color coded as good for one customer\n may be only satisfactory for another).

    \n
    \n
    \n

    Average weekly percentage of completed tests for all of a customer’s instruments\n (aggregates both IA and CC product lines). Color coding indicates how a customer’s level\n of test completion was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable to\n other customers (e.g., a test completion value color coded as good for one customer may be\n only satisfactory for another).

    \n
    \n
    \n

    Average weekly number of hard stops across all of a customer's Alinity instruments\n (aggregates both IA and CC product lines). Color coding indicates how the number\n of hard stops at a customer site was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (orange),\n needs improvement (yellow), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., a hard stop value color coded as good for one customer may be only\n satisfactory for another). The Hard Stop metric is available only for Alinity.

    \n
    \n
    \n

    Average weekly percentage of controls that fall outside of customer-defined boundaries\n (includes both IA and CC product lines). Color coding indicates how a customer’s level\n of test completion was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of instruments,\n color code scoring is unique to each customer site and is not comparable to other customers\n (e.g., a controls out of range value color coded as good for one customer may be only\n satisfactory for another).

    \n
    \n
    \n

    Average weekly percentage of repeat tests across all of a customer's instruments\n (includes both IA and CC product lines). Repeat tests are specimens that produced\n a result two or more times for the same assay, on the same instrument, indicating\n that the customer chose to rerun a specimen that already generated a result.\n Color coding indicates how a customer’s level of test completion was scored by the\n AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations\n of instruments, color code scoring is unique to each customer site and is not\n comparable to other customers (e.g., a controls out of range value color coded as\n good for one customer may be only satisfactory for another).

    \n
    \n
    \n

    Number of currently open tickets for a given customer (excluding TSBs).

    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{column.title}}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref].value}}\n \n \n {{dataItem[col.ref].value}}
    \n {{dataItem.acctEntityName.value}}\n
    \n \n {{dataItem[col.ref].value|percent}}\n \n \n {{dataItem[col.ref].value|percent:'1.1-1'}}\n \n \n {{dataItem[col.ref].value|percent:'1.2-2'}}\n \n \n {{dataItem[col.ref].value|number:'1.2-2'}}\n \n \n {{dataItem[col.ref].value|number:'1.2-2'}}\n \n \n {{dataItem[col.ref].value}}\n \n
    \n
    \n \n
    \n \n \n \n \n \n \n
    \n
    ","import { Component, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\nimport {GridComponent} from '../../details/grid.component';\nimport {Location} from '@angular/common';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {PersonaService} from '../../api/persona.service';\nimport {CtServiceService} from '../ct-service.service';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\ninterface CustomerHealthGridRow {\n // styles are string of color or null\n countryCode: string;\n customerNum: string;\n customerName: string;\n uniqueCustomerKey: string;\n countryName: string;\n area: string;\n overAllHealthScore: number;\n overAllHealthScoreStyle: string;\n tnpsRawScore: number;\n tnpsRawScoreStyle: string;\n snCountIA: number;\n snCountCC: number;\n testVolumeIA: number;\n testVolumeIAScoreStyle: string;\n testVolumeCC: number;\n testVolumeCCScoreStyle: string;\n testCompletionPercent: number;\n testCompletionPercentScoreStyle: string;\n hardStopCount: number;\n hardStopCountScoreStyle: string;\n hardStopScaled: number;\n qcFailPercent: number;\n qcFailPercentScoreStyle: string;\n retestPercent: number;\n retestPercentScoreStyle: string;\n openTicketCount: number;\n}\n\n@Component({\n selector: 'app-customer-health-grid',\n templateUrl: './customer-health-grid.component.html',\n styleUrls: ['./customer-health-grid.component.scss']\n})\nexport class CustomerHealthGridComponent extends GridComponent implements OnInit, OnDestroy {\n rowFormatting = [];\n filterOnChildProperty = 'value';\n apiData = null;\n state = null;\n colorLegend = null;\n npsLegend = null;\n dataCols = [];\n columnSets = {\n type: 'all',\n ia_cc: 'all',\n alinity_architect: 'all'\n };\n faInfoCircle = faInfoCircle;\n tooltips = {\n overAllHealthScore: false,\n tnpsRawScore: false,\n snCountIA: false,\n snCountCC: false,\n testVolumeIA: false,\n testVolumeCC: false,\n testCompletionPercent: false,\n hardStopCount: false,\n qcFailPercent: false,\n retestPercent: false,\n openTicketCount: false\n };\n helpWindowTitle = '';\n opened = false;\n helpActions = [{ text: 'Previous' }, { text: 'Next', primary: true }];\n actionsLayout = \"normal\";\n customerId = null;\n // {ref: 'test', description: 'Customer Name', width: '230'},\n // {ref: 'test1', description: 'Overall Health', width: '120'},\n // {ref: 'test2', description: 'tNPS Raw', width: '120'},\n // {ref: 'test3', description: 'TOR IA', width: '120'},\n // {ref: 'test4', description: 'TOR CC', width: '120'},\n // {ref: 'test5', description: 'Total Test Volume IA', width: '150'},\n // {ref: 'test6', description: 'Total Test Volume CC', width: '150'},\n // {ref: 'test7', description: 'Test Completion', width: '120'},\n // {ref: 'test8', description: 'Hard Stops', width: '120'},\n // {ref: 'test9', description: 'Controls Out of Range', width: '150'},\n // {ref: 'test9', description: 'Repeat Test', width: '120'},\n // {ref: 'test9', description: 'Open Tickets', width: '120'}\n // ];\n dataRows = [];\n apiUrl = 'cua/customer_health_metrics';\n showOnlySingleCustomer = false;\n @Output() onUpdate = new EventEmitter();\n refreshIndexes = [];\n customerScopeChangeEventIndex;\n customerChangeEventIndex;\n requestHandler;\n stateChangeHandler;\n\n constructor(\n private apiService: ApiService,\n private refreshHandler: RefreshHandlerService,\n private personaService: PersonaService,\n private ctService: CtServiceService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n // console.log('refresh params', requestHandler.getRelativeParams(this.apiUrl));\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest(this.apiUrl);\n },\n this.requestHandler.getRelativeParams(this.apiUrl)\n ));\n // console.log('relparams', requestHandler.getRelativeParams(this.apiUrl));\n\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n this.colorLegend = {\n title: {label: '', bgcolor: '', color: 'black', format: 'num1'},\n items: []\n };\n for (let i = 0; i < this.apiData.legends['Overall Scores'].length; i++) {\n const apiLegendItem = this.apiData.legends['Overall Scores'][i];\n let textcolor = 'black';\n if (apiLegendItem.color === 'red') {\n textcolor = 'white';\n }\n const legendItem = {\n label: Math.floor(apiLegendItem.minVal * 100) + '-' + Math.floor(apiLegendItem.maxVal * 100) + '%',\n count: 0,\n pct: apiLegendItem.maxVal * 100,\n bgcolor: apiLegendItem.color,\n color: textcolor\n };\n this.colorLegend.items.push(legendItem);\n if (this.colorLegend.title.label === '') {\n this.colorLegend.title.label = apiLegendItem.legendTitle;\n }\n }\n this.npsLegend = {\n title: {label: '', bgcolor: '', color: 'black', format: 'num1'},\n items: []\n };\n for (let i = 0; i < this.apiData.legends['tNPS Scores'].length; i++) {\n const apiLegendItem = this.apiData.legends['tNPS Scores'][i];\n const legendItem = {\n label: Math.floor(apiLegendItem.minVal) + '-' + Math.floor(apiLegendItem.maxVal),\n count: 0,\n pct: apiLegendItem.maxVal,\n bgcolor: apiLegendItem.color,\n color: 'black'\n };\n this.npsLegend.items.push(legendItem);\n if (this.npsLegend.title.label === '') {\n this.npsLegend.title.label = apiLegendItem.legendTitle;\n }\n }\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n this.dataCols = [];\n this.dataCols.push({ref: 'uniqueCustomerKey', description: '', width: 100, hidden: true, filterable: false});\n this.dataCols.push({ref: 'acctEntityName', description: 'Account', width: 100, hidden: true, filterable: false, export: true});\n this.dataCols.push({ref: 'customerName', description: 'Customer Name', width: 300, hidden: false, filterable: true, export: true});\n this.dataCols.push({ref: 'customerNum', description: 'Customer Number', width: 100, hidden: false, filterable: true, export: true});\n this.dataCols.push({ref: 'countryName', description: 'Location', width: 80, hidden: false, filterable: true, export: true});\n this.dataCols.push({ref: 'overAllHealthScore', description: 'Alinity or ARCHITECT Overall Health', width: 80, hidden: false, filterable: false, export: false});\n this.dataCols.push({ref: 'overAllHealthScoreExcelPercent', description: 'Alinity or ARCHITECT Overall Health', width: 80, hidden: true, filterable: false, export: true});\n this.dataCols.push({ref: 'tnpsRawScore', description: 'tNPS Rating', width: 80, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'snCountIA', description: '# S/N\\'s IA', width: 80, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'snCountCC', description: '# S/N\\'s CC', width: 80, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'testVolumeIA', description: 'Average Test Volume IA', width: 100, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'testVolumeCC', description: 'Average Test Volume CC', width: 100, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'testCompletionPercent', description: 'Test Completion Rate', width: 100, hidden: false, filterable: false, export: false});\n this.dataCols.push({ref: 'testCompletionPercentExcelPercent', description: 'Test Completion Rate', width: 100, hidden: true, filterable: false, export: true});\n this.dataCols.push({ref: 'hardStopScaled', description: 'HS/10000', width: 100, hidden: false, filterable: false, export: true});\n this.dataCols.push({ref: 'qcFailPercent', description: 'Controls Out of Range %', width: 100, hidden: false, filterable: false, export: false});\n this.dataCols.push({ref: 'qcFailPercentExcelPercent', description: 'Controls Out of Range %', width: 100, hidden: true, filterable: false, export: true});\n this.dataCols.push({ref: 'retestPercent', description: 'Repeat Test %', width: 80, hidden: false, filterable: false, export: false});\n this.dataCols.push({ref: 'retestPercentExcelPercent', description: 'Repeat Test %', width: 80, hidden: true, filterable: false, export: true});\n this.dataCols.push({ref: 'openTicketCount', description: 'Open Tickets', width: 80, hidden: false, filterable: false, export: true});\n\n // for (const colKey in this.apiData.data.heading_section) {\n // if (this.apiData.data.heading_section.hasOwnProperty(colKey)) {\n // const col = this.apiData.data.heading_section[colKey];\n //\n // // col.format\n // // col.hidden_field\n // // col.purpose\n // // col.visible_by_default\n // }\n // }\n // format dataRows for kendo component\n this.dataRows = [];\n this.onUpdate.emit(this.apiData.data.length);\n for (let i = 0; i < this.apiData.data.length; i++) {\n const apiDataRow: CustomerHealthGridRow = this.apiData.data[i];\n const dataRow = {};\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n let style = '';\n let textcolor = 'black';\n if (dataColConfig.ref + 'Style' in apiDataRow) {\n style = apiDataRow[dataColConfig.ref + 'Style'];\n if (style === 'red') {\n textcolor = 'white';\n }\n }\n if (dataColConfig.ref + 'ScoreStyle' in apiDataRow) {\n style = apiDataRow[dataColConfig.ref + 'ScoreStyle'];\n if (style === 'red') {\n textcolor = 'white';\n }\n }\n if (style === 'red') {\n style = '#FF6347';\n }\n if (style === '#0ee30e') {\n style = '#52B84D';\n }\n let value;\n if (dataColConfig.ref.includes('ExcelPercent')) {\n value = apiDataRow[dataColConfig.ref.replace('ExcelPercent', '')]*100;\n } else {\n value = apiDataRow[dataColConfig.ref];\n }\n dataRow[dataColConfig.ref] = {\n value: value,\n bgcolor: style,\n color: textcolor\n };\n }\n this.dataRows.push(dataRow);\n }\n // this.dataRows = this.apiData.data.data_section;\n // for (const colKey in this.apiData.data.data_section) {\n // if (this.apiData.data.heading_section.hasOwnProperty(colKey)) {\n // const col = this.apiData.data.heading_section[colKey];\n // this.dataCols.push({\n // ref: colKey,\n // description: col.label,\n // width: col.width\n // });\n // // col.format\n // // col.hidden_field\n // // col.purpose\n // // col.visible_by_default\n // }\n // }\n\n\n this.updateGrid();\n this.updateCustomerIdSelection();\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.updateGrid();\n/*\n this.customerScopeChangeEventIndex = this.ctService.onCustomerScopeChange(() => {\n this.updateCustomerScope();\n });\n\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.updateCustomerIdSelection();\n },\n ['ct_persona_type', 'ct_persona_value']\n ));\n\n this.customerChangeEventIndex = this.ctService.onCustomerSelectionChange(() => {\n if (this.ctService.getCustomerId() === 'all') {\n this.updateCustomerScope();\n }\n });*/\n }\n\n ngOnDestroy(): void {\n for (const index of this.refreshIndexes) {\n this.refreshHandler.cancelRefreshEvent(index);\n }\n // this.ctService.clearCustomerScopeChangeEvent(this.customerScopeChangeEventIndex);\n // this.ctService.clearCustomerSelectionChangeEvent(this.customerChangeEventIndex);\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n\n updateCustomerIdSelection() {\n const level1PersonaChoice = this.personaService.getLevel1Choice();\n if (level1PersonaChoice.type === 'Customer') {\n this.customerId = level1PersonaChoice.value;\n // this.updateCustomerScope();\n this.ctService.setCustomerId(level1PersonaChoice.value, level1PersonaChoice.label);\n }\n }\n\n updateCustomerScope() {\n this.showOnlySingleCustomer = this.ctService.getCustomerScope();\n this.customerId = this.personaService.getPersonaOption(PersonaTypes.Customer);\n if (this.showOnlySingleCustomer && this.customerId && this.customerId !== 'all') {\n this.filterChange({ logic: 'and', filters: [\n {\n logic: 'and',\n filters: [\n { field: 'oneview_customerid_int.value', operator: 'eq', value: this.customerId }\n ]\n }\n ]});\n this.updateGrid();\n } else {\n this.filterChange({ logic: 'and', filters: [] });\n this.updateGrid();\n }\n }\n\n selectCustomer(dataItem) {\n this.customerId = dataItem.uniqueCustomerKey.value;\n const customerName = dataItem.customerName.value;\n this.personaService.setCustomerOverride(true);\n this.personaService.setPersonaOption(PersonaTypes.Customer, this.customerId, customerName);\n // this.updateCustomerScope();\n this.ctService.setCustomerId(this.customerId, customerName);\n }\n\n // hot buttons\n // https://www.telerik.com/kendo-angular-ui/components/grid/api/ColumnBase/\n\n setColumns(type) {\n if (type === 'all') {\n this.columnSets.type = 'all';\n } else if (type === 'tcr') {// Test Completion Rate\n this.columnSets.type = 'tcr';\n } else if (type === 'nps') {\n this.columnSets.type = 'nps';\n // overall_nps_survey_score\n // field_service_nps_survey_score\n } else if (type === 'alcm') {\n this.columnSets.type = 'alcm';\n // alcm_daily_score\n } else if (type === 'tor') {\n this.columnSets.type = 'tor';\n // count_alinity_ia_tor\n // count_alinity_cc_tor\n } else if (type === 'tv') {// Test Volume\n this.columnSets.type = 'tv';\n // total_test_volume_ia_completed\n // total_test_volume_cc_completed\n } else if (type === 'ia_cc') {\n this.columnSets.ia_cc = 'all';\n } else if (type === 'ia') {\n this.columnSets.ia_cc = 'ia';\n } else if (type === 'cc') {\n this.columnSets.ia_cc = 'cc';\n } else if (type === 'alinity_architect') {\n this.columnSets.alinity_architect = 'all';\n } else if (type === 'alinity') {\n this.columnSets.alinity_architect = 'alinity';\n } else if (type === 'architect') {\n this.columnSets.alinity_architect = 'architect';\n }\n // always show non metrics:\n // customer_num, customer, oneview_customerid_int,\n // country_desc, locallevel1, locallevel2, business_segment, servicing_group\n let keeps = [\n 'overall_health_score',\n 'overall_nps_survey_score',\n 'field_service_nps_survey_score',\n 'alcm_daily_score',\n 'latest_worst_abbottlink_last_conn_days',\n 'count_alinity_ia_pls',\n 'count_alinity_cc_pls',\n 'count_alinity_ia_tor',\n 'count_alinity_cc_tor',\n 'total_test_volume_ia_completed',\n 'total_test_volume_cc_completed',\n 'test_completion_rate',\n 'proc_and_run_hard_stop_count',\n 'repeat_tests_rate',\n 'open_sd_ticket_qty'\n ];\n this.hideCols(keeps);\n if (this.columnSets.ia_cc === 'ia') {\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_pls');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n }\n if (this.columnSets.ia_cc === 'cc') {\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_pls');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n }\n if (this.columnSets.alinity_architect === 'alinity') {}\n if (this.columnSets.alinity_architect === 'architect') {\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_pls');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_pls');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n }\n if (this.columnSets.type !== 'all') {\n keeps = this.removeItemFromArray(keeps, 'overall_health_score');\n keeps = this.removeItemFromArray(keeps, 'latest_worst_abbottlink_last_conn_days');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_pls');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_pls');\n keeps = this.removeItemFromArray(keeps, 'proc_and_run_hard_stop_count');\n keeps = this.removeItemFromArray(keeps, 'repeat_tests_rate');\n keeps = this.removeItemFromArray(keeps, 'open_sd_ticket_qty');\n }\n if (this.columnSets.type === 'tcr') {\n keeps = this.removeItemFromArray(keeps, 'overall_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'field_service_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'alcm_daily_score');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n }\n if (this.columnSets.type === 'nps') {\n keeps = this.removeItemFromArray(keeps, 'test_completion_rate');\n keeps = this.removeItemFromArray(keeps, 'alcm_daily_score');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n }\n if (this.columnSets.type === 'alcm') {\n keeps = this.removeItemFromArray(keeps, 'test_completion_rate');\n keeps = this.removeItemFromArray(keeps, 'overall_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'field_service_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n }\n if (this.columnSets.type === 'tor') {\n keeps = this.removeItemFromArray(keeps, 'test_completion_rate');\n keeps = this.removeItemFromArray(keeps, 'overall_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'field_service_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'alcm_daily_score');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n }\n if (this.columnSets.type === 'tv') {\n keeps = this.removeItemFromArray(keeps, 'test_completion_rate');\n keeps = this.removeItemFromArray(keeps, 'overall_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'field_service_nps_survey_score');\n keeps = this.removeItemFromArray(keeps, 'alcm_daily_score');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n }\n // keeps = this.removeItemFromArray(keeps, 'test_completion_rate');\n // keeps = this.removeItemFromArray(keeps, 'overall_nps_survey_score');\n // keeps = this.removeItemFromArray(keeps, 'field_service_nps_survey_score');\n // keeps = this.removeItemFromArray(keeps, 'alcm_daily_score');\n // keeps = this.removeItemFromArray(keeps, 'count_alinity_ia_tor');\n // keeps = this.removeItemFromArray(keeps, 'count_alinity_cc_tor');\n // keeps = this.removeItemFromArray(keeps, 'total_test_volume_ia_completed');\n // keeps = this.removeItemFromArray(keeps, 'total_test_volume_cc_completed');\n\n this.showCols(keeps);\n }\n\n removeItemFromArray(array, value) {\n const index = array.indexOf(value);\n if (index > -1) {\n array.splice(index, 1);\n }\n return array;\n }\n\n hideCols(colsToHide) {\n for (const colKey in this.dataCols) {\n if (colKey in this.dataCols) {\n const colItem = this.dataCols[colKey];\n if (colsToHide.indexOf(colItem.ref) !== -1) {\n this.dataCols[colKey].hidden = true;\n }\n }\n }\n }\n\n showCols(colsToShow) {\n for (const colKey in this.dataCols) {\n if (colKey in this.dataCols) {\n const colItem = this.dataCols[colKey];\n if (colsToShow.indexOf(colItem.ref) !== -1) {\n this.dataCols[colKey].hidden = false;\n }\n }\n }\n }\n\n updateTooltipTitle(type) {\n switch (type) {\n case 'overAllHealthScore':\n this.helpWindowTitle = 'Overall Health';\n break;\n case 'tnpsRawScore':\n this.helpWindowTitle = 'tNPS Rating';\n break;\n case 'snCountIA':\n this.helpWindowTitle = 'IA';\n break;\n case 'snCountCC':\n this.helpWindowTitle = 'CC';\n break;\n case 'testVolumeIA':\n this.helpWindowTitle = 'Average Test Volume IA';\n break;\n case 'testVolumeCC':\n this.helpWindowTitle = 'Average Test Volume CC';\n break;\n case 'testCompletionPercent':\n this.helpWindowTitle = 'Test Completion';\n break;\n case 'hardStopCount':\n this.helpWindowTitle = 'Hard Stops';\n break;\n case 'qcFailPercent':\n this.helpWindowTitle = 'Controls Out of Range';\n break;\n case 'retestPercent':\n this.helpWindowTitle = 'Repeat Tests';\n break;\n case 'openTicketCount':\n this.helpWindowTitle = 'Open Tickets';\n break;\n }\n }\n\n toggleTooltip(type, changeTo = null) {\n this.opened = true;\n if (changeTo === null) {\n this.tooltips[type] = !this.tooltips[type];\n } else {\n this.tooltips[type] = changeTo;\n }\n if (this.tooltips[type]) {\n for (const type1 in this.tooltips) {\n if (type1 !== type) {\n this.tooltips[type1] = false;\n }\n }\n }\n this.updateTooltipTitle(type);\n }\n\n public onAction(action): void {\n let currentTooltip = null;\n for (const type in this.tooltips) {\n if (type in this.tooltips) {\n if (this.tooltips[type]) {\n currentTooltip = type;\n }\n }\n }\n if (currentTooltip !== null) {\n const keys = Object.keys(this.tooltips);\n const activeTooltipLocation = keys.indexOf(currentTooltip);\n let newKey;\n if (action.text === 'Previous') {\n if (activeTooltipLocation - 1 < 0) {\n newKey = keys[keys.length - 1];\n } else {\n newKey = keys[activeTooltipLocation - 1];\n }\n } else if (action.text === 'Next') {\n if (activeTooltipLocation + 1 >= keys.length) {\n newKey = keys[0];\n } else {\n newKey = keys[activeTooltipLocation + 1];\n }\n }\n this.tooltips[currentTooltip] = false;\n this.tooltips[newKey] = true;\n this.updateTooltipTitle(newKey);\n }\n }\n\n public close() {\n this.opened = false;\n }\n\n public exportToExcel(grid: GridComponent): void {\n // grid.saveAsExcel();\n }\n}\n","
    \n Health Metric Details for This Customer Not Found!\n
    \n
    \n \n
    \n

    Overall health is a customer-level aggregate score\n to indicate the operational health of a customer site.\n The Overall Health Score is computed by the AlwaysOn Health algorithm and incorporates\n instrument operational and customer satisfaction metrics.\n The algorithm scores each customer SN on each instrument metric in relation to other\n customer's SNs in the same geographic area. Scores are then rolled up at the customer\n level and weighted together with NPS data (if available) to arrive at an Overall health\n score. Weightings: tNPS (50%), test volume (10%), reactive tickets (10%),\n test completion (10%), hard stops (5%), controls out of range (5%), repeat tests (5%),\n daily maintenance failures (5%). Where data for a metric is unavailable,\n weightings are uniformly redistributed between available metrics.\n Color indicates customer health as\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n If Overall Health cannot be calculated due to insufficient data,\n no score is provided and coloring is set to gray.\n

    \n \n \n \n \n \n \n \n \n \n
    \n
    \n

    Survey responses to the Likelihood to Recommend question\n (\"On a scale of 0-10, how likely are you to recommend Abbott to a\n colleague or friend?\") on the Transactional NPS (tNPS) survey for\n a customer site over the past 1 year. Scores are averaged for a customer site\n if data from more than one interview is available. Color indicates a customer\n is a\n promoter (green),\n passive (yellow), or\n detractor (red)

    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n

    Number of customer IA instruments. For Alinity, this is the number of IA serial numbers\n that are test-of-record.

    \n
    \n
    \n

    Number of customer CC instruments. For Alinity, this is the number of CC serial numbers\n that are test-of-record.

    \n
    \n
    \n

    The average weekly test volume for all customer IA instruments. Color coding indicates\n how a customer’s level of IA test volume was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., an IA test volume value color coded as good for one customer\n may be only satisfactory for another).

    \n
    \n
    \n

    The average weekly test volume for all customer CC instruments. Color coding indicates how\n a customer’s level of CC test volume was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., a CC test volume value color coded as good for one customer\n may be only satisfactory for another).

    \n
    \n
    \n

    Average weekly percentage of completed tests for all of a customer’s instruments\n (aggregates both IA and CC product lines). Color coding indicates how a customer’s level\n of test completion was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable to\n other customers (e.g., a test completion value color coded as good for one customer may be\n only satisfactory for another).

    \n
    \n
    \n

    Average weekly number of hard stops across all of a customer's Alinity instruments\n (aggregates both IA and CC product lines). Color coding indicates how the number\n of hard stops at a customer site was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (orange),\n needs improvement (yellow), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of\n instruments, color code scoring is unique to each customer site and is not comparable\n to other customers (e.g., a hard stop value color coded as good for one customer may be only\n satisfactory for another). The Hard Stop metric is available only for Alinity.

    \n
    \n
    \n

    Average weekly percentage of controls that fall outside of customer-defined boundaries\n (includes both IA and CC product lines). Color coding indicates how a customer’s level\n of test completion was scored by the AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations of instruments,\n color code scoring is unique to each customer site and is not comparable to other customers\n (e.g., a controls out of range value color coded as good for one customer may be only\n satisfactory for another).

    \n
    \n
    \n

    Average weekly percentage of repeat tests across all of a customer's instruments\n (includes both IA and CC product lines). Repeat tests are specimens that produced\n a result two or more times for the same assay, on the same instrument, indicating\n that the customer chose to rerun a specimen that already generated a result.\n Color coding indicates how a customer’s level of test completion was scored by the\n AlwaysOn Customer Health algorithm:\n good (green),\n satisfactory (yellow),\n needs improvement (orange), or\n poor (red).\n Because each customer site has a unique usage pattern and varying combinations\n of instruments, color code scoring is unique to each customer site and is not\n comparable to other customers (e.g., a controls out of range value color coded as\n good for one customer may be only satisfactory for another).

    \n
    \n
    \n

    Number of currently open tickets for a given customer (excluding TSBs).

    \n
    \n \n
    \n
    \n
    \n Customer Name\n {{selectedCustomerData.customerName.value}}\n
    \n
    \n Customer Number\n {{selectedCustomerData.customerNum.value}}\n
    \n
    \n Account\n {{selectedCustomerData.acctEntityName.value}}\n
    \n
    \n Location\n {{selectedCustomerData.countryName.value}}\n
    \n
    \n Alinity or ARCHITECT Overall Health \n \n {{selectedCustomerData.overAllHealthScore.value|percent}}\n \n
    \n
    \n tNPS Rating \n \n {{selectedCustomerData.tnpsRawScore.value|number:'1.2-2'}}\n \n
    \n
    \n # S/N's IA \n \n {{selectedCustomerData.snCountIA.value}}\n \n
    \n
    \n # S/N's CC \n \n {{selectedCustomerData.snCountCC.value}}\n \n
    \n
    \n Average Test Volume IA \n \n {{selectedCustomerData.testVolumeIA.value}}\n \n
    \n
    \n Average Test Volume CC \n \n {{selectedCustomerData.testVolumeCC.value}}\n \n
    \n
    \n Test Completion Rate \n \n {{selectedCustomerData.testCompletionPercent.value|percent:'1.1-1'}}\n \n
    \n
    \n HS/10000 \n \n {{selectedCustomerData.hardStopScaled.value|number:'1.2-2'}}\n \n
    \n
    \n Controls Out of Range % \n \n {{selectedCustomerData.qcFailPercent.value|percent:'1.2-2'}}\n \n
    \n
    \n Repeat Test % \n \n {{selectedCustomerData.retestPercent.value|percent:'1.2-2'}}\n \n
    \n
    \n Open Tickets \n \n {{selectedCustomerData.openTicketCount.value}}\n \n
    \n
    \n \n \n Service KPIs\n \n
    \n
    \n
    \n
    ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {CtServiceService} from '../ct-service.service';\nimport {PersonaService} from '../../api/persona.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {RequestState} from '../../api/request-handler';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\nimport {DashboardOptions} from '../../configuration/nav-filter-selection';\nimport {SelectedManagerService} from '../selected-manager.service';\nimport {AuthenticationService} from '../../authentication/authentication.service';\n\ninterface CustomerHealthGridRow {\n // styles are string of color or null\n countryCode: string;\n customerNum: string;\n customerName: string;\n uniqueCustomerKey: string;\n countryName: string;\n area: string;\n overAllHealthScore: number;\n overAllHealthScoreStyle: string;\n tnpsRawScore: number;\n tnpsRawScoreStyle: string;\n snCountIA: number;\n snCountCC: number;\n testVolumeIA: number;\n testVolumeIAScoreStyle: string;\n testVolumeCC: number;\n testVolumeCCScoreStyle: string;\n testCompletionPercent: number;\n testCompletionPercentScoreStyle: string;\n hardStopCount: number;\n hardStopCountScoreStyle: string;\n qcFailPercent: number;\n qcFailPercentScoreStyle: string;\n retestPercent: number;\n retestPercentScoreStyle: string;\n openTicketCount: number;\n}\n\n@Component({\n selector: 'app-customer-profile-info',\n templateUrl: './customer-profile-info.component.html',\n styleUrls: ['./customer-profile-info.component.scss']\n})\nexport class CustomerProfileInfoComponent implements OnInit, OnDestroy {\n state = null;\n apiUrl = 'cua/customer_health_metrics';\n apiData = null;\n colorLegend = null;\n npsLegend = null;\n customerId = null;\n selectedCustomerData = null;\n dataCols = [];\n customerMyCRLLinkReady = false;\n myCRLCustomerId = null;\n // tooltips\n tooltips = {\n overAllHealthScore: false,\n tnpsRawScore: false,\n snCountIA: false,\n snCountCC: false,\n testVolumeIA: false,\n testVolumeCC: false,\n testCompletionPercent: false,\n hardStopCount: false,\n qcFailPercent: false,\n retestPercent: false,\n openTicketCount: false\n };\n helpWindowTitle = '';\n opened = false;\n helpActions = [{ text: 'Previous' }, { text: 'Next', primary: true }];\n actionsLayout = 'normal';\n faInfoCircle = faInfoCircle;\n DashboardOptions = DashboardOptions;\n refreshIndexes = [];\n customerChangeEventIndex = null;\n requestHandler;\n stateChangeHandler;\n countryIdsByName;\n\n constructor(\n private apiService: ApiService,\n private refreshHandler: RefreshHandlerService,\n private personaService: PersonaService,\n private ctService: CtServiceService,\n private selectedTabService: SelectedTabService,\n private selectedManagerService: SelectedManagerService,\n private authService: AuthenticationService\n ) {}\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiUrl);\n // this.ctService.onCustomerSelectionChange(() => {\n // requestHandler.sendRequest(this.apiUrl);\n // });\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest(this.apiUrl);\n },\n this.requestHandler.getRelativeParams(this.apiUrl)\n ));\n\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n this.buildLegendInfo(this.apiData);\n\n this.dataCols = [\n 'uniqueCustomerKey', 'acctEntityName', 'customerName', 'customerNum', 'countryName',\n 'overAllHealthScore', 'tnpsRawScore', 'snCountIA', 'snCountCC', 'testVolumeIA',\n 'testVolumeCC', 'testCompletionPercent', 'hardStopCount', 'hardStopScaled', 'qcFailPercent',\n 'retestPercent', 'openTicketCount'\n ];\n\n this.customerId = this.ctService.getCustomerId();\n this.selectedCustomerData = null;\n for (const apiDataRow of this.apiData.data) {\n if (apiDataRow.uniqueCustomerKey === this.customerId) {\n this.selectedCustomerData = {};\n for (const dataCol of this.dataCols) {\n let style = 'white';\n let textcolor = 'black';\n if (dataCol + 'Style' in apiDataRow) {\n style = apiDataRow[dataCol + 'Style'];\n if (style === 'red') {\n textcolor = 'white';\n }\n }\n if (dataCol + 'ScoreStyle' in apiDataRow) {\n style = apiDataRow[dataCol + 'ScoreStyle'];\n if (style === 'red') {\n textcolor = 'white';\n }\n }\n if (style === 'red') {\n style = '#FF6347';\n }\n if (style === '#0ee30e') {\n style = '#52B84D';\n }\n this.selectedCustomerData[dataCol] = {\n value: apiDataRow[dataCol],\n bgcolor: style,\n color: textcolor\n };\n }\n }\n }\n\n if (this.customerChangeEventIndex !== null) {\n this.ctService.clearCustomerSelectionChangeEvent(this.customerChangeEventIndex);\n }\n this.customerChangeEventIndex = this.ctService.onCustomerSelectionChange(() => {\n const aohCustomerId = this.personaService.getPersonaOption(PersonaTypes.Customer);\n\n const requestHandler2 = this.apiService.get('cua/get_mycrl_customer_id');\n if (aohCustomerId !== 'all' && typeof aohCustomerId === 'string') {\n const aohCustomerIdParts = aohCustomerId.split('|');\n requestHandler2.sendRequest('cua/get_mycrl_customer_id', {customer_id: aohCustomerIdParts[1]});\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler2.sendRequest(this.apiUrl);\n },\n requestHandler2.getRelativeParams(this.apiUrl)\n ));\n }\n // console.log('a1', requestHandler2.getRelativeParams(this.apiUrl));\n // 20211028 - a1 Array(6) [ \"ct_persona_type\", \"ct_persona_value\",\n // \"cua_primary\", \"cua_secondary\", \"cua_tertiary\", \"product_set_number\" ]\n\n // no need to send request here as chart tile has already done so\n requestHandler2.onStateChange((state2) => {\n this.state = state;\n if (state2 === RequestState.Complete) {\n const response2 = requestHandler2.getResponse();\n if (response2.body !== '') {\n this.myCRLCustomerId = JSON.parse(response2.body);\n\n const countryRequestHandler = this.apiService.get('/geography_service');\n countryRequestHandler.sendRequest('/geography_service');\n countryRequestHandler.onStateChange((countryState) => {\n if (state === RequestState.Complete) {\n const countryResponse = countryRequestHandler.getResponse();\n const countryData = JSON.parse(countryResponse.body);\n\n this.countryIdsByName = {};\n if (countryData.countries) {\n for (const location of countryData.countries) {\n this.countryIdsByName[location.name] = location.id;\n }\n }\n this.customerMyCRLLinkReady = true;\n }\n });\n }\n }\n });\n });\n }\n };\n\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.requestHandler.sendRequest(this.apiUrl);\n }\n\n ngOnDestroy(): void {\n for (const index of this.refreshIndexes) {\n this.refreshHandler.cancelRefreshEvent(index);\n }\n this.ctService.clearCustomerSelectionChangeEvent(this.customerChangeEventIndex);\n this.customerChangeEventIndex = null;\n\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n\n buildLegendInfo(apiData) {\n this.colorLegend = {\n title: {label: '', bgcolor: '', color: 'black', format: 'num1'},\n items: []\n };\n for (const apiLegendItem of apiData.legends['Overall Scores']) {\n let textcolor = 'black';\n if (apiLegendItem.color === 'red') {\n textcolor = 'white';\n }\n const legendItem = {\n label: Math.floor(apiLegendItem.minVal * 100) + '-' + Math.floor(apiLegendItem.maxVal * 100) + '%',\n count: 0,\n pct: apiLegendItem.maxVal * 100,\n bgcolor: apiLegendItem.color,\n color: textcolor\n };\n this.colorLegend.items.push(legendItem);\n if (this.colorLegend.title.label === '') {\n this.colorLegend.title.label = apiLegendItem.legendTitle;\n }\n }\n this.npsLegend = {\n title: {label: '', bgcolor: '', color: 'black', format: 'num1'},\n items: []\n };\n for (const apiLegendItem of apiData.legends['tNPS Scores']) {\n const legendItem = {\n label: Math.floor(apiLegendItem.minVal) + '-' + Math.floor(apiLegendItem.maxVal),\n count: 0,\n pct: apiLegendItem.maxVal,\n bgcolor: apiLegendItem.color,\n color: 'black'\n };\n this.npsLegend.items.push(legendItem);\n if (this.npsLegend.title.label === '') {\n this.npsLegend.title.label = apiLegendItem.legendTitle;\n }\n }\n }\n\n updateTooltipTitle(type) {\n switch (type) {\n case 'overAllHealthScore':\n this.helpWindowTitle = 'Overall Health';\n break;\n case 'tnpsRawScore':\n this.helpWindowTitle = 'tNPS Rating';\n break;\n case 'snCountIA':\n this.helpWindowTitle = 'IA';\n break;\n case 'snCountCC':\n this.helpWindowTitle = 'CC';\n break;\n case 'testVolumeIA':\n this.helpWindowTitle = 'Average Test Volume IA';\n break;\n case 'testVolumeCC':\n this.helpWindowTitle = 'Average Test Volume CC';\n break;\n case 'testCompletionPercent':\n this.helpWindowTitle = 'Test Completion';\n break;\n case 'hardStopCount':\n this.helpWindowTitle = 'Hard Stops';\n break;\n case 'qcFailPercent':\n this.helpWindowTitle = 'Controls Out of Range';\n break;\n case 'retestPercent':\n this.helpWindowTitle = 'Repeat Tests';\n break;\n case 'openTicketCount':\n this.helpWindowTitle = 'Open Tickets';\n break;\n }\n }\n\n toggleTooltip(type, changeTo = null) {\n this.opened = true;\n if (changeTo === null) {\n this.tooltips[type] = !this.tooltips[type];\n } else {\n this.tooltips[type] = changeTo;\n }\n if (this.tooltips[type]) {\n for (const type1 in this.tooltips) {\n if (type1 !== type) {\n this.tooltips[type1] = false;\n }\n }\n }\n this.updateTooltipTitle(type);\n }\n\n public onAction(action): void {\n let currentTooltip = null;\n for (const type in this.tooltips) {\n if (type in this.tooltips) {\n if (this.tooltips[type]) {\n currentTooltip = type;\n }\n }\n }\n if (currentTooltip !== null) {\n const keys = Object.keys(this.tooltips);\n const activeTooltipLocation = keys.indexOf(currentTooltip);\n let newKey;\n if (action.text === 'Previous') {\n if (activeTooltipLocation - 1 < 0) {\n newKey = keys[keys.length - 1];\n } else {\n newKey = keys[activeTooltipLocation - 1];\n }\n } else if (action.text === 'Next') {\n if (activeTooltipLocation + 1 >= keys.length) {\n newKey = keys[0];\n } else {\n newKey = keys[activeTooltipLocation + 1];\n }\n }\n this.tooltips[currentTooltip] = false;\n this.tooltips[newKey] = true;\n this.updateTooltipTitle(newKey);\n }\n }\n\n public close() {\n this.opened = false;\n }\n\n dashboardChange(dashboardOption) {\n this.authService.onAuth(() => {\n const userInfo = this.authService.getUserInfo();\n const aohCustomerLabel = this.personaService.getPersonaLabel(PersonaTypes.Customer);\n this.personaService.setPersonaOption(PersonaTypes.GEO, this.countryIdsByName[this.selectedCustomerData.countryName.value], this.selectedCustomerData.countryName.value);\n this.ctService.setReturnCustomer(this.personaService.getPersonaOption(PersonaTypes.Customer));\n // console.log('switch to myCrl', 'returnCustomerSetTo', this.personaService.getPersonaOption(PersonaTypes.Customer));\n // this.personaService.setPersonaOption(PersonaTypes.Customer, this.myCRLCustomerId, aohCustomerLabel);\n this.personaService.setPersonaOption(PersonaTypes.Customer, this.myCRLCustomerId, aohCustomerLabel);\n this.selectedTabService.selectTab(dashboardOption);\n // this.refreshHandlerService.triggerCallbacks();\n });\n }\n}\n","
    \n \n \n \n You may toggle chart lines by clicking the above legend toggles.\n \n
    ","import { Component, OnInit, Input, ViewChild, ElementRef } from '@angular/core';\nimport { ChartComponent } from '@progress/kendo-angular-charts';\n\n@Component({\n selector: 'app-data-trend-chart',\n templateUrl: './data-trend-chart.component.html',\n styleUrls: ['./data-trend-chart.component.scss']\n})\nexport class DataTrendChartComponent implements OnInit {\n @Input() chartData;\n public chartOptions;\n @ViewChild('chart') chartComponent: ChartComponent;\n dataSetYMax = [];\n\n constructor() { }\n\n ngOnInit(): void {\n let labelFormat = '{0:1}';\n switch (this.chartData.key) {\n case 'test_volume':\n labelFormat = '{0:0}';\n break;\n case 'test_completion':\n labelFormat = '{0:n1}';\n break;\n case 'controls':\n labelFormat = '{0:n1}';\n break;\n case 'repeat_tests':\n labelFormat = '{0:n1}';\n break;\n case 'hard_stops':\n labelFormat = '{0:n1}';\n break;\n }\n\n const categoryList = [];\n if ('xaxisData' in this.chartData) {\n for (const value of this.chartData.xaxisData) {\n categoryList.push(value);\n }\n\n let yleftmax = 0;\n const seriesList = [];\n const series1length = this.chartData.yaxisData.length;\n for (const i in this.chartData.yaxisData) {\n const dataSet = this.chartData.yaxisData[i];\n this.dataSetYMax[i] = [];\n\n let legendColor = null;\n if (dataSet.name === 'Alinity CC') {\n legendColor = '#cb20cb';\n }\n if (dataSet.name === 'Alinity IA') {\n legendColor = '#007bff';\n }\n\n let legendLabel = dataSet.name;\n if (this.chartData.key === 'hard_stops') {\n legendLabel += ' Avg';\n }\n seriesList[i] = {\n data: [],\n name: legendLabel,\n missingValues: 'gap',\n categoryAxis: 'cat1',\n axis: 'values1',\n visible: true,\n tooltip: {\n visible: true\n }\n // color: apiData.linecolors[i]\n };\n if (legendColor !== null) {\n seriesList[i].color = legendColor;\n }\n for (let a = 0; a < dataSet.values.length; a++) {\n this.dataSetYMax[i][a] = dataSet.values[a];\n if (dataSet.values[a] > yleftmax) {\n yleftmax = dataSet.values[a];\n }\n seriesList[i].data.push(dataSet.values[a]);\n }\n }\n\n const tickCount = 10;\n let axis2Max = this.nextHighestNumberDivisibleBy(yleftmax, tickCount - 1);\n axis2Max = axis2Max * 1.061;\n\n const seriesArray = seriesList;\n const valueAxisArray = [\n {\n name: 'values1',\n labels: {\n format: labelFormat,\n mirror: false,\n position: 'start'\n },\n title: {\n text: 'Avg ' + this.chartData.yaxisLabel\n },\n line: {\n visible: false\n },\n axisCrossingValue: -10,\n max: axis2Max,\n min: 0,\n majorUnit: axis2Max / (tickCount - 1)\n }\n ];\n\n if (this.chartData.hasOwnProperty('yaxis2Label')) {\n let yleftmax2 = 0;\n\n for (const i in this.chartData.yaxis2Data) {\n const newKey = parseInt(i) + parseInt(series1length);\n const dataSet2 = this.chartData.yaxis2Data[i];\n this.dataSetYMax[newKey] = [];\n\n let legendColor = null;\n if (dataSet2.name === 'Alinity CC') {\n legendColor = '#20c997';\n }\n if (dataSet2.name === 'Alinity IA') {\n legendColor = '#007bff';\n }\n\n let legendLabel = dataSet2.name;\n if (this.chartData.key === 'hard_stops') {\n legendLabel += ' HS/10000 (Dashed)';\n }\n\n seriesList[newKey] = {\n data: [],\n name: legendLabel,\n missingValues: 'gap',\n categoryAxis: 'cat1',\n dashType: 'dash',\n axis: 'values2',\n visible: true,\n tooltip: {\n visible: true\n }\n // color: apiData.linecolors[i]\n };\n\n if (legendColor !== null) {\n seriesList[newKey].color = legendColor;\n }\n\n for (let a = 0; a < dataSet2.values.length; a++) {\n\n this.dataSetYMax[newKey][a] = dataSet2.values[a];\n if (dataSet2.values[a] > yleftmax2) {\n yleftmax2 = dataSet2.values[a];\n }\n seriesList[newKey].data.push(dataSet2.values[a]);\n }\n }\n\n const tickCount2 = 10;\n let axis2Max2 = this.nextHighestNumberDivisibleBy(yleftmax2, tickCount2 - 1);\n axis2Max2 = axis2Max2 * 1.061;\n\n let seriesLabel = this.chartData.yaxis2Label;\n if (this.chartData.key === 'hard_stops' && seriesLabel === 'Hard Stop Scaled') {\n seriesLabel = 'HS/10000';\n }\n\n valueAxisArray.push(\n {\n name: 'values2',\n labels: {\n format: labelFormat,\n mirror: false,\n position: 'end'\n },\n title: {\n text: seriesLabel\n },\n line: {\n visible: false\n },\n axisCrossingValue: -10,\n max: axis2Max2,\n min: 0,\n majorUnit: axis2Max2 / (tickCount2 - 1)\n }\n );\n }\n\n this.chartOptions = {\n title: {\n text: this.chartData.title,\n position: 'top',\n font: 'bold 14px Arial,Helvetica,sans-serif'\n },\n legend: {\n position: 'bottom'\n },\n seriesDefaults: {\n type: 'line',\n area: {\n line: {\n style: 'smooth'\n }\n }\n },\n series: seriesArray,\n valueAxis: valueAxisArray,\n categoryAxis: {\n name: 'cat1',\n categories: categoryList,\n majorGridLines: {\n visible: false\n },\n labels: {\n rotation: -45\n }\n }\n };\n }\n }\n\n legendItemClickEvent(event) {\n this.chartComponent.series[event.seriesIndex].visible = !this.chartComponent.series[event.seriesIndex].visible;\n let yleftmax = 0;\n let yleftmax2 = 0;\n for (let i = 0; i < this.chartComponent.series.length; i++) {\n console.log('i', i, this.dataSetYMax);\n const item = this.chartComponent.series[i];\n if (item.visible && item.axis === 'values1') {\n for (const index in this.dataSetYMax[i]) {\n if (this.dataSetYMax[i][index] > yleftmax) {\n yleftmax = this.dataSetYMax[i][index];\n }\n }\n }\n if (item.visible && item.axis === 'values2') {\n for (const index in this.dataSetYMax[i]) {\n if (this.dataSetYMax[i][index] > yleftmax2) {\n yleftmax2 = this.dataSetYMax[i][index];\n }\n }\n }\n }\n const tickCount = 10;\n const axisMax = (this.nextHighestNumberDivisibleBy(yleftmax, tickCount - 1) * 1.061);\n const axisMax2 = (this.nextHighestNumberDivisibleBy(yleftmax2, tickCount - 1) * 1.061);\n for (const key in this.chartComponent.valueAxis) {\n if (key in this.chartComponent.valueAxis) {\n if (this.chartComponent.valueAxis[key].name === 'values1') {\n this.chartComponent.valueAxis[key].max = axisMax;\n }\n if (this.chartComponent.valueAxis[key].name === 'values2') {\n this.chartComponent.valueAxis[key].max = axisMax2;\n }\n }\n }\n this.chartComponent.notifyChanges({});\n\n // if (dataSet.values[a] > yleftmax) {\n // yleftmax = dataSet.values[a];\n // }\n //\n // const tickCount = 10;\n // let axis2Max = this.nextHighestNumberDivisibleBy(yleftmax, tickCount - 1);\n // axis2Max = axis2Max * 1.061;\n //\n // max: axis2Max,\n // majorUnit: axis2Max / (tickCount - 1)\n }\n\n nextHighestNumberDivisibleBy(num1, divisibleBy) {\n num1 = parseInt(num1);\n if (!Number.isInteger(num1)) {\n return false;\n }\n while (1) {\n if (num1 % divisibleBy === 0) {\n return num1;\n }\n num1++;\n }\n }\n}\n"," \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n {{dataItem[col.ref]}}\n \n \n \n {{dataItem[col.ref]}}\n \n \n ({{dataItem.pl}})\n \n \n \n \n\n\n \n\n","import { Component, OnInit, Input, Renderer2 } from '@angular/core';\nimport {GridComponent} from '../../details/grid.component';\nimport {environment} from '../../../environments/environment';\n\n@Component({\n selector: 'app-data-trend-table',\n templateUrl: './data-trend-table.component.html',\n styleUrls: ['./data-trend-table.component.scss']\n})\nexport class DataTrendTableComponent extends GridComponent implements OnInit {\n @Input() chartData;\n dataCols = [];\n showContextMenu = false;\n offset: any;\n selectedSn;\n selectedPl;\n gsrUrl = environment.gsrUrl;\n private documentClickSubscription: any;\n\n constructor(private renderer: Renderer2) {\n super();\n this.onCellClick = this.onCellClick.bind(this);\n this.documentClickSubscription = this.renderer.listen('document', 'click', () => {\n this.showContextMenu = false;\n });\n }\n\n ngOnInit(): void {\n this.dataCols = [\n {ref: 'pl', description: '', width: 100, hidden: true},\n {ref: 'plName', description: 'Product', width: 100},\n {ref: 'sn', description: 'SN', width: 100},\n {ref: 'ticketNum', description: 'Ticket #', width: 130},\n {ref: 'dateOpened', description: 'Open Date', width: 100},\n {ref: 'ticketDesc', description: 'Description', width: 400}\n ];\n // for (const colKey in this.chartData.data) {\n // if (this.chartData.data.hasOwnProperty(colKey)) {\n // const col = this.chartData.data[colKey];\n // this.dataCols.push({\n // ref: colKey,\n // description: col,\n // width: 100\n // });\n // }\n // }\n this.dataRows = this.chartData.data;\n this.updateGrid();\n }\n\n public onCellClick({dataItem, column, type, originalEvent}): void {\n if (type === 'click' && column.field === 'sn') {\n originalEvent.preventDefault();\n this.showContextMenu = true;\n this.selectedPl = dataItem.pl;\n this.selectedSn = dataItem.sn;\n this.offset = { left: originalEvent.pageX, top: originalEvent.pageY };\n } else {\n this.showContextMenu = false;\n }\n }\n}\n","\n\n
    \n

    Data displayed is for full weeks only starting on Monday.

    \n
    \n\n
    \n
    \n \n \n \n \n
    \n
    \n
    \n
    \n
    No Data for {{chart.title}}!
    \n \n
    \n
    \n
    No Data for {{grid.title}}!
    \n \n
    \n
    \n
    \n Please Select a Client via the Customer Health Metrics Table.\n
    ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {CtServiceService} from '../ct-service.service';\nimport {faInfoCircle} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'app-customer-data-trends',\n templateUrl: './customer-data-trends.component.html',\n styleUrls: ['./customer-data-trends.component.scss']\n})\nexport class CustomerDataTrendsComponent implements OnInit, OnDestroy {\n public state;\n public apiData;\n public apiUrl = 'cua/customer_health_trend_data'; // 'control_tower/customer_data_trends_v2';\n public chartData = [];\n public gridData = [];\n public selectedTab = null;\n public customerIsSelected = false;\n opened = false;\n faInfoCircle = faInfoCircle;\n refreshIndexes = [];\n requestHandler;\n customerChangeEventIndex;\n stateChangeHandler;\n\n constructor(\n private apiService: ApiService,\n private refreshHandler: RefreshHandlerService,\n private ctService: CtServiceService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl, [], false);\n\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.requestHandler.sendRequest(this.apiUrl, [], false);\n },\n this.requestHandler.getRelativeParams(this.apiUrl)\n ));\n\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n\n if (this.apiData.status === 'success') {\n this.chartData = this.apiData.data.chartData;\n this.gridData = this.apiData.data.gridData;\n }\n\n const chartKeys = [];\n for (const item of this.chartData) {\n chartKeys.push(item.key);\n }\n if (!chartKeys.includes('test_volume')) {\n this.chartData.push({ key: 'test_volume', title: 'Test Volume by Week', noData: true });\n }\n if (!chartKeys.includes('test_completion')) {\n this.chartData.push({ key: 'test_completion', title: 'Percent Tests Completed by Week', noData: true });\n }\n if (!chartKeys.includes('controls')) {\n this.chartData.push({ key: 'controls', title: 'Percent Controls Out-of-Range by Week', noData: true });\n }\n if (!chartKeys.includes('repeat_tests')) {\n this.chartData.push({ key: 'repeat_tests', title: 'Percent Repeat Tests by Week', noData: true });\n }\n if (!chartKeys.includes('hard_stops')) {\n this.chartData.push({ key: 'hard_stops', title: 'Hard Stops by Week', noData: true });\n }\n\n const gridKeys = [];\n for (const item of this.gridData) {\n gridKeys.push(item.key);\n }\n if (!gridKeys.includes('open_tickets')) {\n this.gridData.push({ key: 'open_tickets', title: 'Open Tickets', noData: true });\n }\n\n\n this.selectedTab = 'test_volume';\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n // this.dataCols = [];\n // for (const colKey in this.apiData.data.heading_section) {\n // if (this.apiData.data.heading_section.hasOwnProperty(colKey)) {\n // const col = this.apiData.data.heading_section[colKey];\n // this.dataCols.push({\n // ref: colKey,\n // description: col.label,\n // width: col.width\n // });\n // // col.format\n // // col.hidden_field\n // // col.purpose\n // // col.visible_by_default\n // }\n // }\n // format dataRows for kendo component\n // this.dataRows = this.apiData.data.data_section;\n // for (const colKey in this.apiData.data.data_section) {\n // if (this.apiData.data.heading_section.hasOwnProperty(colKey)) {\n // const col = this.apiData.data.heading_section[colKey];\n // this.dataCols.push({\n // ref: colKey,\n // description: col.label,\n // width: col.width\n // });\n // // col.format\n // // col.hidden_field\n // // col.purpose\n // // col.visible_by_default\n // }\n // }\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n\n this.customerChangeEventIndex = this.ctService.onCustomerSelectionChange(() => {\n this.customerIsSelected = (this.ctService.getCustomerId() !== 'all');\n });\n }\n\n ngOnDestroy(): void {\n for (const index of this.refreshIndexes) {\n this.refreshHandler.cancelRefreshEvent(index);\n }\n this.ctService.clearCustomerSelectionChangeEvent(this.customerChangeEventIndex);\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n\n onSelectedChange(selectedTab) {\n this.selectedTab = selectedTab;\n }\n\n openTooltip() {\n this.opened = true;\n }\n\n public close() {\n this.opened = false;\n }\n}\n","
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n Looking Up Account, Please Wait...\n
    \n
    \n Could not find aoh alerts or metrics for this account number: {{accountNumber}}  \n Hide\n
    \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n \n
    \n \n
    \n
    \n
    \n \n \n {{selectedCustomerName}}  \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    ","import { Component, OnInit, OnDestroy, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {\n faListAlt,\n faChartBar,\n faWindowClose\n} from '@fortawesome/free-solid-svg-icons';\nimport {Personas} from '../../configuration/personas';\nimport {DashboardOptions, ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {PersonaService} from '../../api/persona.service';\nimport {SelectedTabService} from '../../dashboards/selected-tab.service';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {CtServiceService} from '../ct-service.service';\nimport {PersonaTypes} from '../../configuration/persona-types';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {PreferenceSelectionService} from '../../preferences/preference-selection.service';\nimport {AuthenticationService} from '../../authentication/authentication.service';\nimport {FilterChoicesService} from '../../filter_selection/filter-choices.service';\n\n@Component({\n selector: 'app-ct-dashboard',\n templateUrl: './ct-dashboard.component.html',\n styleUrls: ['./ct-dashboard.component.scss']\n})\nexport class CtDashboardComponent implements OnInit, OnDestroy {\n faListAlt = faListAlt;\n faChartBar = faChartBar;\n faWindowClose = faWindowClose;\n refreshIndex = null;\n selectedCustomerName = null;\n @ViewChild('tabstrip') public tabstrip;\n selectedTab = 0;\n alertsCount;\n customersCount;\n requestHandler;\n prefRequestHandler;\n managerApiData;\n managerDataLoaded = false;\n preferencesLoaded = false;\n refreshIndexes = [];\n customerChangeEventIndex;\n showLoadingAccountMessage = false;\n showAccountNotFoundMessage = false;\n accountNumber = '';\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private personaService: PersonaService,\n private selectedTabService: SelectedTabService,\n private refreshHandler: RefreshHandlerService,\n private ctService: CtServiceService,\n private apiService: ApiService,\n private preferenceSelectionService: PreferenceSelectionService,\n private authService: AuthenticationService,\n private filterService: FilterChoicesService,\n private route: ActivatedRoute,\n private cdRef: ChangeDetectorRef\n ) { }\n\n ngOnInit(): void {\n this.selectedTabService.selectTab(DashboardOptions.controltower); // this must proceed managerId hack\n /**\n * HACK TO FIX ISSUE WHERE MANAGER UPI IS CONFIGURED FOR MYCRL ROUTES AND AOH USES 511\n */\n this.authService.onAuth(() => {\n this.updateManagerIdHackLoadManagerListAndPreferences();\n });\n this.updateManagerIdHackLoadManagerListAndPreferences();\n // HACK END\n\n this.navbarBuilderService.setNavbarChoice('ct-dashboard');\n this.personaService.setServiceVsAmbState(true);\n this.personaService.refreshDetailChoices();\n this.navbarBuilderService.setNavFilterSelection({\n preferences: true,\n personaSelector: true,\n dashboardSelector: false,\n selectedDashboard: null,\n search: true,\n toolSelection: null,\n legacyCustomersFlag: false,\n myVsAllInstrumentsFlag: false,\n customerWTrackSystemsFlag: false,\n flagshipProductLinesFlag: false,\n bookmarksFlag: false,\n navigateBackwards: false,\n navigateBackwardsLabel: 'Back',\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false,\n personaOptions: [\n Personas.TssAmbassador,\n Personas.CuaManager,\n Personas.GeoLocation,\n Personas.AccountRep,\n Personas.CtCustomer,\n Personas.CtAccount\n ],\n prefCurrencyChoices: false\n });\n\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.refreshHandler.triggerCallbacks(['ct_persona_type', 'ct_persona_value']);\n // close customer page\n this.clearCustomer();\n },\n ['TSS', 'CuaManager', 'ManagersSpecifcAmb', 'AccountRep', 'CuaAmb', 'GEO', 'Amb', 'Account']\n ));\n\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.refreshHandler.triggerCallbacks([\n 'cua_product_family_set', 'cua_uniqueCustomerKey', 'ct_uniqueCustomerKey',\n 'cua_persona_type', 'cua_persona_value', 'ct_persona_type', 'ct_persona_value'\n ]);\n },\n ['Customer']\n ));\n this.refreshIndexes.push(this.refreshHandler.onRefreshEvent(\n (index) => {\n this.refreshHandler.triggerCallbacks(['cua_primary', 'cua_secondary', 'cua_tertiary']);\n },\n ['primary', 'secondary', 'tertiary']\n ));\n\n this.customerChangeEventIndex = this.ctService.onCustomerSelectionChange(() => {\n if (this.selectedCustomerName !== this.ctService.getCustomerName() && this.ctService.getCustomerName() !== null) {\n setTimeout(() => {\n this.tabstrip.selectTab(2);\n }, 500);\n }\n this.selectedCustomerName = this.ctService.getCustomerName();\n this.cdRef.detectChanges();\n });\n\n // fix so that when returning from mycrl it handles setting customer back the way it was\n if (this.ctService.isReturnCustomerSet()) {\n const aohCustomerLabel = this.personaService.getPersonaLabel(PersonaTypes.Customer);\n this.personaService.setPersonaOption(PersonaTypes.Customer, this.ctService.getReturnCustomer(), aohCustomerLabel);\n }\n\n this.route.paramMap.subscribe(params => {\n const accountUrlParam = params.get('account');\n this.accountNumber = accountUrlParam;\n if (accountUrlParam !== null) {\n this.showLoadingAccountMessage = true;\n const accountRequestHandler = this.apiService.get('cua/account_search');\n this.filterService.setFilter('searchQueryCuaAccount', accountUrlParam);\n accountRequestHandler.sendRequest('cua/account_search');\n accountRequestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n this.showLoadingAccountMessage = false;\n const response = accountRequestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n let selectedItem = null;\n for (const account of apiData.data) {\n if (accountUrlParam && accountUrlParam === account.acctEntityId) {\n selectedItem = {\n label: account.acctEntityName, // or customersrno\n key: account.acctEntityId\n };\n }\n }\n\n if (selectedItem) {\n this.personaService.setPersonaOption(PersonaTypes.Account, selectedItem.key, selectedItem.label);\n this.personaService.setCustomerOverride(true);\n } else {\n this.showAccountNotFoundMessage = true;\n }\n }\n });\n }\n });\n }\n\n closeAccountNotFoundMessage() {\n this.showAccountNotFoundMessage = false;\n }\n\n ngOnDestroy(): void {\n for (const index of this.refreshIndexes) {\n this.refreshHandler.cancelRefreshEvent(index);\n }\n this.ctService.clearCustomerSelectionChangeEvent(this.customerChangeEventIndex);\n }\n\n updateManagerIdHackLoadManagerListAndPreferences() {\n if (!this.preferenceSelectionService.arePreferencesLoaded() && this.authService.isAuth()) {\n this.prefRequestHandler = this.apiService.get('/preference');\n this.prefRequestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n this.preferencesLoaded = true;\n this.updateManagerIdHackFixPersona();\n }\n });\n } else {\n this.preferencesLoaded = true;\n }\n if (this.authService.isAuth()) {\n this.requestHandler = this.apiService.get('cua/manager_list');\n this.requestHandler.sendRequest('cua/manager_list', null, false);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.managerApiData = JSON.parse(response.body);\n this.managerDataLoaded = true;\n this.updateManagerIdHackFixPersona();\n }\n });\n }\n }\n\n updateManagerIdHackFixPersona() {\n let level1PersonaChoice = this.personaService.getLevel1Choice();\n if (\n this.managerDataLoaded\n && this.preferencesLoaded\n && level1PersonaChoice.type === PersonaTypes.Manager\n && this.selectedTabService.getLastSelectedTabInfo() === DashboardOptions.controltower // do not call unless ct dashboard page active\n ) {\n level1PersonaChoice = this.personaService.getLevel1Choice();\n for (const user of this.managerApiData) {\n if (user.mgrUpi === level1PersonaChoice.value) {\n this.filterService.setFilter('product_set_number', 3);\n this.personaService.setPersonaOption(\n PersonaTypes.CuaManager,\n user.mgr511,\n user.firstName + ' ' + user.lastName);\n this.refreshHandler.triggerCallbacks(['ct_persona_type', 'ct_persona_value']);\n }\n }\n }\n }\n\n onAlertsUpdate(alertsCount) {\n this.alertsCount = alertsCount;\n this.determineTab();\n }\n onHealthMetricsUpdate(customersCount) {\n this.customersCount = customersCount;\n }\n\n determineTab() {\n if (this.alertsCount > 0) {\n this.selectedTab = 0;\n } else {\n this.selectedTab = 1;\n }\n this.cdRef.detectChanges();\n }\n\n clearCustomer() {\n this.ctService.setReturnCustomer(null);\n this.personaService.setPersonaOption(PersonaTypes.Customer, 'all', '');\n this.personaService.setCustomerOverride(false);\n this.ctService.setCustomerId('all');\n this.tabstrip.selectTab(0);\n }\n}\n","\n
    \n \n \n \n \n \n \n 0\" class=\"k-button\" style='background-color: #009CDE; color: #FFF'>Apollo - {{apolloAlertCount}}\n 0\" class=\"k-button\" style='background-color: #A1CD5D; color: #FFF'>DaVinci - {{davinciAlertCount}}\n 0\" class=\"k-button\" style='background-color: #FA9F53; color: #FFF'>POM - {{pomAlertCount}}\n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n \n {{dialog_title}}\n \n
    \n \n
    \n
    \n {{dataRecord.devicename}}\n
    \n
    \n SN: {{dataRecord.sn}}\n
    \n
    \n
    \n {{dataRecord.customer}}\n
    \n
    \n
    \n {{dataRecord.alertcode}} - {{dataRecord.alertdesc}}\n
    \n
    \n {{dataRecord.experiencecode}} - {{dataRecord.experiencecodedescription}}\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n {{dataRecord.noofalertsxdays}}\n
    \n
    \n {{getDateLabel(dataRecord.alerttype)}} {{dataRecord.msgdatetime}}\n
    \n
    \n
    \n
    \n
    \n Ticket is not created\n Ticket is created\n
    \n
    \n Remaining Useful Life (RUL) {{dataRecord.rul}} \n
    \n
    \n
    \n
    \n
    \n {{dataRecord.customer}}\n
    \n
    \n {{dataRecord.customerAddrStreet}}\n
    \n
    \n {{dataRecord.customerAddrCity}}\n
    \n
    \n {{dataRecord.country}}\n
    \n
    \n
    \n {{dataRecord.msg}} \n
    \n
    \n \n
    {{dataRecord.devicename}}
    \n
    \n {{dataRecord.customer}}\n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Contact No:{{dataRecord.customercontactno}}
    Instrument:{{dataRecord.modulename}}, {{dataRecord.sn}}, {{dataRecord.moduletype}}
    Occurence Count:{{dataRecord.occurrencecount}}
    Event:{{dataRecord.alertcode}}
    Date:{{dataRecord.msgdatetime}}
    \n
    \n
    \n
    \n
    Message:
    \n
    \n
    \n {{dataRecord.msg}} \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n No Predictive System alerts found for the logged-in user!\n
    \n
    \n
    \n\n","import { Component, OnInit } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { ApiService } from 'src/app/api/api.service';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\nimport { GridComponent } from 'src/app/details/grid.component';\n\n@Component({\n selector: 'app-alerts-grid',\n templateUrl: './alerts-grid.component.html',\n styleUrls: ['./alerts-grid.component.scss']\n})\nexport class AlertsGridComponent extends GridComponent implements OnInit {\n\n dataRecord;\n dialog_title;\n opened = false;\n apolloAlertCount = 0;\n davinciAlertCount = 0;\n pomAlertCount = 0;\n\n config = {\n pageTitle: 'Predictive System Alerts',\n apiRequestHandler: '/predictive_system_alerts',\n table: {\n exportFileName: 'predictive_system_alerts.xlsx',\n dataCols: [\n {\n title: 'Alert Type',\n key: 'alerttype',\n width: 80,\n renderAlertTypeStyle: true\n },\n {\n title: 'Details',\n width: 60,\n renderDetailsStyle: true\n },\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'SN',\n key: 'sn',\n width: 80\n },\n {\n title: 'Instrument',\n key: 'devicename',\n width: 65\n },\n {\n title: 'Alert Code',\n key: 'alertcode',\n width: 60\n },\n {\n title: 'Alert Desc',\n key: 'alertdesc',\n width: 80\n },\n {\n title: 'Message Date/Time',\n key: 'msgdatetime',\n width: 60\n },\n {\n title: 'Experience Code',\n key: 'experiencecode',\n width: 60,\n hidden: true\n },\n {\n title: 'Experience Code Desc',\n key: 'experiencecodedescription',\n width: 80,\n hidden: true\n },\n {\n title: 'Country',\n key: 'country',\n width: 50,\n hidden: true\n },\n {\n title: 'Message Detail',\n key: 'msg',\n width: 80,\n hidden: true\n }\n ]\n } \n };\n\n public state = RequestState.Inactive;\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n protected refreshHandler: RefreshHandlerService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.loadData(); \n }\n\n protected loadData() {\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { requestTime: (new Date()).getTime() });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { requestTime: (new Date()).getTime() });\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n hidden: this.config.table.dataCols[i].hidden,\n renderAlertTypeStyle: this.config.table.dataCols[i].renderAlertTypeStyle,\n renderDetailsStyle: this.config.table.dataCols[i].renderDetailsStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n this.apolloAlertCount = 0;\n this.davinciAlertCount = 0;\n this.pomAlertCount = 0;\n for (let r = 0; r < apiData['data'].length; r++) {\n let dataRecord = apiData['data'][r];\n if (dataRecord.alerttype === 'Apollo') {\n this.apolloAlertCount++;\n } else if (dataRecord.alerttype === 'DaVinci') {\n this.davinciAlertCount++;\n } else if (dataRecord.alerttype === 'POM') {\n this.pomAlertCount++;\n }\n this.dataRows.push(apiData['data'][r]);\n } \n this.updateGrid();\n }\n });\n }\n\n public getMaxHeight(): string { \n const userWindowHeight = window.screen.availHeight;\n const userWindowWidth = window.screen.availWidth;\n\n if (userWindowHeight < 300) {\n return 300 + 'px';\n } else if (userWindowWidth <= 768) {\n return (userWindowHeight - 100) + 'px';\n } else if (this.detectMob()) {\n return (userWindowHeight - 100) + 'px';\n }\n return (userWindowHeight - 180) + 'px';\n }\n\n getAlertTypeStyle(alertType) {\n if (alertType === 'Apollo') {\n return {\n 'color': '#009CDE',\n 'font-size': '10pt',\n 'font-weight': '500'\n }\n } else if (alertType === 'DaVinci') {\n return {\n color: '#A1CD5D',\n 'font-size': '10pt',\n 'font-weight': '500'\n }\n } else if (alertType === 'POM') {\n return {\n color: '#FA9F53',\n 'font-size': '10pt',\n 'font-weight': '500'\n }\n } else {\n return {\n color: '#000',\n 'font-size': '10pt',\n 'font-weight': '500'\n }\n }\n }\n\n getHRStyle(alertType) {\n if (alertType === 'Apollo') {\n return 'hr_alert_apollo';\n } else if (alertType === 'DaVinci') {\n return 'hr_alert_davinci';\n } else if (alertType === 'POM') {\n return 'hr_alert_pom';\n } \n }\n\n getDateLabel(alertType) {\n if (alertType === 'Apollo') {\n return 'PHM Date';\n } else if (alertType === 'DaVinci') {\n return 'Date';\n } \n }\n\n openDetailsWindow(dataItem: any) {\n // console.log(dataItem);\n if (dataItem && dataItem.alerttype == 'Apollo') {\n this.dialog_title = 'Apollo/Prognostic Health Monitoring (PHM) - Alert Details'; \n this.dataRecord = dataItem;\n let customerAddr = this.dataRecord['customeraddress'];\n // customeraddress: \"1527 MADISON ST@FREDONIA@\"\n if (customerAddr !== undefined && customerAddr.length > 0) {\n let streetIndex = customerAddr.indexOf('@');\n if (streetIndex != -1) { \n this.dataRecord['customerAddrStreet'] = customerAddr.substring(0, streetIndex); \n if (customerAddr.indexOf('@', streetIndex) != -1 && customerAddr.indexOf('@', streetIndex + 1) != -1) {\n this.dataRecord['customerAddrCity'] = customerAddr.substring(customerAddr.indexOf('@', streetIndex) + 1, customerAddr.indexOf('@', streetIndex + 1));\n } \n }\n } \n this.opened = true; \n } else if (dataItem && dataItem.alerttype == 'DaVinci') {\n this.dialog_title = 'DaVinci Alert Details'; \n this.dataRecord = dataItem;\n this.dataRecord['customerAddrStreet'] = this.dataRecord['customeraddress'];\n this.opened = true; \n } else if (dataItem && dataItem.alerttype == 'POM') {\n this.dialog_title = 'POM Alert Details'; \n this.dataRecord = dataItem;\n this.opened = true;\n } \n }\n\n closeDetailsWindow() {\n this.opened = false;\n }\n\n isDataFound(dataRows) {\n if (!dataRows) {\n return false;\n }\n if (Array.isArray(dataRows) && dataRows.length === 0) {\n return false;\n }\n return true;\n }\n\n}\n","import { Component, OnInit } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\n\n@Component({\n selector: 'app-alerts-dashboard',\n templateUrl: './alerts-dashboard.component.html',\n styleUrls: ['./alerts-dashboard.component.scss']\n})\nexport class AlertsDashboardComponent implements OnInit {\n\n constructor(private navbarBuilderService: NavbarBuilderService) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.setNavbarChoice('alerts-dashboard');\n }\n\n}\n","import { formatDate } from '@angular/common';\nimport { Inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport * as _ from 'lodash';\n\n@Pipe({name: 'customDateFormatter'})\nexport class CustomDateFormatterPipe implements PipeTransform {\n\n constructor(@Inject(LOCALE_ID) private locale: string) {\n \n }\n\n transform(value: string, inputFormat: string, outputFormat: string): string {\n if (value !== undefined) {\n if (inputFormat !== undefined && inputFormat === 'yyyyMMdd') {\n return [value.slice(0, 4), \"-\", value.slice(4, 6), \"-\", value.slice(6, 8)].join('');\n } \n return formatDate(value, outputFormat, this.locale);\n }\n return value;\n }\n}\n","
    \n
    \n
    \n \n
    \n
    \n
    \n","export const Style2Pages = {\n '/opencalls': {\n pageTitle: 'Assigned Open Calls Details',\n apiRequestHandler: '/metrics/opencalls/details',\n backPageLabel: 'Back',\n backPageLink: '/lastSelectedDashboard',\n dataArrayKey: 'tickets',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'assigned_open_call_details.xlsx',\n dataCols: [\n {\n title: 'Ticket No',\n key: 'number',\n refLink: 'numberlink',\n width: 100\n },\n {\n title: 'Ticket Owner',\n key: 'ticketowner',\n width: 60\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 60\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n width: 80\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Ticket Comment',\n key: 'comment',\n width: 60\n },\n {\n title: 'Open Date',\n key: 'opendate',\n customDateFormat: { inputFormat: 'yyyyMMdd', outputFormat: 'yyyy-MM-dd' },\n width: 50\n },\n {\n title: 'Aged',\n key: 'aged',\n renderAgedYNStyle: true,\n width: 50\n },\n {\n title: 'Aging Days',\n key: 'agingdays',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Ticket Category',\n key: 'type',\n width: 50\n },\n {\n title: 'Exp Code',\n key: 'expcode',\n width: 50\n },\n {\n title: 'Exp Code Description',\n key: 'expcodedesc',\n width: 80\n }\n ]\n }\n },\n '/hotsheets': {\n pageTitle: 'NPS Open Hotsheet Details',\n apiRequestHandler: '/metrics/hotsheets/details',\n backPageLabel: 'Back',\n backPageLink: '/',\n dataArrayKey: 'nps',\n dataArraySplitColKey: 'scores',\n table: {\n type: 'style2',\n exportFileName: 'nps_open_hotsheet_details.xlsx',\n dataCols: [\n {\n title: 'NPS Category',\n key: 'resolved',\n width: 80\n },\n {\n title: 'Customer Number',\n key: 'customernumber',\n hidden: true,\n export: true,\n width: 50\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80,\n renderCustomerNameNumStyle: true\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Interview Date',\n key: 'interviewdate',\n width: 50\n }\n ],\n dataArraySplitCols: [\n {\n title: 'Overall', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'overall',\n width: 50,\n type: 'int'\n },\n {\n title: 'Field Service', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'fieldservice',\n width: 50,\n type: 'int'\n },\n {\n title: 'Product Quality',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productquality',\n width: 50,\n type: 'int'\n },\n {\n title: 'Product Delivery',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productdelivery',\n width: 50,\n type: 'int'\n },\n {\n title: 'Sales Rep',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'salesrep',\n width: 50,\n type: 'int'\n },\n {\n title: 'Technical Support',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'technicalsupport',\n width: 50,\n type: 'int'\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n width: 80,\n drillDownDetailsColName: 'hotsheets_survey_comments',\n drillDownDetailsLabel: 'More',\n drillDownDetailsLink: 'survey_comments'\n }\n ]\n }\n },\n '/sdfr/details': {\n pageTitle: 'SDFR Details - Service Demand Tickets Only',\n apiRequestHandler: '/metrics/sdfr/details',\n backPageLabel: 'Back',\n backPageLink: '/sdfr',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'sdfr_details_service_demand_tkts_only.xlsx',\n dataCols: [\n {\n title: 'Ticket Number',\n key: 'ticketnumber',\n refLink: 'ticketnumberlink',\n width: 100\n },\n {\n title: 'Serial Number',\n key: 'serialno',\n width: 80\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Open Date',\n key: 'opendate',\n width: 50\n },\n {\n title: 'Closed Date',\n key: 'closeddate',\n width: 50\n },\n {\n title: 'Elapsed Hours',\n key: 'elapsedhours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Hit/Miss',\n key: 'hit',\n width: 50,\n renderHitMissStyle: true\n }\n ]\n }\n },\n '/ftfr/details': {\n pageTitle: 'FTFR Details - Only Graded Tickets Shown',\n apiRequestHandler: '/metrics/ftfr/details',\n backPageLabel: 'Back',\n backPageLink: '/ftfr',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'ftfr_details_graded_tkts_only.xlsx',\n dataCols: [\n {\n title: 'Ticket #1',\n key: 'ticket1',\n refLink: 'ticketlink',\n width: 80\n },\n {\n title: 'Serial Number',\n key: 'ticksrno',\n width: 80\n },\n {\n title: 'T1 Closed Date',\n key: 't1closeddate',\n width: 50\n },\n {\n title: 'Ticket #2',\n key: 'ticket2',\n refLink: 'ticketlink',\n width: 80\n },\n {\n title: 'T2 Opened Date',\n key: 'ticket2opendate',\n width: 50\n },\n {\n title: 'Elapsed Days',\n key: 'elapseddate',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Hit/Miss',\n key: 'hitmiss',\n width: 50,\n renderHitMissStyle: true\n }\n ]\n }\n },\n '/uptime/details': {\n pageTitle: 'Uptime Details',\n apiRequestHandler: '/metrics/uptime/details',\n backPageLabel: 'Back',\n backPageLink: '/uptime',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'uptime_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'cust',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Total Hours Down',\n key: 'aggdhrsdown',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Total Days Down',\n key: 'aggdaysdown',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Uptime %',\n key: 'agguptimeper',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ],\n drillDownCols: [\n {\n title: 'Details',\n width: 80,\n drillDownDetailsColName: 'uptime_customer_details',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: 'customerdetails'\n }\n ]\n }\n },\n '/ticketrending/details': {\n pageTitle: 'Ticket Trending Details',\n apiRequestHandler: '/metrics/ticketrending/details',\n backPageLabel: 'Back',\n backPageLink: '/ticketrending',\n dataArrayKey: 'tickets',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'ticket_trending_details.xlsx',\n dataCols: [\n {\n title: 'Ticket No',\n key: 'ticketdetails',\n refLink: 'numberlink',\n width: 80\n },\n {\n title: 'Ticket Owner',\n key: 'ticketowner',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'instrument',\n width: 65\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n width: 80\n },\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'Summary Desc',\n key: 'summarydesc',\n width: 80\n },\n {\n title: 'Ticket Trending Name',\n key: 'tickettrendingname',\n width: 60\n },\n {\n title: 'Open Date',\n key: 'opendate',\n width: 50\n },\n {\n title: 'Closed Date',\n key: 'closeddate',\n width: 50\n },\n {\n title: 'Experience Code',\n key: 'expcode',\n width: 50\n },\n {\n title: 'Experience Code Desc',\n key: 'expcodedesc',\n width: 80\n }\n ]\n }\n },\n '/trt/details': {\n pageTitle: 'Total Resolution Time Details',\n apiRequestHandler: '/metrics/trt/details',\n backPageLabel: 'Back',\n backPageLink: '/trt',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'total_resolultion_time_details.xlsx',\n dataCols: [\n {\n title: 'Ticket Number',\n key: 'ticketnumber',\n refLink: 'ticketnumberlink',\n width: 80\n },\n {\n title: 'Resolution Time (Days)',\n key: 'resolutiontime',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Start Date',\n key: 'startdate',\n width: 50\n },\n {\n title: 'End Date',\n key: 'enddate',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'pldesc',\n width: 65\n },\n {\n title: 'SN',\n key: 'sn',\n width: 80\n },\n {\n title: 'Customer',\n key: 'cust',\n width: 80\n },\n {\n title: 'Experience Code and Desc',\n key: 'expcodedesc',\n width: 80\n },\n {\n title: 'Ticket Comments',\n key: 'ticketcomments',\n width: 80\n }\n ]\n }\n },\n '/tsb': {\n pageTitle: 'Open TSB Details',\n apiRequestHandler: '/metrics/tsb/details',\n backPageLabel: 'Back',\n backPageLink: '/lastSelectedDashboard',\n dataArrayKey: 'tickets',\n table: {\n type: 'style2',\n exportFileName: 'open_tsb_details.xlsx',\n dataCols: [\n {\n title: 'TSB Due Date',\n key: 'tsbduedate',\n width: 50,\n dateFormat: 'yyyy-MM-dd',\n filter: 'date'\n },\n {\n title: 'Due in NNN days',\n key: 'duein',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Required',\n key: 'tsbrequired',\n width: 50\n },\n {\n title: 'TSB #',\n key: 'tsbno',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'TSB Desc',\n key: 'tsbdesc',\n width: 60\n },\n {\n title: 'Instrument',\n key: 'instrument',\n width: 65\n },\n {\n title: 'SN',\n key: 'sn',\n width: 75\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Customer',\n key: 'custname',\n width: 80\n },\n {\n title: 'Ticket Number',\n key: 'ticketno',\n customValueIfBlank: '',\n width: 80\n },\n {\n title: 'Ticket Owner',\n key: 'ticketowner',\n customValueIfBlank: '-',\n width: 50\n },\n {\n title: 'Primary TSS',\n key: 'PrimaryTSS',\n width: 50\n },\n {\n title: 'Secondary TSS',\n key: 'SecondaryTSS',\n width: 50\n },\n {\n title: 'Tertiary TSS',\n key: 'TertiaryTSS',\n width: 50\n }\n ]\n }\n },\n '/pm': {\n pageTitle: 'PM Status Details',\n apiRequestHandler: '/metrics/pm/details',\n backPageLabel: 'Back',\n backPageLink: '/lastSelectedDashboard',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n exportFileName: 'pm_status_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'Instrument',\n key: 'instrument',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'srno',\n width: 80\n },\n {\n title: 'Last PM Date',\n key: 'lastpm',\n customValueIfBlank: '',\n width: 50\n },\n {\n title: 'Days Until Due',\n key: 'daysdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Next PM Date',\n key: 'nextpm',\n customValueIfBlank: '',\n width: 50\n }\n ]\n }\n },\n '/customerNps/details': {\n pageTitle: 'Customer NPS Survey Details',\n apiRequestHandler: '/metrics/nps/detail',\n backPageLabel: 'Back',\n backPageLink: '/customerNps',\n dataArrayKey: 'details',\n dataArraySplitColKey: 'scores',\n table: {\n type: 'style2',\n exportFileName: 'customer_nps_survey_details.xlsx',\n dataCols: [\n {\n title: 'NPS Category',\n key: 'resolved',\n width: 60\n },\n {\n title: 'Customer Number',\n key: 'customernumber',\n hidden: true,\n export: true,\n width: 50\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80,\n renderCustomerNameNumStyle: true\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Interview Date',\n key: 'interviewdate',\n customStyle: { 'text-align': 'right' },\n width: 50\n }\n ],\n dataArraySplitCols: [\n {\n title: 'Overall', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'overall',\n width: 50,\n type: 'int'\n },\n {\n title: 'Field Service', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'fieldservice',\n width: 50,\n type: 'int'\n },\n {\n title: 'Product Quality',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'productquality',\n width: 50,\n type: 'int'\n },\n {\n title: 'Product Delivery',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'productdelivery',\n width: 50,\n type: 'int'\n },\n {\n title: 'Sales Rep',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'salesrep',\n width: 50,\n type: 'int'\n },\n {\n title: 'Technical Support',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n customStyle: { 'text-align': 'right' },\n // customValueIfBlank: 'N/A',\n key: 'technicalsupport',\n width: 50,\n type: 'int'\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n width: 60,\n drillDownDetailsColName: 'customer_nps_survey_comments',\n drillDownDetailsLabel: 'More',\n drillDownDetailsLink: 'survey_comments'\n }\n ]\n }\n },\n '/CRLSummary': {\n pageTitle: 'Current Instrument Quantity',\n apiRequestHandler: '/metrics/CRLSummary',\n dataArrayKey: 'values',\n table: {\n type: 'style2',\n exportFileName: 'current_instrument_quantity_details.xlsx',\n detailLink: '/CRLSummary/details',\n dataCols: [\n {\n title: 'Instrument',\n key: 'PL',\n width: 100\n },\n {\n title: 'Quantity',\n key: 'Quantity',\n customStyle: { 'text-align': 'right' },\n width: 100,\n type: 'int'\n }\n ]\n }\n },\n '/proactive/details': {\n pageTitle: 'Proactive/Reactive Ticket Details',\n apiRequestHandler: '/metrics/proactive/details',\n backPageLabel: 'Back',\n backPageLink: '/proactive',\n dataArrayKey: 'details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'proactive_reactive_ticket_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Ticket Number',\n key: 'ticketnumber',\n refLink: 'ticketnumberlink',\n width: 80\n },\n {\n title: 'SN',\n key: 'serialno',\n width: 80\n },\n {\n title: 'Open Date',\n key: 'opendate',\n width: 50\n },\n {\n title: 'Closed Date',\n key: 'closeddate',\n width: 50\n },\n {\n title: 'Experience Code Desc',\n key: 'experiencecodedesc',\n width: 80\n },\n {\n title: 'Summary Desc',\n key: 'summarydesc',\n width: 80\n },\n {\n title: 'Hit/Miss',\n key: 'hit',\n width: 80,\n renderHitMissStyle: true\n }\n ]\n }\n },\n '/orders/intermediate': {\n pageTitle: 'Orders',\n apiRequestHandler: '/metrics/orders/intermediate',\n backPageLabel: 'Back',\n backPageLink: '/orders',\n dataArrayKey: 'orders',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'customer_orders.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'Order #',\n key: 'ordernumber',\n customStyle: { 'text-align': 'right' },\n width: 80\n },\n {\n title: 'Order Type',\n key: 'ordertype',\n width: 80\n },\n {\n title: 'Order Date',\n key: 'orderdate',\n dateFormat: 'yyyy-MM-dd',\n width: 50\n },\n {\n title: 'Order Status',\n key: 'orderstatus',\n width: 60\n },\n {\n title: 'Recurs',\n key: 'recurrence',\n customValueIfBlank: '',\n width: 60\n }\n ],\n drillDownCols: [\n {\n title: 'Details',\n width: 80,\n drillDownDetailsColName: 'customer_order_details',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/orders/details'\n }\n ]\n }\n },\n '/alwaysonuptime/details': {\n pageTitle: 'ALWAYS ON Uptime Details',\n apiRequestHandler: '/metrics/alwaysonuptime/details',\n backPageLabel: 'Back',\n backPageLink: '/alwaysonuptime',\n dataArrayKey: 'instruments',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'always_on_uptime_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'Country',\n key: 'countryDesc',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlineDescription',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'sn',\n width: 80\n },\n {\n title: 'Guarantee Achieved',\n key: 'guaranteeAchieved',\n width: 50\n },\n {\n title: 'Uptime % 12 MA',\n key: 'uptime12ma',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Uptime % 3 MA',\n key: 'uptime3ma',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'AL 12 MA',\n key: 'alInstalled',\n width: 50\n },\n {\n title: 'ALC % 12 MA',\n key: 'alcpercent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'ALC 12 MA',\n key: 'alc',\n width: 50,\n renderALC12MAStyle: true\n },\n {\n title: 'Maint Score',\n key: 'alcMaintainenceScore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Contract LN Desc',\n key: 'serviceContractLNDesc',\n width: 50\n },\n {\n title: 'Contract Start Date',\n key: 'contractStartDate',\n width: 50\n },\n {\n title: 'Contract End Date',\n key: 'contractEndDate',\n width: 50\n }\n ]\n }\n },\n '/util_workload/details': {\n pageTitle: 'Utilization and Tickets Per Day Summary Previous 12 months',\n apiRequestHandler: '/metrics/fsrtpd/details',\n backPageLabel: 'Back',\n backPageLink: '/util_workload',\n dataArrayKey: 'Details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'utilization_workload_details.xlsx',\n dataCols: [\n {\n title: 'YYYY-MM',\n key: 'Period',\n width: 60\n },\n {\n title: 'Ticket Quantity',\n key: 'TicketCount',\n customStyle: { 'text-align': 'right' },\n customValueIfBlank: 'N/A',\n width: 50,\n type: 'int'\n },\n {\n title: 'Tickets Per Day',\n key: 'TicketsPerDay',\n customStyle: { 'text-align': 'right' },\n customValueIfBlank: 'N/A',\n width: 50,\n type: 'float'\n },\n {\n title: 'Labor Hours',\n key: 'LaborHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Travel Hours',\n key: 'TravelHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Total Hours',\n key: 'TotalHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Available Hours',\n key: 'AvailableHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Utilization % (1MA)',\n key: 'Utilization',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/tickets_per_day/details': {\n pageTitle: 'Utilization and Tickets Per Day Summary Previous 12 months',\n apiRequestHandler: '/metrics/fsrtpd/details',\n backPageLabel: 'Back',\n backPageLink: '/tickets_per_day',\n dataArrayKey: 'Details',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'utilization_workload_details.xlsx',\n dataCols: [\n {\n title: 'YYYY-MM',\n key: 'Period',\n width: 60\n },\n {\n title: 'Ticket Quantity',\n key: 'TicketCount',\n customStyle: { 'text-align': 'right' },\n customValueIfBlank: 'N/A',\n width: 50,\n type: 'int'\n },\n {\n title: 'Tickets Per Day',\n key: 'TicketsPerDay',\n customStyle: { 'text-align': 'right' },\n customValueIfBlank: 'N/A',\n width: 50,\n type: 'float'\n },\n {\n title: 'Labor Hours',\n key: 'LaborHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Travel Hours',\n key: 'TravelHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Total Hours',\n key: 'TotalHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Available Hours',\n key: 'AvailableHours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Utilization % (1MA)',\n key: 'Utilization',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/rnps/detail': {\n pageTitle: 'rNPS Surveys',\n apiRequestHandler: '/metrics/rnps/detail',\n backPageLabel: 'Back',\n backPageLink: '/rnps',\n dataArrayKey: 'rows',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'rnps_surveys_ambassador_details.xlsx',\n dataCols: [\n {\n title: 'Overall Score',\n key: 'value',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Customer Number',\n key: 'customernum',\n hidden: true,\n width: 50\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80,\n renderCustomerStyleForAmbMetrics: true\n },\n {\n title: 'Country',\n key: 'country',\n width: 50,\n },\n {\n title: 'Interview Date',\n key: 'interviewdate',\n width: 50\n },\n {\n title: 'rNPS Category',\n key: 'resolved',\n width: 50\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n width: 80,\n drillDownDetailsColName: 'rnps_survey_comments',\n drillDownDetailsLabel: 'More',\n drillDownDetailsLink: 'survey_comments'\n }\n ]\n }\n },\n '/amb_orders/intermediate': {\n pageTitle: 'Orders',\n apiRequestHandler: '/amb_orders/intermediate',\n backPageLabel: 'Back',\n backPageLink: '/amb_orders',\n dataArrayKey: 'orders',\n table: {\n type: 'style2',\n needEntireApiDataRecord: true,\n exportFileName: 'amb_customer_orders.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'Order #',\n key: 'ordernumber',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Order Type',\n key: 'ordertype',\n width: 80\n },\n {\n title: 'Order Date',\n key: 'orderdate',\n dateFormat: 'yyyy-MM-dd',\n width: 50\n },\n {\n title: 'Order Status',\n key: 'orderstatus',\n width: 50\n },\n {\n title: 'Recurs',\n key: 'recurrence',\n width: 50\n }\n ],\n drillDownCols: [\n {\n title: 'Details',\n width: 60,\n drillDownDetailsColName: 'amb_customer_order_details',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/amb_orders/details'\n }\n ]\n }\n }\n};\n","
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n {{dataItem[col.ref]}} ({{dataItem['customernumber']}})\n \n \n \n \n
    N
    \n
    Y
    \n
    \n
    \n \n \n
    {{dataItem[col.ref]}}
    \n
    {{dataItem[col.ref]}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n {{col.drillDownDetailsLabel}}\n \n \n \n \n {{dataItem[col.ref] | date: col.dateFormat }}\n \n \n \n \n Anonymous\n \n \n \n \n {{dataItem[col.ref] | customDateFormatter: col.customDateFormat.inputFormat:col.customDateFormat.outputFormat }}\n \n \n \n \n {{dataItem[col.ref] | emptyMask: col.customValueIfBlank }}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n {{dataItem[col.ref]}} ({{dataItem['customernumber']}})\n \n \n \n \n
    N
    \n
    Y
    \n
    \n
    \n \n \n
    {{dataItem[col.ref]}}
    \n
    {{dataItem[col.ref]}}
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n {{col.drillDownDetailsLabel}}\n \n \n \n \n {{dataItem[col.ref] | date: col.dateFormat }}\n \n \n \n \n Anonymous\n \n \n \n \n {{dataItem[col.ref] | customDateFormatter: col.customDateFormat.inputFormat:col.customDateFormat.outputFormat }}\n \n \n \n \n {{dataItem[col.ref] | emptyMask: col.customValueIfBlank }}\n \n \n \n \n \n \n
    \n
    ","import { Component, OnInit, Renderer2 } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {Location} from '@angular/common';\nimport {Style2Pages} from '../../configuration/details/style2-pages';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-style2-grid',\n templateUrl: './style2-grid.component.html',\n styleUrls: ['./style2-grid.component.scss']\n})\nexport class Style2GridComponent extends GridComponent implements OnInit {\n\n style2Pages = Style2Pages;\n config = null;\n public state = RequestState.Inactive;\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n protected refreshHandler: RefreshHandlerService\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style2Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style2Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n const types = {};\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n const colData = {\n ref: this.config.table.dataCols[i].key,\n refLink: this.config.table.dataCols[i].refLink,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n dateFormat: this.config.table.dataCols[i].dateFormat,\n class: this.config.table.dataCols[i].class,\n hidden: this.config.table.dataCols[i].hidden,\n export: false,\n renderCustomerNameNumStyle: this.config.table.dataCols[i].renderCustomerNameNumStyle,\n renderHitMissStyle: this.config.table.dataCols[i].renderHitMissStyle,\n renderALC12MAStyle: this.config.table.dataCols[i].renderALC12MAStyle,\n renderCustomerStyleForAmbMetrics: this.config.table.dataCols[i].renderCustomerStyleForAmbMetrics,\n customStyle: this.config.table.dataCols[i].customStyle,\n customDateFormat: this.config.table.dataCols[i].customDateFormat,\n customValueIfBlank: this.config.table.dataCols[i].customValueIfBlank,\n renderAgedYNStyle: this.config.table.dataCols[i].renderAgedYNStyle,\n\n };\n this.dataCols.push(colData);\n if (colData.hidden !== true || this.config.table.dataCols[i].export) {\n const colDataExcel = {\n ref: this.config.table.dataCols[i].key + 'Export',\n refLink: this.config.table.dataCols[i].refLink,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n dateFormat: this.config.table.dataCols[i].dateFormat,\n class: this.config.table.dataCols[i].class,\n hidden: true,\n export: true,\n renderCustomerNameNumStyle: this.config.table.dataCols[i].renderCustomerNameNumStyle,\n renderHitMissStyle: this.config.table.dataCols[i].renderHitMissStyle,\n renderALC12MAStyle: this.config.table.dataCols[i].renderALC12MAStyle,\n renderCustomerStyleForAmbMetrics: this.config.table.dataCols[i].renderCustomerStyleForAmbMetrics,\n customStyle: this.config.table.dataCols[i].customStyle,\n customDateFormat: this.config.table.dataCols[i].customDateFormat,\n customValueIfBlank: this.config.table.dataCols[i].customValueIfBlank,\n renderAgedYNStyle: this.config.table.dataCols[i].renderAgedYNStyle,\n };\n this.dataCols.push(colDataExcel);\n if ('type' in this.config.table.dataCols[i]) {\n types[this.config.table.dataCols[i].key + 'Export'] = this.config.table.dataCols[i].type;\n }\n }\n if ('type' in this.config.table.dataCols[i]) {\n types[this.config.table.dataCols[i].key] = this.config.table.dataCols[i].type;\n }\n }\n if (this.config.dataArraySplitColKey !== undefined) {\n for (let i = 0; i < this.config.table.dataArraySplitCols.length; i++) {\n const splitColData = {\n ref: this.config.table.dataArraySplitCols[i].key,\n description: this.config.table.dataArraySplitCols[i].title,\n width: this.config.table.dataArraySplitCols[i].width,\n customStyle: this.config.table.dataArraySplitCols[i].customStyle,\n customValueIfBlank: this.config.table.dataArraySplitCols[i].customValueIfBlank,\n hidden: false,\n export: false\n };\n this.dataCols.push(splitColData);\n if (splitColData.hidden !== true) {\n const splitColDataExcel = {\n ref: this.config.table.dataArraySplitCols[i].key + 'Export',\n description: this.config.table.dataArraySplitCols[i].title,\n width: this.config.table.dataArraySplitCols[i].width,\n customStyle: this.config.table.dataArraySplitCols[i].customStyle,\n customValueIfBlank: this.config.table.dataArraySplitCols[i].customValueIfBlank,\n hidden: true,\n export: true,\n };\n this.dataCols.push(splitColDataExcel);\n if ('type' in this.config.table.dataArraySplitCols[i]) {\n types[this.config.table.dataArraySplitCols[i].key + 'Export'] = this.config.table.dataArraySplitCols[i].type;\n }\n }\n if ('type' in this.config.table.dataArraySplitCols[i]) {\n types[this.config.table.dataArraySplitCols[i].key] = this.config.table.dataArraySplitCols[i].type;\n }\n }\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n this.dataCols.push({\n description: this.config.table.drillDownCols[i].title,\n width: this.config.table.drillDownCols[i].width,\n drillDownDetailsColName: this.config.table.drillDownCols[i].drillDownDetailsColName,\n drillDownDetailsLabel: this.config.table.drillDownCols[i].drillDownDetailsLabel,\n drillDownDetailsLink: this.config.table.drillDownCols[i].drillDownDetailsLink\n });\n }\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let dataRow = {};\n if (this.config.table.needEntireApiDataRecord === true) {\n dataRow = apiData[this.config.dataArrayKey][r];\n for (const rowCol in dataRow) {\n if (rowCol in types) {\n if (types[rowCol] === 'int') {\n dataRow[rowCol] = parseInt(dataRow[rowCol]);\n } else if (types[rowCol] === 'float') {\n dataRow[rowCol] = parseFloat(dataRow[rowCol]);\n }\n if (isNaN(dataRow[rowCol])) {\n dataRow[rowCol] = null;\n }\n if (rowCol + 'Export' in dataRow) {\n dataRow[rowCol + 'Export'] = dataRow[rowCol];\n }\n }\n }\n this.dataRows.push(dataRow);\n } else {\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n dataRow[this.config.table.dataCols[i].key] = apiData[this.config.dataArrayKey][r][this.config.table.dataCols[i].key];\n }\n if (this.config.dataArraySplitColKey !== undefined) {\n let arrayObjToSplit = apiData[this.config.dataArrayKey][r][this.config.dataArraySplitColKey];\n for (let i = 0; i < this.config.table.dataArraySplitCols.length; i++) {\n for (let j = 0; j < arrayObjToSplit.length; j++) {\n if (this.config.table.dataArraySplitCols[i].title === arrayObjToSplit[j][this.config.table.dataArraySplitCols[i].arrayMappingKey]) {\n dataRow[this.config.table.dataArraySplitCols[i].key] = arrayObjToSplit[j][this.config.table.dataArraySplitCols[i].arrayMappingValue];\n break;\n }\n }\n }\n }\n // if (this.config.table.drillDownCols !== undefined) {\n // for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n // dataRow[this.config.table.drillDownCols[i].drillDownDetailsKey]\n // = apiData[this.config.dataArrayKey][r][this.config.table.drillDownCols[i].drillDownDetailsKey];\n // }\n // }\n for (const rowCol in dataRow) {\n if (rowCol in types) {\n if (types[rowCol] === 'int') {\n dataRow[rowCol] = parseInt(dataRow[rowCol]);\n } else if (types[rowCol] === 'float') {\n dataRow[rowCol] = parseFloat(dataRow[rowCol]);\n }\n if (isNaN(dataRow[rowCol])) {\n dataRow[rowCol] = null;\n }\n if (rowCol + 'Export' in dataRow) {\n dataRow[rowCol + 'Export'] = dataRow[rowCol];\n }\n }\n }\n this.dataRows.push(dataRow);\n }\n }\n // transform data rows to add in export data\n for (const rowKey in this.dataRows) {\n if (this.dataRows.hasOwnProperty(rowKey)) {\n const row = this.dataRows[rowKey];\n for (const rowCol in row) {\n if (rowCol in row) {\n const columnInfoExport = this.getColumnInfo(this.dataCols, rowCol + 'Export');\n const columnInfo = this.getColumnInfo(this.dataCols, rowCol);\n let value = row[rowCol];\n if (columnInfo !== null && columnInfo.renderHitMissStyle) {\n if (value === 'Yes' || value === 'hit') {\n value = 'Hit';\n } else if (value === 'No' || value === 'miss') {\n value = 'Miss';\n }\n }\n if (columnInfo !== null && this.config.pageTitle == 'Open TSB Details' && columnInfo.ref === 'tsbduedate') {\n value = new Date(value);\n if (value instanceof Date && !isNaN(value.valueOf())) {\n let month = '' + (value.getMonth() + 1);\n let day = '' + value.getDate();\n const year = value.getFullYear();\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n value = year + '-' + month + '-' + day;\n } else {\n value = '';\n }\n }\n if (columnInfo !== null && this.config.pageTitle == 'Orders' && columnInfo.ref === 'orderdate') {\n value = new Date(value);\n if (value instanceof Date && !isNaN(value.valueOf())) {\n let month = '' + (value.getMonth() + 1);\n let day = '' + value.getDate();\n const year = value.getFullYear();\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n value = year + '-' + month + '-' + day;\n } else {\n value = '';\n }\n }\n if (columnInfo !== null\n && this.config.pageTitle === 'Uptime Details'\n && (columnInfo.ref === 'aggdhrsdown' || columnInfo.ref === 'aggdaysdown')) {\n if (value === '' || value === null) { // || value == 0 || value == 0.0) {\n value = null;\n }\n }\n let newValue = value;\n if (columnInfoExport !== null && columnInfoExport.export === true) {\n if (columnInfoExport.renderAgedYNStyle) {\n if (value == 1 || value === true || value === 'true' || value === 'Y') {\n newValue = 'Y';\n } else if (value != 1 && value !== true && value !== 'true' && value !== 'Y') {\n newValue = 'N';\n }\n }\n this.dataRows[rowKey][rowCol] = value;\n this.dataRows[rowKey][rowCol + 'Export'] = newValue;\n }\n /*if (columnInfo !== null) {// && columnInfo.) {// for changing non excel grid values\n if (value == 1 || value === true) {\n this.dataRows[rowKey][rowCol] = 'Y';\n } else if (value == 0 || value === false) {\n this.dataRows[rowKey][rowCol] = 'N';\n }\n } else if (rowCol in types) {\n if (types[rowCol] === 'int') {\n this.dataRows[rowKey][rowCol] = parseInt(dataRow[rowCol]);\n } else if (types[rowCol] === 'float') {\n this.dataRows[rowKey][rowCol] = parseFloat(dataRow[rowCol]);\n }\n }*/\n }\n }\n }\n }\n this.updateGrid();\n }\n });\n }\n }\n\n getColumnInfo(dataCols, rowCol) {\n for (let i = 0; i < dataCols.length; i++) {\n if (dataCols[i].ref === rowCol) {\n return dataCols[i];\n }\n }\n return null;\n }\n\n public getDrillDownDetailsLinkWithParams(colName: any, drillDownLink: any, dataItem: any) {\n let hrefRouterLink = '';\n if (colName === 'hotsheets_survey_comments' || colName === 'customer_nps_survey_comments') {\n hrefRouterLink = drillDownLink + \"/\" + dataItem['customernumber'] + \"/\" + dataItem['country'] + \"/\" + dataItem['interviewdate'];\n } else if (colName == 'uptime_customer_details') {\n hrefRouterLink = drillDownLink + \"/\" + dataItem['custid'] + \"/\" + dataItem['cust'] + \"/\" + dataItem['country'];\n } else if (colName == 'customer_order_details' || colName == 'amb_customer_order_details') {\n hrefRouterLink = drillDownLink + \"/\" + dataItem['customer'] + \"/\" + dataItem['ordernumber'] + \"/\" + dataItem['orderstatus'];\n } else if (colName == 'rnps_survey_comments') {\n hrefRouterLink = drillDownLink + \"/\" + dataItem['value'] + \"/\" + (dataItem['customername'] == null ? 'NA' : encodeURIComponent(dataItem['customername']))\n + \"/\" + dataItem['country'] + \"/\" + dataItem['interviewdate'] + \"/\" + dataItem['resolved'];\n } else {\n hrefRouterLink = drillDownLink;\n }\n\n return hrefRouterLink;\n }\n\n public showDetailsLink(colName: any, dataItem: any) {\n if (colName == 'rnps_survey_comments') {\n if (dataItem['detractor'] != undefined && dataItem['detractor'].length > 0) {\n return true;\n } else {\n return false;\n }\n }\n return true;\n }\n\n}\n","
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { Style2Pages } from 'src/app/configuration/details/style2-pages';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\n\n@Component({\n selector: 'app-style2',\n templateUrl: './style2.component.html',\n styleUrls: ['./style2.component.scss']\n})\nexport class Style2Component implements OnInit {\n\n style2Pages = Style2Pages;\n config = null;\n\n constructor(\n private location: Location,\n private navbarBuilderService: NavbarBuilderService\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style2Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style2Pages[currentRouterLocation];\n // console.log(this.config);\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: true,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n }\n }\n}\n","export const Style3Pages = {\n '/hsi/details': {\n pageTitle: 'HSI - Instruments',\n apiRequestHandler: '/metrics/hsi/details',\n backPageLabel: 'Back',\n backPageLink: '/hsi',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'hsi_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n width: 50,\n customStyle: { 'text-align': 'right' },\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n width: 50,\n customStyle: { 'text-align': 'right' },\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/cpyr/details': {\n pageTitle: 'CPY-R - Instruments',\n apiRequestHandler: '/metrics/cpyr/details',\n backPageLabel: 'Back',\n backPageLink: '/cpyr',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'cpyr_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n width: 50,\n customStyle: { 'text-align': 'right' },\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n width: 50,\n customStyle: { 'text-align': 'right' },\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/servicecost/details': {\n pageTitle: 'Service Cost - Instruments',\n apiRequestHandler: '/metrics/servicecost/details',\n backPageLabel: 'Back',\n backPageLink: '/servicecost',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'servicecost_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 75\n },\n {\n title: 'Instrument Name',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 75\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'CPY-T 12mo',\n key: 'cpy12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Actual Cost',\n key: 'actualcost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Goal Cost',\n key: 'goalcost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Parts Cost',\n key: 'partscostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Travel Cost',\n key: 'travelcostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Labor Cost',\n key: 'laborcostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n }\n ]\n }\n },\n '/alconnected/details': {\n pageTitle: 'AbbottLink Installed - Instruments',\n apiRequestHandler: '/metrics/alconnected/details',\n backPageLabel: 'Back',\n backPageLink: '/alconnected',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'al_installed_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n width: 50,\n customStyle: { 'text-align': 'right' },\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/alconnectivity/details': {\n pageTitle: 'AbbottLink Connectivity - Instruments',\n apiRequestHandler: '/metrics/alconnectivity/details',\n backPageLabel: 'Back',\n backPageLink: '/alconnectivity',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'alconnectivity_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50,\n type: 'int'\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/hci/details': {\n pageTitle: 'HCI - Instruments',\n apiRequestHandler: '/metrics/hci/details',\n backPageLabel: 'Back',\n backPageLink: '/hci',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'hci_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/cpyp/details': {\n pageTitle: 'CPY-P - Instruments',\n apiRequestHandler: '/metrics/cpyp/details',\n backPageLabel: 'Back',\n backPageLink: '/cpyp',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'cpyp_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true,\n type: 'int'\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true,\n type: 'int'\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/servicecosthours/details': {\n pageTitle: 'Service Hours - Instruments',\n apiRequestHandler: '/metrics/servicecosthours/details',\n backPageLabel: 'Back',\n backPageLink: '/servicecosthours',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'servicecosthours_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Instrument Name',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 75\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable',\n key: 'connectable',\n width: 50,\n hidden: true\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'CPY-T 12mo',\n key: 'cpy12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n // appears that these two are duplicates of the Service Cost columns\n // {\n // title: 'Actual Cost',\n // key: 'actualcost',\n // customStyle: { 'text-align': 'right' },\n // width: 50\n // },\n // {\n // title: 'Goal Cost',\n // key: 'goalcost',\n // customStyle: { 'text-align': 'right' },\n // width: 50\n // },\n {\n title: 'Parts Cost',\n key: 'partscostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Travel Hours 1mo',\n key: 'travelhours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Travel Cost',\n key: 'travelcostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Labor Hours 1mo',\n key: 'laborhours',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Labor Cost',\n key: 'laborcostcomponent',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n }\n ]\n }\n },\n '/utilization/details': {\n pageTitle: 'Low Utilization - Instruments',\n apiRequestHandler: '/metrics/utilization/details',\n backPageLabel: 'Back',\n backPageLink: '/utilization',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'utilization_instrument_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'Connectable %',\n key: 'connectable',\n hidden: true,\n width: 50\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Service Cost Goal',\n key: 'servicecostgoal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'SCpT',\n key: 'costpertest',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n },\n {\n title: 'CPY-P 12mo',\n key: 'cpyp12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R 3mo',\n key: 'cpyr3mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'CPY-R Goal',\n key: 'cpyr3goal',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'float'\n }\n ]\n }\n },\n '/CRLSummary/details': {\n pageTitle: 'Current Instrument Quantity',\n apiRequestHandler: '/metrics/CRLSummary/details',\n backPageLabel: 'Back',\n backPageLink: '/CRLSummary',\n dataArrayKey: 'instruments',\n table: {\n type: 'style3',\n exportFileName: 'current_instrument_quantity.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n /*{\n title: 'Country',\n key: 'country',\n width: 50\n },*/\n {\n title: 'Instrument',\n key: 'productlinename',\n width: 65\n },\n {\n title: 'Serial Number',\n key: 'instrumentsrno',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ],\n width: 80\n },\n {\n title: 'CPY-R 12mo',\n key: 'cpyr12mo',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'AL',\n key: 'al',\n width: 50,\n filterable: false,\n renderALStyle: true\n },\n {\n title: 'ALC %',\n key: 'connectableper',\n alKey: 'al',\n alConnectableCompareKey: 'connectable',\n width: 60,\n renderALConnectableStyle: true,\n type: 'float'\n },\n {\n title: 'Maint Score',\n key: 'maintscore',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderMaintenanceScoreStyle: true,\n type: 'int'\n },\n {\n title: 'HCI',\n key: 'hci',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'HSI',\n key: 'hsi',\n width: 50,\n renderHCIHSIStyle: true\n },\n {\n title: 'Service Cost',\n key: 'servicecost',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'Test Count',\n key: 'testcount',\n customStyle: { 'text-align': 'right' },\n width: 50,\n type: 'int'\n },\n {\n title: 'TSB Due',\n key: 'tsbdue',\n customStyle: { 'text-align': 'right' },\n width: 50,\n renderTSBDueStyle: true,\n type: 'int'\n },\n {\n title: 'Primary TSS',\n key: 'primarytssid',\n width: 50,\n },\n {\n title: 'Secondary TSS',\n key: 'secondarytssid',\n width: 50,\n },\n {\n title: 'Tertiary TSS',\n key: 'tertiarytssid',\n width: 50,\n }\n ]\n }\n }\n /*\n [Route(\"CRLSummary\")]\n [HttpPost]\n public HttpResponseMessage GetCRLSummaryIntermediate([FromBody]JObject obj)\n {\n var jsonObj = JsonConvert.SerializeObject(obj);\n CRLSummaryIntermediateInput inputObj = JsonConvert.DeserializeObject(jsonObj);\n\n inputObj.abbottid = WebAPIUtilies.ConvertAllBlankNull(inputObj.abbottid);\n inputObj.customerid = WebAPIUtilies.ConvertAllBlankNull(inputObj.customerid);\n inputObj.productlineid = WebAPIUtilies.ConvertAllBlankNull(inputObj.productlineid);\n inputObj.sn = WebAPIUtilies.ConvertAllBlankNull(inputObj.sn);\n inputObj.managerid = Convert.ToInt32(WebAPIUtilies.ConvertAllBlankNull(inputObj.managerid.ToString()));\n inputObj.metrictypeid = (int)MetricConstant.MetricType.Billboard;\n CRLSummaryIntermediateOutput CRLSummaryIntermediate = _metricsService.GetCRLSummaryIntermediateData(inputObj);\n return WebAPIUtilies.ConvertJsonToHttpResponseMessage(CRLSummaryIntermediate, this.Request);\n }\n\n /// \n /// Retrieves CRL Summary metric details, parsing a JSON request contained in the HttpRequest body.\n /// \n [Route(\"CRLSummary/details\")]\n [HttpPost]\n public HttpResponseMessage GetCRLSummaryDetails([FromBody]JObject obj)\n {\n var jsonObj = JsonConvert.SerializeObject(obj);\n CRLSummaryDetailInput inputObj = JsonConvert.DeserializeObject(jsonObj);\n\n inputObj.abbottid = WebAPIUtilies.ConvertAllBlankNull(inputObj.abbottid);\n inputObj.customerid = WebAPIUtilies.ConvertAllBlankNull(inputObj.customerid);\n inputObj.productlineid = WebAPIUtilies.ConvertAllBlankNull(inputObj.productlineid);\n inputObj.sn = WebAPIUtilies.ConvertAllBlankNull(inputObj.sn);\n inputObj.managerid = Convert.ToInt32(WebAPIUtilies.ConvertAllBlankNull(inputObj.managerid.ToString()));\n\n CRLSummaryDetailOutput CRLSummaryDetail = _metricsService.GetCRLSummaryDetailData(inputObj);\n return WebAPIUtilies.ConvertJsonToHttpResponseMessage(CRLSummaryDetail, this.Request);\n }\n\n */\n};\n","
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n {{dataItem[col.ref]}}\n {{dataItem[col.ref]}}\n {{dataItem[col.ref]}}\n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n {{dataItem[col.ref]}}\n {{dataItem[col.ref]}}\n \n \n \n \n {{dataItem[col.ref] | emptyMask}}\n {{dataItem[col.ref]}} \n \n \n \n \n {{dataItem[col.ref]}}\n \n
    \n \n
    \n \n
    \n \n \n \n \n
    ","import { Component, OnInit, Renderer2 } from '@angular/core';\nimport {GridComponent} from '../grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {Location} from '@angular/common';\nimport {Style3Pages} from '../../configuration/details/style3-pages';\nimport { combineLatest } from 'rxjs';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport { filterBy } from '@progress/kendo-data-query';\n\n@Component({\n selector: 'app-style3-grid',\n templateUrl: './style3-grid.component.html',\n styleUrls: ['./style3-grid.component.scss']\n})\nexport class Style3GridComponent extends GridComponent implements OnInit {\n dataCols = [];\n dataRows = [];\n\n style3Pages = Style3Pages;\n config = null;\n public state = RequestState.Inactive;\n\n public menuItems: any[] = [];\n public offset: any;\n public selected: any;\n public showContextMenu: boolean = false;\n private documentClickSubscription: any;\n\n constructor(\n protected location: Location,\n protected apiService: ApiService,\n private renderer: Renderer2,\n protected refreshHandler: RefreshHandlerService\n ) {\n super();\n this.onCellClick = this.onCellClick.bind(this);\n this.documentClickSubscription = this.renderer.listen('document', 'click', () => {\n this.showContextMenu = false;\n });\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style3Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style3Pages[currentRouterLocation];\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n const types = {};\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n const colData = {\n ref: this.config.table.dataCols[i].key,\n refLink: this.config.table.dataCols[i].refLink,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n renderRefStyle: this.config.table.dataCols[i].renderRefStyle,\n renderALStyle: this.config.table.dataCols[i].renderALStyle,\n alKey: this.config.table.dataCols[i].alKey,\n alConnectableCompareKey: this.config.table.dataCols[i].alConnectableCompareKey,\n renderALConnectableStyle: this.config.table.dataCols[i].renderALConnectableStyle,\n renderMaintenanceScoreStyle: this.config.table.dataCols[i].renderMaintenanceScoreStyle,\n renderHCIHSIStyle: this.config.table.dataCols[i].renderHCIHSIStyle,\n renderTSBDueStyle: this.config.table.dataCols[i].renderTSBDueStyle,\n class: this.config.table.dataCols[i].class,\n hidden: this.config.table.dataCols[i].hidden,\n export: false,\n customStyle: this.config.table.dataCols[i].customStyle,\n filterable: this.config.table.dataCols[i].filterable\n };\n this.dataCols.push(colData);\n if (colData.hidden !== true) {\n const colDataExcel = {\n ref: this.config.table.dataCols[i].key + 'Export',\n refLink: this.config.table.dataCols[i].refLink,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n renderRefStyle: this.config.table.dataCols[i].renderRefStyle,\n renderALStyle: this.config.table.dataCols[i].renderALStyle,\n alKey: this.config.table.dataCols[i].alKey,\n alConnectableCompareKey: this.config.table.dataCols[i].alConnectableCompareKey,\n renderALConnectableStyle: this.config.table.dataCols[i].renderALConnectableStyle,\n renderMaintenanceScoreStyle: this.config.table.dataCols[i].renderMaintenanceScoreStyle,\n renderHCIHSIStyle: this.config.table.dataCols[i].renderHCIHSIStyle,\n renderTSBDueStyle: this.config.table.dataCols[i].renderTSBDueStyle,\n class: this.config.table.dataCols[i].class,\n hidden: true,\n export: true,\n customStyle: this.config.table.dataCols[i].customStyle,\n filterable: this.config.table.dataCols[i].filterable\n };\n this.dataCols.push(colDataExcel);\n if ('type' in this.config.table.dataCols[i]) {\n types[this.config.table.dataCols[i].key + 'Export'] = this.config.table.dataCols[i].type;\n }\n }\n if ('type' in this.config.table.dataCols[i]) {\n types[this.config.table.dataCols[i].key] = this.config.table.dataCols[i].type;\n }\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n const row = apiData[this.config.dataArrayKey][r];\n const ALColumnInfo = this.getColumnInfo(this.dataCols, 'al');\n let alConnected = true;\n if ('al' in row && (row['al'] == 0 || row['al'] == 2)) {\n alConnected = false;\n }\n for (const rowCol in row) {\n const columnInfoExport = this.getColumnInfo(this.dataCols, rowCol + 'Export');\n const columnInfo = this.getColumnInfo(this.dataCols, rowCol);\n const value = row[rowCol];\n let newValue = value;\n if (columnInfoExport !== null && columnInfoExport.export === true) {\n if (columnInfoExport.renderALStyle) {\n if (value == 0) {\n newValue = 'AL NOT Installable';\n } else if (value == 1) {\n newValue = 'AL Installed';\n } else if (value == 2) {\n newValue = 'AL NOT Installed';\n }\n } else if (columnInfoExport.renderHCIHSIStyle) {\n if (value == 1 || value === true) {\n newValue = 'Y';\n } else if (value == 0 || value === false) {\n newValue = 'N';\n }\n }\n row[rowCol + 'Export'] = newValue;\n }\n if (columnInfo !== null && columnInfo.renderHCIHSIStyle) {\n if (value == 1 || value === true) {\n row[rowCol] = 'Y';\n } else if (value == 0 || value === false) {\n row[rowCol] = 'N';\n }\n } else if (rowCol in types) {\n if (types[rowCol] === 'int') {\n row[rowCol] = parseInt(row[rowCol]);\n } else if (types[rowCol] === 'float') {\n row[rowCol] = parseFloat(row[rowCol]);\n }\n if (isNaN(row[rowCol])) {\n row[rowCol] = null;\n }\n if (rowCol + 'Export' in row) {\n row[rowCol + 'Export'] = row[rowCol];\n }\n }\n if (!alConnected && ['connectableper', 'maintscore', 'testcount', 'costpertest'].includes(rowCol)) {\n row[rowCol] = null;\n }\n if (!alConnected && ['connectableperExport', 'maintscoreExport', 'testcountExport', 'costpertestExport'].includes(rowCol + 'Export')) {\n row[rowCol + 'Export'] = null;\n }\n }\n this.dataRows.push(row);\n }\n this.updateGrid();\n }\n });\n }\n }\n\n getColumnInfo(dataCols, rowCol) {\n for (let i = 0; i < dataCols.length; i++) {\n if (dataCols[i].ref === rowCol) {\n return dataCols[i];\n }\n }\n return null;\n }\n\n public onCellClick({dataItem, column, type, originalEvent}): void {\n let contextMenuItemArr = [];\n if (type === 'click' && column.field === this.config.table.contextMenuFieldName) {\n originalEvent.preventDefault();\n for (let r = 0; r < this.config.table.dataCols.length; r++) {\n let dataCol = this.config.table.dataCols[r];\n if (dataCol.contextMenuItems !== undefined) {\n for (let k = 0; k < dataCol.contextMenuItems.length; k++) {\n contextMenuItemArr.push({\n 'text': dataCol.contextMenuItems[k].text,\n 'iconUrl': dataCol.contextMenuItems[k].iconUrl, \n 'textLink': dataItem[dataCol.contextMenuItems[k].fieldName][dataCol.contextMenuItems[k].columnIndex] });\n }\n }\n }\n this.menuItems = contextMenuItemArr;\n this.showContextMenu = true;\n this.offset = { left: originalEvent.pageX, top: originalEvent.pageY };\n } else {\n this.showContextMenu = false;\n } \n }\n\n public menuItemSelected(item: any): void {\n this.selected = item;\n }\n\n getMaintenanceScoreStyle(item: any) {\n if (item !== undefined && parseInt(item) >= 0 && parseInt(item) <= 29) {\n return {\n color: 'red'\n };\n }\n return {\n color: 'black'\n };\n }\n\n /** This could be customized for global search functionality in Kendo UI grids */\n onInput(filter) {\n this.gridData = filterBy(this.dataRows, {\n logic: 'or',\n filters: [\n { field: \"customername\", operator: \"contains\", value: filter, ignoreCase: true },\n { field: \"instrumentsrno\", operator: \"contains\", value: filter, ignoreCase: true },\n ]\n });\n }\n}\n","
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { Style3Pages } from 'src/app/configuration/details/style3-pages';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\n\n@Component({\n selector: 'app-style3',\n templateUrl: './style3.component.html',\n styleUrls: ['./style3.component.scss']\n})\nexport class Style3Component implements OnInit {\n\n style3Pages = Style3Pages;\n config = null;\n\n constructor(\n private location: Location,\n private navbarBuilderService: NavbarBuilderService\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n if (this.style3Pages.hasOwnProperty(currentRouterLocation)) {\n this.config = this.style3Pages[currentRouterLocation];\n // console.log(this.config);\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: true,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n }\n }\n}\n","export const Style4Pages = {\n '/assay': {\n pageTitle: 'Top Assay Details',\n apiRequestHandler: '/metrics/assay/details',\n backPageLabel: 'Back',\n backPageLink: '/lastSelectedDashboard',\n dataArrayKey: 'customers',\n groupItemsKey: 'assays',\n groupField: 'customername',\n groupFieldId: 'custid',\n groupCountField: 'count',\n customerDetailsLink: 'customers',\n table: {\n type: 'style4',\n needEntireApiDataRecord: true,\n exportFileName: 'assay_details.xlsx',\n dataCols: [\n {\n title: 'Customer Name',\n key: 'customername',\n hidden: true,\n groupHeaderColumn: true\n },\n {\n title: 'Assay Name',\n key: 'assayname'\n },\n {\n title: 'Test Counts (3 months)',\n customStyle: { 'text-align': 'right' },\n key: 'testcount'\n },\n {\n title: '% All Tests',\n customStyle: { 'text-align': 'right' },\n key: 'alltestper',\n addCustomerDetailsLink: true\n }\n ]\n }\n },\n '/assay/customers': {\n pageTitle: 'Assay Customer Details',\n apiRequestHandler: '/metrics/assay/details/customerdetails',\n backPageLabel: 'Assay Details',\n backPageLink: '/assay',\n dataArrayKey: 'instruments',\n groupItemsKey: 'assays',\n groupField: 'instrumentnameserialnum',\n groupFieldsToAppend: ['instrumentname', 'serialno'],\n groupCountField: 'count',\n customerDetailsLink: 'customers',\n table: {\n type: 'style4',\n needEntireApiDataRecord: true,\n exportFileName: 'assay_customer_details.xlsx',\n dataCols: [\n {\n title: 'Instrument Name and Serial Number',\n key: 'instrumentnameserialnum',\n hidden: true,\n groupHeaderColumn: true\n },\n {\n title: 'Assay Name',\n key: 'assayname'\n },\n {\n title: 'Test Counts (3 months)',\n customStyle: { 'text-align': 'right' },\n key: 'testcount'\n },\n {\n title: '% All Tests',\n customStyle: { 'text-align': 'right' },\n key: 'alltestper'\n }\n ]\n }\n }\n};","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n {{value}}\n \n \n \n \n \n {{ aggregates[config.groupCountField] }} Unique Assays \n >\n \n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport { ActivatedRoute } from '@angular/router';\nimport { State } from '@progress/kendo-data-query';\nimport {ExcelExportData} from '@progress/kendo-angular-excel-export';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport { Style4Pages } from 'src/app/configuration/details/style4-pages';\n\n@Component({\n selector: 'app-style4',\n templateUrl: './style4.component.html',\n styleUrls: ['./style4.component.scss']\n})\nexport class Style4Component implements OnInit {\n\n dataCols = [];\n dataRows = [];\n groups = [];\n aggregates: any[] = [];\n\n gridData: any;\n exportState: State = {};\n\n style4Pages = Style4Pages;\n config = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) {\n // super();\n this.allData = this.allData.bind(this);\n }\n\n // checkIf(value: any){\n // debugger; //open the devtools and go to the view...code execution will stop here!\n // //..code to be checked... `value` can be inspected now along with all of the other component attributes\n // }\n\n ngOnInit(): void {\n\n const currentRouterLocation = this.location.path();\n Object.keys(this.style4Pages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.style4Pages[key];\n return;\n }\n });\n if (this.config != null) {\n\n let customerid;\n let customername;\n\n this.route.paramMap.subscribe(params => {\n customerid = params.get('customerid');\n customername = params.get('customername');\n });\n\n this.groups = [{ field: this.config.groupField }];\n\n const titleText = customername != null && customername.trim().length > 0 ? customername : this.config.pageTitle;\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: true,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: titleText,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n const params = { months: 12 };\n if (customerid !== undefined) {\n params['customerdetail_id'] = customerid;\n }\n requestHandler.sendRequest(this.config.apiRequestHandler, params);\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, params});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n hidden: this.config.table.dataCols[i].hidden,\n addCustomerDetailsLink: this.config.table.dataCols[i].addCustomerDetailsLink,\n groupHeaderColumn: this.config.table.dataCols[i].groupHeaderColumn,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // this.gridData = process(apiData[this.config.dataArrayKey], { group: this.groups });\n // format dataRows for kendo component\n // GroupResulst -> aggregates -> The aggregated values for the group; field -> The field by which the data items are grouped.\n // -> items -> Contains either the subgroups, or the data items.; value -> The group key.; \n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let objectToParse = apiData[this.config.dataArrayKey][r];\n let groupRow = {};\n groupRow['aggregates'] = [];\n groupRow['aggregates'][this.config.groupCountField] = objectToParse[this.config.groupCountField];\n groupRow['aggregates'][this.config.groupFieldId] = objectToParse[this.config.groupFieldId];\n\n groupRow['field'] = this.config.groupField;\n if (this.config.groupFieldsToAppend !== undefined && this.config.groupFieldsToAppend.length == 2) {\n let groupFieldVal = objectToParse[this.config.groupFieldsToAppend[0]] + \"(\" + objectToParse[this.config.groupFieldsToAppend[1]] + \")\";\n groupRow['value'] = groupFieldVal;\n } else {\n groupRow['value'] = objectToParse[this.config.groupField];\n }\n groupRow['items'] = [];\n for (let i = 0; i < objectToParse[this.config.groupItemsKey].length; i++) {\n // groupRow['items'][this.config.groupField] = groupRow['value'];\n groupRow['items'].push(objectToParse[this.config.groupItemsKey][i]);\n }\n this.dataRows.push(groupRow);\n }\n const groupData = { 'data': this.dataRows, 'total': this.dataRows.length };\n this.gridData = groupData;\n\n /* let dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let objectToParse = apiData[this.config.dataArrayKey][r];\n for (let i = 0; i < objectToParse[this.config.groupItemsKey].length; i++) {\n let groupRow = {};\n let itemsArray = objectToParse[this.config.groupItemsKey][i];\n groupRow[this.config.groupField] = objectToParse[this.config.groupField];\n // copy all items element attributes to groupRow\n Object.entries(itemsArray).forEach(([key,value]) => { groupRow[key] = value });\n\n // groupRow['aggregates'] = [{ 'field': this.config.groupField, 'count': objectToParse[this.config.groupCountField] }\n // , { 'field': this.config.groupField, 'id': objectToParse[this.config.groupFieldId] }];\n dataRows.push(groupRow); \n } \n }\n this.gridData = process(dataRows, { group: this.groups });*/\n } \n });\n }\n }\n\n public getAggregateData(aggregateVal: any) {\n console.log(aggregateVal);\n }\n\n public allData(): ExcelExportData {\n const result: ExcelExportData = {\n // data: process(this.gridData, this.exportState).data,\n data: this.dataRows,\n group: this.groups\n };\n\n return result;\n }\n\n private detectMob() {\n return /iPad|iPhone|iPod|Android|webOS|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n public getMaxHeight(): string {\n const userWindowHeight = window.screen.availHeight;\n const userWindowWidth = window.screen.availWidth;\n\n if (userWindowHeight < 300) {\n return 300 + 'px';\n } else if (userWindowWidth <= 768) {\n return (userWindowHeight - 100) + 'px';\n } else if (this.detectMob()) {\n return (userWindowHeight - 150) + 'px';\n }\n return (userWindowHeight - 250) + 'px';\n }\n\n\n}\n","export const ServiceContractStylePages = {\n '/servicecontracts': {\n pageTitle: 'Service Contracts',\n apiRequestHandler: '/metrics/servicecontracts/details',\n parentPageRequestHandler: '/metrics/servicecontracts',\n backPageLabel: 'Back',\n backPageLink: '/',\n dataArrayKey: 'details',\n table: {\n type: 'level2',\n exportFileName: 'service_contract_details.xlsx',\n contextMenuFieldName: 'instrumentsrno',\n dataCols: [\n {\n title: 'Customer Number',\n key: 'customernumber',\n hidden: true,\n export: true,\n width: 50\n },\n {\n title: 'Customer',\n key: 'customername',\n width: 80,\n export: true,\n renderCustomerNameNumStyle: true\n },\n {\n title: 'Instrument',\n key: 'pldescription',\n export: true,\n width: 65\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n width: 80,\n renderRefStyle: true,\n export: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ]\n },\n {\n title: 'Seas Code',\n key: 'seacode',\n export: true,\n width: 50\n },\n {\n title: 'Contract Name',\n key: 'contractname',\n export: true,\n width: 80\n },\n {\n title: 'Contract Number',\n key: 'contractno',\n export: true,\n width: 50\n },\n {\n title: 'Start Date',\n key: 'startdate',\n export: true,\n width: 50\n },\n {\n title: 'Expires',\n key: 'expires',\n export: true,\n width: 50\n },\n {\n title: 'Auto-Renew',\n key: 'autorenew',\n export: true,\n width: 50,\n }\n ],\n drillDownCols: [\n {\n title: 'Entitlement',\n key: 'entitlements',\n width: 60,\n entitlementLink: 'entitlements',\n export: false\n }\n ]\n }\n },\n '/servicecontracts/entitlements': {\n pageTitle: 'Service Contract Entitlements',\n apiRequestHandler: '/metrics/servicecontracts/details',\n backPageLabel: 'Service Contracts',\n backPageLink: '/servicecontracts',\n dataArrayKey: 'entitlements',\n table: {\n type: 'level3',\n exportFileName: 'service_contract_entitlements.xlsx',\n dataCols: [\n {\n title: 'Product Name',\n key: 'productname',\n width: 60,\n export: true\n },\n {\n title: 'Response Time',\n key: 'responsetime',\n width: 50,\n export: true\n },\n {\n title: 'End Date',\n key: 'enddate',\n width: 50,\n export: true\n },\n {\n title: 'Entitlement ID',\n key: 'entitlementid',\n hidden: true,\n width: 50,\n export: false\n },\n {\n title: 'Entitlement Description',\n key: 'description',\n width: 60,\n export: true\n },\n {\n title: 'List Number',\n key: 'listnumber',\n width: 50,\n export: true\n },\n {\n title: 'Cost Type',\n key: 'costtype',\n width: 50,\n export: true\n },\n {\n title: 'Contract Price',\n key: 'contractprice',\n customStyle: { 'text-align': 'right' },\n width: 50,\n export: true\n }\n ],\n drillDownCols: [\n {\n title: 'Entitlement Terms',\n key: 'entitlementid',\n width: 60,\n entitlementTermsLink: '/servicecontracts/entitlements/terms',\n export: false\n }\n ]\n }\n },\n '/servicecontracts/entitlements/terms': {\n pageTitle: 'Service Contract Entitlement Terms',\n apiRequestHandler: '/metrics/servicecontracts/details2',\n parentPageRequestHandler: '/metrics/servicecontracts/details',\n backPageLabel: 'Service Contract Entitlements',\n backPageLink: '/servicecontracts/entitlements',\n dataArrayKey: 'details',\n table: {\n type: 'level4',\n exportFileName: 'service_contract_entitlement_terms.xlsx',\n dataCols: [\n {\n title: 'Hours of Service Support',\n key: 'servicehours',\n width: 60\n },\n {\n title: 'Description',\n key: 'desc',\n width: 80\n },\n {\n title: 'Terms Type',\n key: 'termstype',\n width: 50\n },\n {\n title: 'Terms Category',\n key: 'termscategory',\n width: 50\n },\n {\n title: 'Terms Name',\n key: 'termsname',\n width: 50\n },\n {\n title: 'Cap',\n key: 'cap',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Covers Parts',\n key: 'coverparts',\n width: 50\n },\n {\n title: 'Covers Labor',\n key: 'coverslabor',\n width: 50\n },\n {\n title: 'Covers Travel',\n key: 'coverstravels',\n width: 50\n }\n ]\n }\n }\n};","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n {{dataItem[col.ref]}} ({{dataItem['customernumber']}})\n \n \n \n \n More \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit, Renderer2 } from '@angular/core';\nimport {Location} from '@angular/common';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport { ServiceContractStylePages } from '../service-contract-pages';\nimport { GridComponent } from '../../grid.component';\nimport { ApiService } from 'src/app/api/api.service';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { Observable } from 'rxjs';\nimport { GridDataResult } from '@progress/kendo-angular-grid';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\n\n\n@Component({\n selector: 'app-service-contracts-level2',\n templateUrl: './service-contracts-level2.component.html',\n styleUrls: ['./service-contracts-level2.component.scss']\n})\nexport class ServiceContractsLevel2Component extends GridComponent implements OnInit {\n\n stylePages = ServiceContractStylePages;\n config = null;\n public parentState = RequestState.Inactive;\n public state = RequestState.Inactive;\n parentApiData = null;\n\n public menuItems: any[] = [];\n public offset: any;\n public selected: any;\n public showContextMenu: boolean = false;\n private documentClickSubscription: any;\n\n constructor(\n private location: Location,\n private navbarBuilderService: NavbarBuilderService,\n protected apiService: ApiService,\n private renderer: Renderer2,\n protected refreshHandler: RefreshHandlerService\n ) { \n super();\n this.onCellClick = this.onCellClick.bind(this);\n this.documentClickSubscription = this.renderer.listen('document', 'click', () => {\n this.showContextMenu = false;\n });\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n }); \n \n const parentPageRequestHandler = this.apiService.get(this.config.parentPageRequestHandler);\n parentPageRequestHandler.onStateChange((parentState) => {\n this.parentState = parentState;\n });\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { });\n },\n parentPageRequestHandler.getRelativeParams(this.config.parentPageRequestHandler)\n );\n\n let subTitleText = '';\n // no need to send request here as chart tile has already done so\n parentPageRequestHandler.onStateChange((parentState) => {\n if (parentState === RequestState.Complete) {\n const response = parentPageRequestHandler.getResponse();\n this.parentApiData = JSON.parse(response.body);\n\n if (this.parentApiData != null) {\n subTitleText = this.parentApiData.contractexpNdays + \" expiring in 90 days (max 1000 records shown below)\";\n const pageTitle = this.config.pageTitle + \" - \" + subTitleText;\n this.navbarBuilderService.getNavFilterSelection().viewTitleText = pageTitle; \n }\n }\n }); \n }\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n }); \n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n hidden: this.config.table.dataCols[i].hidden,\n renderRefStyle: this.config.table.dataCols[i].renderRefStyle,\n export: this.config.table.dataCols[i].export,\n renderCustomerNameNumStyle: this.config.table.dataCols[i].renderCustomerNameNumStyle\n });\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.drillDownCols[i].key,\n description: this.config.table.drillDownCols[i].title,\n width: this.config.table.drillDownCols[i].width,\n export: this.config.table.drillDownCols[i].export,\n entitlementLink: this.config.table.drillDownCols[i].entitlementLink\n });\n } \n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n }\n });\n }\n\n public onCellClick({dataItem, column, type, originalEvent}): void {\n let contextMenuItemArr = [];\n if (type === 'click' && column.field === this.config.table.contextMenuFieldName) {\n originalEvent.preventDefault();\n for (let r = 0; r < this.config.table.dataCols.length; r++) {\n let dataCol = this.config.table.dataCols[r];\n if (dataCol.contextMenuItems !== undefined) {\n for (let k = 0; k < dataCol.contextMenuItems.length; k++) {\n contextMenuItemArr.push({\n 'text': dataCol.contextMenuItems[k].text,\n 'iconUrl': dataCol.contextMenuItems[k].iconUrl, \n 'textLink': dataItem[dataCol.contextMenuItems[k].fieldName][dataCol.contextMenuItems[k].columnIndex] });\n } \n }\n }\n this.menuItems = contextMenuItemArr;\n this.showContextMenu = true;\n this.offset = { left: originalEvent.pageX, top: originalEvent.pageY };\n } else {\n this.showContextMenu = false;\n } \n }\n\n public menuItemSelected(item: any): void {\n this.selected = item;\n }\n\n}\n","
    \n
    \n
    \n
    Customer: {{apiDataRecord.customername}} ({{apiDataRecord.customernumber}})
    \n
    Contract Name: {{apiDataRecord.contractname}}
    \n
    Instrument: {{apiDataRecord.pldescription}}
    \n
    SN: {{apiDataRecord.instrumentsrno}}
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n More \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {Location} from '@angular/common';\nimport { ServiceContractStylePages } from '../service-contract-pages';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { GridComponent } from '../../grid.component';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\n\n@Component({\n selector: 'app-service-contracts-level3',\n templateUrl: './service-contracts-level3.component.html',\n styleUrls: ['./service-contracts-level3.component.scss']\n})\nexport class ServiceContractsLevel3Component extends GridComponent implements OnInit {\n\n stylePages = ServiceContractStylePages;\n config = null;\n apiDataRecord = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n protected refreshHandler: RefreshHandlerService\n ) { \n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.route.paramMap.subscribe(params => {\n let customerNumber = params.get('customernumber');\n let serialNumber = params.get('serialnumber');\n let contractnumber = params.get('contractnumber');\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n \n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // find the correct apiData record for the routing params\n for (let r = 0; r < apiData['details'].length; r++) {\n let currentRec = apiData['details'][r];\n if (currentRec['customernumber'] == customerNumber\n && currentRec['instrumentsrno'] == serialNumber\n && currentRec['contractno'] == contractnumber) {\n this.apiDataRecord = currentRec;\n break;\n }\n }\n if (this.apiDataRecord != null) {\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n hidden: this.config.table.dataCols[i].hidden,\n customStyle: this.config.table.dataCols[i].customStyle,\n export: this.config.table.dataCols[i].export\n });\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.drillDownCols[i].key,\n description: this.config.table.drillDownCols[i].title,\n width: this.config.table.drillDownCols[i].width,\n entitlementTermsLink: this.config.table.drillDownCols[i].entitlementTermsLink,\n export: this.config.table.drillDownCols[i].export\n });\n }\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < this.apiDataRecord[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(this.apiDataRecord[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n }\n }\n });\n });\n }\n }\n\n}\n","
    \n
    \n
    \n
    Customer: {{apiDataRecord.customername}} ({{apiDataRecord.customernumber}})
    \n
    Contract Name: {{apiDataRecord.contractname}}
    \n
    Instrument: {{apiDataRecord.pldescription}}
    \n
    SN: {{apiDataRecord.instrumentsrno}}
    \n
    Entitlement Description: {{entitlementdesc}}
    \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {Location} from '@angular/common';\nimport { ServiceContractStylePages } from '../service-contract-pages';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { GridComponent } from '../../grid.component';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\n\n\n@Component({\n selector: 'app-service-contracts-level4',\n templateUrl: './service-contracts-level4.component.html',\n styleUrls: ['./service-contracts-level4.component.scss']\n})\nexport class ServiceContractsLevel4Component extends GridComponent implements OnInit {\n\n stylePages = ServiceContractStylePages;\n config = null;\n apiDataRecord = null;\n entitlementdesc = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n protected refreshHandler: RefreshHandlerService\n ) { \n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n\n this.route.paramMap.subscribe(params => {\n \n let customerNumber = params.get('customernumber');\n let serialNumber = params.get('serialnumber');\n let contractnumber = params.get('contractnumber');\n this.entitlementdesc = params.get('entitlementdesc');\n\n \n let backPageLink = this.config.backPageLink;\n\n backPageLink += \"/\" + customerNumber + \"/\" + serialNumber + \"/\" + contractnumber;\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const parentPageRequestHandler = this.apiService.get(this.config.parentPageRequestHandler);\n parentPageRequestHandler.onStateChange((state) => {\n this.state = state;\n });\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { months: 12});\n },\n parentPageRequestHandler.getRelativeParams(this.config.parentPageRequestHandler)\n );\n \n // no need to send request here as chart tile has already done so\n parentPageRequestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = parentPageRequestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // find the correct apiData record for the routing params\n for (let r = 0; r < apiData['details'].length; r++) {\n let currentRec = apiData['details'][r];\n if (currentRec['customernumber'] == customerNumber \n && currentRec['instrumentsrno'] == serialNumber \n && currentRec['contractno'] == contractnumber) {\n this.apiDataRecord = currentRec;\n break;\n }\n }\n }\n }); \n if (this.apiDataRecord != null) {\n let entitlementid = params.get('entitlementid');\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, servicecontract_entitlementid: entitlementid});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, servicecontract_entitlementid: entitlementid});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n \n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n \n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n hidden: this.config.table.dataCols[i].hidden,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n }\n });\n }\n });\n } \n }\n}","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {GridComponent} from '../grid.component';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n\n@Component({\n selector: 'app-uptime-customer-details',\n templateUrl: './uptime-customer-details.component.html',\n styleUrls: ['./uptime-customer-details.component.scss']\n})\n\nexport class UptimeCustomerDetailsComponent extends GridComponent implements OnInit {\n\n stylePages = {\n '/uptime/details/customerdetails': {\n pageTitle: 'Uptime Details - ',\n apiRequestHandler: '/metrics/uptime/customerdetails',\n backPageLabel: 'Uptime Details',\n backPageLink: '/uptime/details',\n dataArrayKey: 'instruments',\n table: {\n needEntireApiDataRecord: true,\n exportFileName: 'uptime_customer_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'cust',\n width: 80\n },\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Instrument',\n key: 'instrumentname',\n width: 65\n },\n {\n title: 'SN',\n key: 'instrumentsrno',\n width: 80\n },\n {\n title: 'Hours Down',\n key: 'hrsdown',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Days Down',\n key: 'daysdown',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Uptime %',\n key: 'uptimeper',\n customStyle: { 'text-align': 'right' },\n width: 50\n }\n ]\n }\n }\n };\n \n config = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) { \n super();\n }\n\n ngOnInit(): void {\n \n let customerid;\n let customername;\n let country;\n\n this.route.paramMap.subscribe(params => {\n customerid = params.get('customerid');\n customername = params.get('customername');\n country = params.get('country');\n }); \n \n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n let titleText = this.config.pageTitle + customername;\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: titleText,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, customerdetail_id: customerid});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, customerdetail_id: customerid});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n class: this.config.table.dataCols[i].class,\n hidden: this.config.table.dataCols[i].hidden,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let dataRow = {};\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n dataRow['cust'] = customername;\n dataRow['country'] = country;\n dataRow[this.config.table.dataCols[i].key] = apiData[this.config.dataArrayKey][r][this.config.table.dataCols[i].key];\n }\n for (const rowCol in dataRow) {\n let value = dataRow[rowCol];\n if (rowCol === 'hrsdown' || rowCol === 'daysdown') {\n if (value === '' || value === null) { // || value == 0 || value == 0.0 || string of 0) {\n value = null;\n }\n }\n dataRow[rowCol] = value;\n }\n this.dataRows.push(dataRow);\n }\n this.updateGrid();\n }\n });\n }\n }\n\n}\n","export const SurveyCommentPages = {\n 'hotsheets/survey_comments': {\n pageTitle: 'Translation Details',\n apiRequestHandler: '/metrics/hotsheets/details',\n backPageLabel: 'NPS Open Hotsheet Details',\n backPageLink: '/hotsheets',\n dataArrayKey: 'nps',\n dataArraySplitColKey: 'scores',\n table: {\n dataCols: [\n {\n key: 'customernumber'\n },\n {\n key: 'customername'\n },\n {\n key: 'country'\n },\n {\n key: 'interviewdate'\n }\n ],\n dataArraySplitCols: [\n {\n title: 'Overall', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'overall'\n },\n {\n title: 'Field Service', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'fieldservice'\n },\n {\n title: 'Product Quality',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productquality'\n },\n {\n title: 'Product Delivery',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productdelivery'\n },\n {\n title: 'Sales Rep',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'salesrep'\n },\n {\n title: 'Technical Support',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'technicalsupport'\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n key: 'detractor',\n }\n ]\n }\n },\n 'customerNps/details/survey_comments': {\n pageTitle: 'Translation Details',\n apiRequestHandler: '/metrics/nps/detail',\n backPageLabel: 'Customer NPS Survey Details',\n backPageLink: '/customerNps/details',\n dataArrayKey: 'details',\n dataArraySplitColKey: 'scores',\n table: {\n dataCols: [\n {\n key: 'customernumber'\n },\n {\n key: 'customername'\n },\n {\n key: 'country'\n },\n {\n key: 'interviewdate'\n }\n ],\n dataArraySplitCols: [\n {\n title: 'Overall', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'overall'\n },\n {\n title: 'Field Service', // maps to label\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'fieldservice'\n },\n {\n title: 'Product Quality',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productquality'\n },\n {\n title: 'Product Delivery',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'productdelivery'\n },\n {\n title: 'Sales Rep',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'salesrep'\n },\n {\n title: 'Technical Support',\n arrayMappingKey: 'label',\n arrayMappingValue: 'value',\n key: 'technicalsupport'\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n key: 'detractor',\n }\n ]\n }\n },\n 'rnps/detail/survey_comments': {\n pageTitle: 'rNPS Survey - Translation Details',\n apiRequestHandler: '/metrics/rnps/detail',\n backPageLabel: 'rNPS Surveys',\n backPageLink: '/rnps/detail',\n dataArrayKey: 'rows',\n table: {\n dataCols: [\n {\n key: 'customernum'\n },\n {\n key: 'customername'\n },\n {\n key: 'interviewdate'\n },\n {\n key: 'value'\n }\n ],\n drillDownCols: [\n {\n title: 'Survey Comments',\n key: 'detractor',\n }\n ]\n }\n }\n};","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    Customer:Interview Date:Overall:Field Service:Product Delivery:Product Quality:Sales Rep:Technical Support:
    {{dataRow['customername']}}({{dataRow['customernumber']}}){{dataRow['interviewdate']}}{{dataRow['overall']}}{{dataRow['fieldservice']}}{{dataRow['productdelivery']}}{{dataRow['productquality']}}{{dataRow['salesrep']}}{{dataRow['technicalsupport']}}
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{comment.label}}
    Translation:{{comment.transvalue}}
    Native Language:{{comment.nativevalue}}
    \n
    \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport { SurveyCommentPages } from './survey-comment-pages';\n\n\n@Component({\n selector: 'app-survey-comment-details',\n templateUrl: './survey-comment-details.component.html',\n styleUrls: ['./survey-comment-details.component.scss']\n})\nexport class SurveyCommentDetailsComponent implements OnInit {\n\n stylePages = SurveyCommentPages;\n config = null;\n apiDataRecord = null;\n dataRow = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.route.paramMap.subscribe(params => {\n let customerNumber = params.get('customernumber');\n let country = params.get('country');\n let interviewDate = params.get('interviewdate');\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // find the correct apiData record for the routing params\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let currentRec = apiData[this.config.dataArrayKey][r];\n if (currentRec['customernumber'] == customerNumber && currentRec['country'] == country && currentRec['interviewdate'] == interviewDate) {\n this.apiDataRecord = currentRec;\n break;\n }\n } \n if (this.apiDataRecord != null) {\n // console.log(this.apiDataRecord);\n this.dataRow = {};\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataRow[this.config.table.dataCols[i].key] = this.apiDataRecord[this.config.table.dataCols[i].key];\n }\n if (this.config.dataArraySplitColKey !== undefined) {\n let arrayObjToSplit = this.apiDataRecord[this.config.dataArraySplitColKey]; \n for (let i = 0; i < this.config.table.dataArraySplitCols.length; i++) { \n for (let j = 0; j < arrayObjToSplit.length; j++) {\n if (this.config.table.dataArraySplitCols[i].title === arrayObjToSplit[j][this.config.table.dataArraySplitCols[i].arrayMappingKey]) {\n this.dataRow[this.config.table.dataArraySplitCols[i].key] = arrayObjToSplit[j][this.config.table.dataArraySplitCols[i].arrayMappingValue];\n break;\n } \n }\n }\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) { \n this.dataRow[this.config.table.drillDownCols[i].key] = this.apiDataRecord[this.config.table.drillDownCols[i].key];\n }\n } \n } \n // console.log(this.dataRow);\n } \n });\n });\n }\n }\n\n}\n","
    \n
    \n
    \n
    Customer: {{customername}}
    \n
    \n Order #: {{ordernumber}}\n Order Status: {{orderstatus}}\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref] | date: col.dateFormat }}\n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {GridComponent} from '../grid.component';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-customer-order-details',\n templateUrl: './customer-order-details.component.html',\n styleUrls: ['./customer-order-details.component.scss']\n})\nexport class CustomerOrderDetailsComponent extends GridComponent implements OnInit {\n\n stylePages = {\n '/orders/details': {\n pageTitle: 'Order Details',\n apiRequestHandler: '/metrics/orders/details',\n backPageLabel: 'Orders',\n backPageLink: '/orders/intermediate',\n dataArrayKey: 'orderdet',\n table: {\n needEntireApiDataRecord: true,\n exportFileName: 'customer_order_details.xlsx',\n dataCols: [\n {\n title: '#',\n key: 'linenumber',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'List Number',\n key: 'item',\n width: 50\n },\n {\n title: 'LN Desc',\n key: 'itemdesc',\n width: 80\n },\n {\n title: 'Lot #',\n key: 'lotnumber',\n width: 50\n },\n {\n title: 'Expiration Date',\n key: 'expirationdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Quantity',\n key: 'actualquantity',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Forecast Ship Date',\n key: 'forecastedshipdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Actual Ship Date',\n key: 'actualshipdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Expected Delivery Date',\n key: 'expecteddeliverydate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n }\n ]\n }\n },\n '/amb_orders/details': {\n pageTitle: 'Order Details (USD)',\n apiRequestHandler: '/amb_orders/details',\n backPageLabel: 'Orders',\n backPageLink: '/amb_orders/intermediate',\n dataArrayKey: 'orderdet',\n table: {\n needEntireApiDataRecord: true,\n exportFileName: 'amb_customer_order_details.xlsx',\n dataCols: [\n {\n title: '#',\n key: 'linenumber',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'List Number',\n key: 'item',\n width: 50\n },\n {\n title: 'LN Desc',\n key: 'itemdesc',\n width: 80\n },\n {\n title: 'Lot #',\n key: 'lotnumber',\n width: 50\n },\n {\n title: 'Expiration Date',\n key: 'expirationdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Amount',\n key: 'localamount',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Quantity',\n key: 'actualquantity',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Forecast Ship Date',\n key: 'forecastedshipdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Actual Ship Date',\n key: 'actualshipdate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n },\n {\n title: 'Expected Delivery Date',\n key: 'expecteddeliverydate',\n width: 50,\n dateFormat: \"yyyy-MM-dd\"\n }\n ]\n }\n }\n };\n\n config = null;\n public state = RequestState.Inactive;\n customername = null;\n ordernumber = null;\n orderstatus = null;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) {\n super();\n }\n\n ngOnInit(): void {\n this.route.paramMap.subscribe(params => {\n this.customername = params.get('customername');\n this.ordernumber = params.get('ordernumber');\n this.orderstatus = params.get('orderstatus');\n });\n\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, ordernumber: this.ordernumber});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, ordernumber: this.ordernumber});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n dateFormat: this.config.table.dataCols[i].dateFormat,\n customStyle: this.config.table.dataCols[i].customStyle,\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n\n for (const rowKey in this.dataRows) {\n if (this.dataRows.hasOwnProperty(rowKey)) {\n const row = this.dataRows[rowKey];\n for (const rowCol in row) {\n if (rowCol in row) {\n let value = row[rowCol];\n if (['expirationdate', 'forecastedshipdate', 'actualshipdate', 'expecteddeliverydate'].includes(rowCol)) {\n value = new Date(value);\n if (value instanceof Date && !isNaN(value.valueOf())) {\n let month = '' + (value.getMonth() + 1);\n let day = '' + value.getDate();\n const year = value.getFullYear();\n if (month.length < 2) {\n month = '0' + month;\n }\n if (day.length < 2) {\n day = '0' + day;\n }\n value = year + '-' + month + '-' + day;\n } else {\n value = '';\n }\n }\n this.dataRows[rowKey][rowCol] = value;\n }\n }\n }\n }\n\n this.updateGrid();\n }\n });\n }\n }\n}\n","
    \n
    \n
    \n \n \n\n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {GridComponent} from '../grid.component';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\n\n@Component({\n selector: 'app-sgm-details',\n templateUrl: './sgm-details.component.html',\n styleUrls: ['./sgm-details.component.scss']\n})\nexport class SGMDetailsComponent extends GridComponent implements OnInit {\n\n stylePages = {\n '/servicegrossmargin_customerSGM/details': {\n pageTitle: 'Service Gross Margin (SGM)',\n subTitle: '(Country YTD, Customer 12MA)',\n apiRequestHandler: '/metrics/servicegrossmargin_customerSGM/grid',\n backPageLabel: 'Back',\n backPageLink: '/servicegrossmargin_customerSGM',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'service_gross_margin_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customer',\n width: 100\n },\n {\n title: 'SGM %',\n key: 'sgm',\n customStyle: { 'text-align': 'right' },\n width: 100\n }\n ]\n }\n },\n '/amb_servicegrossmargin_customerSGM/details': {\n pageTitle: 'Service Gross Margin (SGM) (USD)',\n subTitle: '(Country YTD, Customer 12MA)',\n apiRequestHandler: '/metrics/amb_servicegrossmargin_customerSGM/grid',\n backPageLabel: 'Back',\n backPageLink: '/servicegrossmargin_customerSGM',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'amb_service_gross_margin_details.xlsx',\n dataCols: [\n {\n title: 'Account',\n key: 'customer',\n width: 100\n },\n {\n title: 'Direct Revenue',\n key: 'directrevenue',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'RAP',\n key: 'rap',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Net Revenue',\n key: 'netrevenue',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Service Expenses',\n key: 'serviceexpenses',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'SGM %',\n key: 'sgm',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ]\n }\n }\n };\n\n config = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private refreshHandler: RefreshHandlerService\n ) {\n super();\n }\n\n ngOnInit(): void {\n\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: true,\n viewSubtitleText: this.config.subTitle,\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, band: 0 });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, band: 0 });\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n dateFormat: this.config.table.dataCols[i].dateFormat,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n\n for (const rowKey in this.dataRows) {\n if (this.dataRows.hasOwnProperty(rowKey)) {\n const row = this.dataRows[rowKey];\n for (const rowCol in row) {\n if (rowCol in row) {\n let value = row[rowCol];\n if (['sgm'].includes(rowCol) && value === 'N/A') {\n value = null;\n console.log('value', value);\n }\n this.dataRows[rowKey][rowCol] = value;\n }\n }\n }\n }\n\n this.updateGrid();\n }\n });\n }\n }\n\n}\n","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n 0; else oneA\">\n {{dataItem[col.ref]}}\n \n \n {{dataItem[col.ref]}}\n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n {{col.drillDownDetailsLabel}} \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    ","import { Component, OnInit, Renderer2 } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {Location} from '@angular/common';\nimport { GridComponent } from '../../grid.component';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-predictive-alerts-level2',\n templateUrl: './predictive-alerts-level2.component.html',\n styleUrls: ['./predictive-alerts-level2.component.scss']\n})\nexport class PredictiveAlertsLevel2Component extends GridComponent implements OnInit {\n\n stylePages = {\n '/customerswithoutservicecontracts/grid': {\n pageTitle: 'Predictive Alerts w/o Service Contracts - Details',\n apiRequestHandler: '/metrics/customerswithoutservicecontracts/grid',\n backPageLabel: 'Back',\n backPageLink: '/customerswithoutservicecontracts',\n dataArrayKey: 'Details',\n table: {\n type: 'style3',\n exportFileName: 'predictive_alerts_without_service_contract_details.xlsx',\n contextMenuFieldName: 'sn',\n dataCols: [\n {\n title: 'Country',\n key: 'country',\n width: 50\n },\n {\n title: 'Customer',\n key: 'customer',\n width: 80\n },\n {\n title: 'PL',\n key: 'instrument',\n width: 50\n },\n {\n title: 'SN',\n key: 'sn',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ], \n width: 80\n },\n {\n title: 'Alert Qty (12 Month)',\n key: 'alert12mo',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Alert Qty (6 Month)',\n key: 'alert6mo',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'Alert Qty (3 Month)',\n key: 'alert3mo',\n customStyle: { 'text-align': 'right' },\n width: 50\n }, \n {\n title: 'Alert Qty (30 Days)',\n key: 'alert30day',\n customStyle: { 'text-align': 'right' },\n width: 50,\n },\n {\n title: 'SD Ticket Qty (30 Days)',\n key: 'ticket30day',\n customStyle: { 'text-align': 'right' },\n refLink: 'sd_ticket_details',\n width: 50,\n }\n ],\n drillDownCols: [\n {\n title: '',\n width: 60,\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/customerswithoutservicecontracts/griddetails'\n }\n ]\n }\n },\n '/amb_customerswithoutservicecontracts/grid': {\n pageTitle: 'Predictive Alerts w/o Service Contracts - Details',\n apiRequestHandler: '/metrics/amb_customerswithoutservicecontracts/grid',\n backPageLabel: 'Back',\n backPageLink: '/amb_customerswithoutservicecontracts',\n dataArrayKey: 'Details',\n table: {\n type: 'style3',\n exportFileName: 'amb_predictive_alerts_without_contracts.xlsx',\n contextMenuFieldName: 'sn',\n dataCols: [\n {\n title: 'Country',\n key: 'country',\n width: '100'\n },\n {\n title: 'Customer',\n key: 'customer',\n width: '120'\n },\n {\n title: 'PL',\n key: 'instrument',\n width: '100'\n },\n {\n title: 'SN',\n key: 'sn',\n renderRefStyle: true,\n contextMenuItems: [\n {text: 'SIFT', iconUrl: './assets/sift_icon.gif', fieldName: 'instrumentsrnolinks', columnIndex: 0},\n {text: 'Ticket History', iconUrl: './assets/ticket_history.gif', fieldName: 'instrumentsrnolinks', columnIndex: 1},\n {text: 'TSB', iconUrl: './assets/TSB_Button.gif', fieldName: 'instrumentsrnolinks', columnIndex: 2},\n {text: 'IHR', iconUrl: './assets/ihr.gif', fieldName: 'instrumentsrnolinks', columnIndex: 3}\n ], \n width: '100'\n },\n {\n title: 'Alert Qty (12 Month)',\n key: 'alert12mo',\n customStyle: { 'text-align': 'right' },\n width: '100'\n },\n {\n title: 'Alert Qty (6 Month)',\n key: 'alert6mo',\n customStyle: { 'text-align': 'right' },\n width: '100'\n },\n {\n title: 'Alert Qty (3 Month)',\n key: 'alert3mo',\n customStyle: { 'text-align': 'right' },\n width: '100'\n }, \n {\n title: 'Alert Qty (30 Days)',\n key: 'alert30day',\n customStyle: { 'text-align': 'right' },\n width: '100',\n },\n {\n title: 'SD Ticket Qty (30 Days)',\n key: 'ticket30day',\n customStyle: { 'text-align': 'right' },\n refLink: 'sd_ticket_details',\n width: '100',\n }\n ],\n drillDownCols: [\n {\n title: '',\n width: '80',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/amb_customerswithoutservicecontracts/griddetails'\n }\n ]\n }\n }\n };\n \n config = null;\n public state = RequestState.Inactive;\n\n public menuItems: any[] = [];\n public offset: any;\n public selected: any;\n public showContextMenu: boolean = false;\n private documentClickSubscription: any;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private refreshHandler: RefreshHandlerService,\n private renderer: Renderer2,\n ) { \n super();\n this.onCellClick = this.onCellClick.bind(this);\n this.documentClickSubscription = this.renderer.listen('document', 'click', () => {\n this.showContextMenu = false;\n });\n }\n\n ngOnInit(): void {\n \n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: true,\n viewSubtitleText: this.config.subTitle,\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12 });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12 });\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n refLink: this.config.table.dataCols[i].refLink,\n renderRefStyle: this.config.table.dataCols[i].renderRefStyle,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n this.dataCols.push({\n description: this.config.table.drillDownCols[i].title,\n width: this.config.table.drillDownCols[i].width,\n drillDownDetailsLabel: this.config.table.drillDownCols[i].drillDownDetailsLabel,\n drillDownDetailsLink: this.config.table.drillDownCols[i].drillDownDetailsLink\n });\n } \n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n } \n });\n }\n }\n\n public onCellClick({dataItem, column, type, originalEvent}): void {\n let contextMenuItemArr = [];\n if (type === 'click' && column.field === this.config.table.contextMenuFieldName) {\n originalEvent.preventDefault();\n for (let r = 0; r < this.config.table.dataCols.length; r++) {\n let dataCol = this.config.table.dataCols[r];\n if (dataCol.contextMenuItems !== undefined) {\n for (let k = 0; k < dataCol.contextMenuItems.length; k++) {\n contextMenuItemArr.push({\n 'text': dataCol.contextMenuItems[k].text,\n 'iconUrl': dataCol.contextMenuItems[k].iconUrl, \n 'textLink': dataItem[dataCol.contextMenuItems[k].fieldName][dataCol.contextMenuItems[k].columnIndex] });\n } \n }\n }\n this.menuItems = contextMenuItemArr;\n this.showContextMenu = true;\n this.offset = { left: originalEvent.pageX, top: originalEvent.pageY };\n } else {\n this.showContextMenu = false;\n } \n }\n\n public menuItemSelected(item: any): void {\n this.selected = item;\n }\n\n}\n","
    \n
    \n
    \n
    Customer: {{apiDataRecord.customer}}
    \n
    \n Instrument #: {{apiDataRecord.instrument}}\n SN: {{apiDataRecord.sn}}\n
    \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {Location} from '@angular/common';\nimport { GridComponent } from '../../grid.component';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\n\n@Component({\n selector: 'app-predictive-alerts-level3',\n templateUrl: './predictive-alerts-level3.component.html',\n styleUrls: ['./predictive-alerts-level3.component.scss']\n})\nexport class PredictiveAlertsLevel3Component extends GridComponent implements OnInit {\n\n stylePages = {\n '/customerswithoutservicecontracts/griddetails': {\n pageTitle: 'Proactive Health Alerts for Customer without Service Contracts',\n apiRequestHandler: '/metrics/customerswithoutservicecontracts/griddetails',\n parentPageRequestHandler: '/metrics/customerswithoutservicecontracts/grid',\n backPageLabel: 'Back',\n backPageLink: 'customerswithoutservicecontracts/grid',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'predictive_alerts_without_service_contract_grid_details.xlsx',\n dataCols: [\n {\n title: 'Algorithm Category',\n key: 'algorithmGroup',\n width: 80\n },\n {\n title: 'Total Alert Qty',\n key: 'flaggedTotal',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M12 Qty',\n key: 'flaggedMonth12',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M11 Qty',\n key: 'flaggedMonth11',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M10 Qty',\n key: 'flaggedMonth10',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M9 Qty',\n key: 'flaggedMonth9',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M8 Qty',\n key: 'flaggedMonth8',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M7 Qty',\n key: 'flaggedMonth7',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M6 Qty',\n key: 'flaggedMonth6',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M5 Qty',\n key: 'flaggedMonth5',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M4 Qty',\n key: 'flaggedMonth4',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M3 Qty',\n key: 'flaggedMonth3',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M2 Qty',\n key: 'flaggedMonth2',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M1 Qty',\n key: 'flaggedMonth1',\n customStyle: { 'text-align': 'right' },\n width: 50\n }\n ]\n }\n },\n '/amb_customerswithoutservicecontracts/griddetails': {\n pageTitle: 'Proactive Health Alerts for Customer without Service Contracts',\n apiRequestHandler: '/metrics/amb_customerswithoutservicecontracts/griddetails',\n parentPageRequestHandler: '/metrics/amb_customerswithoutservicecontracts/grid',\n backPageLabel: 'Back',\n backPageLink: 'amb_customerswithoutservicecontracts/grid',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'predictive_alerts_without_service_contract_grid_details.xlsx',\n dataCols: [\n {\n title: 'Algorithm Category',\n key: 'algorithmGroup',\n width: 80\n },\n {\n title: 'Total Alert Qty',\n key: 'flaggedTotal',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M12 Qty',\n key: 'flaggedMonth12',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M11 Qty',\n key: 'flaggedMonth11',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M10 Qty',\n key: 'flaggedMonth10',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M9 Qty',\n key: 'flaggedMonth9',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M8 Qty',\n key: 'flaggedMonth8',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M7 Qty',\n key: 'flaggedMonth7',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M6 Qty',\n key: 'flaggedMonth6',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M5 Qty',\n key: 'flaggedMonth5',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M4 Qty',\n key: 'flaggedMonth4',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M3 Qty',\n key: 'flaggedMonth3',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M2 Qty',\n key: 'flaggedMonth2',\n customStyle: { 'text-align': 'right' },\n width: 50\n },\n {\n title: 'M1 Qty',\n key: 'flaggedMonth1',\n customStyle: { 'text-align': 'right' },\n width: 50\n }\n ]\n }\n }\n };\n \n config = null;\n apiDataRecord = null;\n public state = RequestState.Inactive;\n countryCode = null;\n customerID = null;\n sn = null;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) { \n super();\n }\n\n ngOnInit(): void {\n \n this.route.paramMap.subscribe(params => {\n this.countryCode = params.get('countryCode');\n this.customerID = params.get('customerID');\n this.sn = params.get('sn');\n }); \n \n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const parentPageRequestHandler = this.apiService.get(this.config.parentPageRequestHandler);\n parentPageRequestHandler.onStateChange((state) => {\n this.state = state;\n });\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n parentPageRequestHandler.sendRequest(this.config.parentPageRequestHandler, { months: 12});\n },\n parentPageRequestHandler.getRelativeParams(this.config.parentPageRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n parentPageRequestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = parentPageRequestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // find the correct apiData record for the routing params\n for (let r = 0; r < apiData['Details'].length; r++) {\n let currentRec = apiData['Details'][r];\n if (currentRec['customerID'] == this.customerID \n && currentRec['countryCode'] == this.countryCode \n && currentRec['sn'] == this.sn) {\n this.apiDataRecord = currentRec;\n break;\n }\n }\n }\n }); \n\n if (this.apiDataRecord != null) {\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n\n const params = {\n months: 12,\n countryCode: this.countryCode,\n customerID: this.customerID,\n sn: this.sn\n }\n\n requestHandler.sendRequest(this.config.apiRequestHandler, params);\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, params);\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n dateFormat: this.config.table.dataCols[i].dateFormat,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n } \n });\n } \n }\n }\n}\n","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    Customer:Interview Date:Overall Score:
    {{apiDataRecord['customername'] == null ? 'Anonymous' : apiDataRecord['customername'] }}{{apiDataRecord['interviewdate']}}{{apiDataRecord['value']}}
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{comment.label}}
    Translation:{{comment.transvalue}}
    Native Language:{{comment.nativevalue}}
    \n
    \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {Location} from '@angular/common';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport { SurveyCommentPages } from '../survey-comment-details/survey-comment-pages';\n\n@Component({\n selector: 'app-rnps-survey-comment-details',\n templateUrl: './rnps-survey-comment-details.component.html',\n styleUrls: ['./rnps-survey-comment-details.component.scss']\n})\nexport class RnpsSurveyCommentDetailsComponent implements OnInit {\n\n stylePages = SurveyCommentPages;\n config = null;\n apiDataRecord = null;\n public state = RequestState.Inactive;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n private refreshHandler: RefreshHandlerService\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.route.paramMap.subscribe(params => {\n\n let rnpsScore = params.get('score');\n let customerName = params.get('customer');\n if (customerName != undefined && customerName == 'NA') {\n customerName = null;\n } else {\n customerName = decodeURIComponent(customerName);\n }\n let country = params.get('country');\n let interviewDate = params.get('interviewdate');\n let rnpsCategory = params.get('category');\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // find the correct apiData record for the routing params\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n let currentRec = apiData[this.config.dataArrayKey][r];\n if (currentRec['value'] == rnpsScore && currentRec['customername'] == customerName \n && currentRec['country'] == country && currentRec['interviewdate'] == interviewDate\n && currentRec['resolved'] == rnpsCategory) {\n this.apiDataRecord = currentRec;\n break;\n }\n } \n } \n });\n });\n }\n }\n}\n","
    \n
    \n
    \n
    \n
    \n Number of records loaded: {{reccount}} out of {{totalrecords}}\n
    \n \n
    \n \n \n\n \n \n \n \n \n \n \n \n \n \n {{col.drillDownDetailsLabel}} \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport {Location} from '@angular/common';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { GridComponent } from '../../grid.component';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\nimport {PreferenceApiConnectorService} from '../../../preferences/preference-api-connector.service';\n\n@Component({\n selector: 'app-sales-summary',\n templateUrl: './sales-summary.component.html',\n styleUrls: ['./sales-summary.component.scss']\n})\nexport class SalesSummaryComponent extends GridComponent implements OnInit {\n /* MULTI CURRENCY FIELDS\n rcs\n currencycode: \"BRL\"\n annualamtdollar: \"0\"\n annualamtlocal: \"0.00\"\n monthlyamtdollar: \"0\"\n monthlyamtlocal: \"0.000000\"\n ytdamtdollar: \"0\"\n ytdamtlocal: \"0.00\"\n\n compliance\n currencycode: \"BRL\"\n expectedrevenue: \"440.00\"\n expectedrevenuedollar: \"110.55\"\n revenue: \"0.00\"\n revenuedollar: \"0.00\"\n\n sales\n currencycode: \"BRL\"\n annualamtdollar: \"0\"\n annualamtlocal: \"0.00\"\n monthlyamtdollar: \"0\"\n monthlyamtlocal: \"0.000000\"\n ytdamtdollar: \"0\"\n ytdamtlocal: \"0.00\"\n */\n stylePages = {\n '/sales/summary': {\n pageTitle: 'Sales Summary (USD)',\n apiRequestHandler: '/metrics/sales/summary',\n backPageLabel: 'Back',\n backPageLink: '/sales',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'ambassador_sales_summary.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'LOB - Disease State',\n key: 'diseasestate',\n width: 60\n },\n {\n title: 'List Number',\n key: 'ln',\n width: 60\n },\n {\n title: 'Desc',\n key: 'desc',\n width: 80\n },\n {\n title: 'Annual Sales',\n key: 'annualamtdollar',\n altKey: 'annualamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'YTD Sales',\n key: 'ytdamtdollar',\n altKey: 'ytdamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Monthly Avg',\n key: 'monthlyamtdollar',\n altKey: 'monthlyamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ],\n drillDownCols: [\n {\n title: 'Details',\n width: 60,\n drillDownDetailsColName: 'area_sales_details',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/sales/details'\n }\n ]\n }\n },\n '/rcs/summary': {\n pageTitle: 'Reagent/Capital/Service (RCS) Summary (USD)',\n apiRequestHandler: '/metrics/rcs/summary',\n backPageLabel: 'Back',\n backPageLink: '/rcs',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'ambassador_rcs_summary.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'LOB - Disease State',\n key: 'diseasestate',\n width: 60\n },\n {\n title: 'List Number',\n key: 'ln',\n width: 60\n },\n {\n title: 'Desc',\n key: 'desc',\n width: 80\n },\n {\n title: 'Annual Sales',\n key: 'annualamtdollar',\n altKey: 'annualamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'YTD Sales',\n key: 'ytdamtdollar',\n altKey: 'ytdamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Monthly Avg',\n key: 'monthlyamtdollar',\n altKey: 'monthlyamtlocal',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ],\n drillDownCols: [\n {\n title: 'Details',\n width: 60,\n drillDownDetailsColName: 'rcs_details',\n drillDownDetailsLabel: '>',\n drillDownDetailsLink: '/rcs/details'\n }\n ]\n }\n },\n '/compliance/details': {\n pageTitle: 'Contract Compliance/Revenue Gain/Loss Summary (12 Months) (USD)',\n apiRequestHandler: '/metrics/compliance/details',\n backPageLabel: 'Back',\n backPageLink: '/compliance',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'ambassador_compliance_details.xlsx',\n dataCols: [\n {\n title: 'Customer',\n key: 'customername',\n width: 80\n },\n {\n title: 'LOB - Disease State',\n key: 'diseasestate',\n width: 60\n },\n {\n title: 'List Number',\n key: 'ln',\n width: 60\n },\n {\n title: 'Assay Desc',\n key: 'assays',\n width: 80\n },\n {\n title: 'Contract Start Date',\n key: 'contractstartdate',\n width: 60\n },\n {\n title: 'Contract End Date',\n key: 'contractenddate',\n width: 60\n },\n {\n title: 'Compliance %',\n key: 'compliance',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Revenue',\n key: 'revenuedollar',\n altKey: 'revenue',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Expected Revenue',\n key: 'expectedrevenuedollar',\n altKey: 'expectedrevenue',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ]\n }\n }\n };\n\n config = null;\n public state = RequestState.Inactive;\n reccount = 0;\n totalrecords = 0;\n startingrow = 0;\n disableLoadAll: boolean = false;\n isLocalCurrency = false;\n localCurrencyCode = null;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n protected refreshHandler: RefreshHandlerService,\n protected preferenceApiConnectorService: PreferenceApiConnectorService\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail-no-filter');\n\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n this.preferenceApiConnectorService.onUpdate(() => {\n this.isLocalCurrency = false;\n if (this.preferenceApiConnectorService.getIsLocalCurrency() === 'True') {\n this.isLocalCurrency = true;\n }\n this.loadDataForRows(this.startingrow, true);\n if (this.localCurrencyCode) {\n this.updateNavFilterSelection(this.localCurrencyCode);\n }\n });\n }\n }\n\n updateNavFilterSelection(currencyCode) {\n const navFilterSelection = this.navbarBuilderService.getNavFilterSelection();\n const pageTitle = navFilterSelection.viewTitleText;\n if (this.isLocalCurrency) {\n pageTitle.replace(\"USD\", currencyCode);\n } else {\n pageTitle.replace(currencyCode, \"USD\");\n }\n this.navbarBuilderService.setNavFilterSelection(navFilterSelection);\n }\n\n public getDrillDownDetailsLinkWithParams(colName: any, drillDownLink: any, dataItem: any) {\n return drillDownLink + \"/\" + dataItem['customerid'] + \"/\" + dataItem['ln'] + \"/\" + dataItem['desc'] + \"/\" + dataItem['customername'];\n }\n\n loadDataForRows(startingRow: number, createGrid: boolean): void {\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, startingrow: startingRow });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12});\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n\n\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n if (createGrid === true) {\n const dataColsConfig = this.config.table.dataCols;\n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n let refKey;\n if (this.isLocalCurrency && 'altKey' in this.config.table.dataCols[i]) {\n refKey = this.config.table.dataCols[i].altKey;\n } else {\n refKey = this.config.table.dataCols[i].key;\n }\n this.dataCols.push({\n ref: refKey,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n if (this.config.table.drillDownCols !== undefined) {\n for (let i = 0; i < this.config.table.drillDownCols.length; i++) {\n this.dataCols.push({\n description: this.config.table.drillDownCols[i].title,\n width: this.config.table.drillDownCols[i].width,\n drillDownDetailsColName: this.config.table.drillDownCols[i].drillDownDetailsColName,\n drillDownDetailsLabel: this.config.table.drillDownCols[i].drillDownDetailsLabel,\n drillDownDetailsLink: this.config.table.drillDownCols[i].drillDownDetailsLink\n });\n } \n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n if (r === 0) {\n this.totalrecords = apiData[this.config.dataArrayKey][0]['totalrecords'];\n }\n }\n this.reccount = this.dataRows.length;\n } else { \n if (startingRow === -1) {\n this.dataRows = [];\n }\n // append records to the existing grid data\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n if (r === 0) {\n this.totalrecords = apiData[this.config.dataArrayKey][0]['totalrecords'];\n }\n }\n // if load all was clicked, disable Load All link after loading all the rows\n if (startingRow === -1) {\n this.disableLoadAll = true;\n this.totalrecords = this.dataRows.length;\n }\n this.reccount = this.dataRows.length;\n }\n if (this.dataRows.length > 0 && 'currencycode' in this.dataRows[0]) {\n this.localCurrencyCode = this.dataRows[0]['currencycode'];\n }\n this.updateGrid();\n if (this.localCurrencyCode) {\n this.updateNavFilterSelection(this.localCurrencyCode);\n }\n }\n });\n }\n \n loadAllRecords() {\n this.loadDataForRows(-1, false);\n }\n\n loadNextDataSet() {\n this.startingrow += 500;\n this.loadDataForRows(this.startingrow, false);\n }\n\n isDisabled() {\n return this.disableLoadAll;\n }\n\n}\n","
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    Customer : {{apiDataRecord.customername}}
    List Number : {{apiDataRecord.ln}} {{apiDataRecord.desc}}
    \n \n \n\n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref]}}\n \n \n \n \n \n
    \n
    \n
    \n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {Location} from '@angular/common';\nimport { ApiService } from 'src/app/api/api.service';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from 'src/app/configuration/nav-filter-selection';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { GridComponent } from '../../grid.component';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\n\n\n@Component({\n selector: 'app-sales-details',\n templateUrl: './sales-details.component.html',\n styleUrls: ['./sales-details.component.scss']\n})\nexport class SalesDetailsComponent extends GridComponent implements OnInit {\n\n stylePages = {\n '/sales/details': {\n pageTitle: 'Sales Details',\n apiRequestHandler: '/metrics/sales/details',\n backPageLabel: 'Sales Summary (USD)',\n backPageLink: '/sales/summary',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'ambassador_sales_customer_details.xlsx',\n dataCols: [\n {\n title: 'Order #',\n key: 'orderno',\n customStyle: { 'text-align': 'right' },\n width: 80\n },\n {\n title: 'Order Date',\n key: 'orderdate',\n width: 60\n },\n {\n title: 'Quantity',\n key: 'orderqty',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Ship Date',\n key: 'ordershipdate',\n width: 60\n },\n {\n title: 'Amount',\n key: 'orderamt',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ]\n }\n },\n '/rcs/details': {\n pageTitle: 'Reagent/Capital/Service (RCS) Details',\n apiRequestHandler: '/metrics/rcs/details',\n backPageLabel: 'Back',\n backPageLink: '/rcs/summary',\n dataArrayKey: 'details',\n table: {\n exportFileName: 'ambassador_rcs_customer_details.xlsx',\n dataCols: [\n {\n title: 'Order #',\n key: 'orderno',\n customStyle: { 'text-align': 'right' },\n width: 80\n },\n {\n title: 'Order Date',\n key: 'orderdate',\n width: 60\n },\n {\n title: 'Quantity',\n key: 'orderqty',\n customStyle: { 'text-align': 'right' },\n width: 60\n },\n {\n title: 'Ship Date',\n key: 'ordershipdate',\n width: 60\n },\n {\n title: 'Amount',\n key: 'orderamt',\n customStyle: { 'text-align': 'right' },\n width: 60\n }\n ]\n }\n } \n };\n config = null;\n public state = RequestState.Inactive;\n apiDataRecord = null;\n\n constructor(\n private location: Location,\n protected apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private route: ActivatedRoute,\n protected refreshHandler: RefreshHandlerService\n ) { \n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.location.path();\n Object.keys(this.stylePages).forEach(key => {\n if (currentRouterLocation.indexOf(key) > -1) {\n this.config = this.stylePages[key];\n return;\n }\n });\n if (this.config != null) {\n this.route.paramMap.subscribe(params => { \n \n let customerid = params.get('customerid');\n let customername = params.get('customername');\n let ln = params.get('ln');\n let desc = params.get('desc');\n\n this.apiDataRecord = {};\n\n this.apiDataRecord['customername'] = customername;\n this.apiDataRecord['ln'] = ln;\n this.apiDataRecord['desc'] = desc;\n\n // set the dashboard\n this.navbarBuilderService.setNavbarChoice('metric-detail');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n personaSelector: false,\n dashboardSelector: false,\n search: false,\n toolSelection: ToolSelectionOptions.mycrl,\n legacyCustomersFlag: true,\n myVsAllInstrumentsFlag: true,\n customerWTrackSystemsFlag: true,\n flagshipProductLinesFlag: true,\n bookmarksFlag: true,\n navigateBackwards: true,\n navigateBackwardsLabel: this.config.backPageLabel,\n navigateBackwardsLink: this.config.backPageLink,\n viewTitle: true,\n viewTitleText: this.config.pageTitle,\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, customerdetail_id: customerid, detail_ln: ln });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { months: 12, customerdetail_id: customerid, detail_ln: ln });\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n \n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n \n this.dataCols = [];\n for (let i = 0; i < this.config.table.dataCols.length; i++) {\n this.dataCols.push({\n ref: this.config.table.dataCols[i].key,\n description: this.config.table.dataCols[i].title,\n width: this.config.table.dataCols[i].width,\n hidden: this.config.table.dataCols[i].hidden,\n customStyle: this.config.table.dataCols[i].customStyle\n });\n }\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData[this.config.dataArrayKey].length; r++) {\n this.dataRows.push(apiData[this.config.dataArrayKey][r]);\n }\n this.updateGrid();\n }\n });\n }); \n }\n }\n\n}\n","import {DomSanitizer} from '@angular/platform-browser';\nimport {PipeTransform, Pipe, SecurityContext} from \"@angular/core\";\n\n@Pipe({ name: 'safeHtml'})\nexport class SafeHtmlPipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {}\n transform(value) {\n return this.sanitized.bypassSecurityTrustHtml(value);\n }\n}\n\n@Pipe({ name: 'safeStyle'})\nexport class SafeStylePipe implements PipeTransform {\n constructor(private sanitized: DomSanitizer) {}\n transform(value) {\n return this.sanitized.bypassSecurityTrustStyle(value);\n }\n}\n\n","\n
    \n
    \n
    \n Global Service Alerts (most recent first)\n Total Alerts: {{dataRows.length}}\n
    \n
    \n
    \n
    \n {{dataRecord.category}}\n
    \n
    \n Message Date: {{dataRecord.msgdate}}, \n Expires: {{dataRecord.expirationdate}}\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n No Global Service alerts found!\n
    \n
    \n\n
    \n\n\n\n","import { Component, OnInit } from '@angular/core';\nimport { ApiService } from 'src/app/api/api.service';\nimport { RefreshHandlerService } from 'src/app/api/refresh-handler.service';\nimport { RequestState } from 'src/app/api/request-handler';\nimport { NavbarBuilderService } from 'src/app/navigation/navbar-builder.service';\n\n@Component({\n selector: 'app-gs-alerts-dashboard',\n templateUrl: './gs-alerts-dashboard.component.html',\n styleUrls: ['./gs-alerts-dashboard.component.scss']\n})\nexport class GsAlertsDashboardComponent implements OnInit {\n\n state = RequestState.Inactive;\n\n dataRows = [];\n\n config = {\n pageTitle: 'Global Service Alerts',\n apiRequestHandler: '/global_service_alerts'\n };\n\n constructor(private navbarBuilderService: NavbarBuilderService\n , protected apiService: ApiService\n , protected refreshHandler: RefreshHandlerService) { \n\n }\n\n ngOnInit(): void {\n this.navbarBuilderService.setNavbarChoice('gs-alerts-dashboard');\n\n const requestHandler = this.apiService.get(this.config.apiRequestHandler);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(this.config.apiRequestHandler, { requestTime: (new Date()).getTime() });\n this.refreshHandler.onRefreshEvent(\n (index) => {\n requestHandler.sendRequest(this.config.apiRequestHandler, { requestTime: (new Date()).getTime() });\n },\n requestHandler.getRelativeParams(this.config.apiRequestHandler)\n );\n\n // no need to send request here as chart tile has already done so\n requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n // format dataRows for kendo component\n this.dataRows = [];\n for (let r = 0; r < apiData['data'].length; r++) {\n this.dataRows.push(apiData['data'][r]);\n } \n }\n });\n }\n\n // getTrimmedMessage(msg: string) {\n // //if (msg && msg.length >= 500) {\n // // return msg.substring(0, 500) + \"Read More\";\n // //}\n // return msg;\n // }\n\n getHtmlMessage(msg: string) {\n return '' + msg + \"\";\n }\n\n toHTML(input) : any {\n //console.log(input);\n let docElement = new DOMParser().parseFromString(input, \"text/html\").documentElement;\n //console.log(docElement.innerHTML);\n console.log(docElement.textContent);\n return docElement.textContent;\n }\n\n isDataFound(dataRows) {\n if (!dataRows) {\n return false;\n }\n if (Array.isArray(dataRows) && dataRows.length === 0) {\n return false;\n }\n return true;\n }\n\n}\n","import { Injectable, EventEmitter } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BrTemplateSelectionService {\n templateChanged = new EventEmitter(true);\n templateDetails = {\n id: 'br_kpi',\n name: 'Default Template',\n string: ''\n };\n\n constructor() { }\n\n getTemplateSelectionChange() {\n return this.templateChanged;\n }\n\n getSelectedTemplate() {\n return this.templateDetails;\n }\n\n updateSelectedTemplate(templateId, templateName, templateString) {\n this.templateDetails = {\n id: templateId,\n name: templateName,\n string: templateString\n };\n this.templateChanged.emit(this.templateDetails);\n }\n}\n","import {BrTileReference} from './br-tile-reference';\r\n\r\nexport const DASHBOARD_ARRANGEMENT: BrTileReference[] = [\r\n {\r\n apiSource: '/qbr/kpi/alcm/thumbnail',\r\n componentName: 'BrTextIndicatorComponent',\r\n detailLink: '/businessReview/alcm/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'AbbottLink Customer Maintenance'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/assay_test_counts/thumbnail',\r\n componentName: 'BrPieChartComponent',\r\n detailLink: '/businessReview/assay_test_counts/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Top Assays'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/nps/thumbnail',\r\n componentName: 'BrTopItemsComponent',\r\n detailLink: '/businessReview/nps/list_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'CUSTOMER NPS SCORES'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/calls_without_service_number/thumbnail',\r\n componentName: 'BrMultiLineChartComponent',\r\n detailLink: '/businessReview/calls_without_service_number/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Calls w/Out Service Number'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/instrument_test_counts/thumbnail',\r\n componentName: 'BrLineChartComponent',\r\n detailLink: '/businessReview/instrument_test_counts/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Instrument Test Counts'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/mttr/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/mttr/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'MTTR'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/phn/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/phn/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'PHN Tickets'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/response_time/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/response_time/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Response Time'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/service_level/thumbnail',\r\n componentName: 'BrMultiLineChartComponent',\r\n detailLink: '/businessReview/service_level/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Telephony Service Level'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/tcr/thumbnail',\r\n componentName: 'BrLineChartComponent',\r\n detailLink: '/businessReview/tcr/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Test Completion Rate'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/ticket_history/thumbnail',\r\n componentName: 'BrPieChartComponent',\r\n detailLink: '/businessReview/ticket_history/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Ticket History'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/total_inbound_calls/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/total_inbound_calls/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Total Inbound Calls'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/pm_tickets/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/pm_tickets/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'PM Tickets'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/ticket_errors/thumbnail', // WORKING ON NOW /////\r\n componentName: 'BrPieChartComponent',\r\n detailLink: '/businessReview/ticket_errors/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Top Issues'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/hard_stops/thumbnail', // WORKING ON NOW /////\r\n componentName: 'BrPieChartComponent',\r\n detailLink: '/businessReview/hard_stops/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Hard Stops'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/tsb/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/tsb/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'TSBs'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/example_data/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n // detailLink: '/example_data',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Example Data'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/uptime/thumbnail',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n detailLink: '/businessReview/uptime/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Uptime'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/example_pie_chart/thumbnail',\r\n componentName: 'BrExamplePieChartComponent',\r\n // detailLink: '/example_data',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Example Pie Chart'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/abandoned_calls/thumbnail',\r\n componentName: 'BrMultiLineChartComponent',\r\n detailLink: '/businessReview/abandoned_calls/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Abandoned / Callbacks'\r\n }\r\n },\r\n {\r\n apiSource: '/qbr/kpi/average_wait_time/thumbnail',\r\n componentName: 'BrMultiLineChartComponent',\r\n detailLink: '/businessReview/average_wait_time/system_comparison_view',\r\n preferences: {\r\n periodsToShow: 4,\r\n title: 'Average & Longest Wait Times'\r\n }\r\n }\r\n];\r\n","\n
    \n \n
    \n
    Select Saved Presentation
    \n \n \n
    Save These Settings
    \n As \"Current Selection\" OR\n \n \n \n
    \n
    \n
    ","import { Component, OnInit, OnDestroy, ViewChild, ElementRef, HostListener } from '@angular/core';\nimport {faBookmark} from '@fortawesome/free-solid-svg-icons';\nimport {RequestState} from '../../api/request-handler';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {BrParamsService} from '../br-params.service';\nimport {PresentationSelectService} from '../presentation-select.service';\n\n// #bcfffc\n@Component({\n selector: 'app-presentation-select',\n templateUrl: './presentation-select.component.html',\n styleUrls: ['./presentation-select.component.scss']\n})\nexport class PresentationSelectComponent implements OnInit, OnDestroy {\n faBookmark = faBookmark;\n RequestState = RequestState;\n protected requestHandler;\n protected requestHandler2;\n public state = RequestState.Inactive;\n protected savePresentationSource = '/qbr/user_presentations/custom/save_user_presentation';\n protected listPresentationsSource = '/qbr/user_presentations/custom/list_user_presentations';\n listPresentationsData = {\n items: []\n };\n protected refreshHandleKey;\n\n bkMenuViable = false;\n anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n popupAlign = { horizontal: 'left', vertical: 'top' };\n collision = { horizontal: 'fit', vertical: 'fit' };\n\n @ViewChild('bkanchor') public anchor: ElementRef;\n @ViewChild('bkpopup', { read: ElementRef }) public popup: ElementRef;\n\n selectedOption;\n\n constructor(\n private brParamsService: BrParamsService,\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n private presentationSelectService: PresentationSelectService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.callApiSource(this.listPresentationsSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n if (!apiData.hasOwnProperty('type') && apiData.type !== 'NO_RESULTS_FOUND') {\n this.listPresentationsData = apiData;\n }\n this.selectedOption = this.brParamsService.get('presentationId'); // not showing selected on reopen after selection\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.listPresentationsSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.listPresentationsSource));\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n if (this.requestHandler2) {\n this.requestHandler2.cancelSubscription();\n }\n }\n\n presentationSelect(presentationId) {\n this.brParamsService.set('presentationId', presentationId);\n this.presentationSelectService.selectPresentation(presentationId);\n this.bkMenuViable = false;\n }\n\n onToggle(): void {\n this.bkMenuViable = !this.bkMenuViable;\n }\n\n @HostListener('keydown', ['$event'])\n public keydown(event: any): void {\n if (event.keyCode === 27 && this.bkMenuViable) {\n this.onToggle();\n }\n }\n\n @HostListener('document:click', ['$event'])\n public documentClick(event: any): void {\n if ((this.bkMenuViable && !this.contains(event.target)) || (!this.bkMenuViable && this.contains(event.target))) {\n this.onToggle();\n }\n }\n\n @HostListener('window:resize', [])\n public onResize() {\n const screenWidth = window.innerWidth;\n if (screenWidth >= 768) {\n this.anchorAlign = { horizontal: 'left', vertical: 'bottom' };\n } else {\n this.anchorAlign = { horizontal: 'right', vertical: 'bottom' };\n }\n }\n\n private contains(target: any): boolean {\n if (this.anchor !== undefined) {\n return this.anchor.nativeElement.contains(target) ||\n (this.popup ? this.popup.nativeElement.contains(target) : false);\n }\n return false;\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n nameChange(e) {\n this.brParamsService.set('br_presentation_name', e);\n // this.refreshHandlerService.triggerCallbacks(['br_template_name']);\n }\n\n saveAs() {\n this.requestHandler = this.callApiSource(this.savePresentationSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.brParamsService.set('list_user_presentations_update', this.brParamsService.get('list_user_presentations_update') + 1);\n this.refreshHandlerService.triggerCallbacks(['list_user_presentations_update']);\n this.requestHandler = this.callApiSource(this.listPresentationsSource, 0);\n this.bkMenuViable = false;\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.savePresentationSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.savePresentationSource));\n }\n\n}\n","\n
    \n
    Organizations
    \n
    \n
    \n {{orgPrefixItem.display_name}}\n
    \n \n \n {{orgItem.display_name}}\n
    \n
    \n
    \n
    \n
    \n
    Locations
    \n
    \n
    \n \n \n {{locationItem.display_name}}\n
    \n
    \n
    \n
    \n
    LocalLevels
    \n
    \n
    \n \n \n {{localLevelItem.display_name}}\n
    \n
    \n
    \n\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {RequestState} from '../../../api/request-handler';\nimport {ApiService} from '../../../api/api.service';\nimport {faCheck} from '@fortawesome/free-solid-svg-icons';\nimport {BrParamsService} from '../../br-params.service';\n\nenum Selected {\n None = 0,\n Complete = 1,\n Partial = 2\n}\n\n@Component({\n selector: 'app-br-location-selector',\n templateUrl: './br-location-selector.component.html',\n styleUrls: ['./br-location-selector.component.scss']\n})\nexport class BrLocationSelectorComponent implements OnInit, OnDestroy {\n data2 = null;\n protected requestHandler;\n protected apiSource = '/qbr/app_config/location/location';\n state = RequestState.Inactive;\n RequestState = RequestState;\n locationColumn = [];\n localLevelColumn = [];\n selectedOrg;\n selectedLocation;\n selectedLocalLevel;\n faCheck = faCheck;\n\n constructor(\n private apiService: ApiService,\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.callApiSource(this.apiSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.data2 = apiData;\n this.selectedOrg = this.brParamsService.get('org');\n this.buildLocationMenu(this.selectedOrg);\n this.selectedLocation = this.brParamsService.get('location');\n this.buildLocalLevelMenu(this.selectedLocation);\n this.selectedLocalLevel = this.brParamsService.get('locallevel');\n }\n });\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'org') {\n this.selectedOrg = this.brParamsService.get('org');\n this.selectedLocation = this.brParamsService.get('location');\n this.selectedLocalLevel = this.brParamsService.get('locallevel');\n }\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n getOrgItem(orgId) {\n for (const orgItem of this.data2.org_names.items) {\n if (orgItem.id === orgId) {\n return orgItem;\n }\n }\n return null;\n }\n\n getLocationItem(locationId) {\n for (const locationItem of this.data2.countries.items) {\n if (locationItem.id === locationId) {\n return locationItem;\n }\n }\n return null;\n }\n\n getLocalLevelItem(location, localLevelId) {\n for (const localLevelItem of location.relationships) {\n if (localLevelItem.id === localLevelId) {\n return localLevelItem;\n }\n }\n return null;\n }\n\n buildLocationMenu(forOrgId) {\n const orgItem = this.getOrgItem(forOrgId);\n this.locationColumn = orgItem.relationships;\n return this;\n }\n\n buildLocalLevelMenu(forLocationId) {\n const locationItem = this.getLocationItem(forLocationId);\n this.localLevelColumn = locationItem.relationships;\n return this;\n }\n\n buildLocationDescription() {\n const orgId = this.brParamsService.get('org');\n const org = this.getOrgItem(orgId);\n const locationId = this.brParamsService.get('location');\n const location = this.getLocationItem(locationId);\n const locallevelId = this.brParamsService.get('locallevel');\n const locallevel = this.getLocalLevelItem(location, locallevelId);\n\n this.brParamsService.set('location_description', org.display_name + ', ' + location.display_name + ', ' + locallevel.display_name);\n }\n\n selectOrg(orgId) {\n this.selectedOrg = orgId;\n this.buildLocationMenu(orgId);\n this.selectedLocation = '000';\n this.brParamsService.set('org', orgId);\n this.brParamsService.set('location', '000');\n this.buildLocationDescription();\n return this;\n }\n\n selectLocation(locationId) {\n this.buildLocalLevelMenu(locationId);\n this.selectedLocation = locationId;\n this.selectedLocalLevel = '000';\n this.brParamsService.set('location', locationId);\n this.brParamsService.set('locallevel', '000');\n this.buildLocationDescription();\n return this;\n }\n\n selectLocalLevel(localLevelId) {\n this.selectedLocalLevel = localLevelId;\n this.brParamsService.set('locallevel', localLevelId);\n this.buildLocationDescription();\n }\n}\n","import { Component, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';\nimport {ApiService} from '../../../api/api.service';\nimport {RequestState} from '../../../api/request-handler';\nimport {AuthenticationService} from '../../../authentication/authentication.service';\nimport {BrParamsService} from '../../br-params.service';\n\n@Component({\n selector: 'app-br-business-segment-selector',\n templateUrl: './br-business-segment-selector.component.html',\n styleUrls: ['./br-business-segment-selector.component.scss']\n})\nexport class BrBusinessSegmentSelectorComponent implements OnInit, OnDestroy {\n RequestStateComplete = RequestState.Complete; // temporary until api call is implemented\n\n protected requestHandler;\n protected apiSource = '/qbr/app_config/cust_bs/cust_bs';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n\n /*data = [\n {label: 'All Business Segments', key: 1},\n {label: 'Core Lab', key: 1},\n {label: 'Transfusion', key: 2},\n {label: 'Unassigned', key: 3},\n ];*/\n selectedItem;\n apiState;\n data = [];\n\n constructor(\n private authService: AuthenticationService,\n private cdRef: ChangeDetectorRef,\n private apiService: ApiService,\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.updateSelections();\n\n this.requestHandler = this.apiService.get(this.apiSource);\n this.requestHandler.sendRequest(this.apiSource);\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n for (const item of apiData.items) {\n buildData.push({\n label: item.display_name,\n key: item.id\n });\n }\n this.data = buildData;\n const presistedValue = this.brParamsService.get('cust_bs');\n this.selectedItem = presistedValue;\n }\n });\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'cust_bs') {\n this.selectedItem = this.brParamsService.get('cust_bs');\n }\n });\n // this.selectedItem =\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n updateSelections() {\n\n // this.menuText1 = this.selectedType;\n // this.menuText2 = this.selectedLabel;\n\n this.cdRef.detectChanges();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n setSelectedItem(selectedItem) {\n this.selectedItem = selectedItem;\n const label = this.getLabel(selectedItem);\n this.brParamsService.set('cust_bs', this.selectedItem);\n this.brParamsService.set('cust_bs_description', label);\n }\n}\n","\n","\n
    \n
    {{column.label}}
    \n
    \n
    \n \n \n \n {{columnItem.display}}\n
    \n
    \n
    \n
    ","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport {\n faSquare,\n faCheck\n} from '@fortawesome/free-solid-svg-icons';\n\nenum Selected {\n None = 0,\n Complete = 1,\n Partial = 2\n}\n\n// note: this component can only be used when last column is the final selections\n@Component({\n selector: 'app-ui-multi-column-list-select',\n templateUrl: './ui-multi-column-list-select.component.html',\n styleUrls: ['./ui-multi-column-list-select.component.scss']\n})\nexport class UiMultiColumnListSelectComponent implements OnInit {\n faSquare = faSquare;\n faCheck = faCheck;\n Selected = Selected;\n\n @Input() mockData;\n @Input() bringSelectedToTop = false;\n\n @Output() valueChange = new EventEmitter(true);\n @Output() valueChangeColumnSelected = new EventEmitter(true);\n @Output() valueChangeData = new EventEmitter(true);\n\n constructor() { }\n\n ngOnInit(): void {\n this.bringSelectedValuesToTop();\n }\n\n propertySort(property) {\n let sortOrder = 1;\n if (property[0] === '-') {\n sortOrder = -1;\n property = property.substr(1);\n }\n return (a, b) => {\n const result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;\n return result * sortOrder;\n };\n }\n\n bringSelectedValuesToTop() {\n const selectedSortPriority = {1: 0, 2: 1, 0: 3};\n if (this.bringSelectedToTop && this.mockData !== null && this.mockData.column_list !== undefined) {\n for (const column of this.mockData.column_list) {\n column.items.sort((a, b) => {\n return selectedSortPriority[a.selected] - selectedSortPriority[b.selected];\n });\n column.items.sort((a, b) => {\n if (selectedSortPriority[a.selected] !== selectedSortPriority[b.selected]) {\n return 0;\n }\n return (a.display < b.display) ? -1 : (a.display > b.display) ? 1 : 0;\n });\n }\n }\n }\n\n getSelectedValues() {\n let result = [];\n this.mockData.column_list.forEach((columnItem) => {\n if (columnItem.post_selected === true) {\n result = this.getSelectedItemsInColumn(columnItem.id);\n }\n });\n return result;\n }\n\n getColumnSelectedValues() {\n const result = [];\n this.mockData.column_list.forEach((columnItem) => {\n const columnSummery = {\n id: columnItem.id,\n postSelected: columnItem.post_selected,\n selectedItems: this.getSelectedItemsInColumn(columnItem.id, [Selected.Complete])\n };\n result.push(columnSummery);\n });\n return result;\n }\n\n toggleItemSelect(e) {\n this.itemClickSelect(e);\n this.valueChange.emit(this.getSelectedValues());\n this.valueChangeColumnSelected.emit(this.getColumnSelectedValues());\n this.valueChangeData.emit(this.mockData);\n /**\n * Switch selected state for clicked item\n * loop through sub tree to show any missing relative items\n * - see line 39, add to addon_items\n * loop through sub tree to auto select decedent items\n * loop up parent tree /tags to determine proper selection biased on sub selections\n */\n }\n\n unselectColumnItems(column, exceptions) {\n column.items.forEach((columnItem) => {\n if (!exceptions.includes(columnItem.id)) {\n columnItem.selected = Selected.None;\n }\n });\n }\n\n itemHasDescendantItem(itemColumnId, itemId, descendantColumnId, descendantItemId) {\n\n }\n\n getColumnById(columnId) {\n let column;\n this.mockData.column_list.forEach((columnItem) => {\n if (columnItem.id === columnId) {\n column = columnItem;\n }\n });\n return column;\n }\n\n getColumnItemById(column, itemId) {\n let item = null;\n column.items.forEach((columnItem) => {\n if (columnItem.id === itemId) {\n item = columnItem;\n }\n });\n return item;\n }\n\n getItemRelationshipConfig(columnId, itemId) {\n let result;\n this.mockData.relationships.forEach((relationshipItem) => {\n if (relationshipItem.column === columnId && relationshipItem.id === itemId) {\n result = relationshipItem;\n }\n });\n return result;\n }\n\n recursiveSetSelectedState(columnId, itemId, selectedState) {\n // console.log('a1', columnId, itemId, selectedState);\n // get itemId and columnId\n const column = this.getColumnById(columnId);\n\n const columnItem = this.getColumnItemById(column, itemId);\n\n // set to selected\n if (columnItem !== null) {\n columnItem.selected = selectedState;\n\n // get child relationships\n const relationship = this.getItemRelationshipConfig(columnId, itemId);\n if (relationship !== undefined) {\n // recurse to this method for each child relationship\n relationship.children.forEach((childItem) => {\n this.recursiveSetSelectedState(childItem.column, childItem.id, selectedState);\n });\n }\n }\n }\n\n removeExtraItems() {\n this.mockData.column_list.forEach((column) => {\n column.extra_items = [];\n });\n }\n\n getReverseColumnItemsForChild(columnId, itemId) {\n const reverseTree = [];\n this.mockData.relationships.forEach((relationshipItem) => {\n relationshipItem.children.forEach((childItem) => {\n if (childItem.column === columnId && childItem.id === itemId) {\n const reverseTreeItem = {\n column: relationshipItem.column,\n id: relationshipItem.id,\n display: relationshipItem.display,\n ancestors: this.getReverseColumnItemsForChild(relationshipItem.column, relationshipItem.id)\n };\n reverseTree.push(reverseTreeItem);\n }\n });\n });\n // console.log('ancestry', columnId, reverseTree);\n return reverseTree;\n }\n\n areColumnItemLowestLevelDecendentsChecked(columnId, itemId) {}\n\n/*{\n column: 'l_2_6',\n id: '001',\n children: [\n {column: 'l_2_6', id: '002', display: 'St. Marys\\' SubLayer'},\n {column: 'l_1', id: '001', display: 'St. Mary\\'s Group'},\n {column: 'l_1', id: '005', display: 'Joe Bob List'}\n ]\n},*/\n\n recursiveAddExtraItems(columnId, itemId, selectedState) {\n // get itemId and columnId\n const column = this.getColumnById(columnId);\n const columnItem = this.getColumnItemById(column, itemId);\n\n // set to selected\n columnItem.selected = selectedState;\n\n // get child relationships\n const relationship = this.getItemRelationshipConfig(columnId, itemId);\n\n // recurse to this method for each child relationship\n relationship.children.forEach((childItem) => {\n this.recursiveSetSelectedState(childItem.column, childItem.id, selectedState);\n });\n }\n\n isItemInColumnExtraItem(ancestor, columnItem) {\n let result = false;\n columnItem.extra_items.forEach((childItem) => {\n if (columnItem.id === ancestor.column && childItem.id === ancestor.id) {\n result = true;\n }\n });\n return result;\n }\n\n getSelectedItemsInColumn(columnId, validSelectedTypes = [Selected.Complete, Selected.Partial]) {\n const returnItems = [];\n const column = this.getColumnById(columnId);\n // console.log(this.mockData, column, JSON.stringify(column));\n column.items.forEach((item) => {\n // console.log(item);\n if (validSelectedTypes.includes(item.selected)) {\n returnItems.push(item);\n }\n });\n // console.log('t3y', returnItems);\n return returnItems;\n }\n\n refreshSelectionsAndExtraItems(columnId, focusedInputItem, newValue, ss = false) {\n const isSingleSelect = this.getColumnById(columnId).single_select;\n // @todo: handle single select\n if (isSingleSelect && newValue === Selected.Complete && !ss) {\n const selectedItemsInColumn = this.getSelectedItemsInColumn(columnId);\n // console.log('selectedItemsInColumn', selectedItemsInColumn);\n selectedItemsInColumn.forEach((item) => {\n this.refreshSelectionsAndExtraItems(columnId, item, Selected.None, true);\n });\n }\n\n // - step 1: let any change traverse down to adjust lowest level check selections\n this.recursiveSetSelectedState(columnId, focusedInputItem.id, newValue);\n\n // - step 3: auto add and lowest level child extra items\n // - step 2: traverse up from lowest layer to cleanup extra items\n this.removeExtraItems();\n /*this.mockData.column_list.forEach((columnItem) => {\n if (columnItem.post_selected) {// is final child layer\n columnItem.items.forEach((childItem) => {\n if (childItem.selected) {\n const ancestry = this.getReverseColumnItemsForChild(columnItem.id, childItem.id);\n ancestry.forEach((ancestor) => {\n if (!this.isItemInColumnExtraItem(ancestor, columnItem)) { // prevent duplicates\n columnItem.extra_items.push(ancestor);\n }\n });\n }\n\n });\n }\n });*/\n\n // - step 3: traverse up from lowest level children to fix parent selections\n // for any unselected child, unselect any parents that include it\n const finalChildLayerSelected = [];\n this.mockData.column_list.forEach((columnItem) => {\n if (columnItem.post_selected) {// is final child layer\n columnItem.items.forEach((childItem) => {\n if (childItem.selected) {\n finalChildLayerSelected.push(childItem);\n }\n });\n }\n });\n\n this.mockData.column_list.forEach((columnItem) => {\n if (!columnItem.post_selected) {// is final child layer\n columnItem.items.forEach((columnChildItem) => {\n columnChildItem.selected = this.getSelectedType(finalChildLayerSelected, columnChildItem);\n });\n }\n });\n }\n isColumnFinalChildColumn(id) {\n let result = false;\n this.mockData.column_list.forEach((columnItem) => {\n if (columnItem.id === id && columnItem.post_selected === true) {\n result = true;\n }\n });\n return result;\n }\n getRecursiveFinalChildrenForColumnItem(columnItem) {\n let finalChildren = [];\n // get child relationships\n const relationship = this.getItemRelationshipConfig(columnItem.column, columnItem.id);\n // recurse to this method for each child relationship\n if (relationship !== undefined) {\n relationship.children.forEach((childItem) => {\n if (this.isColumnFinalChildColumn(childItem.column)) {\n finalChildren.push(childItem);\n } else {\n finalChildren = finalChildren.concat(this.getRecursiveFinalChildrenForColumnItem(childItem));\n }\n });\n }\n return finalChildren;\n }\n\n inFilteredChildren(filteredChildren, item) {\n let result = false;\n filteredChildren.forEach((filteredItem) => {\n if (filteredItem.column === item.column && filteredItem.id === item.id) {\n result = true;\n }\n });\n return result;\n }\n\n isItemASelectedChild(selectedItems, item) {\n let result = false;\n selectedItems.forEach((selectedItem) => {\n if (selectedItem.column === item.column && selectedItem.id === item.id) {\n result = true;\n }\n });\n return result;\n }\n\n getSelectedType(finalChildLayerSelectedItems, columnChildItem) {\n let allSelected;\n let partialSelected;\n // get final children from relationships\n const finalChildren = this.getRecursiveFinalChildrenForColumnItem(columnChildItem);\n // remove duplicates\n const filteredChildren = [];\n finalChildren.forEach((fcItem) => {\n if (!this.inFilteredChildren(filteredChildren, fcItem)) {\n filteredChildren.push(fcItem);\n }\n });\n\n allSelected = true;\n partialSelected = false;\n\n // are all the finalChildren for the columnItem in this list of selected children\n filteredChildren.forEach((finalChildForColumn) => {\n if (this.isItemASelectedChild(finalChildLayerSelectedItems, finalChildForColumn)) {\n partialSelected = true;\n } else {\n allSelected = false;\n }\n /*finalChildLayerSelectedItems.forEach((selectedChild) => {\n\n if (selectedChild.column === finalChildForColumn.column && selectedChild.id === finalChildForColumn.id) {\n if (!finalChildForColumn.selected) {\n allSelected = false;\n } else {\n partialSelected = true;\n }\n }\n });*/\n });\n if (allSelected) {\n return Selected.Complete;\n } else if (partialSelected) {\n return Selected.Partial;\n } else {\n return Selected.None;\n }\n // if so then complete\n // if some then partial\n // else none\n }\n\n /*selectSubColumnItems(column) {\n // find currently selected items\n column.items.forEach((columnItem) => {\n this.getColumnSubItemsForColumnItem(column.id, columnItem.id, ).forEach((subItem) => {\n\n });\n });\n // identify and select sub items for each of the currently selected items\n }\n\n getColumnSubItemsForColumnItem(columnId, columnItemId, searchColumnId) {\n if (searchColumnId === undefined) {\n searchColumnId = columnId;\n }\n const subItems = [];\n this.mockData.relationships.forEach((rItem) => {\n if (rItem.column === columnId && rItem.id === columnItemId) {\n rItem.children.forEach((cItem) => {\n if (cItem.column === searchColumnId) {\n subItems.push(cItem);\n }\n });\n }\n });\n return subItems;\n }*/\n\n itemClickSelect(e) {\n if (e.column.single_select) {\n this.unselectColumnItems(e.column, [e.columnItem.id]);\n }\n\n switch (e.columnItem.selected) {\n case Selected.Complete:\n this.refreshSelectionsAndExtraItems(e.column.id, e.columnItem, Selected.None);\n break;\n case Selected.None:\n this.refreshSelectionsAndExtraItems(e.column.id, e.columnItem, Selected.Complete);\n break;\n case Selected.Partial:\n this.refreshSelectionsAndExtraItems(e.column.id, e.columnItem, Selected.Complete);\n break;\n default:\n this.refreshSelectionsAndExtraItems(e.column.id, e.columnItem, Selected.Complete);\n }\n this.bringSelectedValuesToTop();\n }\n\n itemLogicSelect() {\n // determine if all direct child items are selected\n }\n}\n","
    \n
    \n Please type an Account or Customer to find.
    \n (3 Characters are Required to Search)\n
    \n
    \n
    Results Updating.
    \n
    \n
    \n No Results Found.\n
    \n
    \n \n
    \n
    \n



    \n\n \n\n
    \n
    Presented Name to represent Account/Customer Selection
    \n
    \n
    \n \n Update To: \n \n
    \n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {RequestState} from '../../../api/request-handler';\nimport {RefreshHandlerService} from '../../../api/refresh-handler.service';\nimport {ApiService} from '../../../api/api.service';\nimport {BrParamsService} from '../../br-params.service';\n\nenum Selected {\n None = 0,\n Complete = 1,\n Partial = 2\n}\n\n@Component({\n selector: 'app-account-customer-selector',\n templateUrl: './account-customer-selector.component.html',\n styleUrls: ['./account-customer-selector.component.scss']\n})\nexport class AccountCustomerSelectorComponent implements OnInit, OnDestroy {\n data = null;\n /*{\n column_list: [\n {\n id: 'l_2_6',\n label: 'Account (Level 2-5)',\n post_selected: false,\n single_select: true,\n items: [\n {column: 'l_2_6', id: '001', display: 'St. Marys\\' Conglomerate', selected: Selected.None},\n {column: 'l_2_6', id: '002', display: 'St. Marys\\' SubLayer', selected: Selected.None},\n {column: 'l_2_6', id: '003', display: 'St. Francis Hosp.', selected: Selected.None},\n ],\n extra_items: []\n },\n {\n id: 'l_1',\n label: 'Account (Level 1)',\n post_selected: false,\n single_select: true,\n items: [\n {column: 'l_1', id: '001', display: 'St. Mary\\'s Group', selected: Selected.None},\n {column: 'l_1', id: '002', display: 'St. Francis Hosp.', selected: Selected.None},\n {column: 'l_1', id: '003', display: 'Harris methodist', selected: Selected.None},\n {column: 'l_1', id: '004', display: 'Texas Health', selected: Selected.None}\n ],\n extra_items: []\n },\n {\n id: 'l_c_0',\n label: 'Customer (Level 0)',\n post_selected: true,\n single_select: false,\n items: [\n {column: 'l_c_0', id: '001', display: 'St. Mary\\'s Hosp', selected: Selected.None},\n {column: 'l_c_0', id: '002', display: 'St. Mary\\'s Clinic', selected: Selected.None},\n {column: 'l_c_0', id: '003', display: 'St. Francis Hosp', selected: Selected.None},\n {column: 'l_c_0', id: '004', display: 'Joe Bob Clinic Super Long Text', selected: Selected.None},\n {column: 'l_c_0', id: '005', display: 'Harris Meth 1', selected: Selected.None},\n {column: 'l_c_0', id: '006', display: 'Texas Health 2', selected: Selected.None}\n ],\n extra_items: []\n }\n ],\n relationships: [\n {\n column: 'l_2_6',\n id: '001',\n display: '',\n children: [\n {column: 'l_2_6', id: '002', display: 'St. Marys\\' SubLayer'},\n {column: 'l_1', id: '001', display: 'St. Mary\\'s Group'},\n // {column: 'l_1', id: '005', display: 'Joe Bob List'}\n ]\n },\n {\n column: 'l_2_6',\n id: '002',\n display: '',\n children: [\n {column: 'l_1', id: '001', display: 'St. Mary\\'s Group'}\n ]\n },\n {\n column: 'l_2_6',\n id: '003',\n display: 'Harris methodist',\n children: [\n {column: 'l_1', id: '002', display: 'St. Francis Hosp.'}\n ]\n },\n {\n column: 'l_2_6',\n id: '004',\n display: '',\n children: [\n {column: 'l_1', id: '003', display: 'Harris methodist'},\n {column: 'l_1', id: '004', display: 'Texas Health'}\n ]\n },\n {\n column: 'l_1',\n id: '001',\n display: 'St. Mary\\'s Group',\n children: [\n {column: 'l_c_0', id: '001', display: 'St. Mary\\'s Hosp'},\n {column: 'l_c_0', id: '002', display: 'St. Mary\\'s Clinic'}\n ]\n },\n /*{\n column: 'l_1',\n id: '005',\n display: '',\n children: [\n {column: 'l_c_0', id: '004', display: 'Joe Bob Clinic'}\n ]\n },*/\n /*\n {\n column: 'l_1',\n id: '002',\n display: 'St. Francis Hosp.',\n children: [\n {column: 'l_c_0', id: '003', display: 'St. Francis Hosp'}\n ]\n },\n {\n column: 'l_1',\n id: '003',\n display: 'St. Francis Hosp',\n children: [\n {column: 'l_c_0', id: '005', display: 'Harris Meth 1'},\n {column: 'l_c_0', id: '009', display: 'Harris Meth 2'}\n ]\n },\n {\n column: 'l_1',\n id: '004',\n display: 'Texas Health',\n children: [\n {column: 'l_c_0', id: '006', display: 'Texas Health 2'}\n ]\n }\n ]\n };*/\n protected requestHandler;\n protected apiSource = '/qbr/search_options/account_customer/search_results';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n public RequestState = RequestState;\n public searchQuery = '';\n public presentedName = '';\n public recommendedText = '';\n public noSelections = true;\n callback;\n firstCall = true;\n\n constructor(\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n private brParamsService: BrParamsService // @todo: set selected account customer in BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.searchQuery = this.brParamsService.get('acct_customer_query');\n this.requestHandler = this.callApiSource(this.apiSource, 0);\n this.callback = (state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n const persistedChoices = this.brParamsService.get('acct_cust_data');\n if (this.firstCall && persistedChoices != null && persistedChoices !== undefined) {\n this.data = persistedChoices;\n this.firstCall = false;\n this.valueChangeColumnSelected(this.data.column_list);\n } else {\n this.data = apiData;\n if (!this.data.hasOwnProperty('status') || this.data.status !== 'fail') {\n this.brParamsService.set('acct_cust_data', this.data);\n }\n }\n }\n };\n this.requestHandler.onStateChange(this.callback);\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.apiSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.apiSource));\n\n this.presentedName = this.brParamsService.get('presentedName');\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'presentedName') {\n this.presentedName = this.brParamsService.get('presentedName');\n }\n if (brParamKey === 'acct_customer_query') {\n this.searchQuery = this.brParamsService.get('acct_customer_query');\n this.refreshHandlerService.triggerCallbacks(['acct_customer_query']);\n }\n });\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.removeStateListener(this.callback);\n this.requestHandler.cancelSubscription();\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n searchChange(e) {\n this.searchQuery = e;\n setTimeout(() => {\n if (this.searchQuery === e && e.length >= 4) {\n this.brParamsService.set('acct_customer_query', e);\n this.refreshHandlerService.triggerCallbacks(['acct_customer_query']);\n }\n }, 1000);\n }\n\n valueChanged(e) {\n this.brParamsService.set('uck', this.getArrayOfPropertyFromObject(e, 'id'));\n this.brParamsService.set('acct_cust_data', this.data);\n }\n\n presentedNameChange(e) {\n this.brParamsService.set('presentedName', this.presentedName);\n }\n\n selectRecommendedText() {\n this.presentedName = this.recommendedText;\n this.brParamsService.set('presentedName', this.presentedName);\n }\n\n objectPropertyJoin(arrayOfObjects, property, glue) {\n let isFirst = true;\n let result = '';\n for (const item of arrayOfObjects) {\n if (!isFirst) {\n result += glue;\n } else {\n isFirst = false;\n }\n result += this.rmCustomerNumber(item[property]);\n }\n return result;\n }\n\n rmCustomerNumber(input) {\n const parts = input.split('(');\n return parts[0];\n }\n\n valueChangeColumnSelected(e) {\n let colL25; let colL1; let colL0;\n e.forEach((columnItem) => {\n if (columnItem.id === 'L_2_5') {\n colL25 = columnItem;\n } else if (columnItem.id === 'L_1') {\n colL1 = columnItem;\n } else if (columnItem.id === 'L_0') {\n colL0 = columnItem;\n }\n });\n this.noSelections = false;\n if (colL25.selectedItems !== undefined && colL25.selectedItems.length > 1) {\n this.recommendedText = 'Multiple Accounts ' + this.objectPropertyJoin(colL25.selectedItems, 'display', ', ');\n } else if (colL25.selectedItems !== undefined && colL25.selectedItems.length === 1) {\n this.recommendedText = colL25.selectedItems[0].display;\n } else {\n if (colL1.selectedItems !== undefined && colL1.selectedItems.length > 1) {\n this.recommendedText = 'Multiple Accounts ' + this.objectPropertyJoin(colL1.selectedItems, 'display', ', ');\n } else if (colL1.selectedItems !== undefined && colL1.selectedItems.length === 1) {\n this.recommendedText = colL1.selectedItems[0].display;\n } else {\n if (colL0.selectedItems !== undefined && colL0.selectedItems.length > 1) {\n this.recommendedText = 'Multiple Customers ' + this.objectPropertyJoin(colL0.selectedItems, 'display', ', ');\n } else if (colL0.selectedItems !== undefined && colL0.selectedItems.length === 1) {\n this.recommendedText = this.rmCustomerNumber(colL0.selectedItems[0].display);\n } else {\n this.noSelections = true;\n }\n }\n }\n }\n\n valueChangedData(e) {}\n\n getArrayOfPropertyFromObject(object, property) {\n const result = [];\n for (const item of object) {\n result.push(item[property]);\n }\n return result;\n }\n}\n","
    \n Limit Business Review to the Last\n Full Months\n Note: This setting will only affect some specific drill downs, the dashboard view will show compact snapshots with 4-5 months per metric. Other views may be unaffected by this setting depending on their intended purpose.\n
    ","import { Component, OnInit } from '@angular/core';\nimport {BrHistoryRange} from '../../br-history-range.service';\nimport {BrParamsService} from '../../br-params.service';\n\n@Component({\n selector: 'app-br-history-range-selector',\n templateUrl: './br-history-range-selector.component.html',\n styleUrls: ['./br-history-range-selector.component.scss']\n})\nexport class BrHistoryRangeSelectorComponent implements OnInit {\n periodOptions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];\n selectedValue;\n\n constructor(\n private brHistoryRangeService: BrHistoryRange,\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n let presistedValue = this.brParamsService.get('br_history_range_detail');\n this.selectedValue = presistedValue;\n this.brHistoryRangeService.setHistoryRange(presistedValue);\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'br_history_range_detail') {\n presistedValue = this.brParamsService.get('br_history_range_detail');\n this.selectedValue = presistedValue;\n this.brHistoryRangeService.setHistoryRange(presistedValue);\n }\n });\n }\n\n setMonths(value) {\n this.brHistoryRangeService.setHistoryRange(value);\n this.brParamsService.set('br_history_range_detail', value);\n this.selectedValue = value;\n }\n}\n","import { Component, OnInit, OnDestroy, ElementRef, HostListener, ViewChild, Input, ChangeDetectorRef } from '@angular/core';\nimport {ApiService} from '../../../api/api.service';\nimport {RequestState} from '../../../api/request-handler';\nimport {AuthenticationService} from '../../../authentication/authentication.service';\nimport {BrParamsService} from '../../br-params.service';\n\n@Component({\n selector: 'app-br-servicing-group-selector',\n templateUrl: './br-servicing-group-selector.component.html',\n styleUrls: ['./br-servicing-group-selector.component.scss']\n})\nexport class BrServicingGroupSelectorComponent implements OnInit, OnDestroy {\n RequestStateComplete = RequestState.Complete; // temporary until api call is implemented\n\n protected requestHandler;\n protected apiSource = '/qbr/app_config/servicing_groups/servicing_groups';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n\n selectedValues = [];\n apiState;\n data = [];\n\n constructor(\n private authService: AuthenticationService,\n private cdRef: ChangeDetectorRef,\n private apiService: ApiService,\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.updateSelections();\n\n this.requestHandler = this.apiService.get(this.apiSource);\n this.requestHandler.sendRequest(this.apiSource);\n this.requestHandler.onStateChange((state) => {\n this.apiState = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n\n const buildData = [];\n let lookForPersistedValue = false;\n const presistedValue = this.brParamsService.get('sg');\n if (presistedValue.length !== 0) {\n lookForPersistedValue = true;\n }\n for (const item of apiData.items) {\n const tempItem = {\n label: item.display_name,\n key: item.id\n };\n buildData.push(tempItem);\n if (lookForPersistedValue) {\n if (presistedValue.includes(item.id)) {\n this.selectedValues.push(tempItem);\n }\n } else if (item.selected) {\n this.selectedValues.push(tempItem);\n }\n }\n this.data = buildData;\n\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'sg') {\n this.selectedValues = [];\n let lookForPersistedValue2 = false;\n const presistedValue2 = this.brParamsService.get('sg');\n if (presistedValue2.length !== 0) {\n lookForPersistedValue2 = true;\n }\n for (const item of apiData.items) {\n const tempItem = {\n label: item.display_name,\n key: item.id\n };\n if (lookForPersistedValue2) {\n if (presistedValue2.includes(item.id)) {\n this.selectedValues.push(tempItem);\n }\n } else if (item.selected) {\n this.selectedValues.push(tempItem);\n }\n }\n }\n });\n }\n });\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n }\n\n updateSelections() {\n\n // this.menuText1 = this.selectedType;\n // this.menuText2 = this.selectedLabel;\n\n this.cdRef.detectChanges();\n }\n\n getLabel(key) {\n if (this.data) {\n for (const item of this.data) {\n if (item.key === key) {\n return item.label;\n }\n }\n }\n return '';\n }\n\n valueChange(selectedItems) {\n // this.selectedValues = this.getArrayOfPropertyFromObject(selectedItems, 'key');\n this.brParamsService.set('sg', this.getArrayOfPropertyFromObject(selectedItems, 'key'));\n this.brParamsService.set('sg_description', this.getArrayOfPropertyFromObject(selectedItems, 'key').join(', '));\n }\n\n getArrayOfPropertyFromObject(object, property) {\n const result = [];\n for (const item of object) {\n result.push(item[property]);\n }\n return result;\n }\n}\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {RequestState} from '../../../api/request-handler';\nimport {RefreshHandlerService} from '../../../api/refresh-handler.service';\nimport {BrParamsService} from '../../br-params.service';\nimport {ApiService} from '../../../api/api.service';\n\nenum Selected {\n None = 0,\n Complete = 1,\n Partial = 2\n}\n\n@Component({\n selector: 'app-br-product-selector',\n templateUrl: './br-product-selector.component.html',\n styleUrls: ['./br-product-selector.component.scss']\n})\nexport class BrProductSelectorComponent implements OnInit, OnDestroy {\n data = null;\n /*{\n column_list: [\n {\n id: 'pc',\n label: 'Product Class',\n post_selected: false,\n single_select: true,\n items: [\n {column: 'pc', id: 'ia', display: 'Immunoassay', selected: Selected.None},\n {column: 'pc', id: 'cc', display: 'Clinical Chemistry', selected: Selected.None}\n ],\n extra_items: []\n },\n {\n id: 'plg',\n label: 'PL Group',\n post_selected: false,\n single_select: true,\n items: [\n {column: 'plg', id: 'alinia', display: 'Alinity - IA', selected: Selected.None},\n {column: 'plg', id: 'archia', display: 'Architect - IA', selected: Selected.None},\n {column: 'plg', id: 'alincc', display: 'Alinity -CC', selected: Selected.None},\n {column: 'plg', id: 'archcc', display: 'Architect - CC', selected: Selected.None}\n ],\n extra_items: []\n },\n {\n id: 'pl',\n label: 'PLs',\n post_selected: true,\n single_select: false,\n items: [\n {column: 'pl', id: '205', display: 'Alinity I', selected: Selected.None},\n {column: 'pl', id: '210', display: 'Alinity C', selected: Selected.None},\n {column: 'pl', id: '126', display: 'C8000', selected: Selected.None},\n {column: 'pl', id: '118', display: 'i2000sr', selected: Selected.None}\n ],\n extra_items: []\n }\n ],\n relationships: [\n {\n column: 'pc',\n id: 'ia',\n display: '',\n children: [\n {column: 'plg', id: 'alinia', display: 'St. Marys\\' SubLayer'},\n {column: 'plg', id: 'archia', display: 'St. Mary\\'s Group'},\n {column: 'pl', id: '205', display: 'St. Mary\\'s Group'},\n {column: 'pl', id: '118', display: 'St. Mary\\'s Group'},\n ]\n },\n {\n column: 'pc',\n id: 'cc',\n display: '',\n children: [\n {column: 'plg', id: 'alincc', display: 'St. Marys\\' SubLayer'},\n {column: 'plg', id: 'archcc', display: 'St. Mary\\'s Group'},\n {column: 'pl', id: '210', display: 'St. Mary\\'s Group'},\n {column: 'pl', id: '126', display: 'St. Mary\\'s Group'},\n ]\n },\n {\n column: 'plg',\n id: 'alinia',\n display: '',\n children: [\n {column: 'pl', id: '205', display: 'St. Mary\\'s Group'},\n ]\n },\n {\n column: 'plg',\n id: 'archia',\n display: '',\n children: [\n {column: 'pl', id: '118', display: 'St. Mary\\'s Group'},\n ]\n },\n {\n column: 'plg',\n id: 'alincc',\n display: '',\n children: [\n {column: 'pl', id: '210', display: 'St. Mary\\'s Group'},\n ]\n },\n {\n column: 'plg',\n id: 'alinia',\n display: '',\n children: [\n {column: 'pl', id: '126', display: 'St. Mary\\'s Group'},\n ]\n },\n ]\n };*/\n protected requestHandler;\n protected apiSource = '/qbr/app_config/products/products';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n\n constructor(\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.callApiSource(this.apiSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n const persistedChoices = this.brParamsService.get('products_data');\n if (persistedChoices != null) {\n this.data = persistedChoices;\n } else {\n this.data = apiData;\n // this.data[2][0].selected = 1; // hack to fix all product lines not being selected\n }\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.apiSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.apiSource));\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'products_data') {\n this.data = this.brParamsService.get('products_data');\n }\n });\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n valueChanged(e) {\n this.brParamsService.set('pl', this.getArrayOfPropertyFromObject(e, 'id'));\n this.brParamsService.set('products_data', this.data);\n this.brParamsService.set('product_description', this.getArrayOfPropertyFromObject(e, 'display').join(', '));\n }\n\n getArrayOfPropertyFromObject(object, property) {\n const result = [];\n for (const item of object) {\n result.push(item[property]);\n }\n return result;\n }\n}\n","\n \n \n \n\n\n\n","
    \n \n
    \n

    Click the above box to make selections.

    ","
    \n
      \n
    1. \n {{item.metric_name}}\n
    2. \n
    \n
    ","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport {RequestState} from '../../api/request-handler';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\n\n@Component({\n selector: 'app-br-template-viewer',\n templateUrl: './br-template-viewer.component.html',\n styleUrls: ['./br-template-viewer.component.scss']\n})\nexport class BrTemplateViewerComponent implements OnInit, OnDestroy {\n public stdKpiListData = null;\n protected requestHandler;\n protected stdKpiListSource = '/qbr/template/std/std_kpi_list';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n public templateStringOrder = null;\n public newListOrder = [];\n\n @Input() set templateString( value: string ) {\n this.templateStringOrder = value.split(',');\n this.buildListOrder();\n }\n\n constructor(\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n ) { }\n\n ngOnInit(): void {\n this.requestHandler = this.callApiSource(this.stdKpiListSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.stdKpiListData = apiData;\n this.newListOrder = apiData.items;\n this.buildListOrder();\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.stdKpiListSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.stdKpiListSource));\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n }\n\n buildListOrder() {\n if (this.stdKpiListData !== null && this.templateStringOrder !== null && this.templateStringOrder.length > 1) {\n // order items\n this.newListOrder = [];\n for (const orderItem of this.templateStringOrder) {\n const item = this.getStdKpiListItem(orderItem);\n item.active = true;\n this.newListOrder.push(item);\n }\n // get items missing\n // for (const i in this.stdKpiListData.items) {\n // if (!this.templateStringOrder.includes(this.stdKpiListData.items[i].id)) {\n // this.stdKpiListData.items[i].active = false;\n // this.newListOrder.push(this.stdKpiListData.items[i]);\n // }\n // }\n }\n }\n\n getStdKpiListItem(id) {\n let returnValue = null;\n for (const i in this.stdKpiListData.items) {\n if (this.stdKpiListData.items[i].id == id) {\n returnValue = this.stdKpiListData.items[i];\n }\n }\n return returnValue;\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n}\n","

    Build Template of KPI Selections

    \n\n \n
    \n \n  \n \n
    \n
    \n

    Note: recommended items are denoted with an astrix.

    \n\n \n \n \n \n \n \n
    {{item.metric_name}} *\n 0\">\n \n \n \n Inactive\n Active\n
    \n","import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport {BrParamsService} from '../br-params.service';\nimport {PresentationToggleHandlerService} from '../presentation-toggle-handler.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DASHBOARD_ARRANGEMENT} from '../configuration/dashboard-arrangement';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {RequestState} from '../../api/request-handler';\nimport {\n faChevronUp,\n faChevronDown\n} from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'app-br-template-editor',\n templateUrl: './br-template-editor.component.html',\n styleUrls: ['./br-template-editor.component.scss']\n})\nexport class BrTemplateEditorComponent implements OnInit, OnDestroy {\n faUp = faChevronUp;\n faDown = faChevronDown;\n defaultDashboard = DASHBOARD_ARRANGEMENT;\n\n public stdKpiListData = null;\n protected requestHandler;\n protected stdKpiListSource = '/qbr/template/std/std_kpi_list';\n protected saveUserTemplateSource = '/qbr/template/custom/save_user_template_add';\n protected saveEditUserTemplateSource = '/qbr/template/custom/save_user_template_edit';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n idSet;\n public templateStringOrder = null;\n public newListOrder = [];\n recommended = [12, 36];\n\n @Output() saveEvent: EventEmitter = new EventEmitter();\n @Output() cancelEvent: EventEmitter = new EventEmitter();\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private presentationToggleHandlerService: PresentationToggleHandlerService,\n private brParamsService: BrParamsService,\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n ) { }\n\n @Input() set id( value: string ) {\n this.idSet = value;\n this.requestHandler = this.callApiSource(this.stdKpiListSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.stdKpiListData = apiData;\n this.newListOrder = apiData.items;\n for (const item of this.newListOrder) {\n item.active = true;\n if (item.recommended) {\n this.recommended.push(item.id);\n }\n }\n this.buildListOrder();\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.stdKpiListSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.stdKpiListSource));\n }\n\n @Input() set templateString( value: string ) {\n this.templateStringOrder = value.split(',');\n this.buildListOrder();\n }\n\n buildListOrder() {\n if (this.stdKpiListData !== null && this.templateStringOrder !== null && this.templateStringOrder.length > 1) {\n // order items\n this.newListOrder = [];\n for (const orderItem of this.templateStringOrder) {\n const item = this.getStdKpiListItem(orderItem);\n if (item !== null && item !== undefined) {\n item.active = true;\n }\n this.newListOrder.push(item);\n }\n // get items missing\n for (const i in this.stdKpiListData.items) {\n if (!this.templateStringOrder.includes(this.stdKpiListData.items[i].id.toString())) {\n this.stdKpiListData.items[i].active = false;\n this.newListOrder.push(this.stdKpiListData.items[i]);\n }\n }\n }\n }\n\n getStdKpiListItem(id) {\n let returnValue = null;\n for (const i in this.stdKpiListData.items) {\n if (this.stdKpiListData.items[i].id == id) {\n returnValue = this.stdKpiListData.items[i];\n }\n }\n return returnValue;\n }\n\n ngOnInit(): void {\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n this.navbarBuilderService.setIsVisible(true);\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n nameChange(e) {\n this.brParamsService.set('br_template_name', e);\n // this.refreshHandlerService.triggerCallbacks(['br_template_name']);\n }\n\n saveAs() {\n let source = this.saveUserTemplateSource;\n if (this.idSet !== 'br_kpi') {\n source = this.saveEditUserTemplateSource;\n this.brParamsService.set('br_template_id', this.idSet);\n }\n const selectedIds = [];\n for (let i = 0; i < this.newListOrder.length; i++) {\n const item = this.newListOrder[i];\n if (item.active === undefined || item.active) {\n selectedIds.push(item.id);\n }\n }\n this.brParamsService.set('br_template_string', selectedIds.join(','));\n // br_template_id\n\n this.requestHandler = this.callApiSource(source, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.brParamsService.set('list_user_templates_update', this.brParamsService.get('list_user_templates_update') + 1);\n this.refreshHandlerService.triggerCallbacks(['list_user_templates_update']);\n this.cancelEvent.emit('saved');\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(source); // , null, true\n }, this.requestHandler.getRelativeParams(source));\n this.saveEvent.emit('save');\n }\n\n cancel() {\n this.cancelEvent.emit('cancel');\n }\n\n moveUp(i) {\n const element = this.newListOrder.splice(i, 1)[0];\n this.newListOrder.splice(i - 1, 0, element);\n // splice(start, deleteCount)\n // splice(start, deleteCount, item1)\n }\n moveDown(i) {\n const element = this.newListOrder.splice(i, 1)[0];\n this.newListOrder.splice(i + 1, 0, element);\n }\n switchActive(i) {\n if (this.newListOrder[i].active === undefined) {\n this.newListOrder[i].active = false;\n } else if (this.newListOrder[i].active) {\n this.newListOrder[i].active = false;\n } else {\n this.newListOrder[i].active = true;\n }\n }\n setRecommended() {\n for (const item of this.newListOrder) {\n if (this.isRecommended(item)) {\n item.active = true;\n } else {\n item.active = false;\n }\n }\n }\n isRecommended(item) {\n if (this.recommended.includes(item.id)) {\n return true;\n }\n return false;\n }\n}\n","
    \n
    \n \n
    \n \n \n Selected Template Order\n \n
    \n
    \n \n
    \n
    \n \n
    \n\n\n\n\n\n\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport {Router, ActivatedRoute} from '@angular/router';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {\n faICursor,\n faPlus\n} from '@fortawesome/free-solid-svg-icons';\nimport {RequestState} from '../../api/request-handler';\nimport {RefreshHandlerService} from '../../api/refresh-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {BrTemplateSelectionService} from '../br-template-selection.service';\nimport {BrParamsService} from '../br-params.service';\n\n@Component({\n selector: 'app-br-template-selector',\n templateUrl: './br-template-selector.component.html',\n styleUrls: ['./br-template-selector.component.scss']\n})\nexport class BrTemplateSelectorComponent implements OnInit, OnDestroy {\n faICursor = faICursor;\n faPlus = faPlus;\n\n operation = 1; // 1: select, 2: edit, 3: add\n\n public userTemplatesData = [\n {\n key: 'br_kpi',\n title: 'Default Template',\n template_string: '',\n icon: '',\n tooltip: ''\n }\n ];\n protected requestHandler2;\n protected stdKpiListSource = '/qbr/template/std/std_kpi_list';\n protected stdKpiData;\n protected requestHandler;\n protected listUserTemplatesSource = '/qbr/template/custom/list_user_templates';\n protected refreshHandleKey;\n public state = RequestState.Inactive;\n\n selectedOption = 'br_kpi';\n selectedTemplateString = '';\n\n constructor(\n private router: Router,\n private route: ActivatedRoute,\n private apiService: ApiService,\n protected refreshHandlerService: RefreshHandlerService,\n private brTemplateSelectionService: BrTemplateSelectionService,\n private brParamsService: BrParamsService\n ) {}\n\n\n ngOnInit(): void {\n this.requestHandler2 = this.callApiSource(this.stdKpiListSource, 0);\n this.requestHandler2.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler2.getResponse();\n const apiData = JSON.parse(response.body);\n this.stdKpiData = apiData;\n }\n });\n this.requestHandler = this.callApiSource(this.listUserTemplatesSource, 0);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n this.userTemplatesData = [];\n this.userTemplatesData.push({\n key: 'br_kpi',\n title: 'Default Template',\n template_string: '',\n icon: '',\n tooltip: ''\n });\n if (apiData.hasOwnProperty('items')) {\n for (const item of apiData.items) {\n this.userTemplatesData.push({\n key: item.template_id,\n title: item.template_name,\n template_string: item.template_string,\n icon: '',\n tooltip: ''\n });\n }\n }\n }\n });\n this.refreshHandleKey = this.refreshHandlerService.onRefreshEvent((index) => {\n this.requestHandler.sendRequest(this.listUserTemplatesSource); // , null, true\n }, this.requestHandler.getRelativeParams(this.listUserTemplatesSource));\n let persistedId = this.brParamsService.get('br_selected_template_id');\n let persistedName = this.brParamsService.get('br_selected_template_name');\n let persistedString = this.brParamsService.get('br_selected_template_string');\n let persistedValue = {id: persistedId, name: persistedName, string: persistedString};\n if (persistedId !== null) {\n this.brTemplateSelectionService.updateSelectedTemplate(persistedId, persistedName, persistedString);\n } else {\n persistedValue = this.brTemplateSelectionService.getSelectedTemplate();\n }\n this.selectedOption = persistedValue.id;\n this.selectedTemplateString = persistedValue.string;\n\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'br_selected_template_id') {\n persistedId = this.brParamsService.get('br_selected_template_id');\n persistedName = this.brParamsService.get('br_selected_template_name');\n persistedString = this.brParamsService.get('br_selected_template_string');\n persistedValue = {id: persistedId, name: persistedName, string: persistedString};\n this.selectedOption = persistedValue.id;\n this.selectedTemplateString = persistedValue.string;\n }\n });\n }\n\n ngOnDestroy(): void {\n this.refreshHandlerService.cancelRefreshEvent(this.refreshHandleKey);\n this.requestHandler.cancelSubscription();\n this.requestHandler2.cancelSubscription();\n }\n\n callApiSource(apiSource, apiDataIndex) {\n const requestHandler = this.apiService.get(apiSource + '_' + apiDataIndex);\n requestHandler.onStateChange((state) => {\n this.state = state;\n });\n requestHandler.sendRequest(apiSource);\n\n return requestHandler;\n }\n\n getToolOption(key) {\n for (const option of this.userTemplatesData) {\n if (option.key === key) {\n return option;\n }\n }\n return null;\n }\n\n getOrderFromStdKpiList() {\n const order = [];\n for (const item of this.stdKpiData.items) {\n order.push(item.id);\n }\n return order.join(',');\n }\n\n valueChange(value) {\n const toolOption = this.getToolOption(value);\n this.selectedOption = toolOption.key;\n if (toolOption.key === 'br_kpi') {\n this.selectedTemplateString = this.getOrderFromStdKpiList();\n } else {\n this.selectedTemplateString = toolOption.template_string;\n }\n this.brTemplateSelectionService.updateSelectedTemplate(this.selectedOption, toolOption.title, this.selectedTemplateString);\n this.brParamsService.set('br_selected_template_name', toolOption.title);\n this.brParamsService.set('br_selected_template_string', this.selectedTemplateString);\n this.brParamsService.set('br_selected_template_id', this.selectedOption);\n }\n\n addLink() {\n this.operation = 3;\n // this.router.navigate(['brTemplateEditor'], {relativeTo: this.route});\n }\n\n editLink() {\n this.operation = 2;\n // this.router.navigate(['brTemplateEditor'], {relativeTo: this.route});\n }\n\n onSave() {\n this.operation = 1;\n }\n\n onCancel() {\n this.operation = 1;\n }\n}\n","

    \r\n {{presentedName}}: {{detailperiod}}
    \r\n \r\n {{rangeLiteral}}: \r\n {{startDate}} thru {{endDate}}\r\n \r\n

    ","import { Component, OnInit, Input } from '@angular/core';\nimport {BrParamsService} from '../br-params.service';\n\n@Component({\n selector: 'app-filter-presentation-header',\n templateUrl: './filter-presentation-header.component.html',\n styleUrls: ['./filter-presentation-header.component.scss']\n})\nexport class FilterPresentationHeaderComponent implements OnInit {\n presentedName = '';\n @Input() viewType = 'details';\n @Input() rangeLiteral = 'History Range';\n @Input() includePeriodRange = true;\n @Input() thumbnailMonths = false;\n singlePeriodHistory = false;\n historyRange = 4;\n detailperiod;\n startDate;\n endDate;\n minDaysInMonthToIncludePartialMonth = 10;\n\n constructor(\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.presentedName = this.brParamsService.get('presentedName');\n this.historyRange = this.brParamsService.get('br_periods_to_show');\n this.detailperiod = this.brParamsService.get('detailperiod');\n if (this.detailperiod === null) {\n this.singlePeriodHistory = false;\n } else {\n this.singlePeriodHistory = true;\n }\n\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'presentedName') {\n this.presentedName = this.brParamsService.get('presentedName');\n }\n if ((this.viewType === 'details' && brParamKey === 'br_history_range_detail') && !this.thumbnailMonths) {\n this.historyRange = this.brParamsService.get('br_history_range_detail');\n this.startDate = this.getStartDate();\n this.endDate = this.getEndDate();\n }\n if ((this.viewType === 'dashboard' && brParamKey === 'br_history_range_dashboard') || this.thumbnailMonths) {\n this.historyRange = this.brParamsService.get('br_history_range_dashboard');\n this.startDate = this.getStartDate();\n this.endDate = this.getEndDate();\n }\n });\n if (this.viewType === 'dashboard' || this.thumbnailMonths) {\n this.historyRange = this.brParamsService.get('br_history_range_dashboard');\n }\n if (this.viewType === 'details' && !this.thumbnailMonths) {\n this.historyRange = this.brParamsService.get('br_history_range_detail');\n }\n // console.log('historyRange', this.historyRange);\n this.startDate = this.getStartDate();\n this.endDate = this.getEndDate();\n }\n\n getStartDate() {\n const d = new Date();\n d.setMonth(d.getMonth() - this.historyRange);\n return d.getFullYear() + '-' + (('' + (d.getMonth() + 1)).padStart(2, '0'));\n // return d.toLocaleString('default', { month: 'long' });\n }\n\n conditionallyIncludePartialMonth() {\n const d = new Date();\n return (d.getUTCDate() >= this.minDaysInMonthToIncludePartialMonth);\n }\n\n addPartialMonth() {\n if (this.conditionallyIncludePartialMonth()) {\n return 1;\n }\n return 0;\n }\n\n getEndDate() {\n const d = new Date();\n d.setMonth(d.getMonth());\n\n return d.getFullYear() + '-' + (('' + (d.getMonth() + this.addPartialMonth())).padStart(2, '0'));\n // return d.toLocaleString('default', { month: 'long' });\n }\n}\n","import {\n AfterViewInit, ChangeDetectorRef,\n Component,\n ComponentFactoryResolver,\n ComponentRef, Input,\n OnDestroy,\n Type,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {ComponentLookupRegistry} from '../../decorators/component-lookup';\nimport {BrTileReference} from '../configuration/br-tile-reference';\n\n@Component({\n selector: 'app-br-tile-insert',\n templateUrl: './br-tile-insert.component.html',\n styleUrls: ['./br-tile-insert.component.scss']\n})\nexport class BrTileInsertComponent implements AfterViewInit, OnDestroy {\n dynamicComponentRef: ComponentRef;\n\n @Input() tileReference: BrTileReference;\n\n @ViewChild('dynamic', {read: ViewContainerRef}) viewContainerRef: ViewContainerRef;\n\n constructor(private factoryResolver: ComponentFactoryResolver, private cd: ChangeDetectorRef) {}\n\n ngAfterViewInit(): void {\n setTimeout(() => {\n this.loadDynamicComponent();\n });\n this.cd.detectChanges();\n }\n\n loadDynamicComponent() {\n const componentType: Type = ComponentLookupRegistry.get(this.tileReference.componentName);\n if (componentType !== undefined) {\n const componentFactory = this.factoryResolver.resolveComponentFactory(componentType);\n\n this.viewContainerRef.clear();\n this.dynamicComponentRef = this.viewContainerRef.createComponent(componentFactory);\n // add tileReference to component data inputs\n (this.dynamicComponentRef.instance).tileReference = this.tileReference;\n }\n }\n\n ngOnDestroy() {\n if (this.dynamicComponentRef) {\n this.dynamicComponentRef.destroy();\n }\n }\n}\n","","
    \n Filters:
    \n
    \n Products:\n {{productDescription}}\n
    \n
    \n Business Segment:\n {{businessSegment}}\n
    \n
    \n Servicing Group:\n {{servicingGroup}}\n
    \n
    ","import { Component, OnInit } from '@angular/core';\nimport {BrParamsService} from '../br-params.service';\n\n@Component({\n selector: 'app-filter-presentation-footer',\n templateUrl: './filter-presentation-footer.component.html',\n styleUrls: ['./filter-presentation-footer.component.scss']\n})\nexport class FilterPresentationFooterComponent implements OnInit {\n locationDescription;\n productDescription;\n businessSegment;\n servicingGroup;\n\n constructor(\n private brParamsService: BrParamsService\n ) { }\n\n ngOnInit(): void {\n this.locationDescription = this.brParamsService.get('location_description');\n this.productDescription = this.brParamsService.get('product_description');\n this.businessSegment = this.brParamsService.get('cust_bs_description');\n this.servicingGroup = this.brParamsService.get('sg_description');\n this.brParamsService.getParamChangedListener().subscribe((brParamKey) => {\n if (brParamKey === 'location_description') {\n this.locationDescription = this.brParamsService.get('location_description');\n }\n if (brParamKey === 'product_description') {\n this.productDescription = this.brParamsService.get('product_description');\n }\n if (brParamKey === 'cust_bs_description') {\n this.businessSegment = this.brParamsService.get('cust_bs_description');\n }\n if (brParamKey === 'sg_description') {\n this.servicingGroup = this.brParamsService.get('sg_description');\n }\n });\n }\n}\n","
    \r\n
    \r\n
    \r\n

    Configure Presentation

    \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n

    Select a Saved Presentation

    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n \r\n \r\n  \r\n \r\n \r\n
    \r\n {{errorMsg}}\r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
    \r\n
    \r\n Add API Route to Test\r\n
    \r\n \r\n \r\n

    \r\n

    EX: /qbr/kpi/total_inbound_calls/thumbnail

    \r\n \r\n \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n  \r\n  \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n","import { Component, OnInit, OnDestroy, OnChanges } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport {DASHBOARD_ARRANGEMENT} from '../configuration/dashboard-arrangement';\nimport {BrTileReference} from '../configuration/br-tile-reference';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {RequestState} from '../../api/request-handler';\nimport {PresentationToggleHandlerService} from '../presentation-toggle-handler.service';\nimport {ApiService} from '../../api/api.service';\nimport {BrTemplateSelectionService} from '../br-template-selection.service';\nimport {BrParamsService} from '../br-params.service';\nimport {DetailQueryParamsService} from '../detail-query-params.service';\nimport {ApiMapping} from '../../configuration/api-mapping';\nimport {NodatacheckService} from '../nodatacheck.service';\n\n/**\n * work towards some template like demo\n *\n * work on filters\n * - api connectivity\n * - ui components\n * - apply to kpis\n */\n@Component({\n selector: 'app-br-dashboard',\n templateUrl: './br-dashboard.component.html',\n styleUrls: ['./br-dashboard.component.scss']\n})\n\nexport class BrDashboardComponent implements OnInit, OnDestroy, OnChanges {\n RequestState = RequestState;\n protected requestHandler;\n protected refreshHandleKey;\n\n defaultOrder = null;\n stdKpiOrder = [];\n arrangement: BrTileReference[] = DASHBOARD_ARRANGEMENT;\n public savedPresentations = [];\n presenetationState = 0;\n slideTileReference = 0;\n\n state;\n newPresentationStep = 0;\n\n devApiTools = false;\n apiName = '';\n validationErrors = [];\n\n testComponentOptions = [\n 'BrTextIndicatorComponent',\n 'BrPieChartComponent',\n 'BrTopItemsComponent',\n 'BrLineChartComponent',\n 'BrStackedBarLineChartComponent',\n 'BrExamplePieChartComponent',\n 'ApiTestComponent',\n ];\n testComponentSelectedOption = 'ApiTestComponent';\n\n currentStep = 0;\n public steps = [\n { label: 'Location', icon: 'globe', optional: true },\n { label: 'Business Segment', icon: 'brightness-contrast', optional: true },\n { label: 'Account/Customer', icon: 'search', isValid: true },\n { label: 'History Range', icon: 'calendar' },\n { label: 'Products', icon: 'cart', optional: true },\n { label: 'Servicing Group', icon: 'ungroup', optional: true },\n { label: 'Template', icon: 'grid' },\n ];\n showValidationMessages = false;\n\n protected stdKpiListSource = '/qbr/template/std/std_kpi_list';\n\n noDataRegistryPrep = [];\n noDataRegistry = [];\n presentationToggleSubscription;\n templateSelectionSubscription;\n nodatacheckSubscription;\n\n constructor(\n private apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private presentationToggleHandlerService: PresentationToggleHandlerService,\n private brTemplateSelectionService: BrTemplateSelectionService,\n private brParamsService: BrParamsService,\n private route: ActivatedRoute,\n private detailQueryParamsService: DetailQueryParamsService,\n private nodatacheckService: NodatacheckService\n ) { }\n\n ngOnInit(): void {\n this.brParamsService.set('uck', this.brParamsService.get('dashboardUck'));\n this.brParamsService.set('presentedName', this.brParamsService.get('dashboardPresentedName'));\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_dashboard'));\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n if (this.route.snapshot.paramMap.get('devapitools') === 'devapitools') {\n this.devApiTools = true;\n }\n // this.startOver();\n this.presentationToggleSubscription = this.presentationToggleHandlerService\n .getToggleChange()\n .subscribe((state) => {\n this.presenetationState = state;\n if (state === 1) {\n this.navbarBuilderService.setIsVisible(false);\n } else {\n this.navbarBuilderService.setIsVisible(true);\n }\n });\n this.requestHandler = this.apiService.get(this.stdKpiListSource);\n this.requestHandler.onStateChange((state) => {\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n const apiData = JSON.parse(response.body);\n // this.stdKpiOrder.push();\n const newOrder = [];\n for (const item of apiData.items) {\n const arranagementItem = this.findArrangementItemByApiSource(item.initial_route);\n if (arranagementItem) {\n if (!arranagementItem.hasOwnProperty('preferences')) {\n arranagementItem.preferences = {};\n }\n arranagementItem.preferences.id = item.id;\n arranagementItem.preferences.metric_group_name = item.metric_group_name;\n arranagementItem.preferences.metric_name = item.metric_name;\n newOrder.push(arranagementItem);\n } else {\n console.warn('need to add config for: ' + item.initial_route + ' to business_review/configuration/dashboard-arrangement');\n }\n }\n this.defaultOrder = newOrder;\n this.arrangement = newOrder;\n }\n });\n this.requestHandler.sendRequest(this.stdKpiListSource);\n this.templateSelectionSubscription = this.brTemplateSelectionService.getTemplateSelectionChange().subscribe((templateDetails) => {\n this.updateKpiOrder(templateDetails);\n });\n this.state = this.brParamsService.get('dashboardState');\n this.nodatacheckSubscription = this.nodatacheckService.getChangedEvent().subscribe((registry) => {\n this.noDataRegistryPrep = registry;\n });\n }\n ngOnChanges() {\n this.noDataRegistry = this.noDataRegistryPrep;\n }\n\n ngOnDestroy(): void {\n this.requestHandler.cancelSubscription();\n this.presentationToggleSubscription.unsubscribe();\n this.templateSelectionSubscription.unsubscribe();\n this.nodatacheckSubscription.unsubscribe();\n }\n\n getQueryParams() {\n return this.detailQueryParamsService.getQueryParams();\n }\n\n findArrangementItemByApiSource(key) {\n for (const item of DASHBOARD_ARRANGEMENT) {\n if (item.apiSource === key) {\n return item;\n }\n }\n return null;\n }\n\n findArrangementItemById(key) {\n for (const item of DASHBOARD_ARRANGEMENT) {\n if (item && item.hasOwnProperty('preferences') && item.preferences.id == key) {\n return item;\n }\n }\n return null;\n }\n\n updateKpiOrder(templateDetails) {\n if (templateDetails.id !== 'br_kpi') {\n const order = templateDetails.string.split(',');\n const newOrder = [];\n for (const item of order) {\n const arranagementItem = this.findArrangementItemById(item);\n if (arranagementItem !== null) {\n newOrder.push(arranagementItem);\n }\n }\n this.arrangement = newOrder;\n } else {\n this.arrangement = this.defaultOrder;\n }\n }\n\n startNew() {\n this.changeState('new');\n this.navbarBuilderService.setIsVisible(false);\n }\n validateSelections() {\n let isValid = true;\n this.validationErrors = [];\n if (this.brParamsService.get('uck') === null || this.brParamsService.get('uck').length < 1) {\n this.validationErrors.push('At least one customer must be selected.');\n this.steps[2].isValid = false;\n this.currentStepChange(2, false);\n isValid = false;\n }\n if (this.brParamsService.get('presentedName') === null || this.brParamsService.get('presentedName') === '') {\n this.validationErrors.push('An Account/Customer Presentation Name is needed.');\n this.steps[2].isValid = false;\n this.currentStepChange(2, false);\n isValid = false;\n }\n return isValid;\n }\n selectPresentation() {\n if (this.validateSelections()) {\n this.changeState('selected');\n this.navbarBuilderService.setIsVisible(true);\n }\n this.brParamsService.set('dashboardUck', this.brParamsService.get('uck'));\n this.brParamsService.set('dashboardPresentedName', this.brParamsService.get('presentedName'));\n }\n changeState(state) {\n this.state = state;\n this.brParamsService.set('dashboardState', state);\n }\n startOver() {\n this.changeState('start');\n setTimeout(() => {\n this.navbarBuilderService.setIsVisible(false);\n });\n }\n currentStepChange(e, withValidate = false) {\n this.newPresentationStep = e;\n if (e == 2) {\n this.showValidationMessages = true;\n } else {\n this.showValidationMessages = false;\n }\n if (withValidate) {// this is to prevent endless loop\n this.validateSelections();\n }\n }\n next() {\n this.slideTileReference += 1;\n if (this.slideTileReference >= this.arrangement.length) {\n this.slideTileReference = 0;\n }\n }\n previous() {\n this.slideTileReference -= 1;\n if (this.slideTileReference < 0) {\n this.slideTileReference = this.arrangement.length - 1;\n }\n }\n addApiCall() {\n ApiMapping[this.apiName] = {\n params_to_include: [\n 'br_months', 'br_sg', 'br_uck', 'br_pl', 'acct_pres_name'\n ] // 'force_call_via_unique_param',\n };\n this.arrangement.push({\n apiSource: this.apiName,\n componentName: this.testComponentSelectedOption,\n preferences: {\n title: this.apiName\n }\n });\n }\n selectTestOption(option) {\n this.testComponentSelectedOption = option;\n }\n nodataCheck(ref) {\n return this.nodatacheckService.hasData(ref);\n }\n}\n","export const ExpandedViewPages = {\r\n '/businessReview/total_inbound_calls': {\r\n apiSource: '/qbr/kpi/total_inbound_calls/thumbnail',\r\n detailLink: '/businessReview/total_inbound_calls/list_view',\r\n componentName: 'BrStackedBarLineChartComponent',\r\n preferences: {\r\n title: 'Total Inbound Calls'\r\n }\r\n }\r\n};\r\n","
    \r\n \r\n \r\n
    \r\n \r\n
    \r\n \r\nDrill Down\r\n
    \r\n \r\n
    \r\n
    ","import { Component, OnInit } from '@angular/core';\nimport {Location} from '@angular/common';\nimport {NavbarBuilderService} from '../../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../../configuration/nav-filter-selection';\nimport {BrParamsService} from '../../br-params.service';\nimport {BrHistoryRange} from '../../br-history-range.service';\nimport {ExpandedViewPages} from '../../configuration/details/expanded-view-pages';\nimport {DetailQueryParamsService} from '../../detail-query-params.service';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-br-expanded-chart-view',\n templateUrl: './br-expanded-chart-view.component.html',\n styleUrls: ['./br-expanded-chart-view.component.scss']\n})\nexport class BrExpandedChartViewComponent implements OnInit {\n tileReference;\n expandedViewPages = ExpandedViewPages;\n returnLink;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private brParamsService: BrParamsService,\n private brHistoryRange: BrHistoryRange,\n private location: Location,\n private detailQueryParamsService: DetailQueryParamsService,\n private route: ActivatedRoute\n ) { }\n\n ngOnInit(): void {\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.expandedViewPages.hasOwnProperty(currentRouterLocation)) {\n this.tileReference = this.expandedViewPages[currentRouterLocation];\n }\n\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_detail'));\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n });\n this.detailQueryParamsService.buildPersistedValuesFromQueryParams();\n\n this.detailQueryParamsService.getReturnLink().subscribe((pathDetails) => {\n this.returnLink = pathDetails;\n });\n this.detailQueryParamsService.processReturnLink();\n this.route.queryParams.subscribe(params => {\n this.detailQueryParamsService.prepReturnParams(params);\n });\n this.route.url.subscribe((url) => {\n this.detailQueryParamsService.prepReturnLink(url);\n });\n }\n\n getQueryParams() {\n return this.detailQueryParamsService.getQueryParams();\n }\n\n}\n","export const ListViewPages = {\r\n '/businessReview/pm_tickets/list_view': {\r\n apiTitle: 'PREVENTIVE MAINTENANCE (PM) COMPLETED TICKETS LIST',\r\n apiSource: '/qbr/kpi/pm_tickets/details',\r\n table: {\r\n columns: [\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'LN', description: 'LIST NUMBER', width: 100, hidden: true },\r\n { ref: 'INST_STATUS', description: 'INST STATUS', width: 100, hidden: true },\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'ERP_CUSTOMER', description: 'ERP CUST NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'SEASREPORTID', description: 'SEAS CATETORY', width: 100, hidden: true },\r\n { ref: 'SEASCODE', description: 'SEAS CODE', width: 100, hidden: true },\r\n { ref: 'SERVICE_CLOSED_DT', description: 'SERVICE CLOSED DATE', width: 100, hidden: true },\r\n { ref: 'STATE_PROV', description: 'STATE/PROV', width: 100, hidden: true },\r\n { ref: 'TICKET_3MA', description: 'TICKET (3MA)', width: 100, hidden: true },\r\n { ref: 'TICKET_6MA', description: 'TICKET (6MA)', width: 100, hidden: true },\r\n { ref: 'TICKET_12MA', description: 'TICKET (12MA)', width: 100, hidden: true },\r\n { ref: 'TICKET_PERIOD', description: 'TICKET CLOSED PERIOD', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n \r\n '/businessReview/nps/list_view': {\r\n apiTitle: 'NET PROMOTER SCORE (NPS) SURVEYS LIST',\r\n apiSource: '/qbr/kpi/nps/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'FSR_NAME', description: 'FSR NAME', width: 100, hidden: true },\r\n { ref: 'INTEVIEW', description: 'INTERVIEW DATE', width: 100, hidden: true },\r\n { ref: 'OVERALL', description: 'OVERALL', width: 100, hidden: true },\r\n { ref: 'FIELD', description: 'FIELD SERVICE', width: 100, hidden: true },\r\n { ref: 'TECHNICAL', description: 'TECHNICAL SUPPORT', width: 100, hidden: true },\r\n { ref: 'SALES', description: 'SALES', width: 100, hidden: true },\r\n { ref: 'DELIVERY', description: 'PRODUCT DELIVERY', width: 100, hidden: true },\r\n { ref: 'QUALITY', description: 'PRODUCT QUALITY', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n \r\n '/businessReview/uptime/list_view': {\r\n apiTitle: 'UPTIME TICKETS LIST',\r\n apiSource: '/qbr/kpi/uptime/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'ERP_CUSTOMER', description: 'ERP CUST NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n //{ ref: 'SEASREPORTID', description: 'SEAS CATETORY', width: 100, hidden: true },\r\n //{ ref: 'SEASCODE', description: 'SEAS CODE', width: 100, hidden: true },\r\n { ref: 'FSR_NAME', description: 'FSR NAME', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'UPTIME_24', description: 'UPTIME - 24 HOURS', width: 100, hidden: true },\r\n { ref: 'UPTIME_BUS', description: 'UPTIME - BUSINESS HOURS', width: 100, hidden: true },\r\n { ref: 'UPTIME_EXT', description: 'UPTIME - EXTENDED BUSINESS HOURS', width: 100, hidden: true },\r\n { ref: 'UPTIME_CONTRACT', description: 'UPTIME - CONTRACT HOURS', width: 100, hidden: true },\r\n { ref: 'SCHED', description: 'CONTRACT SCHEDULE', width: 100, hidden: true },\r\n //{ ref: 'BS', description: 'BUSINESS SEGMENT', width: 100, hidden: true },\r\n //{ ref: 'SG', description: 'SERVICING GROUP', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/tsb/list_view': {\r\n apiTitle: 'TECHNICAL SERVICE BULLETINS (TSB) COMPLETED LIST',\r\n apiSource: '/qbr/kpi/tsb/details',\r\n table: {\r\n columns: [\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'STATE_PROV', description: 'STATE/PROVINCE', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'INST_STATUS', description: 'INST STATUS', width: 100, hidden: true },\r\n { ref: 'SEASREPORTID', description: 'SEAS CATETORY', width: 100, hidden: true },\r\n { ref: 'SEASCODE', description: 'SEAS CODE', width: 100, hidden: true },\r\n { ref: 'TSB', description: 'TSB', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'ERP_CUSTOMER', description: 'ERP CUST NUMBER', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/response_time/list_view': {\r\n apiTitle : 'RESPONSE TIME TICKETS LIST',\r\n apiSource: '/qbr/kpi/response_time/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'STATE_PROV', description: 'STATE/PROVINCE', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'TICKET_PRIORITY', description: 'TICKET PRIORITY', width: 100, hidden: true },\r\n { ref: 'STATUS', description: 'TICKET STATUS', width: 100, hidden: true },\r\n { ref: 'CONTRACTS', description: 'CONTRACTS', width: 100, hidden: true },\r\n { ref: 'SITE_VISIT_FLAG', description: 'SITE VISIT', width: 100, hidden: true },\r\n { ref: 'DISPATCHED_FLG', description: 'DISPATCHED', width: 100, hidden: true },\r\n { ref: 'DT_OPENED', description: 'DATE OPENED', width: 100, hidden: true },\r\n { ref: 'DISPATCHED_DT', description: 'DATE DISPATCHED', width: 100, hidden: true },\r\n { ref: 'END_TRAVEL_TIME', description: 'END TRAVEL TIME', width: 100, hidden: true },\r\n { ref: 'ACTIVITY_START_DT', description: 'ACTIVITY START DATE', width: 100, hidden: true },\r\n { ref: 'SERVICE_CLOSED_DT', description: 'SERVICE CLOSED DATE', width: 100, hidden: true },\r\n { ref: 'DUE_DT', description: 'TICKET DUE DATE', width: 100, hidden: true },\r\n { ref: 'RESPONSE_TIME_ORDER', description: 'RESPONSE TIME ORDER', width: 100, hidden: true },\r\n { ref: 'RESPONSE_TIME_HOURS', description: 'RESPONSE TIME HOURS', width: 100, hidden: true },\r\n { ref: 'METRIC_USED', description: 'METRIC USED', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/phn/list_view': {\r\n apiTitle: 'PHN TICKETS LIST',\r\n apiSource: '/qbr/kpi/phn/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'TICKET_PRIORITY', description: 'TICKET PRIORITY', width: 100, hidden: true },\r\n { ref: 'TICKET_TYPE', description: 'TICKET TYPE', width: 100, hidden: true },\r\n { ref: 'TICKET_SERVICE_TYPE', description: 'TICKET SERVICE TYPE', width: 100, hidden: true },\r\n { ref: 'STATUS', description: 'TICKET STATUS', width: 100, hidden: true },\r\n { ref: 'EXPERIENCE_CODE', description: 'EXPERIENCE CODE', width: 100, hidden: true },\r\n { ref: 'EXPERIENCE_CODE_DESC', description: 'EXPERIENCE CODE DESCRIPTION', width: 100, hidden: true },\r\n { ref: 'EXPERIENCE_BUCKET_DESC', description: 'EXPERIENCE BUCKET DESCRIPTION', width: 100, hidden: true },\r\n { ref: 'SUMMARY_DESC', description: 'SUMMARY DESCRIPTION', width: 100, hidden: true },\r\n { ref: 'RECEIVED_DT', description: 'TICKET RECEIVED DATE', width: 100, hidden: true },\r\n { ref: 'SERVICE_CLOSED_DT', description: 'TICKET SERVICE CLOSED DATE', width: 100, hidden: true },\r\n { ref: 'TICKET_DURATION', description: 'TICKET DURATION', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/instrument_test_counts/list_view': {\r\n apiTitle: 'Annualized Average Instrument Test Counts',\r\n apiSource: '/qbr/kpi/instrument_test_counts/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 160, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'ASSAY', description: 'ASSAY NAME/NUMBER', width: 100, hidden: true },\r\n { ref: 'TEST_COUNTS', description: 'TEST COUNTS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/assay_test_counts/list_view': {\r\n apiTitle: 'Top Assays',\r\n apiSource: '/qbr/kpi/assay_test_counts/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 160, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'ASSAY', description: 'ASSAY NAME/NUMBER', width: 100, hidden: true },\r\n { ref: 'TEST_COUNTS', description: 'TEST COUNTS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/mttr/list_view': {\r\n apiTitle: 'MEAN TIME TO REPAIR (MTTR) TICKETS LIST',\r\n apiSource: '/qbr/kpi/mttr/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'TICKET_TYPE', description: 'TICKET TYPE', width: 100, hidden: true },\r\n { ref: 'TICKET_CATEGORY', description: 'TICKET CATEGORY', width: 100, hidden: true },\r\n { ref: 'LABOR_HOURS', description: 'LABOR HOURS', width: 100, hidden: true },\r\n { ref: 'DT_OPENED', description: 'DATE OPENED', width: 100, hidden: true },\r\n { ref: 'DT_CLOSED', description: 'DATE CLOSED', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/ticket_history/list_view': {\r\n apiTitle: 'TICKET HISTORY',\r\n apiSource: '/qbr/kpi/ticket_history/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'TICKET_TYPE', description: 'TICKET TYPE', width: 100, hidden: true },\r\n { ref: 'TICKET_SERVICE_TYPE', description: 'TICKET SERVICE TYPE', width: 100, hidden: true },\r\n { ref: 'COMPLAINT', description: 'COMPLAINT', width: 100, hidden: true },\r\n { ref: 'REMOTE', description: 'REMOTE', width: 100, hidden: true },\r\n { ref: 'FSV', description: 'FIELD SERVICE VISIT', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/ticket_errors/list_view': {\r\n apiTitle: 'Top Issues',\r\n apiSource: '/qbr/kpi/ticket_errors/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'TICKETT_TYPE', description: 'TICKET TYPE', width: 100, hidden: true },\r\n { ref: 'STATUS', description: 'TICKET STATUS', width: 100, hidden: true },\r\n { ref: 'ERROR_CODE', description: 'ERROR CODE', width: 100, hidden: true },\r\n { ref: 'ISSUE_CODE', description: 'ISSUE CODE', width: 100, hidden: true },\r\n { ref: 'ISSUE_CD_DESC', description: 'ISSUE CODE DESCRIPTION', width: 100, hidden: true },\r\n { ref: 'DATE_OPENED', description: 'DATE OPENED ISO', width: 100, hidden: true },\r\n { ref: 'SERVICE_CLOSED', description: 'SERVICE CLOSED DATE', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/ticket_errors/timeline_view': {\r\n apiTitle: 'Top Issues',\r\n apiSource: '/qbr/kpi/ticket_errors/timeline',\r\n apiFolder: 'ticket_errors',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/ticket_errors/system_comparison_view': {\r\n apiTitle: 'Top Issues',\r\n apiSource: '/qbr/kpi/ticket_errors/system_comparison',\r\n apiFolder: 'ticket_errors',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/example_data/list_view': {\r\n apiTitle: 'EXAMPLE DATA',\r\n apiSource: '/qbr/kpi/example_data/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'TICKET', description: 'TICKET', width: 100, hidden: true },\r\n { ref: 'FSR_NAME', description: 'FSR NAME', width: 100, hidden: true },\r\n { ref: 'INTEVIEW', description: 'INTERVIEW DATE', width: 100, hidden: true },\r\n { ref: 'OVERALL', description: 'OVERALL', width: 100, hidden: true },\r\n { ref: 'FIELD', description: 'FIELD SERVICE', width: 100, hidden: true },\r\n { ref: 'TECHNICAL', description: 'TECHNICAL SUPPORT', width: 100, hidden: true },\r\n { ref: 'SALES', description: 'SALES', width: 100, hidden: true },\r\n { ref: 'DELIVERY', description: 'PRODUCT DELIVERY', width: 100, hidden: true },\r\n { ref: 'QUALITY', description: 'PRODUCT QUALITY', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/example_data/timeline_view': {\r\n apiTitle: 'EXAMPLE DATA',\r\n apiSource: '/qbr/kpi/example_data/timeline',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-04', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-03', width: 100, hidden: true },\r\n { ref: 'M5', description: '2022-02', width: 100, hidden: true },\r\n { ref: 'M6', description: '2022-01', width: 100, hidden: true },\r\n { ref: 'M7', description: '2021-12', width: 100, hidden: true },\r\n { ref: 'M8', description: '2021-11', width: 100, hidden: true },\r\n { ref: 'M9', description: '2021-10', width: 100, hidden: true },\r\n { ref: 'M10', description: '2021-09', width: 100, hidden: true },\r\n { ref: 'M11', description: '2021-08', width: 100, hidden: true },\r\n { ref: 'M12', description: '2021-07', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/nps/timeline_view': {\r\n apiTitle: 'NPS',\r\n apiSource: '/qbr/kpi/nps/timeline',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-04', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-03', width: 100, hidden: true },\r\n { ref: 'M5', description: '2022-02', width: 100, hidden: true },\r\n { ref: 'M6', description: '2022-01', width: 100, hidden: true },\r\n { ref: 'M7', description: '2021-12', width: 100, hidden: true },\r\n { ref: 'M8', description: '2021-11', width: 100, hidden: true },\r\n { ref: 'M9', description: '2021-10', width: 100, hidden: true },\r\n { ref: 'M10', description: '2021-09', width: 100, hidden: true },\r\n { ref: 'M11', description: '2021-08', width: 100, hidden: true },\r\n { ref: 'M12', description: '2021-07', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/instrument_test_counts/timeline_view': {\r\n apiTitle: 'Annualized Instrument Test Counts',\r\n apiSource: '/qbr/kpi/instrument_test_counts/timeline',\r\n apiFolder: 'instrument_test_counts',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/assay_test_counts/timeline_view': {\r\n apiTitle: 'Top Assays',\r\n apiSource: '/qbr/kpi/assay_test_counts/timeline',\r\n apiFolder: 'assay_test_counts',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/response_time/timeline_view': {\r\n apiTitle: 'Response Time (Hours)',\r\n apiSource: '/qbr/kpi/response_time/timeline',\r\n apiFolder: 'response_time',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/alcm/list_view': {\r\n apiTitle: 'AbbottLink Customer Maintenance',\r\n apiSource: '/qbr/kpi/alcm/details',\r\n table: {\r\n columns: [\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'ABBOTTLINK_INSTALL_DATE', description: 'ABBOTTLINK INSTALL DATE', width: 100, hidden: true },\r\n { ref: 'LAST_CONTACT_DATE', description: 'LAST CONTACT DAYS', width: 100, hidden: true },\r\n { ref: 'DAILY_SCORE', description: 'DAILY SCORE', width: 100, hidden: true },\r\n { ref: 'WEEKLY_SCORE', description: 'WEEKLY SCORE', width: 100, hidden: true },\r\n { ref: 'MONTHLY_SCORE', description: 'MONTHLY SCORE', width: 100, hidden: true },\r\n { ref: 'QUARTERLY_SCORE', description: 'QUARTERLY SCORE', width: 100, hidden: true },\r\n { ref: 'OVERALL_SCORE', description: 'OVERALL SCORE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/calls_without_service_number/list_view': {\r\n apiTitle: 'Calls w/Out Service Number',\r\n apiSource: '/qbr/kpi/calls_without_service_number/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'AGENT_NAME', description: 'AGENT NAME', width: 100, hidden: true },\r\n { ref: 'AGENT_EMAIL', description: 'AGENT EMAIL', width: 100, hidden: true },\r\n { ref: 'CALL_ID', description: 'CALL ID', width: 100, hidden: true },\r\n { ref: 'CALL_TYPE', description: 'CALL TYPE', width: 100, hidden: true },\r\n { ref: 'CALL_TIME_SEC', description: 'CALL TIME (SEC)', width: 100, hidden: true },\r\n { ref: 'DISPOSITION', description: 'DISPOSITION', width: 100, hidden: true },\r\n { ref: 'CALL_DATE', description: 'CALL DATE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/abandoned_calls/list_view': {\r\n apiTitle: 'Abandoned Calls',\r\n apiSource: '/qbr/kpi/abandoned_calls/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'CALL PERIOD', width: 100, hidden: true },\r\n { ref: 'AGENT_NAME', description: 'AGENT NAME', width: 100, hidden: true },\r\n { ref: 'AGENT_EMAIL', description: 'AGENT EMAIL', width: 100, hidden: true },\r\n { ref: 'CALL_ID', description: 'CALL ID', width: 100, hidden: true },\r\n { ref: 'CALL_TYPE', description: 'CALL TYPE', width: 100, hidden: true },\r\n { ref: 'CALL_TIME_SEC', description: 'CALL TIME (SEC)', width: 100, hidden: true },\r\n { ref: 'DISPOSITION', description: 'DISPOSITION', width: 100, hidden: true },\r\n { ref: 'CALL_DATE', description: 'CALL DATE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/average_wait_time/system_comparison_view': {\r\n apiTitle: 'Average & Longest Wait Times',\r\n apiSource: '/qbr/kpi/average_wait_time/system_comparison',\r\n apiFolder: 'average_wait_time',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'CALLS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/average_wait_time/timeline_view': {\r\n\r\n apiTitle: 'Average & Longest Wait Times',\r\n apiSource: '/qbr/kpi/average_wait_time/timeline',\r\n apiFolder: 'average_wait_time',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/average_wait_time/list_view': {\r\n apiTitle: 'Average & Longest Wait Times',\r\n apiSource: '/qbr/kpi/average_wait_time/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'CALL PERIOD', width: 100, hidden: true },\r\n { ref: 'AGENT_NAME', description: 'AGENT NAME', width: 100, hidden: true },\r\n { ref: 'AGENT_EMAIL', description: 'AGENT EMAIL', width: 100, hidden: true },\r\n { ref: 'CALL_ID', description: 'CALL ID', width: 100, hidden: true },\r\n { ref: 'CALL_TYPE', description: 'CALL TYPE', width: 100, hidden: true },\r\n { ref: 'CALL_TIME_SEC', description: 'CALL TIME (SEC)', width: 100, hidden: true },\r\n { ref: 'WAIT_TIME', description: 'WAIT TIME', width: 100, hidden: true },\r\n { ref: 'CALL_DATE', description: 'CALL DATE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/service_level/list_view': {\r\n apiTitle: 'Telephone Service Level',\r\n apiSource: '/qbr/kpi/service_level/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'CALL PERIOD', width: 100, hidden: true },\r\n { ref: 'AGENT_NAME', description: 'AGENT NAME', width: 100, hidden: true },\r\n { ref: 'AGENT_EMAIL', description: 'AGENT EMAIL', width: 100, hidden: true },\r\n { ref: 'CALL_ID', description: 'CALL ID', width: 100, hidden: true },\r\n { ref: 'CALL_TYPE', description: 'CALL TYPE', width: 100, hidden: true },\r\n { ref: 'CALL_TIME_SEC', description: 'CALL TIME (SEC)', width: 100, hidden: true },\r\n { ref: 'DISPOSITION', description: 'DISPOSITION', width: 100, hidden: true },\r\n { ref: 'CALL_DATE', description: 'CALL DATE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/tcr/list_view': {\r\n apiTitle: 'Test Completion Rate',\r\n apiSource: '/qbr/kpi/tcr/details',\r\n table: {\r\n columns: [\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'CUSTOMER_NUM', description: 'CUSTOMER NUMBER', width: 100, hidden: true },\r\n { ref: 'COUNTRY', description: 'COUNTRY', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'ABBOTTLINK_INSTALL_DATE', description: 'ABBOTTLINK INSTALL DATE', width: 100, hidden: true },\r\n { ref: 'LAST_CONTACT_DAYS', description: 'LAST CONTACT DAYS', width: 100, hidden: true },\r\n { ref: 'DAILY_SCORE', description: 'DAILY SCORE', width: 100, hidden: true },\r\n { ref: 'WEEKLY_SCORE', description: 'WEEKLY SCORE', width: 100, hidden: true },\r\n { ref: 'MONTHLY_SCORE', description: 'MONTHLY SCORE', width: 100, hidden: true },\r\n { ref: 'QUARTERLY_SCORE', description: 'QUARTERLY SCORE', width: 100, hidden: true },\r\n { ref: 'OVERALL_SCORE', description: 'OVERALL SCORE', width: 100, hidden: true }\r\n ]\r\n }\r\n },\r\n '/businessReview/example_data/system_comparison_view': {\r\n apiTitle: 'EXAMPLE DATA',\r\n apiSource: '/qbr/kpi/example_data/system_comparison',\r\n apiFolder: 'example_data',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'DATA POINT', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/service_level/system_comparison_view': {\r\n apiTitle: 'Telephone Service Level',\r\n apiSource: '/qbr/kpi/service_level/system_comparison',\r\n apiFolder: 'service_level',\r\n apiDrillDown: 'timeline_view',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'live_connect_percent', description: 'DATA POINT', width: 100, hidden: true },\r\n { ref: 'percent_calls', description: 'DATA POINT', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/service_level/timeline_view': {\r\n apiTitle: 'Telephone Service Level',\r\n apiSource: '/qbr/kpi/service_level/timeline',\r\n apiFolder: 'service_level',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/alcm/system_comparison_view': {\r\n apiTitle: 'ABBOTTLINK CUSTOMER MAINTENANCE',\r\n apiSource: '/qbr/kpi/alcm/system_comparison',\r\n apiFolder: 'alcm',\r\n apiDrillDown: 'list_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'ALCM SCORE(S)', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/instrument_test_counts/system_comparison_view': {\r\n apiTitle: 'Annualualized Instrument Test Counts',\r\n apiSource: '/qbr/kpi/instrument_test_counts/system_comparison',\r\n apiFolder: 'instrument_test_counts',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'AVG INSTRUMENT TEST COUNTS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/assay_test_counts/system_comparison_view': {\r\n apiTitle: 'Top Assays',\r\n apiSource: '/qbr/kpi/assay_test_counts/system_comparison',\r\n apiFolder: 'assay_test_counts',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'AVG INSTRUMENT TEST COUNTS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n\r\n '/businessReview/response_time/system_comparison_view': {\r\n apiTitle: 'Response Time (Hours)',\r\n apiSource: '/qbr/kpi/response_time/system_comparison',\r\n apiFolder: 'response_time',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'RESPONSE TIME (HRS)', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/calls_without_service_number/system_comparison_view': {\r\n apiTitle: 'Calls w/Out Service Number',\r\n apiSource: '/qbr/kpi/calls_without_service_number/system_comparison',\r\n apiFolder: 'calls_without_service_number',\r\n apiDrillDown: 'timeline_view',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'CALLS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/calls_without_service_number/timeline_view': {\r\n apiTitle: 'Calls w/Out Service Number',\r\n apiSource: '/qbr/kpi/calls_without_service_number/timeline',\r\n apiFolder: 'calls_without_service_number',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/abandoned_calls/system_comparison_view': {\r\n apiTitle: 'Abandoned Calls',\r\n apiSource: '/qbr/kpi/abandoned_calls/system_comparison',\r\n apiFolder: 'abandoned_calls',\r\n apiDrillDown: 'timeline_view',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'CALLS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/abandoned_calls/timeline_view': {\r\n apiTitle: 'Abandoned Calls',\r\n apiSource: '/qbr/kpi/abandoned_calls/timeline',\r\n apiFolder: 'abandoned_calls',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/pm_tickets/system_comparison_view': {\r\n apiTitle: 'Total PM Tickets',\r\n apiSource: '/qbr/kpi/pm_tickets/system_comparison',\r\n apiFolder: 'pm_tickets',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'PM TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/tcr/system_comparison_view': {\r\n apiTitle: 'Test Completion Rate',\r\n apiSource: '/qbr/kpi/tcr/system_comparison',\r\n apiFolder: 'tcr',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TEST COMPLETION RATE', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/tcr/timeline_view': {\r\n apiTitle: 'Test Completion Rate',\r\n apiSource: '/qbr/kpi/tcr/timeline',\r\n apiFolder: 'tcr',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/pm_tickets/timeline_view': {\r\n apiTitle: 'PM Tickets',\r\n apiSource: '/qbr/kpi/pm_tickets/timeline',\r\n apiFolder: 'pm_tickets',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/total_inbound_calls/system_comparison_view': {\r\n apiTitle: 'Total Inbound Calls',\r\n apiSource: '/qbr/kpi/total_inbound_calls/system_comparison',\r\n apiFolder: 'total_inbound_calls',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'CALLS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/total_inbound_calls/timeline_view': {\r\n apiTitle: 'Total Inbound Calls',\r\n apiSource: '/qbr/kpi/total_inbound_calls/timeline',\r\n apiFolder: 'total_inbound_calls',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/total_inbound_calls/list_view': {\r\n apiTitle: 'Total Inbound Calls',\r\n apiSource: '/qbr/kpi/total_inbound_calls/details',\r\n table: {\r\n columns: [\r\n { ref: 'COUNTRY', description: 'LOCATION', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL1', description: 'LOCAL LEVEL 1', width: 100, hidden: true },\r\n { ref: 'LOCALLEVEL2', description: 'LOCAL LEVEL 2', width: 100, hidden: true },\r\n { ref: 'CITY', description: 'CITY', width: 100, hidden: true },\r\n { ref: 'SN', description: 'SERIAL NUMBER', width: 100, hidden: true },\r\n { ref: 'PL', description: 'PRODUCT LINE', width: 100, hidden: true },\r\n { ref: 'PERIOD', description: 'REPORT PERIOD', width: 100, hidden: true },\r\n { ref: 'CUSTOMER', description: 'CUSTOMER', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/mttr/system_comparison_view': {\r\n apiTitle: 'MTTR (Hours)',\r\n apiSource: '/qbr/kpi/mttr/system_comparison',\r\n apiFolder: 'mttr',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'MTTR (HRS)', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/mttr/timeline_view': {\r\n apiTitle: 'MTTR (Hours)',\r\n apiSource: '/qbr/kpi/mttr/timeline',\r\n apiFolder: 'mttr',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/ticket_history/system_comparison_view': {\r\n apiTitle: 'Ticket History',\r\n apiSource: '/qbr/kpi/ticket_history/system_comparison',\r\n apiFolder: 'ticket_history',\r\n apiDrillDown: 'timeline_view',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'remote', description: 'REMOTE', width: 100, hidden: true },\r\n { ref: 'fsv', description: 'FIELD SERVICE VISIT', width: 100, hidden: true },\r\n { ref: 'complaints', description: 'COMPLAINTS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/ticket_history/timeline_view': {\r\n apiTitle: 'Ticket History',\r\n apiSource: '/qbr/kpi/ticket_history/timeline',\r\n apiFolder: 'ticket_history',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/phn/system_comparison_view': {\r\n apiTitle: 'PHN Tickets',\r\n apiSource: '/qbr/kpi/phn/system_comparison',\r\n apiFolder: 'phn',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/phn/timeline_view': {\r\n apiTitle: 'PHN Tickets',\r\n apiSource: '/qbr/kpi/phn/timeline',\r\n apiFolder: 'phn',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/ticket_erros/system_comparison_view': {\r\n apiTitle: 'PHN Tickets',\r\n apiSource: '/qbr/kpi/ticket_erros/system_comparison',\r\n apiFolder: 'ticket_erros',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/tsb/system_comparison_view': {\r\n apiTitle: 'TSBs',\r\n apiSource: '/qbr/kpi/tsb/system_comparison',\r\n apiFolder: 'tsb',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/tsb/timeline_view': {\r\n apiTitle: 'TSBs',\r\n apiSource: '/qbr/kpi/tsb/timeline',\r\n apiFolder: 'tsb',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/uptime/system_comparison_view': {\r\n apiTitle: 'Uptime',\r\n apiSource: '/qbr/kpi/uptime/system_comparison',\r\n apiFolder: 'uptime',\r\n apiDrillDown: 'timeline_view',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'TICKETS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/uptime/timeline_view': {\r\n apiTitle: 'Uptime',\r\n apiSource: '/qbr/kpi/uptime/timeline',\r\n apiFolder: 'uptime',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/hard_stops/system_comparison_view': {\r\n apiTitle: 'Hard Stops',\r\n apiSource: '/qbr/kpi/hard_stops/system_comparison',\r\n apiFolder: 'hard_stops',\r\n apiDrillDown: 'timeline_view',\r\n apiChartType: 'MultiBar',\r\n table: {\r\n columns: [\r\n { ref: 'customer', description: 'CUSTOMER', width: 100, hidden: true },\r\n { ref: 'values', description: 'HARD STOPS', width: 100, hidden: true },\r\n ]\r\n }\r\n },\r\n '/businessReview/hard_stops/timeline_view': {\r\n apiTitle: 'Hard Stops',\r\n apiSource: '/qbr/kpi/hard_stops/timeline',\r\n apiFolder: 'hard_stops',\r\n apiChartType: 'StackBar',\r\n table: {\r\n columns: [\r\n { ref: 'M1', description: '2022-05', width: 100, hidden: true },\r\n { ref: 'M2', description: '2022-06', width: 100, hidden: true },\r\n { ref: 'M3', description: '2022-07', width: 100, hidden: true },\r\n { ref: 'M4', description: '2022-08', width: 100, hidden: true },\r\n ]\r\n }\r\n }\r\n};\r\n","
    \n \n \n
    \n \n
    \n \n \n \n \n \n \n \n \n
    {{apiDisplayTitle}}
    CUSTOMER:   {{CustomerName}}
    \n\n
    \n \n \n \n \n {{column.title}}\n \n \n \n {{dataItem[col.ref].value}}\n \n \n {{dataItem[col.ref].value}}\n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n","import { DomSanitizer, SafeStyle } from '@angular/platform-browser';\nimport { Component, OnInit, OnDestroy, ViewEncapsulation } from '@angular/core';\nimport {Location} from '@angular/common';\nimport {BrParamsService} from '../../br-params.service';\nimport {BrHistoryRange} from '../../br-history-range.service';\nimport {NavbarBuilderService} from '../../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../../configuration/nav-filter-selection';\nimport {ListViewPages} from '../../configuration/details/list-view-pages';\nimport {RequestState} from '../../../api/request-handler';\nimport {ApiService} from '../../../api/api.service';\nimport {GridComponent} from '../../../details/grid.component';\nimport {DetailQueryParamsService} from '../../detail-query-params.service';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-br-list-view',\n templateUrl: './br-list-view.component.html',\n styleUrls: ['./br-list-view.component.scss']\n})\n\nexport class BrListViewComponent extends GridComponent implements OnInit, OnDestroy {\n kpiConfig;\n listViewPages = ListViewPages;\n public apiData;\n public state = RequestState.Inactive;\n apiUrl;\n apiDisplayTitle;\n requestHandler;\n stateChangeHandler;\n dataCols = [];\n dataRows = [];\n CustomerName;\n returnLink;\n detailQueryCompleteSubscription;\n returnLinkSubscription;\n queryParamsSubscription;\n routeUrlSubscription;\n routeUrl;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private brParamsService: BrParamsService,\n private brHistoryRange: BrHistoryRange,\n private location: Location,\n private apiService: ApiService,\n private detailQueryParamsService: DetailQueryParamsService,\n private route: ActivatedRoute\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n // console.log('OnInit Executed', currentRouterLocation);\n this.detailQueryCompleteSubscription = this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.listViewPages.hasOwnProperty(currentRouterLocation)) {\n this.kpiConfig = this.listViewPages[currentRouterLocation];\n }\n this.routeUrl = currentRouterLocation;\n\n this.apiUrl = this.kpiConfig.apiSource;\n\n this.apiDisplayTitle = this.kpiConfig.apiTitle;\n\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_detail'));\n\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n\n // console.log('Test Event: Line 111');\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n\n if (this.apiData.customer) { this.CustomerName = this.apiData.customer; }\n // console.log('List Data', this.apiData.customer);\n\n // FORMAT API DATA FOR TABLE\n // format dataCols for kendo component\n this.dataCols = this.kpiConfig.table.columns;\n if (this.apiData.columns) { this.dataCols = this.apiData.columns; }\n\n this.dataRows = [];\n for (let i = 0; i < this.apiData.values.length; i++) {\n const apiDataRow = this.apiData.values[i];\n const dataRow = {};\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n dataRow[dataColConfig.ref] = {\n value: apiDataRow[dataColConfig.ref]\n };\n }\n this.dataRows.push(dataRow);\n }\n this.updateGrid();\n }\n this.updateGrid();\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n });\n\n this.returnLinkSubscription = this.detailQueryParamsService.getReturnLink().subscribe((pathDetails) => {\n this.returnLink = pathDetails;\n });\n this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n this.detailQueryParamsService.prepReturnParams(params);\n this.detailQueryParamsService.buildPersistedValuesFromParams(params);\n });\n this.routeUrlSubscription = this.route.url.subscribe((url) => {\n this.detailQueryParamsService.prepReturnLink(url);\n this.detailQueryParamsService.processReturnLink();\n });\n }\n\n ngOnDestroy(): void {\n if (this.stateChangeHandler) {\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n this.detailQueryCompleteSubscription.unsubscribe();\n this.returnLinkSubscription.unsubscribe();\n this.queryParamsSubscription.unsubscribe();\n this.routeUrlSubscription.unsubscribe();\n }\n\n getQueryParams() {\n return this.detailQueryParamsService.getQueryParams();\n }\n}\n","
    \n \n \n
    \n \n
    \n \n \n \n \n \n \n \n \n
    {{apiDisplayTitle}} - Network List
    \n \n
    0\">\n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n {{column.title}}\n \n \n \n {{dataItem[col.ref].value}}\n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { BrParamsService } from '../../br-params.service';\nimport { BrHistoryRange } from '../../br-history-range.service';\nimport { NavbarBuilderService } from '../../../navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from '../../../configuration/nav-filter-selection';\nimport { ListViewPages } from '../../configuration/details/list-view-pages';\nimport { RequestState } from '../../../api/request-handler';\nimport { ApiService } from '../../../api/api.service';\nimport { RefreshHandlerService } from '../../../api/refresh-handler.service';\nimport { GridComponent } from '../../../details/grid.component';\nimport { DetailQueryParamsService } from '../../detail-query-params.service';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-br-system-comparison-list-view',\n templateUrl: './br-system-comparison-list-view.component.html',\n styleUrls: ['./br-system-comparison-list-view.component.scss']\n})\n\nexport class BrSystemComparisonListViewComponent extends GridComponent implements OnInit, OnDestroy {\n\n kpiConfig;\n listViewPages = ListViewPages;\n public apiData;\n public apiMultiData;\n public state = RequestState.Inactive;\n apiUrl;\n apiDisplayTitle;\n requestHandler;\n stateChangeHandler;\n dataCols = [];\n dataRows = [];\n multiDataRows = [];\n chartData = [];\n multiChartData = [];\n chartRowCount = 0;\n chartLabels = [];\n chartOptions;\n apiFolder;\n apiDrillDown;\n ParentCustomer;\n apiChartType;\n returnLink;\n detailQueryCompleteSubscription;\n returnLinkSubscription;\n queryParamsSubscription;\n routeUrlSubscription;\n multiChartCategories;\n multiChartSeries;\n multiChartSeriesArray;\n chartBottomLimit;\n chartTopLimit;\n chartMajorUnit;\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private brParamsService: BrParamsService,\n private brHistoryRange: BrHistoryRange,\n private location: Location,\n private apiService: ApiService,\n private detailQueryParamsService: DetailQueryParamsService,\n private route: ActivatedRoute\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n this.detailQueryCompleteSubscription = this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.listViewPages.hasOwnProperty(currentRouterLocation)) {\n this.kpiConfig = this.listViewPages[currentRouterLocation];\n }\n\n this.apiUrl = this.kpiConfig.apiSource;\n this.apiFolder = this.kpiConfig.apiFolder;\n this.apiDrillDown = 'timeline_view';\n if (this.kpiConfig.apiDrillDown) { this.apiDrillDown = this.kpiConfig.apiDrillDown; }\n if (this.kpiConfig.apiChartType) { this.apiChartType = this.kpiConfig.apiChartType; }\n\n // console.log('DRILL DOWN ITEM', this.apiChartType);\n\n this.apiDisplayTitle = this.kpiConfig.apiTitle;\n // console.log('Display Title', this.apiDisplayTitle);\n // console.log('KPI Config Follow-up Link: ', this.kpiConfig.apiFollowUpLink);\n\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_detail'));\n\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n // console.log('API DATA', this.apiData);\n\n // format dataCols for kendo component\n this.dataCols = this.kpiConfig.table.columns;\n if (this.apiData.columns) { this.dataCols = this.apiData.columns; }\n\n this.chartBottomLimit = this.apiData.chartBottomLimit;\n this.chartTopLimit = this.apiData.chartTopLimit;\n\n // format dataRows for kendo component\n this.dataRows = [];\n this.chartData = [];\n this.multiChartData = [];\n this.chartLabels = [];\n\n this.multiChartCategories = [];\n this.multiChartSeries = {};\n if (this.apiChartType === 'MultiBar') {\n const firstRow = this.apiData.values[0];\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n if (dataColConfig.ref !== 'customer') {\n let colColor = '';\n if (dataColConfig.ref + 'bgColor' in firstRow) {\n colColor = firstRow[dataColConfig.ref + 'bgColor'];\n }\n // if (dataColConfig.ref + 'textColor' in firstRow) {\n // colColor = firstRow[dataColConfig.ref + 'textColor'];\n // }\n if (!('included_in_chart' in dataColConfig) && dataColConfig.included_in_chart !== false) {\n this.multiChartSeries[dataColConfig.ref] = {\n color: colColor,\n data: [],\n name: dataColConfig.description\n };\n }\n }\n }\n }\n let highestValue = 0;\n for (let i = 0; i < this.apiData.values.length; i++) {\n const apiDataRow = this.apiData.values[i];\n const dataRow = {};\n this.chartLabels.push(' ');\n this.chartLabels.push(this.apiData.values[i].customer);\n if (i == 0) { this.ParentCustomer = this.apiData.values[i].customer; }\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n let colorCalc = '';\n let textColor = '';\n if (dataColConfig.ref + 'bgColor' in apiDataRow) {\n colorCalc = apiDataRow[dataColConfig.ref + 'bgColor'];\n }\n if (dataColConfig.ref + 'textColor' in apiDataRow) {\n textColor = apiDataRow[dataColConfig.ref + 'textColor'];\n }\n dataRow[dataColConfig.ref] = {\n value: apiDataRow[dataColConfig.ref],\n bgcolor: colorCalc,\n textColor: textColor\n };\n if (!('included_in_chart' in dataColConfig) && dataColConfig.included_in_chart !== false) {\n if (this.apiChartType === 'MultiBar') {\n if (dataColConfig.ref !== 'customer') {\n this.multiChartSeries[dataColConfig.ref].data.push(apiDataRow[dataColConfig.ref]);\n if (!isNaN(apiDataRow[dataColConfig.ref]) && highestValue < apiDataRow[dataColConfig.ref]) {\n highestValue = apiDataRow[dataColConfig.ref];\n }\n } else {\n this.multiChartCategories.push(apiDataRow[dataColConfig.ref]);\n }\n } else {\n this.chartData.push(dataRow[dataColConfig.ref].value);\n }\n }\n this.chartRowCount++;\n }\n\n if ('uck' in apiDataRow) {\n dataRow['uck'] = {value: apiDataRow.uck};\n }\n if ('acct_pres_name' in apiDataRow) {\n dataRow['acct_pres_name'] = {value: apiDataRow.acct_pres_name};\n }\n this.dataRows.push(dataRow);\n }\n this.chartMajorUnit = highestValue / 5;\n if (this.chartMajorUnit < 1) {\n this.chartMajorUnit = 1;\n } else {\n this.chartMajorUnit = Math.floor(this.chartMajorUnit);\n }\n\n if (this.apiChartType === 'MultiBar') {\n this.chartLabels = this.multiChartCategories;\n this.multiChartSeriesArray = [];\n for (const item in this.multiChartSeries) {\n this.multiChartSeriesArray.push(this.multiChartSeries[item]);\n }\n }\n this.updateGrid();\n // console.log('CHART DATA', this.chartData);\n // console.log('CHART DATA LENGTH', this.apiData.values.length);\n\n /*\n this.apiMultiData = JSON.parse(response.body);\n\n // format dataRows for kendo component\n this.multiDataRows = []\n this.multiChartData = [];\n\n for (let i = 0; i < this.apiData.values.length; i++) {\n const apiMultiDataRow = this.apiData.values[i];\n const multiDataRow = {};\n this.chartLabels.push(' ');\n this.chartLabels.push(this.apiData.values[i].customer);\n\n for (let j = 0; j < this.apiData.values[i].length; j++) {\n const apiMultiDataRowArray = this.apiData.value[i][j];\n this.multiChartData[j] = []\n\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n multiDataRow[dataColConfig.ref] = {\n value: apiMultiDataRowArray[dataColConfig.ref]\n };\n this.multiChartData[j].push( multiDataRow[ dataColConfig.ref ].value );\n this.chartRowCount++;\n }\n }\n\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n multiDataRow[ dataColConfig.ref ] = {\n value: apiMultiDataRow[ dataColConfig.ref ]\n };\n this.chartData.push( multiDataRow[dataColConfig.ref].value );\n this.chartRowCount++;\n }\n\n\n if ('uck' in apiMultiDataRow) {\n multiDataRow['uck'] = { value: apiMultiDataRow.uck };\n }\n if ('customer_num' in apiMultiDataRow) {\n multiDataRow['customer_num'] = { value: apiMultiDataRow.customer_num };\n }\n if ('acct_pres_name' in apiMultiDataRow) {\n multiDataRow['acct_pres_name'] = { value: apiMultiDataRow.acct_pres_name };\n }\n this.multiDataRows.push(multiDataRow);\n } //*/\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.updateGrid();\n });\n\n this.returnLinkSubscription = this.detailQueryParamsService.getReturnLink().subscribe((pathDetails) => {\n this.returnLink = pathDetails;\n });\n this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n this.detailQueryParamsService.prepReturnParams(params);\n this.detailQueryParamsService.buildPersistedValuesFromParams(params);\n });\n this.routeUrlSubscription = this.route.url.subscribe((url) => {\n this.detailQueryParamsService.prepReturnLink(url);\n this.detailQueryParamsService.processReturnLink();\n });\n }\n\n routerBack() {\n this.location.back();\n }\n\n ngOnDestroy(): void {\n if (this.stateChangeHandler) {\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n this.detailQueryCompleteSubscription.unsubscribe();\n this.returnLinkSubscription.unsubscribe();\n this.queryParamsSubscription.unsubscribe();\n this.routeUrlSubscription.unsubscribe();\n }\n\n isThumbnailMonths() {\n return (this.apiFolder === 'ticket_errors' || this.apiFolder === 'assay_test_counts');\n }\n\n getDetailLink() {\n return '/businessReview/' + this.apiFolder + '/' + this.apiDrillDown;\n }\n\n getQueryParams(dataItem) {\n let params = {};\n if ('uck' in dataItem) {\n params['ckey'] = dataItem.uck.value;\n }\n if ('acct_pres_name' in dataItem) {\n params['acct_pres_name'] = dataItem.acct_pres_name.value;\n }\n if ('customer_num' in dataItem) {\n params['customer_num'] = dataItem.customer_num.value;\n }\n return this.detailQueryParamsService.getQueryParams(params);\n }\n\n}\n","
    \n \n \n
    \n \n
    \n \n \n \n \n \n \n \n \n
    {{apiDisplayTitle}} - Timeline Data
    Customer: {{sCustomerName}}
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n \n \n \n \n \n \n \n
    \n \n
    \n \n \n \n \n {{column.title}}\n \n \n \n {{dataItem[col.ref].value}}\n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Location } from '@angular/common';\nimport { BrParamsService } from '../../br-params.service';\nimport { BrHistoryRange } from '../../br-history-range.service';\nimport { NavbarBuilderService } from '../../../navigation/navbar-builder.service';\nimport { ToolSelectionOptions } from '../../../configuration/nav-filter-selection';\nimport { ListViewPages } from '../../configuration/details/list-view-pages';\nimport { RequestState } from '../../../api/request-handler';\nimport { ApiService } from '../../../api/api.service';\nimport { RefreshHandlerService } from '../../../api/refresh-handler.service';\nimport { GridComponent } from '../../../details/grid.component';\nimport {DetailQueryParamsService} from '../../detail-query-params.service';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-br-timeline-view',\n templateUrl: './br-timeline-view.component.html',\n styleUrls: ['./br-timeline-view.component.scss']\n})\n\nexport class BrTimelineViewComponent extends GridComponent implements OnInit, OnDestroy {\n\n kpiConfig;\n listViewPages = ListViewPages;\n public apiData;\n public state = RequestState.Inactive;\n apiUrl;\n apiDisplayTitle;\n apiFolder;\n apiChartType;\n sCustomerName;\n sUck;\n requestHandler;\n stateChangeHandler;\n dataCols = [];\n dataRows = [];\n chartData = [];\n chartLabels = [];\n returnLink;\n returnLinkSubscription;\n queryParamsSubscription;\n routeUrlSubscription;\n detailQueryCompleteSubscription;\n multiChartSeriesArray = [];\n\n constructor(\n private navbarBuilderService: NavbarBuilderService,\n private brParamsService: BrParamsService,\n private brHistoryRange: BrHistoryRange,\n private location: Location,\n private apiService: ApiService,\n private detailQueryParamsService: DetailQueryParamsService,\n private route: ActivatedRoute\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n this.detailQueryCompleteSubscription = this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.listViewPages.hasOwnProperty(currentRouterLocation)) {\n this.kpiConfig = this.listViewPages[currentRouterLocation];\n }\n\n this.apiUrl = this.kpiConfig.apiSource;\n this.apiDisplayTitle = this.kpiConfig.apiTitle;\n this.apiFolder = this.kpiConfig.apiFolder;\n // console.log('API CONFIGS', this.kpiConfig);\n if (this.kpiConfig.apiChartType) { this.apiChartType = this.kpiConfig.apiChartType; }\n\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_detail'));\n\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n // console.log('TIMELINE DATA', this.apiData.values);\n\n // SET CUSTOMER NAME\n if (this.apiData.customer) {\n this.sCustomerName = this.apiData.customer;\n }\n\n // FORMAT API DATA FOR TABLE - format dataCols for kendo component\n this.dataCols = this.kpiConfig.table.columns;\n if (this.apiData.columns) { this.dataCols = this.apiData.columns; }\n\n // format dataRows for kendo component\n this.dataRows = [];\n this.chartData = [];\n for (let i = 0; i < this.apiData.values.length; i++) {\n const apiDataRow = this.apiData.values[i];\n const dataRow = {};\n const multiChartSeries = [];\n let multiChartSeriesTitle;\n for (let c = 0; c < this.dataCols.length; c++) {\n const dataColConfig = this.dataCols[c];\n dataRow[dataColConfig.ref] = {\n value: apiDataRow[dataColConfig.ref]\n };\n // console.log('Data Element', dataRow[dataColConfig.ref].value);\n\n if (this.apiChartType === 'MultiBar' || this.apiChartType === 'StackBar') {\n if ( dataColConfig.ref !== 'title') {\n multiChartSeries.push(apiDataRow[dataColConfig.ref]);\n } else {\n multiChartSeriesTitle = apiDataRow[dataColConfig.ref];\n }\n } else {\n if ( dataColConfig.ref !== 'title') {\n this.chartData.push(dataRow[dataColConfig.ref].value);\n }\n }\n }\n if (this.apiChartType === 'MultiBar') {\n this.multiChartSeriesArray.push({\n data: multiChartSeries,\n name: multiChartSeriesTitle,\n stack: false\n });\n } else if (this.apiChartType === 'StackBar') {\n this.multiChartSeriesArray.push({\n data: multiChartSeries,\n name: multiChartSeriesTitle,\n stack: true\n });\n }\n this.dataRows.push(dataRow);\n }\n this.updateGrid();\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.updateGrid();\n });\n\n this.returnLinkSubscription = this.detailQueryParamsService.getReturnLink().subscribe((pathDetails) => {\n this.returnLink = pathDetails;\n });\n this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n this.detailQueryParamsService.prepReturnParams(params);\n this.detailQueryParamsService.buildPersistedValuesFromParams(params);\n });\n this.routeUrlSubscription = this.route.url.subscribe((url) => {\n this.detailQueryParamsService.prepReturnLink(url);\n this.detailQueryParamsService.processReturnLink();\n });\n }\n\n getDetailLink() {\n return '/businessReview/' + this.apiFolder + '/list_view';\n }\n\n ngOnDestroy(): void {\n if (this.stateChangeHandler) {\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n this.detailQueryCompleteSubscription.unsubscribe();\n this.returnLinkSubscription.unsubscribe();\n this.queryParamsSubscription.unsubscribe();\n this.routeUrlSubscription.unsubscribe();\n }\n\n getQueryParams(dataItem) {\n let params = {};\n if ('uck' in dataItem) {\n params['ckey'] = dataItem.uck.value;\n }\n if ('acct_pres_name' in dataItem) {\n params['acct_pres_name'] = dataItem.acct_pres_name.value;\n }\n if (dataItem['period']) {\n params['period'] = dataItem['period'];\n }\n if (this.apiData.uck) {\n params['uck'] = this.apiData.uck;\n }\n\n return this.detailQueryParamsService.getQueryParams( params );\n }\n\n}\n","export const DDTConfig = {\r\n '/businessReview/alcm/list_view': '/qbr/kpi/alcm/details',\r\n '/businessReview/tcr/list_view': '/qbr/kpi/tcr/details',\r\n '/businessReview/hard_stops/list_view': '/qbr/kpi/hard_stops/details'\r\n};\r\n","
    \n \n \n
    \n \n
    \n
    \n
    \n {{apiData.dataTable.tableName}}\n
    \n \n
    0\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{dataItem[col.ref].value}}\n \n \n {{dataItem[col.ref].value}}\n \n \n \n \n \n \n
    \n
    \n
    \n
    ","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {GridComponent} from '../../details/grid.component';\nimport {RequestState} from '../../api/request-handler';\nimport {ApiService} from '../../api/api.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {DetailQueryParamsService} from '../detail-query-params.service';\nimport {DDTConfig} from '../configuration/details/ddt-config';\nimport {BrParamsService} from '../br-params.service';\nimport { ActivatedRoute } from '@angular/router';\n\n// columns need to be predefined. set in a parent component\n@Component({\n selector: 'app-dynamic-data-table',\n templateUrl: './dynamic-data-table.component.html',\n styleUrls: ['./dynamic-data-table.component.scss']\n})\nexport class DynamicDataTableComponent extends GridComponent implements OnInit, OnDestroy {\n ddtConfig = DDTConfig;\n @Input() apiUrl = '/qbr/kpi/example_ddt/details';\n apiData = null;\n state = null;\n requestHandler;\n stateChangeHandler;\n returnLink;\n detailQueryCompleteSubscription;\n returnLinkSubscription;\n queryParamsSubscription;\n routeUrlSubscription;\n\n @Input() dataCols = [];\n dataRows = [];\n\n // data col metadata:\n // {ref: 'uniqueCustomerKey', description: 'CustomerKey', isLink: false, width: 80, hidden: true, filterable: true, export: false},\n\n\n constructor(\n private apiService: ApiService,\n private detailQueryParamsService: DetailQueryParamsService,\n private brParamsService: BrParamsService,\n private route: ActivatedRoute\n ) {\n super();\n }\n\n ngOnInit(): void {\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n this.detailQueryCompleteSubscription = this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.ddtConfig.hasOwnProperty(currentRouterLocation)) {\n this.apiUrl = this.ddtConfig[currentRouterLocation];\n }\n this.brParamsService.set('br_periods_to_show', this.brParamsService.get('br_history_range_detail'));\n\n this.requestHandler = this.apiService.get(this.apiUrl);\n this.requestHandler.sendRequest(this.apiUrl);\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n // format dataRows for kendo component\n this.dataRows = [];\n for (let i = 0; i < this.apiData.dataTable.rowData.length; i++) {\n const apiDataRow = this.apiData.dataTable.rowData[i];\n const dataRow = {};\n // console.log('dataCols', this.dataCols);\n for (const dataColConfig of this.dataCols) {\n // if (dataColConfig.ref )\n let colorCalc = '';\n if (dataColConfig.ref + '_COLOR' in apiDataRow) {\n colorCalc = apiDataRow[dataColConfig.ref + '_COLOR'];\n }\n if (dataColConfig.bg_color.length > 0) {\n colorCalc = apiDataRow[dataColConfig.bg_color];\n }\n dataRow[dataColConfig.ref] = {\n value: apiDataRow[dataColConfig.ref],\n bgcolor: colorCalc,\n color: ''\n };\n }\n this.dataRows.push(dataRow);\n }\n this.updateGrid();\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.updateGrid();\n });\n\n this.returnLinkSubscription = this.detailQueryParamsService.getReturnLink().subscribe((pathDetails) => {\n this.returnLink = pathDetails;\n });\n this.queryParamsSubscription = this.route.queryParams.subscribe(params => {\n this.detailQueryParamsService.prepReturnParams(params);\n this.detailQueryParamsService.buildPersistedValuesFromParams(params);\n });\n this.routeUrlSubscription = this.route.url.subscribe((url) => {\n this.detailQueryParamsService.prepReturnLink(url);\n this.detailQueryParamsService.processReturnLink();\n });\n }\n\n ngOnDestroy(): void {\n if (this.stateChangeHandler) {\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n this.detailQueryCompleteSubscription.unsubscribe();\n this.returnLinkSubscription.unsubscribe();\n this.queryParamsSubscription.unsubscribe();\n this.routeUrlSubscription.unsubscribe();\n }\n\n // getQueryParams() {\n // return this.detailQueryParamsService.getQueryParams();\n // }\n\n inArray(array, index) {\n return (index in array);\n }\n\n getQueryParams() {\n return this.detailQueryParamsService.getQueryParams();\n }\n}\n","
    \n \n
    ","import { Component, OnInit, OnDestroy, Input } from '@angular/core';\nimport {ApiService} from '../../api/api.service';\nimport {NavbarBuilderService} from '../../navigation/navbar-builder.service';\nimport {DetailQueryParamsService} from '../detail-query-params.service';\nimport {ToolSelectionOptions} from '../../configuration/nav-filter-selection';\nimport {RequestState} from '../../api/request-handler';\nimport {DDTConfig} from '../configuration/details/ddt-config';\n\n@Component({\n selector: 'app-ddt-loader',\n templateUrl: './ddt-loader.component.html',\n styleUrls: ['./ddt-loader.component.scss']\n})\nexport class DdtLoaderComponent implements OnInit, OnDestroy {\n ddtConfig = DDTConfig;\n @Input() apiUrl = '/qbr/kpi/example_ddt/details';\n apiData = null;\n state = null;\n requestHandler;\n stateChangeHandler;\n\n dataCols = [];\n\n constructor(\n private apiService: ApiService,\n private navbarBuilderService: NavbarBuilderService,\n private detailQueryParamsService: DetailQueryParamsService\n ) { }\n\n ngOnInit(): void {\n this.navbarBuilderService.setNavbarChoice('business-review');\n this.navbarBuilderService.setNavFilterSelection({\n preferences: false,\n dashboardSelector: false,\n toolSelection: ToolSelectionOptions.businessreview,\n bookmarksFlag: false,\n viewTitle: false,\n viewTitleText: '',\n viewSubtitle: false,\n viewSubtitleText: '',\n filtered: false\n });\n const currentRouterLocation = this.detailQueryParamsService.getCleanLocation();\n this.detailQueryParamsService.getBuildCompleteEvent().subscribe(() => {\n if (this.ddtConfig.hasOwnProperty(currentRouterLocation)) {\n this.apiUrl = this.ddtConfig[currentRouterLocation];\n }\n this.requestHandler = this.apiService.get(this.apiUrl);\n // no need to send request here as chart tile has already done so\n this.stateChangeHandler = (state) => {\n this.state = state;\n if (state === RequestState.Complete) {\n const response = this.requestHandler.getResponse();\n this.apiData = JSON.parse(response.body);\n const dataCols = this.apiData.dataTable.columns;\n for (let i = 0; i < dataCols.length; i++) {\n dataCols[i].ref = dataCols[i].value;\n if (!('width' in dataCols[i])) {\n dataCols[i].width = 80;\n }\n dataCols[i].hidden = false;\n dataCols[i].filterable = true;\n dataCols[i].export = false;\n if (!('type' in dataCols[i])) {\n dataCols[i].type = 'string';\n }\n dataCols[i].isLink = false;\n if (!('bg_color' in dataCols[i])) {\n dataCols[i].bg_color = '';\n dataCols[i].text_color = '#000';\n }\n if (!('text_color' in dataCols[i])) {\n dataCols[i].text_color = '#000';\n }\n }\n this.dataCols = dataCols;\n }\n };\n this.requestHandler.onStateChange(this.stateChangeHandler);\n this.requestHandler.sendRequest(this.apiUrl);\n });\n this.detailQueryParamsService.buildPersistedValuesFromQueryParams();\n }\n\n ngOnDestroy(): void {\n if (this.stateChangeHandler) {\n this.requestHandler.removeStateListener(this.stateChangeHandler);\n }\n }\n\n isDataColsSet() {\n if (Array.isArray(this.dataCols) && this.dataCols.length > 0) {\n return true;\n }\n return false;\n }\n}\n","
    \n \n
    ","import { NgModule } from '@angular/core';\nimport { RouterModule, Routes } from '@angular/router';\nimport { DashboardComponent } from './dashboards/dashboard/dashboard.component';\nimport { Style1Component } from './details/style1/style1.component';\nimport { CustomerComponent } from './dashboards/customer/customer.component';\nimport { InstrumentsComponent } from './dashboards/instruments/instruments.component';\nimport { AmbassadorComponent } from './dashboards/ambassador/ambassador.component';\nimport { CtDashboardComponent } from './control_tower/ct-dashboard/ct-dashboard.component';\nimport { AlertsDashboardComponent } from './alerts/alerts-dashboard/alerts-dashboard.component';\nimport { Style2Component } from './details/style2/style2.component';\nimport { Style3Component } from './details/style3/style3.component';\nimport { Style4Component } from './details/style4/style4.component';\nimport { ServiceContractsLevel2Component } from './details/service-contracts/service-contracts-level2/service-contracts-level2.component';\nimport { ServiceContractsLevel3Component } from './details/service-contracts/service-contracts-level3/service-contracts-level3.component';\nimport { ServiceContractsLevel4Component } from './details/service-contracts/service-contracts-level4/service-contracts-level4.component';\nimport { UptimeCustomerDetailsComponent } from './details/uptime-customer-details/uptime-customer-details.component';\nimport { SurveyCommentDetailsComponent } from './details/survey-comment-details/survey-comment-details.component';\nimport { CustomerOrderDetailsComponent } from './details/customer-order-details/customer-order-details.component';\nimport { SGMDetailsComponent } from './details/sgm-details/sgm-details.component';\nimport { PredictiveAlertsLevel2Component } from './details/predictive-alerts/predictive-alerts-level2/predictive-alerts-level2.component';\nimport { PredictiveAlertsLevel3Component } from './details/predictive-alerts/predictive-alerts-level3/predictive-alerts-level3.component';\nimport { RnpsSurveyCommentDetailsComponent } from './details/rnps-survey-comment-details/rnps-survey-comment-details.component';\nimport { SalesSummaryComponent } from './details/sales/sales-summary/sales-summary.component';\nimport { SalesDetailsComponent } from './details/sales/sales-details/sales-details.component';\nimport { GsAlertsDashboardComponent } from './alerts/gs-alerts-dashboard/gs-alerts-dashboard.component';\nimport { MsalGuard } from '@azure/msal-angular';\nimport { BrDashboardComponent } from './business_review/br-dashboard/br-dashboard.component';\nimport { BrTemplateEditorComponent } from './business_review/br-template-editor/br-template-editor.component';\nimport { BrExpandedChartViewComponent } from './business_review/detail_pages/br-expanded-chart-view/br-expanded-chart-view.component';\nimport { BrListViewComponent } from './business_review/detail_pages/br-list-view/br-list-view.component';\nimport { BrSystemComparisonListViewComponent } from './business_review/system-comparison-pages/br-system-comparison-list-view/br-system-comparison-list-view.component';\nimport { BrTimelineViewComponent } from './business_review/timeline-pages/br-timeline-view/br-timeline-view.component';\nimport {DynamicDataTableComponent} from './business_review/dynamic-data-table/dynamic-data-table.component';\nimport {DdtLoaderComponent} from './business_review/ddt-loader/ddt-loader.component';\nimport {BrDetailComponentViewerComponent} from './business_review/br-detail-component-viewer/br-detail-component-viewer.component';\n\nconst routes: Routes = [\n { path: 'aoh', component: CtDashboardComponent, canActivate: [MsalGuard] },\n { path: 'aoh/account/:account', component: CtDashboardComponent, canActivate: [MsalGuard] },\n { path: 'alerts', component: AlertsDashboardComponent, canActivate: [MsalGuard] },\n { path: 'gsalerts', component: GsAlertsDashboardComponent, canActivate: [MsalGuard]},\n { path: '', component: DashboardComponent, canActivate: [MsalGuard] },\n { path: 'customerDashboard', component: CustomerComponent, canActivate: [MsalGuard] },\n { path: 'instrumentsDashboard', component: InstrumentsComponent, canActivate: [MsalGuard] },\n { path: 'ambassadorDashboard', component: AmbassadorComponent, canActivate: [MsalGuard] },\n { path: 'hsi', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'hsi/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'hotsheets', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'hotsheets/survey_comments/:customernumber/:country/:interviewdate', component: SurveyCommentDetailsComponent, canActivate: [MsalGuard] },\n { path: 'opencalls', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'cpyr', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'cpyr/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'servicecost', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'servicecost/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'alconnected', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'alconnected/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'alconnectivity', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'alconnectivity/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'hci', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'hci/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'sdfr', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'sdfr/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'ftfr', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'ftfr/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'uptime', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'uptime/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'uptime/details/customerdetails/:customerid/:customername/:country', component: UptimeCustomerDetailsComponent, canActivate: [MsalGuard] },\n { path: 'assay', component: Style4Component, canActivate: [MsalGuard] },\n { path: 'assay/customers/:customerid/:customername', component: Style4Component, canActivate: [MsalGuard] },\n { path: 'cpyp', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'cpyp/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'ticketrending', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'ticketrending/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'trt', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'trt/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'tsb', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'pm', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'customerNps', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'customerNps/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'customerNps/details/survey_comments/:customernumber/:country/:interviewdate', component: SurveyCommentDetailsComponent, canActivate: [MsalGuard] },\n { path: 'servicecosthours', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'servicecosthours/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'utilization', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'servicecontracts', component: ServiceContractsLevel2Component, canActivate: [MsalGuard] },\n { path: 'servicecontracts/entitlements/:customernumber/:serialnumber/:contractnumber', component: ServiceContractsLevel3Component, canActivate: [MsalGuard] },\n { path: 'servicecontracts/entitlements/terms/:customernumber/:serialnumber/:contractnumber/:entitlementid/:entitlementdesc', component: ServiceContractsLevel4Component, canActivate: [MsalGuard] },\n { path: 'utilization/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'CRLSummary', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'CRLSummary/details', component: Style3Component, canActivate: [MsalGuard] },\n { path: 'proactive', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'proactive/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'orders', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'orders/intermediate', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'orders/details/:customername/:ordernumber/:orderstatus', component: CustomerOrderDetailsComponent, canActivate: [MsalGuard] },\n { path: 'alwaysonuptime', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'alwaysonuptime/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'customerswithoutservicecontracts', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'customerswithoutservicecontracts/grid', component: PredictiveAlertsLevel2Component, canActivate: [MsalGuard] },\n { path: 'customerswithoutservicecontracts/griddetails/:countryCode/:customerID/:sn', component: PredictiveAlertsLevel3Component, canActivate: [MsalGuard] },\n { path: 'util_workload', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'util_workload/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'tickets_per_day', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'tickets_per_day/details', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'servicegrossmargin_customerSGM', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'servicegrossmargin_customerSGM/details', component: SGMDetailsComponent, canActivate: [MsalGuard] },\n { path: 'rnps', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'rnps/detail', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'rnps/detail/survey_comments/:score/:customer/:country/:interviewdate/:category', component: RnpsSurveyCommentDetailsComponent, canActivate: [MsalGuard] },\n { path: 'sales', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'sales/summary', component: SalesSummaryComponent, canActivate: [MsalGuard] },\n { path: 'sales/details/:customerid/:ln/:desc/:customername', component: SalesDetailsComponent, canActivate: [MsalGuard] },\n { path: 'rcs', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'rcs/summary', component: SalesSummaryComponent, canActivate: [MsalGuard] },\n { path: 'rcs/details/:customerid/:ln/:desc/:customername', component: SalesDetailsComponent, canActivate: [MsalGuard] },\n { path: 'compliance', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'compliance/details', component: SalesSummaryComponent, canActivate: [MsalGuard] },\n { path: 'amb_orders', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'amb_orders/intermediate', component: Style2Component, canActivate: [MsalGuard] },\n { path: 'amb_orders/details/:customername/:ordernumber/:orderstatus', component: CustomerOrderDetailsComponent, canActivate: [MsalGuard] },\n { path: 'amb_servicegrossmargin_customerSGM', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'amb_servicegrossmargin_customerSGM/details', component: SGMDetailsComponent, canActivate: [MsalGuard] },\n { path: 'amb_customerswithoutservicecontracts', component: Style1Component, canActivate: [MsalGuard] },\n { path: 'amb_customerswithoutservicecontracts/grid', component: PredictiveAlertsLevel2Component, canActivate: [MsalGuard] },\n { path: 'amb_customerswithoutservicecontracts/griddetails/:countryCode/:customerID/:sn', component: PredictiveAlertsLevel3Component, canActivate: [MsalGuard] },\n { path: 'businessReview', component: BrDashboardComponent, canActivate: [MsalGuard]},\n { path: 'businessReview/:devapitools', component: BrDashboardComponent, canActivate: [MsalGuard]},\n { path: 'brTemplateEditor', component: BrTemplateEditorComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/total_inbound_calls', component: BrExpandedChartViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/total_inbound_calls/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/total_inbound_calls/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/total_inbound_calls/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/pm_tickets/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/pm_tickets/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/pm_tickets/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/nps/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/nps/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/nps/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/alcm/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/alcm/list_view', component: DdtLoaderComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/alcm/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/calls_without_service_number/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/calls_without_service_number/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/calls_without_service_number/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/abandoned_calls/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/abandoned_calls/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/abandoned_calls/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/average_wait_time/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/average_wait_time/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/average_wait_time/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/service_level/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/service_level/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/service_level/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/ticket_errors/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/ticket_errors/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/ticket_errors/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/hard_stops/list_view', component: DdtLoaderComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/hard_stops/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/hard_stops/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/uptime/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/uptime/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/uptime/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/tsb/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/tsb/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/tsb/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/response_time/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/response_time/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/response_time/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/phn/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/phn/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/phn/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/instrument_test_counts/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/instrument_test_counts/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/instrument_test_counts/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/assay_test_counts/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/assay_test_counts/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/assay_test_counts/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/mttr/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/mttr/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/mttr/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n { path: 'businessReview/ticket_history/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/ticket_history/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/ticket_history/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n\n\n { path: 'businessReview/example_data/list_view', component: BrListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/example_data/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/example_data/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/tcr/list_view', component: DdtLoaderComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/tcr/system_comparison_view', component: BrSystemComparisonListViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/tcr/timeline_view', component: BrTimelineViewComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/test/example_ddt', component: DdtLoaderComponent, canActivate: [MsalGuard] },\n { path: 'businessReview/test/detail', component: BrDetailComponentViewerComponent, canActivate: [MsalGuard] }\n];\n\n\n@NgModule({\n imports: [RouterModule.forRoot(routes)],\n exports: [RouterModule]\n})\nexport class AppRoutingModule { }\n","import { Component, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n selector: 'app-br-detail-component-viewer',\n templateUrl: './br-detail-component-viewer.component.html',\n styleUrls: ['./br-detail-component-viewer.component.scss']\n})\nexport class BrDetailComponentViewerComponent implements OnInit {\n component;\n apiUrl;\n\n constructor(\n private route: ActivatedRoute\n ) { }\n\n ngOnInit(): void {\n this.route.queryParams\n .subscribe(params => {\n if (params.hasOwnProperty('component')) {\n this.component = params.component;\n }\n if (params.hasOwnProperty('apiUrl')) {\n this.apiUrl = params.apiUrl;\n }\n }\n );\n }\n}\n","/**\n * @license Angular v9.0.7\n * (c) 2010-2020 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ɵAnimationGroupPlayer, NoopAnimationPlayer, AUTO_STYLE, ɵPRE_STYLE, sequence, style } from '@angular/animations';\nimport { Injectable } from '@angular/core';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/shared.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @return {?}\n */\nimport * as ɵngcc0 from '@angular/core';\nfunction isBrowser() {\n return (typeof window !== 'undefined' && typeof window.document !== 'undefined');\n}\n/**\n * @return {?}\n */\nfunction isNode() {\n // Checking only for `process` isn't enough to identify whether or not we're in a Node\n // environment, because Webpack by default will polyfill the `process`. While we can discern\n // that Webpack polyfilled it by looking at `process.browser`, it's very Webpack-specific and\n // might not be future-proof. Instead we look at the stringified version of `process` which\n // is `[object process]` in Node and `[object Object]` when polyfilled.\n return typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction optimizeGroupPlayer(players) {\n switch (players.length) {\n case 0:\n return new NoopAnimationPlayer();\n case 1:\n return players[0];\n default:\n return new ɵAnimationGroupPlayer(players);\n }\n}\n/**\n * @param {?} driver\n * @param {?} normalizer\n * @param {?} element\n * @param {?} keyframes\n * @param {?=} preStyles\n * @param {?=} postStyles\n * @return {?}\n */\nfunction normalizeKeyframes(driver, normalizer, element, keyframes, preStyles = {}, postStyles = {}) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const normalizedKeyframes = [];\n /** @type {?} */\n let previousOffset = -1;\n /** @type {?} */\n let previousKeyframe = null;\n keyframes.forEach((/**\n * @param {?} kf\n * @return {?}\n */\n kf => {\n /** @type {?} */\n const offset = (/** @type {?} */ (kf['offset']));\n /** @type {?} */\n const isSameOffset = offset == previousOffset;\n /** @type {?} */\n const normalizedKeyframe = (isSameOffset && previousKeyframe) || {};\n Object.keys(kf).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n let normalizedProp = prop;\n /** @type {?} */\n let normalizedValue = kf[prop];\n if (prop !== 'offset') {\n normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n switch (normalizedValue) {\n case ɵPRE_STYLE:\n normalizedValue = preStyles[prop];\n break;\n case AUTO_STYLE:\n normalizedValue = postStyles[prop];\n break;\n default:\n normalizedValue =\n normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n break;\n }\n }\n normalizedKeyframe[normalizedProp] = normalizedValue;\n }));\n if (!isSameOffset) {\n normalizedKeyframes.push(normalizedKeyframe);\n }\n previousKeyframe = normalizedKeyframe;\n previousOffset = offset;\n }));\n if (errors.length) {\n /** @type {?} */\n const LINE_START = '\\n - ';\n throw new Error(`Unable to animate due to the following errors:${LINE_START}${errors.join(LINE_START)}`);\n }\n return normalizedKeyframes;\n}\n/**\n * @param {?} player\n * @param {?} eventName\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\nfunction listenOnPlayer(player, eventName, event, callback) {\n switch (eventName) {\n case 'start':\n player.onStart((/**\n * @return {?}\n */\n () => callback(event && copyAnimationEvent(event, 'start', player))));\n break;\n case 'done':\n player.onDone((/**\n * @return {?}\n */\n () => callback(event && copyAnimationEvent(event, 'done', player))));\n break;\n case 'destroy':\n player.onDestroy((/**\n * @return {?}\n */\n () => callback(event && copyAnimationEvent(event, 'destroy', player))));\n break;\n }\n}\n/**\n * @param {?} e\n * @param {?} phaseName\n * @param {?} player\n * @return {?}\n */\nfunction copyAnimationEvent(e, phaseName, player) {\n /** @type {?} */\n const totalTime = player.totalTime;\n /** @type {?} */\n const disabled = ((/** @type {?} */ (player))).disabled ? true : false;\n /** @type {?} */\n const event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime, disabled);\n /** @type {?} */\n const data = ((/** @type {?} */ (e)))['_data'];\n if (data != null) {\n ((/** @type {?} */ (event)))['_data'] = data;\n }\n return event;\n}\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?=} phaseName\n * @param {?=} totalTime\n * @param {?=} disabled\n * @return {?}\n */\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName = '', totalTime = 0, disabled) {\n return { element, triggerName, fromState, toState, phaseName, totalTime, disabled: !!disabled };\n}\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\nfunction getOrSetAsInMap(map, key, defaultValue) {\n /** @type {?} */\n let value;\n if (map instanceof Map) {\n value = map.get(key);\n if (!value) {\n map.set(key, value = defaultValue);\n }\n }\n else {\n value = map[key];\n if (!value) {\n value = map[key] = defaultValue;\n }\n }\n return value;\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction parseTimelineCommand(command) {\n /** @type {?} */\n const separatorPos = command.indexOf(':');\n /** @type {?} */\n const id = command.substring(1, separatorPos);\n /** @type {?} */\n const action = command.substr(separatorPos + 1);\n return [id, action];\n}\n/** @type {?} */\nlet _contains = (/**\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n(elm1, elm2) => false);\nconst ɵ0 = _contains;\n/** @type {?} */\nlet _matches = (/**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n(element, selector) => false);\nconst ɵ1 = _matches;\n/** @type {?} */\nlet _query = (/**\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n(element, selector, multi) => {\n return [];\n});\nconst ɵ2 = _query;\n// Define utility methods for browsers and platform-server(domino) where Element\n// and utility methods exist.\n/** @type {?} */\nconst _isNode = isNode();\nif (_isNode || typeof Element !== 'undefined') {\n // this is well supported in all browsers\n _contains = (/**\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n (elm1, elm2) => { return (/** @type {?} */ (elm1.contains(elm2))); });\n _matches = ((/**\n * @return {?}\n */\n () => {\n if (_isNode || Element.prototype.matches) {\n return (/**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n (element, selector) => element.matches(selector));\n }\n else {\n /** @type {?} */\n const proto = (/** @type {?} */ (Element.prototype));\n /** @type {?} */\n const fn = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||\n proto.oMatchesSelector || proto.webkitMatchesSelector;\n if (fn) {\n return (/**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n (element, selector) => fn.apply(element, [selector]));\n }\n else {\n return _matches;\n }\n }\n }))();\n _query = (/**\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n (element, selector, multi) => {\n /** @type {?} */\n let results = [];\n if (multi) {\n results.push(...element.querySelectorAll(selector));\n }\n else {\n /** @type {?} */\n const elm = element.querySelector(selector);\n if (elm) {\n results.push(elm);\n }\n }\n return results;\n });\n}\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction containsVendorPrefix(prop) {\n // Webkit is the only real popular vendor prefix nowadays\n // cc: http://shouldiprefix.com/\n return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\n/** @type {?} */\nlet _CACHED_BODY = null;\n/** @type {?} */\nlet _IS_WEBKIT = false;\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction validateStyleProperty(prop) {\n if (!_CACHED_BODY) {\n _CACHED_BODY = getBodyNode() || {};\n _IS_WEBKIT = (/** @type {?} */ (_CACHED_BODY)).style ? ('WebkitAppearance' in (/** @type {?} */ (_CACHED_BODY)).style) : false;\n }\n /** @type {?} */\n let result = true;\n if ((/** @type {?} */ (_CACHED_BODY)).style && !containsVendorPrefix(prop)) {\n result = prop in (/** @type {?} */ (_CACHED_BODY)).style;\n if (!result && _IS_WEBKIT) {\n /** @type {?} */\n const camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.substr(1);\n result = camelProp in (/** @type {?} */ (_CACHED_BODY)).style;\n }\n }\n return result;\n}\n/**\n * @return {?}\n */\nfunction getBodyNode() {\n if (typeof document != 'undefined') {\n return document.body;\n }\n return null;\n}\n/** @type {?} */\nconst matchesElement = _matches;\n/** @type {?} */\nconst containsElement = _contains;\n/** @type {?} */\nconst invokeQuery = _query;\n/**\n * @param {?} object\n * @return {?}\n */\nfunction hypenatePropsObject(object) {\n /** @type {?} */\n const newObj = {};\n Object.keys(object).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const newProp = prop.replace(/([a-z])([A-Z])/g, '$1-$2');\n newObj[newProp] = object[prop];\n }));\n return newObj;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/animation_driver.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * \\@publicApi\n */\nclass NoopAnimationDriver {\n /**\n * @param {?} prop\n * @return {?}\n */\n validateStyleProperty(prop) { return validateStyleProperty(prop); }\n /**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n matchesElement(element, selector) {\n return matchesElement(element, selector);\n }\n /**\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n containsElement(elm1, elm2) { return containsElement(elm1, elm2); }\n /**\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n /**\n * @param {?} element\n * @param {?} prop\n * @param {?=} defaultValue\n * @return {?}\n */\n computeStyle(element, prop, defaultValue) {\n return defaultValue || '';\n }\n /**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @param {?=} previousPlayers\n * @param {?=} scrubberAccessRequested\n * @return {?}\n */\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n return new NoopAnimationPlayer(duration, delay);\n }\n}\nNoopAnimationDriver.ɵfac = function NoopAnimationDriver_Factory(t) { return new (t || NoopAnimationDriver)(); };\nNoopAnimationDriver.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: NoopAnimationDriver, factory: NoopAnimationDriver.ɵfac });\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NoopAnimationDriver, [{\n type: Injectable\n }], null, null); })();\n/**\n * \\@publicApi\n * @abstract\n */\nclass AnimationDriver {\n}\nAnimationDriver.NOOP = new NoopAnimationDriver();\nif (false) {\n /** @type {?} */\n AnimationDriver.NOOP;\n /**\n * @abstract\n * @param {?} prop\n * @return {?}\n */\n AnimationDriver.prototype.validateStyleProperty = function (prop) { };\n /**\n * @abstract\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n AnimationDriver.prototype.matchesElement = function (element, selector) { };\n /**\n * @abstract\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n AnimationDriver.prototype.containsElement = function (elm1, elm2) { };\n /**\n * @abstract\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n AnimationDriver.prototype.query = function (element, selector, multi) { };\n /**\n * @abstract\n * @param {?} element\n * @param {?} prop\n * @param {?=} defaultValue\n * @return {?}\n */\n AnimationDriver.prototype.computeStyle = function (element, prop, defaultValue) { };\n /**\n * @abstract\n * @param {?} element\n * @param {?} keyframes\n * @param {?} duration\n * @param {?} delay\n * @param {?=} easing\n * @param {?=} previousPlayers\n * @param {?=} scrubberAccessRequested\n * @return {?}\n */\n AnimationDriver.prototype.animate = function (element, keyframes, duration, delay, easing, previousPlayers, scrubberAccessRequested) { };\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/util.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst ONE_SECOND = 1000;\n/** @type {?} */\nconst SUBSTITUTION_EXPR_START = '{{';\n/** @type {?} */\nconst SUBSTITUTION_EXPR_END = '}}';\n/** @type {?} */\nconst ENTER_CLASSNAME = 'ng-enter';\n/** @type {?} */\nconst LEAVE_CLASSNAME = 'ng-leave';\n/** @type {?} */\nconst ENTER_SELECTOR = '.ng-enter';\n/** @type {?} */\nconst LEAVE_SELECTOR = '.ng-leave';\n/** @type {?} */\nconst NG_TRIGGER_CLASSNAME = 'ng-trigger';\n/** @type {?} */\nconst NG_TRIGGER_SELECTOR = '.ng-trigger';\n/** @type {?} */\nconst NG_ANIMATING_CLASSNAME = 'ng-animating';\n/** @type {?} */\nconst NG_ANIMATING_SELECTOR = '.ng-animating';\n/**\n * @param {?} value\n * @return {?}\n */\nfunction resolveTimingValue(value) {\n if (typeof value == 'number')\n return value;\n /** @type {?} */\n const matches = value.match(/^(-?[\\.\\d]+)(m?s)/);\n if (!matches || matches.length < 2)\n return 0;\n return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\n/**\n * @param {?} value\n * @param {?} unit\n * @return {?}\n */\nfunction _convertTimeValueToMS(value, unit) {\n switch (unit) {\n case 's':\n return value * ONE_SECOND;\n default: // ms or something else\n return value;\n }\n}\n/**\n * @param {?} timings\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n return timings.hasOwnProperty('duration') ?\n (/** @type {?} */ (timings)) :\n parseTimeExpression((/** @type {?} */ (timings)), errors, allowNegativeValues);\n}\n/**\n * @param {?} exp\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n /** @type {?} */\n const regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n /** @type {?} */\n let duration;\n /** @type {?} */\n let delay = 0;\n /** @type {?} */\n let easing = '';\n if (typeof exp === 'string') {\n /** @type {?} */\n const matches = exp.match(regex);\n if (matches === null) {\n errors.push(`The provided timing value \"${exp}\" is invalid.`);\n return { duration: 0, delay: 0, easing: '' };\n }\n duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n /** @type {?} */\n const delayMatch = matches[3];\n if (delayMatch != null) {\n delay = _convertTimeValueToMS(parseFloat(delayMatch), matches[4]);\n }\n /** @type {?} */\n const easingVal = matches[5];\n if (easingVal) {\n easing = easingVal;\n }\n }\n else {\n duration = exp;\n }\n if (!allowNegativeValues) {\n /** @type {?} */\n let containsErrors = false;\n /** @type {?} */\n let startIndex = errors.length;\n if (duration < 0) {\n errors.push(`Duration values below 0 are not allowed for this animation step.`);\n containsErrors = true;\n }\n if (delay < 0) {\n errors.push(`Delay values below 0 are not allowed for this animation step.`);\n containsErrors = true;\n }\n if (containsErrors) {\n errors.splice(startIndex, 0, `The provided timing value \"${exp}\" is invalid.`);\n }\n }\n return { duration, delay, easing };\n}\n/**\n * @param {?} obj\n * @param {?=} destination\n * @return {?}\n */\nfunction copyObj(obj, destination = {}) {\n Object.keys(obj).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => { destination[prop] = obj[prop]; }));\n return destination;\n}\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction normalizeStyles(styles) {\n /** @type {?} */\n const normalizedStyles = {};\n if (Array.isArray(styles)) {\n styles.forEach((/**\n * @param {?} data\n * @return {?}\n */\n data => copyStyles(data, false, normalizedStyles)));\n }\n else {\n copyStyles(styles, false, normalizedStyles);\n }\n return normalizedStyles;\n}\n/**\n * @param {?} styles\n * @param {?} readPrototype\n * @param {?=} destination\n * @return {?}\n */\nfunction copyStyles(styles, readPrototype, destination = {}) {\n if (readPrototype) {\n // we make use of a for-in loop so that the\n // prototypically inherited properties are\n // revealed from the backFill map\n for (let prop in styles) {\n destination[prop] = styles[prop];\n }\n }\n else {\n copyObj(styles, destination);\n }\n return destination;\n}\n/**\n * @param {?} element\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction getStyleAttributeString(element, key, value) {\n // Return the key-value pair string to be added to the style attribute for the\n // given CSS style key.\n if (value) {\n return key + ':' + value + ';';\n }\n else {\n return '';\n }\n}\n/**\n * @param {?} element\n * @return {?}\n */\nfunction writeStyleAttribute(element) {\n // Read the style property of the element and manually reflect it to the\n // style attribute. This is needed because Domino on platform-server doesn't\n // understand the full set of allowed CSS properties and doesn't reflect some\n // of them automatically.\n /** @type {?} */\n let styleAttrValue = '';\n for (let i = 0; i < element.style.length; i++) {\n /** @type {?} */\n const key = element.style.item(i);\n styleAttrValue += getStyleAttributeString(element, key, element.style.getPropertyValue(key));\n }\n for (const key in element.style) {\n // Skip internal Domino properties that don't need to be reflected.\n if (!element.style.hasOwnProperty(key) || key.startsWith('_')) {\n continue;\n }\n /** @type {?} */\n const dashKey = camelCaseToDashCase(key);\n styleAttrValue += getStyleAttributeString(element, dashKey, element.style[key]);\n }\n element.setAttribute('style', styleAttrValue);\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @param {?=} formerStyles\n * @return {?}\n */\nfunction setStyles(element, styles, formerStyles) {\n if (element['style']) {\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const camelProp = dashCaseToCamelCase(prop);\n if (formerStyles && !formerStyles.hasOwnProperty(prop)) {\n formerStyles[prop] = element.style[camelProp];\n }\n element.style[camelProp] = styles[prop];\n }));\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\nfunction eraseStyles(element, styles) {\n if (element['style']) {\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const camelProp = dashCaseToCamelCase(prop);\n element.style[camelProp] = '';\n }));\n // On the server set the 'style' attribute since it's not automatically reflected.\n if (isNode()) {\n writeStyleAttribute(element);\n }\n }\n}\n/**\n * @param {?} steps\n * @return {?}\n */\nfunction normalizeAnimationEntry(steps) {\n if (Array.isArray(steps)) {\n if (steps.length == 1)\n return steps[0];\n return sequence(steps);\n }\n return (/** @type {?} */ (steps));\n}\n/**\n * @param {?} value\n * @param {?} options\n * @param {?} errors\n * @return {?}\n */\nfunction validateStyleParams(value, options, errors) {\n /** @type {?} */\n const params = options.params || {};\n /** @type {?} */\n const matches = extractStyleParams(value);\n if (matches.length) {\n matches.forEach((/**\n * @param {?} varName\n * @return {?}\n */\n varName => {\n if (!params.hasOwnProperty(varName)) {\n errors.push(`Unable to resolve the local animation param ${varName} in the given list of values`);\n }\n }));\n }\n}\n/** @type {?} */\nconst PARAM_REGEX = new RegExp(`${SUBSTITUTION_EXPR_START}\\\\s*(.+?)\\\\s*${SUBSTITUTION_EXPR_END}`, 'g');\n/**\n * @param {?} value\n * @return {?}\n */\nfunction extractStyleParams(value) {\n /** @type {?} */\n let params = [];\n if (typeof value === 'string') {\n /** @type {?} */\n let match;\n while (match = PARAM_REGEX.exec(value)) {\n params.push((/** @type {?} */ (match[1])));\n }\n PARAM_REGEX.lastIndex = 0;\n }\n return params;\n}\n/**\n * @param {?} value\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\nfunction interpolateParams(value, params, errors) {\n /** @type {?} */\n const original = value.toString();\n /** @type {?} */\n const str = original.replace(PARAM_REGEX, (/**\n * @param {?} _\n * @param {?} varName\n * @return {?}\n */\n (_, varName) => {\n /** @type {?} */\n let localVal = params[varName];\n // this means that the value was never overridden by the data passed in by the user\n if (!params.hasOwnProperty(varName)) {\n errors.push(`Please provide a value for the animation param ${varName}`);\n localVal = '';\n }\n return localVal.toString();\n }));\n // we do this to assert that numeric values stay as they are\n return str == original ? value : str;\n}\n/**\n * @param {?} iterator\n * @return {?}\n */\nfunction iteratorToArray(iterator) {\n /** @type {?} */\n const arr = [];\n /** @type {?} */\n let item = iterator.next();\n while (!item.done) {\n arr.push(item.value);\n item = iterator.next();\n }\n return arr;\n}\n/**\n * @param {?} source\n * @param {?} destination\n * @return {?}\n */\nfunction mergeAnimationOptions(source, destination) {\n if (source.params) {\n /** @type {?} */\n const p0 = source.params;\n if (!destination.params) {\n destination.params = {};\n }\n /** @type {?} */\n const p1 = destination.params;\n Object.keys(p0).forEach((/**\n * @param {?} param\n * @return {?}\n */\n param => {\n if (!p1.hasOwnProperty(param)) {\n p1[param] = p0[param];\n }\n }));\n }\n return destination;\n}\n/** @type {?} */\nconst DASH_CASE_REGEXP = /-+([a-z0-9])/g;\n/**\n * @param {?} input\n * @return {?}\n */\nfunction dashCaseToCamelCase(input) {\n return input.replace(DASH_CASE_REGEXP, (/**\n * @param {...?} m\n * @return {?}\n */\n (...m) => m[1].toUpperCase()));\n}\n/**\n * @param {?} input\n * @return {?}\n */\nfunction camelCaseToDashCase(input) {\n return input.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @return {?}\n */\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n return duration === 0 || delay === 0;\n}\n/**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} previousStyles\n * @return {?}\n */\nfunction balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles) {\n /** @type {?} */\n const previousStyleProps = Object.keys(previousStyles);\n if (previousStyleProps.length && keyframes.length) {\n /** @type {?} */\n let startingKeyframe = keyframes[0];\n /** @type {?} */\n let missingStyleProps = [];\n previousStyleProps.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (!startingKeyframe.hasOwnProperty(prop)) {\n missingStyleProps.push(prop);\n }\n startingKeyframe[prop] = previousStyles[prop];\n }));\n if (missingStyleProps.length) {\n // tslint:disable-next-line\n for (var i = 1; i < keyframes.length; i++) {\n /** @type {?} */\n let kf = keyframes[i];\n missingStyleProps.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n function (prop) { kf[prop] = computeStyle(element, prop); }));\n }\n }\n }\n return keyframes;\n}\n/**\n * @param {?} visitor\n * @param {?} node\n * @param {?} context\n * @return {?}\n */\nfunction visitDslNode(visitor, node, context) {\n switch (node.type) {\n case 7 /* Trigger */:\n return visitor.visitTrigger(node, context);\n case 0 /* State */:\n return visitor.visitState(node, context);\n case 1 /* Transition */:\n return visitor.visitTransition(node, context);\n case 2 /* Sequence */:\n return visitor.visitSequence(node, context);\n case 3 /* Group */:\n return visitor.visitGroup(node, context);\n case 4 /* Animate */:\n return visitor.visitAnimate(node, context);\n case 5 /* Keyframes */:\n return visitor.visitKeyframes(node, context);\n case 6 /* Style */:\n return visitor.visitStyle(node, context);\n case 8 /* Reference */:\n return visitor.visitReference(node, context);\n case 9 /* AnimateChild */:\n return visitor.visitAnimateChild(node, context);\n case 10 /* AnimateRef */:\n return visitor.visitAnimateRef(node, context);\n case 11 /* Query */:\n return visitor.visitQuery(node, context);\n case 12 /* Stagger */:\n return visitor.visitStagger(node, context);\n default:\n throw new Error(`Unable to resolve animation metadata node #${node.type}`);\n }\n}\n/**\n * @param {?} element\n * @param {?} prop\n * @return {?}\n */\nfunction computeStyle(element, prop) {\n return ((/** @type {?} */ (window.getComputedStyle(element))))[prop];\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_transition_expr.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n * @type {?}\n */\nconst ANY_STATE = '*';\n/**\n * @param {?} transitionValue\n * @param {?} errors\n * @return {?}\n */\nfunction parseTransitionExpr(transitionValue, errors) {\n /** @type {?} */\n const expressions = [];\n if (typeof transitionValue == 'string') {\n transitionValue.split(/\\s*,\\s*/).forEach((/**\n * @param {?} str\n * @return {?}\n */\n str => parseInnerTransitionStr(str, expressions, errors)));\n }\n else {\n expressions.push((/** @type {?} */ (transitionValue)));\n }\n return expressions;\n}\n/**\n * @param {?} eventStr\n * @param {?} expressions\n * @param {?} errors\n * @return {?}\n */\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n if (eventStr[0] == ':') {\n /** @type {?} */\n const result = parseAnimationAlias(eventStr, errors);\n if (typeof result == 'function') {\n expressions.push(result);\n return;\n }\n eventStr = result;\n }\n /** @type {?} */\n const match = eventStr.match(/^(\\*|[-\\w]+)\\s*()\\s*(\\*|[-\\w]+)$/);\n if (match == null || match.length < 4) {\n errors.push(`The provided transition expression \"${eventStr}\" is not supported`);\n return expressions;\n }\n /** @type {?} */\n const fromState = match[1];\n /** @type {?} */\n const separator = match[2];\n /** @type {?} */\n const toState = match[3];\n expressions.push(makeLambdaFromStates(fromState, toState));\n /** @type {?} */\n const isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n if (separator[0] == '<' && !isFullAnyStateExpr) {\n expressions.push(makeLambdaFromStates(toState, fromState));\n }\n}\n/**\n * @param {?} alias\n * @param {?} errors\n * @return {?}\n */\nfunction parseAnimationAlias(alias, errors) {\n switch (alias) {\n case ':enter':\n return 'void => *';\n case ':leave':\n return '* => void';\n case ':increment':\n return (/**\n * @param {?} fromState\n * @param {?} toState\n * @return {?}\n */\n (fromState, toState) => parseFloat(toState) > parseFloat(fromState));\n case ':decrement':\n return (/**\n * @param {?} fromState\n * @param {?} toState\n * @return {?}\n */\n (fromState, toState) => parseFloat(toState) < parseFloat(fromState));\n default:\n errors.push(`The transition alias value \"${alias}\" is not supported`);\n return '* => *';\n }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\n/** @type {?} */\nconst TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\n/** @type {?} */\nconst FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\n/**\n * @param {?} lhs\n * @param {?} rhs\n * @return {?}\n */\nfunction makeLambdaFromStates(lhs, rhs) {\n /** @type {?} */\n const LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n /** @type {?} */\n const RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n return (/**\n * @param {?} fromState\n * @param {?} toState\n * @return {?}\n */\n (fromState, toState) => {\n /** @type {?} */\n let lhsMatch = lhs == ANY_STATE || lhs == fromState;\n /** @type {?} */\n let rhsMatch = rhs == ANY_STATE || rhs == toState;\n if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n }\n if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n }\n return lhsMatch && rhsMatch;\n });\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_ast_builder.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst SELF_TOKEN = ':self';\n/** @type {?} */\nconst SELF_TOKEN_REGEX = new RegExp(`\\s*${SELF_TOKEN}\\s*,?`, 'g');\n/*\n * [Validation]\n * The visitor code below will traverse the animation AST generated by the animation verb functions\n * (the output is a tree of objects) and attempt to perform a series of validations on the data. The\n * following corner-cases will be validated:\n *\n * 1. Overlap of animations\n * Given that a CSS property cannot be animated in more than one place at the same time, it's\n * important that this behavior is detected and validated. The way in which this occurs is that\n * each time a style property is examined, a string-map containing the property will be updated with\n * the start and end times for when the property is used within an animation step.\n *\n * If there are two or more parallel animations that are currently running (these are invoked by the\n * group()) on the same element then the validator will throw an error. Since the start/end timing\n * values are collected for each property then if the current animation step is animating the same\n * property and its timing values fall anywhere into the window of time that the property is\n * currently being animated within then this is what causes an error.\n *\n * 2. Timing values\n * The validator will validate to see if a timing value of `duration delay easing` or\n * `durationNumber` is valid or not.\n *\n * (note that upon validation the code below will replace the timing data with an object containing\n * {duration,delay,easing}.\n *\n * 3. Offset Validation\n * Each of the style() calls are allowed to have an offset value when placed inside of keyframes().\n * Offsets within keyframes() are considered valid when:\n *\n * - No offsets are used at all\n * - Each style() entry contains an offset value\n * - Each offset is between 0 and 1\n * - Each offset is greater to or equal than the previous one\n *\n * Otherwise an error will be thrown.\n */\n/**\n * @param {?} driver\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\nfunction buildAnimationAst(driver, metadata, errors) {\n return new AnimationAstBuilderVisitor(driver).build(metadata, errors);\n}\n/** @type {?} */\nconst ROOT_SELECTOR = '';\nclass AnimationAstBuilderVisitor {\n /**\n * @param {?} _driver\n */\n constructor(_driver) {\n this._driver = _driver;\n }\n /**\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\n build(metadata, errors) {\n /** @type {?} */\n const context = new AnimationAstBuilderContext(errors);\n this._resetContextStyleTimingState(context);\n return (/** @type {?} */ (visitDslNode(this, normalizeAnimationEntry(metadata), context)));\n }\n /**\n * @private\n * @param {?} context\n * @return {?}\n */\n _resetContextStyleTimingState(context) {\n context.currentQuerySelector = ROOT_SELECTOR;\n context.collectedStyles = {};\n context.collectedStyles[ROOT_SELECTOR] = {};\n context.currentTime = 0;\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitTrigger(metadata, context) {\n /** @type {?} */\n let queryCount = context.queryCount = 0;\n /** @type {?} */\n let depCount = context.depCount = 0;\n /** @type {?} */\n const states = [];\n /** @type {?} */\n const transitions = [];\n if (metadata.name.charAt(0) == '@') {\n context.errors.push('animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\\'@foo\\', [...]))');\n }\n metadata.definitions.forEach((/**\n * @param {?} def\n * @return {?}\n */\n def => {\n this._resetContextStyleTimingState(context);\n if (def.type == 0 /* State */) {\n /** @type {?} */\n const stateDef = (/** @type {?} */ (def));\n /** @type {?} */\n const name = stateDef.name;\n name.toString().split(/\\s*,\\s*/).forEach((/**\n * @param {?} n\n * @return {?}\n */\n n => {\n stateDef.name = n;\n states.push(this.visitState(stateDef, context));\n }));\n stateDef.name = name;\n }\n else if (def.type == 1 /* Transition */) {\n /** @type {?} */\n const transition = this.visitTransition((/** @type {?} */ (def)), context);\n queryCount += transition.queryCount;\n depCount += transition.depCount;\n transitions.push(transition);\n }\n else {\n context.errors.push('only state() and transition() definitions can sit inside of a trigger()');\n }\n }));\n return {\n type: 7 /* Trigger */,\n name: metadata.name, states, transitions, queryCount, depCount,\n options: null\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitState(metadata, context) {\n /** @type {?} */\n const styleAst = this.visitStyle(metadata.styles, context);\n /** @type {?} */\n const astParams = (metadata.options && metadata.options.params) || null;\n if (styleAst.containsDynamicStyles) {\n /** @type {?} */\n const missingSubs = new Set();\n /** @type {?} */\n const params = astParams || {};\n styleAst.styles.forEach((/**\n * @param {?} value\n * @return {?}\n */\n value => {\n if (isObject(value)) {\n /** @type {?} */\n const stylesObj = (/** @type {?} */ (value));\n Object.keys(stylesObj).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n extractStyleParams(stylesObj[prop]).forEach((/**\n * @param {?} sub\n * @return {?}\n */\n sub => {\n if (!params.hasOwnProperty(sub)) {\n missingSubs.add(sub);\n }\n }));\n }));\n }\n }));\n if (missingSubs.size) {\n /** @type {?} */\n const missingSubsArr = iteratorToArray(missingSubs.values());\n context.errors.push(`state(\"${metadata.name}\", ...) must define default values for all the following style substitutions: ${missingSubsArr.join(', ')}`);\n }\n }\n return {\n type: 0 /* State */,\n name: metadata.name,\n style: styleAst,\n options: astParams ? { params: astParams } : null\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitTransition(metadata, context) {\n context.queryCount = 0;\n context.depCount = 0;\n /** @type {?} */\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n /** @type {?} */\n const matchers = parseTransitionExpr(metadata.expr, context.errors);\n return {\n type: 1 /* Transition */,\n matchers,\n animation,\n queryCount: context.queryCount,\n depCount: context.depCount,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitSequence(metadata, context) {\n return {\n type: 2 /* Sequence */,\n steps: metadata.steps.map((/**\n * @param {?} s\n * @return {?}\n */\n s => visitDslNode(this, s, context))),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitGroup(metadata, context) {\n /** @type {?} */\n const currentTime = context.currentTime;\n /** @type {?} */\n let furthestTime = 0;\n /** @type {?} */\n const steps = metadata.steps.map((/**\n * @param {?} step\n * @return {?}\n */\n step => {\n context.currentTime = currentTime;\n /** @type {?} */\n const innerAst = visitDslNode(this, step, context);\n furthestTime = Math.max(furthestTime, context.currentTime);\n return innerAst;\n }));\n context.currentTime = furthestTime;\n return {\n type: 3 /* Group */,\n steps,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitAnimate(metadata, context) {\n /** @type {?} */\n const timingAst = constructTimingAst(metadata.timings, context.errors);\n context.currentAnimateTimings = timingAst;\n /** @type {?} */\n let styleAst;\n /** @type {?} */\n let styleMetadata = metadata.styles ? metadata.styles : style({});\n if (styleMetadata.type == 5 /* Keyframes */) {\n styleAst = this.visitKeyframes((/** @type {?} */ (styleMetadata)), context);\n }\n else {\n /** @type {?} */\n let styleMetadata = (/** @type {?} */ (metadata.styles));\n /** @type {?} */\n let isEmpty = false;\n if (!styleMetadata) {\n isEmpty = true;\n /** @type {?} */\n const newStyleData = {};\n if (timingAst.easing) {\n newStyleData['easing'] = timingAst.easing;\n }\n styleMetadata = style(newStyleData);\n }\n context.currentTime += timingAst.duration + timingAst.delay;\n /** @type {?} */\n const _styleAst = this.visitStyle(styleMetadata, context);\n _styleAst.isEmptyStep = isEmpty;\n styleAst = _styleAst;\n }\n context.currentAnimateTimings = null;\n return {\n type: 4 /* Animate */,\n timings: timingAst,\n style: styleAst,\n options: null\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitStyle(metadata, context) {\n /** @type {?} */\n const ast = this._makeStyleAst(metadata, context);\n this._validateStyleAst(ast, context);\n return ast;\n }\n /**\n * @private\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n _makeStyleAst(metadata, context) {\n /** @type {?} */\n const styles = [];\n if (Array.isArray(metadata.styles)) {\n ((/** @type {?} */ (metadata.styles))).forEach((/**\n * @param {?} styleTuple\n * @return {?}\n */\n styleTuple => {\n if (typeof styleTuple == 'string') {\n if (styleTuple == AUTO_STYLE) {\n styles.push(styleTuple);\n }\n else {\n context.errors.push(`The provided style string value ${styleTuple} is not allowed.`);\n }\n }\n else {\n styles.push(styleTuple);\n }\n }));\n }\n else {\n styles.push(metadata.styles);\n }\n /** @type {?} */\n let containsDynamicStyles = false;\n /** @type {?} */\n let collectedEasing = null;\n styles.forEach((/**\n * @param {?} styleData\n * @return {?}\n */\n styleData => {\n if (isObject(styleData)) {\n /** @type {?} */\n const styleMap = (/** @type {?} */ (styleData));\n /** @type {?} */\n const easing = styleMap['easing'];\n if (easing) {\n collectedEasing = (/** @type {?} */ (easing));\n delete styleMap['easing'];\n }\n if (!containsDynamicStyles) {\n for (let prop in styleMap) {\n /** @type {?} */\n const value = styleMap[prop];\n if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n containsDynamicStyles = true;\n break;\n }\n }\n }\n }\n }));\n return {\n type: 6 /* Style */,\n styles,\n easing: collectedEasing,\n offset: metadata.offset, containsDynamicStyles,\n options: null\n };\n }\n /**\n * @private\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n _validateStyleAst(ast, context) {\n /** @type {?} */\n const timings = context.currentAnimateTimings;\n /** @type {?} */\n let endTime = context.currentTime;\n /** @type {?} */\n let startTime = context.currentTime;\n if (timings && startTime > 0) {\n startTime -= timings.duration + timings.delay;\n }\n ast.styles.forEach((/**\n * @param {?} tuple\n * @return {?}\n */\n tuple => {\n if (typeof tuple == 'string')\n return;\n Object.keys(tuple).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (!this._driver.validateStyleProperty(prop)) {\n context.errors.push(`The provided animation property \"${prop}\" is not a supported CSS property for animations`);\n return;\n }\n /** @type {?} */\n const collectedStyles = context.collectedStyles[(/** @type {?} */ (context.currentQuerySelector))];\n /** @type {?} */\n const collectedEntry = collectedStyles[prop];\n /** @type {?} */\n let updateCollectedStyle = true;\n if (collectedEntry) {\n if (startTime != endTime && startTime >= collectedEntry.startTime &&\n endTime <= collectedEntry.endTime) {\n context.errors.push(`The CSS property \"${prop}\" that exists between the times of \"${collectedEntry.startTime}ms\" and \"${collectedEntry.endTime}ms\" is also being animated in a parallel animation between the times of \"${startTime}ms\" and \"${endTime}ms\"`);\n updateCollectedStyle = false;\n }\n // we always choose the smaller start time value since we\n // want to have a record of the entire animation window where\n // the style property is being animated in between\n startTime = collectedEntry.startTime;\n }\n if (updateCollectedStyle) {\n collectedStyles[prop] = { startTime, endTime };\n }\n if (context.options) {\n validateStyleParams(tuple[prop], context.options, context.errors);\n }\n }));\n }));\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitKeyframes(metadata, context) {\n /** @type {?} */\n const ast = { type: 5 /* Keyframes */, styles: [], options: null };\n if (!context.currentAnimateTimings) {\n context.errors.push(`keyframes() must be placed inside of a call to animate()`);\n return ast;\n }\n /** @type {?} */\n const MAX_KEYFRAME_OFFSET = 1;\n /** @type {?} */\n let totalKeyframesWithOffsets = 0;\n /** @type {?} */\n const offsets = [];\n /** @type {?} */\n let offsetsOutOfOrder = false;\n /** @type {?} */\n let keyframesOutOfRange = false;\n /** @type {?} */\n let previousOffset = 0;\n /** @type {?} */\n const keyframes = metadata.steps.map((/**\n * @param {?} styles\n * @return {?}\n */\n styles => {\n /** @type {?} */\n const style = this._makeStyleAst(styles, context);\n /** @type {?} */\n let offsetVal = style.offset != null ? style.offset : consumeOffset(style.styles);\n /** @type {?} */\n let offset = 0;\n if (offsetVal != null) {\n totalKeyframesWithOffsets++;\n offset = style.offset = offsetVal;\n }\n keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n previousOffset = offset;\n offsets.push(offset);\n return style;\n }));\n if (keyframesOutOfRange) {\n context.errors.push(`Please ensure that all keyframe offsets are between 0 and 1`);\n }\n if (offsetsOutOfOrder) {\n context.errors.push(`Please ensure that all keyframe offsets are in order`);\n }\n /** @type {?} */\n const length = metadata.steps.length;\n /** @type {?} */\n let generatedOffset = 0;\n if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n context.errors.push(`Not all style() steps within the declared keyframes() contain offsets`);\n }\n else if (totalKeyframesWithOffsets == 0) {\n generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n }\n /** @type {?} */\n const limit = length - 1;\n /** @type {?} */\n const currentTime = context.currentTime;\n /** @type {?} */\n const currentAnimateTimings = (/** @type {?} */ (context.currentAnimateTimings));\n /** @type {?} */\n const animateDuration = currentAnimateTimings.duration;\n keyframes.forEach((/**\n * @param {?} kf\n * @param {?} i\n * @return {?}\n */\n (kf, i) => {\n /** @type {?} */\n const offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n /** @type {?} */\n const durationUpToThisFrame = offset * animateDuration;\n context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n currentAnimateTimings.duration = durationUpToThisFrame;\n this._validateStyleAst(kf, context);\n kf.offset = offset;\n ast.styles.push(kf);\n }));\n return ast;\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitReference(metadata, context) {\n return {\n type: 8 /* Reference */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitAnimateChild(metadata, context) {\n context.depCount++;\n return {\n type: 9 /* AnimateChild */,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitAnimateRef(metadata, context) {\n return {\n type: 10 /* AnimateRef */,\n animation: this.visitReference(metadata.animation, context),\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitQuery(metadata, context) {\n /** @type {?} */\n const parentSelector = (/** @type {?} */ (context.currentQuerySelector));\n /** @type {?} */\n const options = (/** @type {?} */ ((metadata.options || {})));\n context.queryCount++;\n context.currentQuery = metadata;\n const [selector, includeSelf] = normalizeSelector(metadata.selector);\n context.currentQuerySelector =\n parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});\n /** @type {?} */\n const animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n context.currentQuery = null;\n context.currentQuerySelector = parentSelector;\n return {\n type: 11 /* Query */,\n selector,\n limit: options.limit || 0,\n optional: !!options.optional, includeSelf, animation,\n originalSelector: metadata.selector,\n options: normalizeAnimationOptions(metadata.options)\n };\n }\n /**\n * @param {?} metadata\n * @param {?} context\n * @return {?}\n */\n visitStagger(metadata, context) {\n if (!context.currentQuery) {\n context.errors.push(`stagger() can only be used inside of query()`);\n }\n /** @type {?} */\n const timings = metadata.timings === 'full' ?\n { duration: 0, delay: 0, easing: 'full' } :\n resolveTiming(metadata.timings, context.errors, true);\n return {\n type: 12 /* Stagger */,\n animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), timings,\n options: null\n };\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n AnimationAstBuilderVisitor.prototype._driver;\n}\n/**\n * @param {?} selector\n * @return {?}\n */\nfunction normalizeSelector(selector) {\n /** @type {?} */\n const hasAmpersand = selector.split(/\\s*,\\s*/).find((/**\n * @param {?} token\n * @return {?}\n */\n token => token == SELF_TOKEN)) ? true : false;\n if (hasAmpersand) {\n selector = selector.replace(SELF_TOKEN_REGEX, '');\n }\n // the :enter and :leave selectors are filled in at runtime during timeline building\n selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n .replace(/@\\w+/g, (/**\n * @param {?} match\n * @return {?}\n */\n match => NG_TRIGGER_SELECTOR + '-' + match.substr(1)))\n .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n return [selector, hasAmpersand];\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction normalizeParams(obj) {\n return obj ? copyObj(obj) : null;\n}\nclass AnimationAstBuilderContext {\n /**\n * @param {?} errors\n */\n constructor(errors) {\n this.errors = errors;\n this.queryCount = 0;\n this.depCount = 0;\n this.currentTransition = null;\n this.currentQuery = null;\n this.currentQuerySelector = null;\n this.currentAnimateTimings = null;\n this.currentTime = 0;\n this.collectedStyles = {};\n this.options = null;\n }\n}\nif (false) {\n /** @type {?} */\n AnimationAstBuilderContext.prototype.queryCount;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.depCount;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.currentTransition;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.currentQuery;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.currentQuerySelector;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.currentAnimateTimings;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.currentTime;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.collectedStyles;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.options;\n /** @type {?} */\n AnimationAstBuilderContext.prototype.errors;\n}\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction consumeOffset(styles) {\n if (typeof styles == 'string')\n return null;\n /** @type {?} */\n let offset = null;\n if (Array.isArray(styles)) {\n styles.forEach((/**\n * @param {?} styleTuple\n * @return {?}\n */\n styleTuple => {\n if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {\n /** @type {?} */\n const obj = (/** @type {?} */ (styleTuple));\n offset = parseFloat((/** @type {?} */ (obj['offset'])));\n delete obj['offset'];\n }\n }));\n }\n else if (isObject(styles) && styles.hasOwnProperty('offset')) {\n /** @type {?} */\n const obj = styles;\n offset = parseFloat((/** @type {?} */ (obj['offset'])));\n delete obj['offset'];\n }\n return offset;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isObject(value) {\n return !Array.isArray(value) && typeof value == 'object';\n}\n/**\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\nfunction constructTimingAst(value, errors) {\n /** @type {?} */\n let timings = null;\n if (value.hasOwnProperty('duration')) {\n timings = (/** @type {?} */ (value));\n }\n else if (typeof value == 'number') {\n /** @type {?} */\n const duration = resolveTiming(value, errors).duration;\n return makeTimingAst(duration, 0, '');\n }\n /** @type {?} */\n const strValue = (/** @type {?} */ (value));\n /** @type {?} */\n const isDynamic = strValue.split(/\\s+/).some((/**\n * @param {?} v\n * @return {?}\n */\n v => v.charAt(0) == '{' && v.charAt(1) == '{'));\n if (isDynamic) {\n /** @type {?} */\n const ast = (/** @type {?} */ (makeTimingAst(0, 0, '')));\n ast.dynamic = true;\n ast.strValue = strValue;\n return (/** @type {?} */ (ast));\n }\n timings = timings || resolveTiming(strValue, errors);\n return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction normalizeAnimationOptions(options) {\n if (options) {\n options = copyObj(options);\n if (options['params']) {\n options['params'] = (/** @type {?} */ (normalizeParams(options['params'])));\n }\n }\n else {\n options = {};\n }\n return options;\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @return {?}\n */\nfunction makeTimingAst(duration, delay, easing) {\n return { duration, delay, easing };\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_timeline_instruction.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction AnimationTimelineInstruction() { }\nif (false) {\n /** @type {?} */\n AnimationTimelineInstruction.prototype.element;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.keyframes;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.preStyleProps;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.postStyleProps;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.duration;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.delay;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.totalTime;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.easing;\n /** @type {?|undefined} */\n AnimationTimelineInstruction.prototype.stretchStartingKeyframe;\n /** @type {?} */\n AnimationTimelineInstruction.prototype.subTimeline;\n}\n/**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?} duration\n * @param {?} delay\n * @param {?=} easing\n * @param {?=} subTimeline\n * @return {?}\n */\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing = null, subTimeline = false) {\n return {\n type: 1 /* TimelineAnimation */,\n element,\n keyframes,\n preStyleProps,\n postStyleProps,\n duration,\n delay,\n totalTime: duration + delay, easing, subTimeline\n };\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/element_instruction_map.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass ElementInstructionMap {\n constructor() {\n this._map = new Map();\n }\n /**\n * @param {?} element\n * @return {?}\n */\n consume(element) {\n /** @type {?} */\n let instructions = this._map.get(element);\n if (instructions) {\n this._map.delete(element);\n }\n else {\n instructions = [];\n }\n return instructions;\n }\n /**\n * @param {?} element\n * @param {?} instructions\n * @return {?}\n */\n append(element, instructions) {\n /** @type {?} */\n let existingInstructions = this._map.get(element);\n if (!existingInstructions) {\n this._map.set(element, existingInstructions = []);\n }\n existingInstructions.push(...instructions);\n }\n /**\n * @param {?} element\n * @return {?}\n */\n has(element) { return this._map.has(element); }\n /**\n * @return {?}\n */\n clear() { this._map.clear(); }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n ElementInstructionMap.prototype._map;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_timeline_builder.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst ONE_FRAME_IN_MILLISECONDS = 1;\n/** @type {?} */\nconst ENTER_TOKEN = ':enter';\n/** @type {?} */\nconst ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\n/** @type {?} */\nconst LEAVE_TOKEN = ':leave';\n/** @type {?} */\nconst LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/*\n * The code within this file aims to generate web-animations-compatible keyframes from Angular's\n * animation DSL code.\n *\n * The code below will be converted from:\n *\n * ```\n * sequence([\n * style({ opacity: 0 }),\n * animate(1000, style({ opacity: 0 }))\n * ])\n * ```\n *\n * To:\n * ```\n * keyframes = [{ opacity: 0, offset: 0 }, { opacity: 1, offset: 1 }]\n * duration = 1000\n * delay = 0\n * easing = ''\n * ```\n *\n * For this operation to cover the combination of animation verbs (style, animate, group, etc...) a\n * combination of prototypical inheritance, AST traversal and merge-sort-like algorithms are used.\n *\n * [AST Traversal]\n * Each of the animation verbs, when executed, will return an string-map object representing what\n * type of action it is (style, animate, group, etc...) and the data associated with it. This means\n * that when functional composition mix of these functions is evaluated (like in the example above)\n * then it will end up producing a tree of objects representing the animation itself.\n *\n * When this animation object tree is processed by the visitor code below it will visit each of the\n * verb statements within the visitor. And during each visit it will build the context of the\n * animation keyframes by interacting with the `TimelineBuilder`.\n *\n * [TimelineBuilder]\n * This class is responsible for tracking the styles and building a series of keyframe objects for a\n * timeline between a start and end time. The builder starts off with an initial timeline and each\n * time the AST comes across a `group()`, `keyframes()` or a combination of the two wihtin a\n * `sequence()` then it will generate a sub timeline for each step as well as a new one after\n * they are complete.\n *\n * As the AST is traversed, the timing state on each of the timelines will be incremented. If a sub\n * timeline was created (based on one of the cases above) then the parent timeline will attempt to\n * merge the styles used within the sub timelines into itself (only with group() this will happen).\n * This happens with a merge operation (much like how the merge works in mergesort) and it will only\n * copy the most recently used styles from the sub timelines into the parent timeline. This ensures\n * that if the styles are used later on in another phase of the animation then they will be the most\n * up-to-date values.\n *\n * [How Missing Styles Are Updated]\n * Each timeline has a `backFill` property which is responsible for filling in new styles into\n * already processed keyframes if a new style shows up later within the animation sequence.\n *\n * ```\n * sequence([\n * style({ width: 0 }),\n * animate(1000, style({ width: 100 })),\n * animate(1000, style({ width: 200 })),\n * animate(1000, style({ width: 300 }))\n * animate(1000, style({ width: 400, height: 400 })) // notice how `height` doesn't exist anywhere\n * else\n * ])\n * ```\n *\n * What is happening here is that the `height` value is added later in the sequence, but is missing\n * from all previous animation steps. Therefore when a keyframe is created it would also be missing\n * from all previous keyframes up until where it is first used. For the timeline keyframe generation\n * to properly fill in the style it will place the previous value (the value from the parent\n * timeline) or a default value of `*` into the backFill object. Given that each of the keyframe\n * styles are objects that prototypically inhert from the backFill object, this means that if a\n * value is added into the backFill then it will automatically propagate any missing values to all\n * keyframes. Therefore the missing `height` value will be properly filled into the already\n * processed keyframes.\n *\n * When a sub-timeline is created it will have its own backFill property. This is done so that\n * styles present within the sub-timeline do not accidentally seep into the previous/future timeline\n * keyframes\n *\n * (For prototypically-inherited contents to be detected a `for(i in obj)` loop must be used.)\n *\n * [Validation]\n * The code in this file is not responsible for validation. That functionality happens with within\n * the `AnimationValidatorVisitor` code.\n */\n/**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?=} startingStyles\n * @param {?=} finalStyles\n * @param {?=} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles = {}, finalStyles = {}, options, subInstructions, errors = []) {\n return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nclass AnimationTimelineBuilderVisitor {\n /**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?} startingStyles\n * @param {?} finalStyles\n * @param {?} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\n buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors = []) {\n subInstructions = subInstructions || new ElementInstructionMap();\n /** @type {?} */\n const context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n context.options = options;\n context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n visitDslNode(this, ast, context);\n // this checks to see if an actual animation happened\n /** @type {?} */\n const timelines = context.timelines.filter((/**\n * @param {?} timeline\n * @return {?}\n */\n timeline => timeline.containsAnimation()));\n if (timelines.length && Object.keys(finalStyles).length) {\n /** @type {?} */\n const tl = timelines[timelines.length - 1];\n if (!tl.allowOnlyTimelineStyles()) {\n tl.setStyles([finalStyles], null, context.errors, options);\n }\n }\n return timelines.length ? timelines.map((/**\n * @param {?} timeline\n * @return {?}\n */\n timeline => timeline.buildKeyframes())) :\n [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitTrigger(ast, context) {\n // these values are not visited in this AST\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitState(ast, context) {\n // these values are not visited in this AST\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitTransition(ast, context) {\n // these values are not visited in this AST\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitAnimateChild(ast, context) {\n /** @type {?} */\n const elementInstructions = context.subInstructions.consume(context.element);\n if (elementInstructions) {\n /** @type {?} */\n const innerContext = context.createSubContext(ast.options);\n /** @type {?} */\n const startTime = context.currentTimeline.currentTime;\n /** @type {?} */\n const endTime = this._visitSubInstructions(elementInstructions, innerContext, (/** @type {?} */ (innerContext.options)));\n if (startTime != endTime) {\n // we do this on the upper context because we created a sub context for\n // the sub child animations\n context.transformIntoNewTimeline(endTime);\n }\n }\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitAnimateRef(ast, context) {\n /** @type {?} */\n const innerContext = context.createSubContext(ast.options);\n innerContext.transformIntoNewTimeline();\n this.visitReference(ast.animation, innerContext);\n context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n context.previousNode = ast;\n }\n /**\n * @private\n * @param {?} instructions\n * @param {?} context\n * @param {?} options\n * @return {?}\n */\n _visitSubInstructions(instructions, context, options) {\n /** @type {?} */\n const startTime = context.currentTimeline.currentTime;\n /** @type {?} */\n let furthestTime = startTime;\n // this is a special-case for when a user wants to skip a sub\n // animation from being fired entirely.\n /** @type {?} */\n const duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n /** @type {?} */\n const delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n if (duration !== 0) {\n instructions.forEach((/**\n * @param {?} instruction\n * @return {?}\n */\n instruction => {\n /** @type {?} */\n const instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n furthestTime =\n Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n }));\n }\n return furthestTime;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitReference(ast, context) {\n context.updateOptions(ast.options, true);\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitSequence(ast, context) {\n /** @type {?} */\n const subContextCount = context.subContextCount;\n /** @type {?} */\n let ctx = context;\n /** @type {?} */\n const options = ast.options;\n if (options && (options.params || options.delay)) {\n ctx = context.createSubContext(options);\n ctx.transformIntoNewTimeline();\n if (options.delay != null) {\n if (ctx.previousNode.type == 6 /* Style */) {\n ctx.currentTimeline.snapshotCurrentStyles();\n ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n /** @type {?} */\n const delay = resolveTimingValue(options.delay);\n ctx.delayNextStep(delay);\n }\n }\n if (ast.steps.length) {\n ast.steps.forEach((/**\n * @param {?} s\n * @return {?}\n */\n s => visitDslNode(this, s, ctx)));\n // this is here just incase the inner steps only contain or end with a style() call\n ctx.currentTimeline.applyStylesToKeyframe();\n // this means that some animation function within the sequence\n // ended up creating a sub timeline (which means the current\n // timeline cannot overlap with the contents of the sequence)\n if (ctx.subContextCount > subContextCount) {\n ctx.transformIntoNewTimeline();\n }\n }\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitGroup(ast, context) {\n /** @type {?} */\n const innerTimelines = [];\n /** @type {?} */\n let furthestTime = context.currentTimeline.currentTime;\n /** @type {?} */\n const delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n ast.steps.forEach((/**\n * @param {?} s\n * @return {?}\n */\n s => {\n /** @type {?} */\n const innerContext = context.createSubContext(ast.options);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n visitDslNode(this, s, innerContext);\n furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n innerTimelines.push(innerContext.currentTimeline);\n }));\n // this operation is run after the AST loop because otherwise\n // if the parent timeline's collected styles were updated then\n // it would pass in invalid data into the new-to-be forked items\n innerTimelines.forEach((/**\n * @param {?} timeline\n * @return {?}\n */\n timeline => context.currentTimeline.mergeTimelineCollectedStyles(timeline)));\n context.transformIntoNewTimeline(furthestTime);\n context.previousNode = ast;\n }\n /**\n * @private\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n _visitTiming(ast, context) {\n if (((/** @type {?} */ (ast))).dynamic) {\n /** @type {?} */\n const strValue = ((/** @type {?} */ (ast))).strValue;\n /** @type {?} */\n const timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n return resolveTiming(timingValue, context.errors);\n }\n else {\n return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n }\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitAnimate(ast, context) {\n /** @type {?} */\n const timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n /** @type {?} */\n const timeline = context.currentTimeline;\n if (timings.delay) {\n context.incrementTime(timings.delay);\n timeline.snapshotCurrentStyles();\n }\n /** @type {?} */\n const style = ast.style;\n if (style.type == 5 /* Keyframes */) {\n this.visitKeyframes(style, context);\n }\n else {\n context.incrementTime(timings.duration);\n this.visitStyle((/** @type {?} */ (style)), context);\n timeline.applyStylesToKeyframe();\n }\n context.currentAnimateTimings = null;\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitStyle(ast, context) {\n /** @type {?} */\n const timeline = context.currentTimeline;\n /** @type {?} */\n const timings = (/** @type {?} */ (context.currentAnimateTimings));\n // this is a special case for when a style() call\n // directly follows an animate() call (but not inside of an animate() call)\n if (!timings && timeline.getCurrentStyleProperties().length) {\n timeline.forwardFrame();\n }\n /** @type {?} */\n const easing = (timings && timings.easing) || ast.easing;\n if (ast.isEmptyStep) {\n timeline.applyEmptyStep(easing);\n }\n else {\n timeline.setStyles(ast.styles, easing, context.errors, context.options);\n }\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitKeyframes(ast, context) {\n /** @type {?} */\n const currentAnimateTimings = (/** @type {?} */ (context.currentAnimateTimings));\n /** @type {?} */\n const startTime = ((/** @type {?} */ (context.currentTimeline))).duration;\n /** @type {?} */\n const duration = currentAnimateTimings.duration;\n /** @type {?} */\n const innerContext = context.createSubContext();\n /** @type {?} */\n const innerTimeline = innerContext.currentTimeline;\n innerTimeline.easing = currentAnimateTimings.easing;\n ast.styles.forEach((/**\n * @param {?} step\n * @return {?}\n */\n step => {\n /** @type {?} */\n const offset = step.offset || 0;\n innerTimeline.forwardTime(offset * duration);\n innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n innerTimeline.applyStylesToKeyframe();\n }));\n // this will ensure that the parent timeline gets all the styles from\n // the child even if the new timeline below is not used\n context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n // we do this because the window between this timeline and the sub timeline\n // should ensure that the styles within are exactly the same as they were before\n context.transformIntoNewTimeline(startTime + duration);\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitQuery(ast, context) {\n // in the event that the first step before this is a style step we need\n // to ensure the styles are applied before the children are animated\n /** @type {?} */\n const startTime = context.currentTimeline.currentTime;\n /** @type {?} */\n const options = (/** @type {?} */ ((ast.options || {})));\n /** @type {?} */\n const delay = options.delay ? resolveTimingValue(options.delay) : 0;\n if (delay && (context.previousNode.type === 6 /* Style */ ||\n (startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length))) {\n context.currentTimeline.snapshotCurrentStyles();\n context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n }\n /** @type {?} */\n let furthestTime = startTime;\n /** @type {?} */\n const elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n context.currentQueryTotal = elms.length;\n /** @type {?} */\n let sameElementTimeline = null;\n elms.forEach((/**\n * @param {?} element\n * @param {?} i\n * @return {?}\n */\n (element, i) => {\n context.currentQueryIndex = i;\n /** @type {?} */\n const innerContext = context.createSubContext(ast.options, element);\n if (delay) {\n innerContext.delayNextStep(delay);\n }\n if (element === context.element) {\n sameElementTimeline = innerContext.currentTimeline;\n }\n visitDslNode(this, ast.animation, innerContext);\n // this is here just incase the inner steps only contain or end\n // with a style() call (which is here to signal that this is a preparatory\n // call to style an element before it is animated again)\n innerContext.currentTimeline.applyStylesToKeyframe();\n /** @type {?} */\n const endTime = innerContext.currentTimeline.currentTime;\n furthestTime = Math.max(furthestTime, endTime);\n }));\n context.currentQueryIndex = 0;\n context.currentQueryTotal = 0;\n context.transformIntoNewTimeline(furthestTime);\n if (sameElementTimeline) {\n context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n context.currentTimeline.snapshotCurrentStyles();\n }\n context.previousNode = ast;\n }\n /**\n * @param {?} ast\n * @param {?} context\n * @return {?}\n */\n visitStagger(ast, context) {\n /** @type {?} */\n const parentContext = (/** @type {?} */ (context.parentContext));\n /** @type {?} */\n const tl = context.currentTimeline;\n /** @type {?} */\n const timings = ast.timings;\n /** @type {?} */\n const duration = Math.abs(timings.duration);\n /** @type {?} */\n const maxTime = duration * (context.currentQueryTotal - 1);\n /** @type {?} */\n let delay = duration * context.currentQueryIndex;\n /** @type {?} */\n let staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n switch (staggerTransformer) {\n case 'reverse':\n delay = maxTime - delay;\n break;\n case 'full':\n delay = parentContext.currentStaggerTime;\n break;\n }\n /** @type {?} */\n const timeline = context.currentTimeline;\n if (delay) {\n timeline.delayNextStep(delay);\n }\n /** @type {?} */\n const startingTime = timeline.currentTime;\n visitDslNode(this, ast.animation, context);\n context.previousNode = ast;\n // time = duration + delay\n // the reason why this computation is so complex is because\n // the inner timeline may either have a delay value or a stretched\n // keyframe depending on if a subtimeline is not used or is used.\n parentContext.currentStaggerTime =\n (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);\n }\n}\n/** @type {?} */\nconst DEFAULT_NOOP_PREVIOUS_NODE = (/** @type {?} */ ({}));\nclass AnimationTimelineContext {\n /**\n * @param {?} _driver\n * @param {?} element\n * @param {?} subInstructions\n * @param {?} _enterClassName\n * @param {?} _leaveClassName\n * @param {?} errors\n * @param {?} timelines\n * @param {?=} initialTimeline\n */\n constructor(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n this._driver = _driver;\n this.element = element;\n this.subInstructions = subInstructions;\n this._enterClassName = _enterClassName;\n this._leaveClassName = _leaveClassName;\n this.errors = errors;\n this.timelines = timelines;\n this.parentContext = null;\n this.currentAnimateTimings = null;\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.subContextCount = 0;\n this.options = {};\n this.currentQueryIndex = 0;\n this.currentQueryTotal = 0;\n this.currentStaggerTime = 0;\n this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n timelines.push(this.currentTimeline);\n }\n /**\n * @return {?}\n */\n get params() { return this.options.params; }\n /**\n * @param {?} options\n * @param {?=} skipIfExists\n * @return {?}\n */\n updateOptions(options, skipIfExists) {\n if (!options)\n return;\n /** @type {?} */\n const newOptions = (/** @type {?} */ (options));\n /** @type {?} */\n let optionsToUpdate = this.options;\n // NOTE: this will get patched up when other animation methods support duration overrides\n if (newOptions.duration != null) {\n ((/** @type {?} */ (optionsToUpdate))).duration = resolveTimingValue(newOptions.duration);\n }\n if (newOptions.delay != null) {\n optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n }\n /** @type {?} */\n const newParams = newOptions.params;\n if (newParams) {\n /** @type {?} */\n let paramsToUpdate = (/** @type {?} */ (optionsToUpdate.params));\n if (!paramsToUpdate) {\n paramsToUpdate = this.options.params = {};\n }\n Object.keys(newParams).forEach((/**\n * @param {?} name\n * @return {?}\n */\n name => {\n if (!skipIfExists || !paramsToUpdate.hasOwnProperty(name)) {\n paramsToUpdate[name] = interpolateParams(newParams[name], paramsToUpdate, this.errors);\n }\n }));\n }\n }\n /**\n * @private\n * @return {?}\n */\n _copyOptions() {\n /** @type {?} */\n const options = {};\n if (this.options) {\n /** @type {?} */\n const oldParams = this.options.params;\n if (oldParams) {\n /** @type {?} */\n const params = options['params'] = {};\n Object.keys(oldParams).forEach((/**\n * @param {?} name\n * @return {?}\n */\n name => { params[name] = oldParams[name]; }));\n }\n }\n return options;\n }\n /**\n * @param {?=} options\n * @param {?=} element\n * @param {?=} newTime\n * @return {?}\n */\n createSubContext(options = null, element, newTime) {\n /** @type {?} */\n const target = element || this.element;\n /** @type {?} */\n const context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n context.previousNode = this.previousNode;\n context.currentAnimateTimings = this.currentAnimateTimings;\n context.options = this._copyOptions();\n context.updateOptions(options);\n context.currentQueryIndex = this.currentQueryIndex;\n context.currentQueryTotal = this.currentQueryTotal;\n context.parentContext = this;\n this.subContextCount++;\n return context;\n }\n /**\n * @param {?=} newTime\n * @return {?}\n */\n transformIntoNewTimeline(newTime) {\n this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n this.timelines.push(this.currentTimeline);\n return this.currentTimeline;\n }\n /**\n * @param {?} instruction\n * @param {?} duration\n * @param {?} delay\n * @return {?}\n */\n appendInstructionToTimeline(instruction, duration, delay) {\n /** @type {?} */\n const updatedTimings = {\n duration: duration != null ? duration : instruction.duration,\n delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n easing: ''\n };\n /** @type {?} */\n const builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n this.timelines.push(builder);\n return updatedTimings;\n }\n /**\n * @param {?} time\n * @return {?}\n */\n incrementTime(time) {\n this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n }\n /**\n * @param {?} delay\n * @return {?}\n */\n delayNextStep(delay) {\n // negative delays are not yet supported\n if (delay > 0) {\n this.currentTimeline.delayNextStep(delay);\n }\n }\n /**\n * @param {?} selector\n * @param {?} originalSelector\n * @param {?} limit\n * @param {?} includeSelf\n * @param {?} optional\n * @param {?} errors\n * @return {?}\n */\n invokeQuery(selector, originalSelector, limit, includeSelf, optional, errors) {\n /** @type {?} */\n let results = [];\n if (includeSelf) {\n results.push(this.element);\n }\n if (selector.length > 0) { // if :self is only used then the selector is empty\n selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n /** @type {?} */\n const multi = limit != 1;\n /** @type {?} */\n let elements = this._driver.query(this.element, selector, multi);\n if (limit !== 0) {\n elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :\n elements.slice(0, limit);\n }\n results.push(...elements);\n }\n if (!optional && results.length == 0) {\n errors.push(`\\`query(\"${originalSelector}\")\\` returned zero elements. (Use \\`query(\"${originalSelector}\", { optional: true })\\` if you wish to allow this.)`);\n }\n return results;\n }\n}\nif (false) {\n /** @type {?} */\n AnimationTimelineContext.prototype.parentContext;\n /** @type {?} */\n AnimationTimelineContext.prototype.currentTimeline;\n /** @type {?} */\n AnimationTimelineContext.prototype.currentAnimateTimings;\n /** @type {?} */\n AnimationTimelineContext.prototype.previousNode;\n /** @type {?} */\n AnimationTimelineContext.prototype.subContextCount;\n /** @type {?} */\n AnimationTimelineContext.prototype.options;\n /** @type {?} */\n AnimationTimelineContext.prototype.currentQueryIndex;\n /** @type {?} */\n AnimationTimelineContext.prototype.currentQueryTotal;\n /** @type {?} */\n AnimationTimelineContext.prototype.currentStaggerTime;\n /**\n * @type {?}\n * @private\n */\n AnimationTimelineContext.prototype._driver;\n /** @type {?} */\n AnimationTimelineContext.prototype.element;\n /** @type {?} */\n AnimationTimelineContext.prototype.subInstructions;\n /**\n * @type {?}\n * @private\n */\n AnimationTimelineContext.prototype._enterClassName;\n /**\n * @type {?}\n * @private\n */\n AnimationTimelineContext.prototype._leaveClassName;\n /** @type {?} */\n AnimationTimelineContext.prototype.errors;\n /** @type {?} */\n AnimationTimelineContext.prototype.timelines;\n}\nclass TimelineBuilder {\n /**\n * @param {?} _driver\n * @param {?} element\n * @param {?} startTime\n * @param {?=} _elementTimelineStylesLookup\n */\n constructor(_driver, element, startTime, _elementTimelineStylesLookup) {\n this._driver = _driver;\n this.element = element;\n this.startTime = startTime;\n this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n this.duration = 0;\n this._previousKeyframe = {};\n this._currentKeyframe = {};\n this._keyframes = new Map();\n this._styleSummary = {};\n this._pendingStyles = {};\n this._backFill = {};\n this._currentEmptyStepKeyframe = null;\n if (!this._elementTimelineStylesLookup) {\n this._elementTimelineStylesLookup = new Map();\n }\n this._localTimelineStyles = Object.create(this._backFill, {});\n this._globalTimelineStyles = (/** @type {?} */ (this._elementTimelineStylesLookup.get(element)));\n if (!this._globalTimelineStyles) {\n this._globalTimelineStyles = this._localTimelineStyles;\n this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n }\n this._loadKeyframe();\n }\n /**\n * @return {?}\n */\n containsAnimation() {\n switch (this._keyframes.size) {\n case 0:\n return false;\n case 1:\n return this.getCurrentStyleProperties().length > 0;\n default:\n return true;\n }\n }\n /**\n * @return {?}\n */\n getCurrentStyleProperties() { return Object.keys(this._currentKeyframe); }\n /**\n * @return {?}\n */\n get currentTime() { return this.startTime + this.duration; }\n /**\n * @param {?} delay\n * @return {?}\n */\n delayNextStep(delay) {\n // in the event that a style() step is placed right before a stagger()\n // and that style() step is the very first style() value in the animation\n // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n // properly applies the style() values to work with the stagger...\n /** @type {?} */\n const hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;\n if (this.duration || hasPreStyleStep) {\n this.forwardTime(this.currentTime + delay);\n if (hasPreStyleStep) {\n this.snapshotCurrentStyles();\n }\n }\n else {\n this.startTime += delay;\n }\n }\n /**\n * @param {?} element\n * @param {?=} currentTime\n * @return {?}\n */\n fork(element, currentTime) {\n this.applyStylesToKeyframe();\n return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n }\n /**\n * @private\n * @return {?}\n */\n _loadKeyframe() {\n if (this._currentKeyframe) {\n this._previousKeyframe = this._currentKeyframe;\n }\n this._currentKeyframe = (/** @type {?} */ (this._keyframes.get(this.duration)));\n if (!this._currentKeyframe) {\n this._currentKeyframe = Object.create(this._backFill, {});\n this._keyframes.set(this.duration, this._currentKeyframe);\n }\n }\n /**\n * @return {?}\n */\n forwardFrame() {\n this.duration += ONE_FRAME_IN_MILLISECONDS;\n this._loadKeyframe();\n }\n /**\n * @param {?} time\n * @return {?}\n */\n forwardTime(time) {\n this.applyStylesToKeyframe();\n this.duration = time;\n this._loadKeyframe();\n }\n /**\n * @private\n * @param {?} prop\n * @param {?} value\n * @return {?}\n */\n _updateStyle(prop, value) {\n this._localTimelineStyles[prop] = value;\n this._globalTimelineStyles[prop] = value;\n this._styleSummary[prop] = { time: this.currentTime, value };\n }\n /**\n * @return {?}\n */\n allowOnlyTimelineStyles() { return this._currentEmptyStepKeyframe !== this._currentKeyframe; }\n /**\n * @param {?} easing\n * @return {?}\n */\n applyEmptyStep(easing) {\n if (easing) {\n this._previousKeyframe['easing'] = easing;\n }\n // special case for animate(duration):\n // all missing styles are filled with a `*` value then\n // if any destination styles are filled in later on the same\n // keyframe then they will override the overridden styles\n // We use `_globalTimelineStyles` here because there may be\n // styles in previous keyframes that are not present in this timeline\n Object.keys(this._globalTimelineStyles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n this._backFill[prop] = this._globalTimelineStyles[prop] || AUTO_STYLE;\n this._currentKeyframe[prop] = AUTO_STYLE;\n }));\n this._currentEmptyStepKeyframe = this._currentKeyframe;\n }\n /**\n * @param {?} input\n * @param {?} easing\n * @param {?} errors\n * @param {?=} options\n * @return {?}\n */\n setStyles(input, easing, errors, options) {\n if (easing) {\n this._previousKeyframe['easing'] = easing;\n }\n /** @type {?} */\n const params = (options && options.params) || {};\n /** @type {?} */\n const styles = flattenStyles(input, this._globalTimelineStyles);\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const val = interpolateParams(styles[prop], params, errors);\n this._pendingStyles[prop] = val;\n if (!this._localTimelineStyles.hasOwnProperty(prop)) {\n this._backFill[prop] = this._globalTimelineStyles.hasOwnProperty(prop) ?\n this._globalTimelineStyles[prop] :\n AUTO_STYLE;\n }\n this._updateStyle(prop, val);\n }));\n }\n /**\n * @return {?}\n */\n applyStylesToKeyframe() {\n /** @type {?} */\n const styles = this._pendingStyles;\n /** @type {?} */\n const props = Object.keys(styles);\n if (props.length == 0)\n return;\n this._pendingStyles = {};\n props.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const val = styles[prop];\n this._currentKeyframe[prop] = val;\n }));\n Object.keys(this._localTimelineStyles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (!this._currentKeyframe.hasOwnProperty(prop)) {\n this._currentKeyframe[prop] = this._localTimelineStyles[prop];\n }\n }));\n }\n /**\n * @return {?}\n */\n snapshotCurrentStyles() {\n Object.keys(this._localTimelineStyles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const val = this._localTimelineStyles[prop];\n this._pendingStyles[prop] = val;\n this._updateStyle(prop, val);\n }));\n }\n /**\n * @return {?}\n */\n getFinalKeyframe() { return this._keyframes.get(this.duration); }\n /**\n * @return {?}\n */\n get properties() {\n /** @type {?} */\n const properties = [];\n for (let prop in this._currentKeyframe) {\n properties.push(prop);\n }\n return properties;\n }\n /**\n * @param {?} timeline\n * @return {?}\n */\n mergeTimelineCollectedStyles(timeline) {\n Object.keys(timeline._styleSummary).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const details0 = this._styleSummary[prop];\n /** @type {?} */\n const details1 = timeline._styleSummary[prop];\n if (!details0 || details1.time > details0.time) {\n this._updateStyle(prop, details1.value);\n }\n }));\n }\n /**\n * @return {?}\n */\n buildKeyframes() {\n this.applyStylesToKeyframe();\n /** @type {?} */\n const preStyleProps = new Set();\n /** @type {?} */\n const postStyleProps = new Set();\n /** @type {?} */\n const isEmpty = this._keyframes.size === 1 && this.duration === 0;\n /** @type {?} */\n let finalKeyframes = [];\n this._keyframes.forEach((/**\n * @param {?} keyframe\n * @param {?} time\n * @return {?}\n */\n (keyframe, time) => {\n /** @type {?} */\n const finalKeyframe = copyStyles(keyframe, true);\n Object.keys(finalKeyframe).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const value = finalKeyframe[prop];\n if (value == ɵPRE_STYLE) {\n preStyleProps.add(prop);\n }\n else if (value == AUTO_STYLE) {\n postStyleProps.add(prop);\n }\n }));\n if (!isEmpty) {\n finalKeyframe['offset'] = time / this.duration;\n }\n finalKeyframes.push(finalKeyframe);\n }));\n /** @type {?} */\n const preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n /** @type {?} */\n const postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];\n // special case for a 0-second animation (which is designed just to place styles onscreen)\n if (isEmpty) {\n /** @type {?} */\n const kf0 = finalKeyframes[0];\n /** @type {?} */\n const kf1 = copyObj(kf0);\n kf0['offset'] = 0;\n kf1['offset'] = 1;\n finalKeyframes = [kf0, kf1];\n }\n return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n }\n}\nif (false) {\n /** @type {?} */\n TimelineBuilder.prototype.duration;\n /** @type {?} */\n TimelineBuilder.prototype.easing;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._previousKeyframe;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._currentKeyframe;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._keyframes;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._styleSummary;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._localTimelineStyles;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._globalTimelineStyles;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._pendingStyles;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._backFill;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._currentEmptyStepKeyframe;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._driver;\n /** @type {?} */\n TimelineBuilder.prototype.element;\n /** @type {?} */\n TimelineBuilder.prototype.startTime;\n /**\n * @type {?}\n * @private\n */\n TimelineBuilder.prototype._elementTimelineStylesLookup;\n}\nclass SubTimelineBuilder extends TimelineBuilder {\n /**\n * @param {?} driver\n * @param {?} element\n * @param {?} keyframes\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?} timings\n * @param {?=} _stretchStartingKeyframe\n */\n constructor(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe = false) {\n super(driver, element, timings.delay);\n this.element = element;\n this.keyframes = keyframes;\n this.preStyleProps = preStyleProps;\n this.postStyleProps = postStyleProps;\n this._stretchStartingKeyframe = _stretchStartingKeyframe;\n this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n }\n /**\n * @return {?}\n */\n containsAnimation() { return this.keyframes.length > 1; }\n /**\n * @return {?}\n */\n buildKeyframes() {\n /** @type {?} */\n let keyframes = this.keyframes;\n let { delay, duration, easing } = this.timings;\n if (this._stretchStartingKeyframe && delay) {\n /** @type {?} */\n const newKeyframes = [];\n /** @type {?} */\n const totalTime = duration + delay;\n /** @type {?} */\n const startingGap = delay / totalTime;\n // the original starting keyframe now starts once the delay is done\n /** @type {?} */\n const newFirstKeyframe = copyStyles(keyframes[0], false);\n newFirstKeyframe['offset'] = 0;\n newKeyframes.push(newFirstKeyframe);\n /** @type {?} */\n const oldFirstKeyframe = copyStyles(keyframes[0], false);\n oldFirstKeyframe['offset'] = roundOffset(startingGap);\n newKeyframes.push(oldFirstKeyframe);\n /*\n When the keyframe is stretched then it means that the delay before the animation\n starts is gone. Instead the first keyframe is placed at the start of the animation\n and it is then copied to where it starts when the original delay is over. This basically\n means nothing animates during that delay, but the styles are still renderered. For this\n to work the original offset values that exist in the original keyframes must be \"warped\"\n so that they can take the new keyframe + delay into account.\n \n delay=1000, duration=1000, keyframes = 0 .5 1\n \n turns into\n \n delay=0, duration=2000, keyframes = 0 .33 .66 1\n */\n // offsets between 1 ... n -1 are all warped by the keyframe stretch\n /** @type {?} */\n const limit = keyframes.length - 1;\n for (let i = 1; i <= limit; i++) {\n /** @type {?} */\n let kf = copyStyles(keyframes[i], false);\n /** @type {?} */\n const oldOffset = (/** @type {?} */ (kf['offset']));\n /** @type {?} */\n const timeAtKeyframe = delay + oldOffset * duration;\n kf['offset'] = roundOffset(timeAtKeyframe / totalTime);\n newKeyframes.push(kf);\n }\n // the new starting keyframe should be added at the start\n duration = totalTime;\n delay = 0;\n easing = '';\n keyframes = newKeyframes;\n }\n return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n }\n}\nif (false) {\n /** @type {?} */\n SubTimelineBuilder.prototype.timings;\n /** @type {?} */\n SubTimelineBuilder.prototype.element;\n /** @type {?} */\n SubTimelineBuilder.prototype.keyframes;\n /** @type {?} */\n SubTimelineBuilder.prototype.preStyleProps;\n /** @type {?} */\n SubTimelineBuilder.prototype.postStyleProps;\n /**\n * @type {?}\n * @private\n */\n SubTimelineBuilder.prototype._stretchStartingKeyframe;\n}\n/**\n * @param {?} offset\n * @param {?=} decimalPoints\n * @return {?}\n */\nfunction roundOffset(offset, decimalPoints = 3) {\n /** @type {?} */\n const mult = Math.pow(10, decimalPoints - 1);\n return Math.round(offset * mult) / mult;\n}\n/**\n * @param {?} input\n * @param {?} allStyles\n * @return {?}\n */\nfunction flattenStyles(input, allStyles) {\n /** @type {?} */\n const styles = {};\n /** @type {?} */\n let allProperties;\n input.forEach((/**\n * @param {?} token\n * @return {?}\n */\n token => {\n if (token === '*') {\n allProperties = allProperties || Object.keys(allStyles);\n allProperties.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => { styles[prop] = AUTO_STYLE; }));\n }\n else {\n copyStyles((/** @type {?} */ (token)), false, styles);\n }\n }));\n return styles;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass Animation {\n /**\n * @param {?} _driver\n * @param {?} input\n */\n constructor(_driver, input) {\n this._driver = _driver;\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const ast = buildAnimationAst(_driver, input, errors);\n if (errors.length) {\n /** @type {?} */\n const errorMessage = `animation validation failed:\\n${errors.join(\"\\n\")}`;\n throw new Error(errorMessage);\n }\n this._animationAst = ast;\n }\n /**\n * @param {?} element\n * @param {?} startingStyles\n * @param {?} destinationStyles\n * @param {?} options\n * @param {?=} subInstructions\n * @return {?}\n */\n buildTimelines(element, startingStyles, destinationStyles, options, subInstructions) {\n /** @type {?} */\n const start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) :\n (/** @type {?} */ (startingStyles));\n /** @type {?} */\n const dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) :\n (/** @type {?} */ (destinationStyles));\n /** @type {?} */\n const errors = [];\n subInstructions = subInstructions || new ElementInstructionMap();\n /** @type {?} */\n const result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n if (errors.length) {\n /** @type {?} */\n const errorMessage = `animation building failed:\\n${errors.join(\"\\n\")}`;\n throw new Error(errorMessage);\n }\n return result;\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n Animation.prototype._animationAst;\n /**\n * @type {?}\n * @private\n */\n Animation.prototype._driver;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/style_normalization/animation_style_normalizer.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@publicApi\n * @abstract\n */\nclass AnimationStyleNormalizer {\n}\nif (false) {\n /**\n * @abstract\n * @param {?} propertyName\n * @param {?} errors\n * @return {?}\n */\n AnimationStyleNormalizer.prototype.normalizePropertyName = function (propertyName, errors) { };\n /**\n * @abstract\n * @param {?} userProvidedProperty\n * @param {?} normalizedProperty\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\n AnimationStyleNormalizer.prototype.normalizeStyleValue = function (userProvidedProperty, normalizedProperty, value, errors) { };\n}\n/**\n * \\@publicApi\n */\nclass NoopAnimationStyleNormalizer {\n /**\n * @param {?} propertyName\n * @param {?} errors\n * @return {?}\n */\n normalizePropertyName(propertyName, errors) { return propertyName; }\n /**\n * @param {?} userProvidedProperty\n * @param {?} normalizedProperty\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n return (/** @type {?} */ (value));\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/style_normalization/web_animations_style_normalizer.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass WebAnimationsStyleNormalizer extends AnimationStyleNormalizer {\n /**\n * @param {?} propertyName\n * @param {?} errors\n * @return {?}\n */\n normalizePropertyName(propertyName, errors) {\n return dashCaseToCamelCase(propertyName);\n }\n /**\n * @param {?} userProvidedProperty\n * @param {?} normalizedProperty\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\n normalizeStyleValue(userProvidedProperty, normalizedProperty, value, errors) {\n /** @type {?} */\n let unit = '';\n /** @type {?} */\n const strVal = value.toString().trim();\n if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {\n if (typeof value === 'number') {\n unit = 'px';\n }\n else {\n /** @type {?} */\n const valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n errors.push(`Please provide a CSS unit value for ${userProvidedProperty}:${value}`);\n }\n }\n }\n return strVal + unit;\n }\n}\nconst ɵ0$1 = /**\n * @return {?}\n */\n() => makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'\n .split(','));\n/** @type {?} */\nconst DIMENSIONAL_PROP_MAP = ((ɵ0$1))();\n/**\n * @param {?} keys\n * @return {?}\n */\nfunction makeBooleanMap(keys) {\n /** @type {?} */\n const map = {};\n keys.forEach((/**\n * @param {?} key\n * @return {?}\n */\n key => map[key] = true));\n return map;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_transition_instruction.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @record\n */\nfunction AnimationTransitionInstruction() { }\nif (false) {\n /** @type {?} */\n AnimationTransitionInstruction.prototype.element;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.triggerName;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.isRemovalTransition;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.fromState;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.fromStyles;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.toState;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.toStyles;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.timelines;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.queriedElements;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.preStyleProps;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.postStyleProps;\n /** @type {?} */\n AnimationTransitionInstruction.prototype.totalTime;\n /** @type {?|undefined} */\n AnimationTransitionInstruction.prototype.errors;\n}\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?} isRemovalTransition\n * @param {?} fromStyles\n * @param {?} toStyles\n * @param {?} timelines\n * @param {?} queriedElements\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?} totalTime\n * @param {?=} errors\n * @return {?}\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, totalTime, errors) {\n return {\n type: 0 /* TransitionAnimation */,\n element,\n triggerName,\n isRemovalTransition,\n fromState,\n fromStyles,\n toState,\n toStyles,\n timelines,\n queriedElements,\n preStyleProps,\n postStyleProps,\n totalTime,\n errors\n };\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_transition_factory.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst EMPTY_OBJECT = {};\nclass AnimationTransitionFactory {\n /**\n * @param {?} _triggerName\n * @param {?} ast\n * @param {?} _stateStyles\n */\n constructor(_triggerName, ast, _stateStyles) {\n this._triggerName = _triggerName;\n this.ast = ast;\n this._stateStyles = _stateStyles;\n }\n /**\n * @param {?} currentState\n * @param {?} nextState\n * @param {?} element\n * @param {?} params\n * @return {?}\n */\n match(currentState, nextState, element, params) {\n return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState, element, params);\n }\n /**\n * @param {?} stateName\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\n buildStyles(stateName, params, errors) {\n /** @type {?} */\n const backupStateStyler = this._stateStyles['*'];\n /** @type {?} */\n const stateStyler = this._stateStyles[stateName];\n /** @type {?} */\n const backupStyles = backupStateStyler ? backupStateStyler.buildStyles(params, errors) : {};\n return stateStyler ? stateStyler.buildStyles(params, errors) : backupStyles;\n }\n /**\n * @param {?} driver\n * @param {?} element\n * @param {?} currentState\n * @param {?} nextState\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?=} currentOptions\n * @param {?=} nextOptions\n * @param {?=} subInstructions\n * @param {?=} skipAstBuild\n * @return {?}\n */\n build(driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions, skipAstBuild) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n /** @type {?} */\n const currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n /** @type {?} */\n const currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n /** @type {?} */\n const nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n /** @type {?} */\n const nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n /** @type {?} */\n const queriedElements = new Set();\n /** @type {?} */\n const preStyleMap = new Map();\n /** @type {?} */\n const postStyleMap = new Map();\n /** @type {?} */\n const isRemoval = nextState === 'void';\n /** @type {?} */\n const animationOptions = { params: Object.assign(Object.assign({}, transitionAnimationParams), nextAnimationParams) };\n /** @type {?} */\n const timelines = skipAstBuild ? [] : buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n /** @type {?} */\n let totalTime = 0;\n timelines.forEach((/**\n * @param {?} tl\n * @return {?}\n */\n tl => { totalTime = Math.max(tl.duration + tl.delay, totalTime); }));\n if (errors.length) {\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, totalTime, errors);\n }\n timelines.forEach((/**\n * @param {?} tl\n * @return {?}\n */\n tl => {\n /** @type {?} */\n const elm = tl.element;\n /** @type {?} */\n const preProps = getOrSetAsInMap(preStyleMap, elm, {});\n tl.preStyleProps.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => preProps[prop] = true));\n /** @type {?} */\n const postProps = getOrSetAsInMap(postStyleMap, elm, {});\n tl.postStyleProps.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => postProps[prop] = true));\n if (elm !== element) {\n queriedElements.add(elm);\n }\n }));\n /** @type {?} */\n const queriedElementsList = iteratorToArray(queriedElements.values());\n return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap, totalTime);\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionFactory.prototype._triggerName;\n /** @type {?} */\n AnimationTransitionFactory.prototype.ast;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionFactory.prototype._stateStyles;\n}\n/**\n * @param {?} matchFns\n * @param {?} currentState\n * @param {?} nextState\n * @param {?} element\n * @param {?} params\n * @return {?}\n */\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState, element, params) {\n return matchFns.some((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn(currentState, nextState, element, params)));\n}\nclass AnimationStateStyles {\n /**\n * @param {?} styles\n * @param {?} defaultParams\n */\n constructor(styles, defaultParams) {\n this.styles = styles;\n this.defaultParams = defaultParams;\n }\n /**\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\n buildStyles(params, errors) {\n /** @type {?} */\n const finalStyles = {};\n /** @type {?} */\n const combinedParams = copyObj(this.defaultParams);\n Object.keys(params).forEach((/**\n * @param {?} key\n * @return {?}\n */\n key => {\n /** @type {?} */\n const value = params[key];\n if (value != null) {\n combinedParams[key] = value;\n }\n }));\n this.styles.styles.forEach((/**\n * @param {?} value\n * @return {?}\n */\n value => {\n if (typeof value !== 'string') {\n /** @type {?} */\n const styleObj = (/** @type {?} */ (value));\n Object.keys(styleObj).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n let val = styleObj[prop];\n if (val.length > 1) {\n val = interpolateParams(val, combinedParams, errors);\n }\n finalStyles[prop] = val;\n }));\n }\n }));\n return finalStyles;\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n AnimationStateStyles.prototype.styles;\n /**\n * @type {?}\n * @private\n */\n AnimationStateStyles.prototype.defaultParams;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/dsl/animation_trigger.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * \\@publicApi\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\nfunction buildTrigger(name, ast) {\n return new AnimationTrigger(name, ast);\n}\n/**\n * \\@publicApi\n */\nclass AnimationTrigger {\n /**\n * @param {?} name\n * @param {?} ast\n */\n constructor(name, ast) {\n this.name = name;\n this.ast = ast;\n this.transitionFactories = [];\n this.states = {};\n ast.states.forEach((/**\n * @param {?} ast\n * @return {?}\n */\n ast => {\n /** @type {?} */\n const defaultParams = (ast.options && ast.options.params) || {};\n this.states[ast.name] = new AnimationStateStyles(ast.style, defaultParams);\n }));\n balanceProperties(this.states, 'true', '1');\n balanceProperties(this.states, 'false', '0');\n ast.transitions.forEach((/**\n * @param {?} ast\n * @return {?}\n */\n ast => {\n this.transitionFactories.push(new AnimationTransitionFactory(name, ast, this.states));\n }));\n this.fallbackTransition = createFallbackTransition(name, this.states);\n }\n /**\n * @return {?}\n */\n get containsQueries() { return this.ast.queryCount > 0; }\n /**\n * @param {?} currentState\n * @param {?} nextState\n * @param {?} element\n * @param {?} params\n * @return {?}\n */\n matchTransition(currentState, nextState, element, params) {\n /** @type {?} */\n const entry = this.transitionFactories.find((/**\n * @param {?} f\n * @return {?}\n */\n f => f.match(currentState, nextState, element, params)));\n return entry || null;\n }\n /**\n * @param {?} currentState\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\n matchStyles(currentState, params, errors) {\n return this.fallbackTransition.buildStyles(currentState, params, errors);\n }\n}\nif (false) {\n /** @type {?} */\n AnimationTrigger.prototype.transitionFactories;\n /** @type {?} */\n AnimationTrigger.prototype.fallbackTransition;\n /** @type {?} */\n AnimationTrigger.prototype.states;\n /** @type {?} */\n AnimationTrigger.prototype.name;\n /** @type {?} */\n AnimationTrigger.prototype.ast;\n}\n/**\n * @param {?} triggerName\n * @param {?} states\n * @return {?}\n */\nfunction createFallbackTransition(triggerName, states) {\n /** @type {?} */\n const matchers = [(/**\n * @param {?} fromState\n * @param {?} toState\n * @return {?}\n */\n (fromState, toState) => true)];\n /** @type {?} */\n const animation = { type: 2 /* Sequence */, steps: [], options: null };\n /** @type {?} */\n const transition = {\n type: 1 /* Transition */,\n animation,\n matchers,\n options: null,\n queryCount: 0,\n depCount: 0\n };\n return new AnimationTransitionFactory(triggerName, transition, states);\n}\n/**\n * @param {?} obj\n * @param {?} key1\n * @param {?} key2\n * @return {?}\n */\nfunction balanceProperties(obj, key1, key2) {\n if (obj.hasOwnProperty(key1)) {\n if (!obj.hasOwnProperty(key2)) {\n obj[key2] = obj[key1];\n }\n }\n else if (obj.hasOwnProperty(key2)) {\n obj[key1] = obj[key2];\n }\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/timeline_animation_engine.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nclass TimelineAnimationEngine {\n /**\n * @param {?} bodyNode\n * @param {?} _driver\n * @param {?} _normalizer\n */\n constructor(bodyNode, _driver, _normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._normalizer = _normalizer;\n this._animations = {};\n this._playersById = {};\n this.players = [];\n }\n /**\n * @param {?} id\n * @param {?} metadata\n * @return {?}\n */\n register(id, metadata) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const ast = buildAnimationAst(this._driver, metadata, errors);\n if (errors.length) {\n throw new Error(`Unable to build the animation due to the following errors: ${errors.join(\"\\n\")}`);\n }\n else {\n this._animations[id] = ast;\n }\n }\n /**\n * @private\n * @param {?} i\n * @param {?} preStyles\n * @param {?=} postStyles\n * @return {?}\n */\n _buildPlayer(i, preStyles, postStyles) {\n /** @type {?} */\n const element = i.element;\n /** @type {?} */\n const keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, [], true);\n }\n /**\n * @param {?} id\n * @param {?} element\n * @param {?=} options\n * @return {?}\n */\n create(id, element, options = {}) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const ast = this._animations[id];\n /** @type {?} */\n let instructions;\n /** @type {?} */\n const autoStylesMap = new Map();\n if (ast) {\n instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);\n instructions.forEach((/**\n * @param {?} inst\n * @return {?}\n */\n inst => {\n /** @type {?} */\n const styles = getOrSetAsInMap(autoStylesMap, inst.element, {});\n inst.postStyleProps.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => styles[prop] = null));\n }));\n }\n else {\n errors.push('The requested animation doesn\\'t exist or has already been destroyed');\n instructions = [];\n }\n if (errors.length) {\n throw new Error(`Unable to create the animation due to the following errors: ${errors.join(\"\\n\")}`);\n }\n autoStylesMap.forEach((/**\n * @param {?} styles\n * @param {?} element\n * @return {?}\n */\n (styles, element) => {\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => { styles[prop] = this._driver.computeStyle(element, prop, AUTO_STYLE); }));\n }));\n /** @type {?} */\n const players = instructions.map((/**\n * @param {?} i\n * @return {?}\n */\n i => {\n /** @type {?} */\n const styles = autoStylesMap.get(i.element);\n return this._buildPlayer(i, {}, styles);\n }));\n /** @type {?} */\n const player = optimizeGroupPlayer(players);\n this._playersById[id] = player;\n player.onDestroy((/**\n * @return {?}\n */\n () => this.destroy(id)));\n this.players.push(player);\n return player;\n }\n /**\n * @param {?} id\n * @return {?}\n */\n destroy(id) {\n /** @type {?} */\n const player = this._getPlayer(id);\n player.destroy();\n delete this._playersById[id];\n /** @type {?} */\n const index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n }\n /**\n * @private\n * @param {?} id\n * @return {?}\n */\n _getPlayer(id) {\n /** @type {?} */\n const player = this._playersById[id];\n if (!player) {\n throw new Error(`Unable to find the timeline player referenced by ${id}`);\n }\n return player;\n }\n /**\n * @param {?} id\n * @param {?} element\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n listen(id, element, eventName, callback) {\n // triggerName, fromState, toState are all ignored for timeline animations\n /** @type {?} */\n const baseEvent = makeAnimationEvent(element, '', '', '');\n listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n return (/**\n * @return {?}\n */\n () => { });\n }\n /**\n * @param {?} id\n * @param {?} element\n * @param {?} command\n * @param {?} args\n * @return {?}\n */\n command(id, element, command, args) {\n if (command == 'register') {\n this.register(id, (/** @type {?} */ (args[0])));\n return;\n }\n if (command == 'create') {\n /** @type {?} */\n const options = (/** @type {?} */ ((args[0] || {})));\n this.create(id, element, options);\n return;\n }\n /** @type {?} */\n const player = this._getPlayer(id);\n switch (command) {\n case 'play':\n player.play();\n break;\n case 'pause':\n player.pause();\n break;\n case 'reset':\n player.reset();\n break;\n case 'restart':\n player.restart();\n break;\n case 'finish':\n player.finish();\n break;\n case 'init':\n player.init();\n break;\n case 'setPosition':\n player.setPosition(parseFloat((/** @type {?} */ (args[0]))));\n break;\n case 'destroy':\n this.destroy(id);\n break;\n }\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n TimelineAnimationEngine.prototype._animations;\n /**\n * @type {?}\n * @private\n */\n TimelineAnimationEngine.prototype._playersById;\n /** @type {?} */\n TimelineAnimationEngine.prototype.players;\n /** @type {?} */\n TimelineAnimationEngine.prototype.bodyNode;\n /**\n * @type {?}\n * @private\n */\n TimelineAnimationEngine.prototype._driver;\n /**\n * @type {?}\n * @private\n */\n TimelineAnimationEngine.prototype._normalizer;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/transition_animation_engine.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst QUEUED_CLASSNAME = 'ng-animate-queued';\n/** @type {?} */\nconst QUEUED_SELECTOR = '.ng-animate-queued';\n/** @type {?} */\nconst DISABLED_CLASSNAME = 'ng-animate-disabled';\n/** @type {?} */\nconst DISABLED_SELECTOR = '.ng-animate-disabled';\n/** @type {?} */\nconst STAR_CLASSNAME = 'ng-star-inserted';\n/** @type {?} */\nconst STAR_SELECTOR = '.ng-star-inserted';\n/** @type {?} */\nconst EMPTY_PLAYER_ARRAY = [];\n/** @type {?} */\nconst NULL_REMOVAL_STATE = {\n namespaceId: '',\n setForRemoval: false,\n setForMove: false,\n hasAnimation: false,\n removedBeforeQueried: false\n};\n/** @type {?} */\nconst NULL_REMOVED_QUERIED_STATE = {\n namespaceId: '',\n setForMove: false,\n setForRemoval: false,\n hasAnimation: false,\n removedBeforeQueried: true\n};\n/**\n * @record\n */\nfunction TriggerListener() { }\nif (false) {\n /** @type {?} */\n TriggerListener.prototype.name;\n /** @type {?} */\n TriggerListener.prototype.phase;\n /** @type {?} */\n TriggerListener.prototype.callback;\n}\n/**\n * @record\n */\nfunction QueueInstruction() { }\nif (false) {\n /** @type {?} */\n QueueInstruction.prototype.element;\n /** @type {?} */\n QueueInstruction.prototype.triggerName;\n /** @type {?} */\n QueueInstruction.prototype.fromState;\n /** @type {?} */\n QueueInstruction.prototype.toState;\n /** @type {?} */\n QueueInstruction.prototype.transition;\n /** @type {?} */\n QueueInstruction.prototype.player;\n /** @type {?} */\n QueueInstruction.prototype.isFallbackTransition;\n}\n/** @type {?} */\nconst REMOVAL_FLAG = '__ng_removed';\n/**\n * @record\n */\nfunction ElementAnimationState() { }\nif (false) {\n /** @type {?} */\n ElementAnimationState.prototype.setForRemoval;\n /** @type {?} */\n ElementAnimationState.prototype.setForMove;\n /** @type {?} */\n ElementAnimationState.prototype.hasAnimation;\n /** @type {?} */\n ElementAnimationState.prototype.namespaceId;\n /** @type {?} */\n ElementAnimationState.prototype.removedBeforeQueried;\n}\nclass StateValue {\n /**\n * @param {?} input\n * @param {?=} namespaceId\n */\n constructor(input, namespaceId = '') {\n this.namespaceId = namespaceId;\n /** @type {?} */\n const isObj = input && input.hasOwnProperty('value');\n /** @type {?} */\n const value = isObj ? input['value'] : input;\n this.value = normalizeTriggerValue(value);\n if (isObj) {\n /** @type {?} */\n const options = copyObj((/** @type {?} */ (input)));\n delete options['value'];\n this.options = (/** @type {?} */ (options));\n }\n else {\n this.options = {};\n }\n if (!this.options.params) {\n this.options.params = {};\n }\n }\n /**\n * @return {?}\n */\n get params() { return (/** @type {?} */ (this.options.params)); }\n /**\n * @param {?} options\n * @return {?}\n */\n absorbOptions(options) {\n /** @type {?} */\n const newParams = options.params;\n if (newParams) {\n /** @type {?} */\n const oldParams = (/** @type {?} */ (this.options.params));\n Object.keys(newParams).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (oldParams[prop] == null) {\n oldParams[prop] = newParams[prop];\n }\n }));\n }\n }\n}\nif (false) {\n /** @type {?} */\n StateValue.prototype.value;\n /** @type {?} */\n StateValue.prototype.options;\n /** @type {?} */\n StateValue.prototype.namespaceId;\n}\n/** @type {?} */\nconst VOID_VALUE = 'void';\n/** @type {?} */\nconst DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nclass AnimationTransitionNamespace {\n /**\n * @param {?} id\n * @param {?} hostElement\n * @param {?} _engine\n */\n constructor(id, hostElement, _engine) {\n this.id = id;\n this.hostElement = hostElement;\n this._engine = _engine;\n this.players = [];\n this._triggers = {};\n this._queue = [];\n this._elementListeners = new Map();\n this._hostClassName = 'ng-tns-' + id;\n addClass(hostElement, this._hostClassName);\n }\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} phase\n * @param {?} callback\n * @return {?}\n */\n listen(element, name, phase, callback) {\n if (!this._triggers.hasOwnProperty(name)) {\n throw new Error(`Unable to listen on the animation trigger event \"${phase}\" because the animation trigger \"${name}\" doesn\\'t exist!`);\n }\n if (phase == null || phase.length == 0) {\n throw new Error(`Unable to listen on the animation trigger \"${name}\" because the provided event is undefined!`);\n }\n if (!isTriggerEventValid(phase)) {\n throw new Error(`The provided animation trigger event \"${phase}\" for the animation trigger \"${name}\" is not supported!`);\n }\n /** @type {?} */\n const listeners = getOrSetAsInMap(this._elementListeners, element, []);\n /** @type {?} */\n const data = { name, phase, callback };\n listeners.push(data);\n /** @type {?} */\n const triggersWithStates = getOrSetAsInMap(this._engine.statesByElement, element, {});\n if (!triggersWithStates.hasOwnProperty(name)) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n triggersWithStates[name] = DEFAULT_STATE_VALUE;\n }\n return (/**\n * @return {?}\n */\n () => {\n // the event listener is removed AFTER the flush has occurred such\n // that leave animations callbacks can fire (otherwise if the node\n // is removed in between then the listeners would be deregistered)\n this._engine.afterFlush((/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n const index = listeners.indexOf(data);\n if (index >= 0) {\n listeners.splice(index, 1);\n }\n if (!this._triggers[name]) {\n delete triggersWithStates[name];\n }\n }));\n });\n }\n /**\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\n register(name, ast) {\n if (this._triggers[name]) {\n // throw\n return false;\n }\n else {\n this._triggers[name] = ast;\n return true;\n }\n }\n /**\n * @private\n * @param {?} name\n * @return {?}\n */\n _getTrigger(name) {\n /** @type {?} */\n const trigger = this._triggers[name];\n if (!trigger) {\n throw new Error(`The provided animation trigger \"${name}\" has not been registered!`);\n }\n return trigger;\n }\n /**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} value\n * @param {?=} defaultToFallback\n * @return {?}\n */\n trigger(element, triggerName, value, defaultToFallback = true) {\n /** @type {?} */\n const trigger = this._getTrigger(triggerName);\n /** @type {?} */\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n /** @type {?} */\n let triggersWithStates = this._engine.statesByElement.get(element);\n if (!triggersWithStates) {\n addClass(element, NG_TRIGGER_CLASSNAME);\n addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n this._engine.statesByElement.set(element, triggersWithStates = {});\n }\n /** @type {?} */\n let fromState = triggersWithStates[triggerName];\n /** @type {?} */\n const toState = new StateValue(value, this.id);\n /** @type {?} */\n const isObj = value && value.hasOwnProperty('value');\n if (!isObj && fromState) {\n toState.absorbOptions(fromState.options);\n }\n triggersWithStates[triggerName] = toState;\n if (!fromState) {\n fromState = DEFAULT_STATE_VALUE;\n }\n /** @type {?} */\n const isRemoval = toState.value === VOID_VALUE;\n // normally this isn't reached by here, however, if an object expression\n // is passed in then it may be a new object each time. Comparing the value\n // is important since that will stay the same despite there being a new object.\n // The removal arc here is special cased because the same element is triggered\n // twice in the event that it contains animations on the outer/inner portions\n // of the host container\n if (!isRemoval && fromState.value === toState.value) {\n // this means that despite the value not changing, some inner params\n // have changed which means that the animation final styles need to be applied\n if (!objEquals(fromState.params, toState.params)) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const fromStyles = trigger.matchStyles(fromState.value, fromState.params, errors);\n /** @type {?} */\n const toStyles = trigger.matchStyles(toState.value, toState.params, errors);\n if (errors.length) {\n this._engine.reportError(errors);\n }\n else {\n this._engine.afterFlush((/**\n * @return {?}\n */\n () => {\n eraseStyles(element, fromStyles);\n setStyles(element, toStyles);\n }));\n }\n }\n return;\n }\n /** @type {?} */\n const playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);\n playersOnElement.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n // only remove the player if it is queued on the EXACT same trigger/namespace\n // we only also deal with queued players here because if the animation has\n // started then we want to keep the player alive until the flush happens\n // (which is where the previousPlayers are passed into the new palyer)\n if (player.namespaceId == this.id && player.triggerName == triggerName && player.queued) {\n player.destroy();\n }\n }));\n /** @type {?} */\n let transition = trigger.matchTransition(fromState.value, toState.value, element, toState.params);\n /** @type {?} */\n let isFallbackTransition = false;\n if (!transition) {\n if (!defaultToFallback)\n return;\n transition = trigger.fallbackTransition;\n isFallbackTransition = true;\n }\n this._engine.totalQueuedPlayers++;\n this._queue.push({ element, triggerName, transition, fromState, toState, player, isFallbackTransition });\n if (!isFallbackTransition) {\n addClass(element, QUEUED_CLASSNAME);\n player.onStart((/**\n * @return {?}\n */\n () => { removeClass(element, QUEUED_CLASSNAME); }));\n }\n player.onDone((/**\n * @return {?}\n */\n () => {\n /** @type {?} */\n let index = this.players.indexOf(player);\n if (index >= 0) {\n this.players.splice(index, 1);\n }\n /** @type {?} */\n const players = this._engine.playersByElement.get(element);\n if (players) {\n /** @type {?} */\n let index = players.indexOf(player);\n if (index >= 0) {\n players.splice(index, 1);\n }\n }\n }));\n this.players.push(player);\n playersOnElement.push(player);\n return player;\n }\n /**\n * @param {?} name\n * @return {?}\n */\n deregister(name) {\n delete this._triggers[name];\n this._engine.statesByElement.forEach((/**\n * @param {?} stateMap\n * @param {?} element\n * @return {?}\n */\n (stateMap, element) => { delete stateMap[name]; }));\n this._elementListeners.forEach((/**\n * @param {?} listeners\n * @param {?} element\n * @return {?}\n */\n (listeners, element) => {\n this._elementListeners.set(element, listeners.filter((/**\n * @param {?} entry\n * @return {?}\n */\n entry => { return entry.name != name; })));\n }));\n }\n /**\n * @param {?} element\n * @return {?}\n */\n clearElementCache(element) {\n this._engine.statesByElement.delete(element);\n this._elementListeners.delete(element);\n /** @type {?} */\n const elementPlayers = this._engine.playersByElement.get(element);\n if (elementPlayers) {\n elementPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => player.destroy()));\n this._engine.playersByElement.delete(element);\n }\n }\n /**\n * @private\n * @param {?} rootElement\n * @param {?} context\n * @return {?}\n */\n _signalRemovalForInnerTriggers(rootElement, context) {\n /** @type {?} */\n const elements = this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true);\n // emulate a leave animation for all inner nodes within this node.\n // If there are no animations found for any of the nodes then clear the cache\n // for the element.\n elements.forEach((/**\n * @param {?} elm\n * @return {?}\n */\n elm => {\n // this means that an inner remove() operation has already kicked off\n // the animation on this element...\n if (elm[REMOVAL_FLAG])\n return;\n /** @type {?} */\n const namespaces = this._engine.fetchNamespacesByElement(elm);\n if (namespaces.size) {\n namespaces.forEach((/**\n * @param {?} ns\n * @return {?}\n */\n ns => ns.triggerLeaveAnimation(elm, context, false, true)));\n }\n else {\n this.clearElementCache(elm);\n }\n }));\n // If the child elements were removed along with the parent, their animations might not\n // have completed. Clear all the elements from the cache so we don't end up with a memory leak.\n this._engine.afterFlushAnimationsDone((/**\n * @return {?}\n */\n () => elements.forEach((/**\n * @param {?} elm\n * @return {?}\n */\n elm => this.clearElementCache(elm)))));\n }\n /**\n * @param {?} element\n * @param {?} context\n * @param {?=} destroyAfterComplete\n * @param {?=} defaultToFallback\n * @return {?}\n */\n triggerLeaveAnimation(element, context, destroyAfterComplete, defaultToFallback) {\n /** @type {?} */\n const triggerStates = this._engine.statesByElement.get(element);\n if (triggerStates) {\n /** @type {?} */\n const players = [];\n Object.keys(triggerStates).forEach((/**\n * @param {?} triggerName\n * @return {?}\n */\n triggerName => {\n // this check is here in the event that an element is removed\n // twice (both on the host level and the component level)\n if (this._triggers[triggerName]) {\n /** @type {?} */\n const player = this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n if (player) {\n players.push(player);\n }\n }\n }));\n if (players.length) {\n this._engine.markElementAsRemoved(this.id, element, true, context);\n if (destroyAfterComplete) {\n optimizeGroupPlayer(players).onDone((/**\n * @return {?}\n */\n () => this._engine.processLeaveNode(element)));\n }\n return true;\n }\n }\n return false;\n }\n /**\n * @param {?} element\n * @return {?}\n */\n prepareLeaveAnimationListeners(element) {\n /** @type {?} */\n const listeners = this._elementListeners.get(element);\n if (listeners) {\n /** @type {?} */\n const visitedTriggers = new Set();\n listeners.forEach((/**\n * @param {?} listener\n * @return {?}\n */\n listener => {\n /** @type {?} */\n const triggerName = listener.name;\n if (visitedTriggers.has(triggerName))\n return;\n visitedTriggers.add(triggerName);\n /** @type {?} */\n const trigger = this._triggers[triggerName];\n /** @type {?} */\n const transition = trigger.fallbackTransition;\n /** @type {?} */\n const elementStates = (/** @type {?} */ (this._engine.statesByElement.get(element)));\n /** @type {?} */\n const fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;\n /** @type {?} */\n const toState = new StateValue(VOID_VALUE);\n /** @type {?} */\n const player = new TransitionAnimationPlayer(this.id, triggerName, element);\n this._engine.totalQueuedPlayers++;\n this._queue.push({\n element,\n triggerName,\n transition,\n fromState,\n toState,\n player,\n isFallbackTransition: true\n });\n }));\n }\n }\n /**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n removeNode(element, context) {\n /** @type {?} */\n const engine = this._engine;\n if (element.childElementCount) {\n this._signalRemovalForInnerTriggers(element, context);\n }\n // this means that a * => VOID animation was detected and kicked off\n if (this.triggerLeaveAnimation(element, context, true))\n return;\n // find the player that is animating and make sure that the\n // removal is delayed until that player has completed\n /** @type {?} */\n let containsPotentialParentTransition = false;\n if (engine.totalAnimations) {\n /** @type {?} */\n const currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n // when this `if statement` does not continue forward it means that\n // a previous animation query has selected the current element and\n // is animating it. In this situation want to continue forwards and\n // allow the element to be queued up for animation later.\n if (currentPlayers && currentPlayers.length) {\n containsPotentialParentTransition = true;\n }\n else {\n /** @type {?} */\n let parent = element;\n while (parent = parent.parentNode) {\n /** @type {?} */\n const triggers = engine.statesByElement.get(parent);\n if (triggers) {\n containsPotentialParentTransition = true;\n break;\n }\n }\n }\n }\n // at this stage we know that the element will either get removed\n // during flush or will be picked up by a parent query. Either way\n // we need to fire the listeners for this element when it DOES get\n // removed (once the query parent animation is done or after flush)\n this.prepareLeaveAnimationListeners(element);\n // whether or not a parent has an animation we need to delay the deferral of the leave\n // operation until we have more information (which we do after flush() has been called)\n if (containsPotentialParentTransition) {\n engine.markElementAsRemoved(this.id, element, false, context);\n }\n else {\n /** @type {?} */\n const removalFlag = element[REMOVAL_FLAG];\n if (!removalFlag || removalFlag === NULL_REMOVAL_STATE) {\n // we do this after the flush has occurred such\n // that the callbacks can be fired\n engine.afterFlush((/**\n * @return {?}\n */\n () => this.clearElementCache(element)));\n engine.destroyInnerAnimations(element);\n engine._onRemovalComplete(element, context);\n }\n }\n }\n /**\n * @param {?} element\n * @param {?} parent\n * @return {?}\n */\n insertNode(element, parent) { addClass(element, this._hostClassName); }\n /**\n * @param {?} microtaskId\n * @return {?}\n */\n drainQueuedTransitions(microtaskId) {\n /** @type {?} */\n const instructions = [];\n this._queue.forEach((/**\n * @param {?} entry\n * @return {?}\n */\n entry => {\n /** @type {?} */\n const player = entry.player;\n if (player.destroyed)\n return;\n /** @type {?} */\n const element = entry.element;\n /** @type {?} */\n const listeners = this._elementListeners.get(element);\n if (listeners) {\n listeners.forEach((/**\n * @param {?} listener\n * @return {?}\n */\n (listener) => {\n if (listener.name == entry.triggerName) {\n /** @type {?} */\n const baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n ((/** @type {?} */ (baseEvent)))['_data'] = microtaskId;\n listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n }\n }));\n }\n if (player.markedForDestroy) {\n this._engine.afterFlush((/**\n * @return {?}\n */\n () => {\n // now we can destroy the element properly since the event listeners have\n // been bound to the player\n player.destroy();\n }));\n }\n else {\n instructions.push(entry);\n }\n }));\n this._queue = [];\n return instructions.sort((/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\n (a, b) => {\n // if depCount == 0 them move to front\n // otherwise if a contains b then move back\n /** @type {?} */\n const d0 = a.transition.ast.depCount;\n /** @type {?} */\n const d1 = b.transition.ast.depCount;\n if (d0 == 0 || d1 == 0) {\n return d0 - d1;\n }\n return this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n }));\n }\n /**\n * @param {?} context\n * @return {?}\n */\n destroy(context) {\n this.players.forEach((/**\n * @param {?} p\n * @return {?}\n */\n p => p.destroy()));\n this._signalRemovalForInnerTriggers(this.hostElement, context);\n }\n /**\n * @param {?} element\n * @return {?}\n */\n elementContainsData(element) {\n /** @type {?} */\n let containsData = false;\n if (this._elementListeners.has(element))\n containsData = true;\n containsData =\n (this._queue.find((/**\n * @param {?} entry\n * @return {?}\n */\n entry => entry.element === element)) ? true : false) || containsData;\n return containsData;\n }\n}\nif (false) {\n /** @type {?} */\n AnimationTransitionNamespace.prototype.players;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionNamespace.prototype._triggers;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionNamespace.prototype._queue;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionNamespace.prototype._elementListeners;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionNamespace.prototype._hostClassName;\n /** @type {?} */\n AnimationTransitionNamespace.prototype.id;\n /** @type {?} */\n AnimationTransitionNamespace.prototype.hostElement;\n /**\n * @type {?}\n * @private\n */\n AnimationTransitionNamespace.prototype._engine;\n}\n/**\n * @record\n */\nfunction QueuedTransition() { }\nif (false) {\n /** @type {?} */\n QueuedTransition.prototype.element;\n /** @type {?} */\n QueuedTransition.prototype.instruction;\n /** @type {?} */\n QueuedTransition.prototype.player;\n}\nclass TransitionAnimationEngine {\n /**\n * @param {?} bodyNode\n * @param {?} driver\n * @param {?} _normalizer\n */\n constructor(bodyNode, driver, _normalizer) {\n this.bodyNode = bodyNode;\n this.driver = driver;\n this._normalizer = _normalizer;\n this.players = [];\n this.newHostElements = new Map();\n this.playersByElement = new Map();\n this.playersByQueriedElement = new Map();\n this.statesByElement = new Map();\n this.disabledNodes = new Set();\n this.totalAnimations = 0;\n this.totalQueuedPlayers = 0;\n this._namespaceLookup = {};\n this._namespaceList = [];\n this._flushFns = [];\n this._whenQuietFns = [];\n this.namespacesByHostElement = new Map();\n this.collectedEnterElements = [];\n this.collectedLeaveElements = [];\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (/**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n (element, context) => { });\n }\n /**\n * \\@internal\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n _onRemovalComplete(element, context) { this.onRemovalComplete(element, context); }\n /**\n * @return {?}\n */\n get queuedPlayers() {\n /** @type {?} */\n const players = [];\n this._namespaceList.forEach((/**\n * @param {?} ns\n * @return {?}\n */\n ns => {\n ns.players.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n if (player.queued) {\n players.push(player);\n }\n }));\n }));\n return players;\n }\n /**\n * @param {?} namespaceId\n * @param {?} hostElement\n * @return {?}\n */\n createNamespace(namespaceId, hostElement) {\n /** @type {?} */\n const ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n if (hostElement.parentNode) {\n this._balanceNamespaceList(ns, hostElement);\n }\n else {\n // defer this later until flush during when the host element has\n // been inserted so that we know exactly where to place it in\n // the namespace list\n this.newHostElements.set(hostElement, ns);\n // given that this host element is apart of the animation code, it\n // may or may not be inserted by a parent node that is an of an\n // animation renderer type. If this happens then we can still have\n // access to this item when we query for :enter nodes. If the parent\n // is a renderer then the set data-structure will normalize the entry\n this.collectEnterElement(hostElement);\n }\n return this._namespaceLookup[namespaceId] = ns;\n }\n /**\n * @private\n * @param {?} ns\n * @param {?} hostElement\n * @return {?}\n */\n _balanceNamespaceList(ns, hostElement) {\n /** @type {?} */\n const limit = this._namespaceList.length - 1;\n if (limit >= 0) {\n /** @type {?} */\n let found = false;\n for (let i = limit; i >= 0; i--) {\n /** @type {?} */\n const nextNamespace = this._namespaceList[i];\n if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {\n this._namespaceList.splice(i + 1, 0, ns);\n found = true;\n break;\n }\n }\n if (!found) {\n this._namespaceList.splice(0, 0, ns);\n }\n }\n else {\n this._namespaceList.push(ns);\n }\n this.namespacesByHostElement.set(hostElement, ns);\n return ns;\n }\n /**\n * @param {?} namespaceId\n * @param {?} hostElement\n * @return {?}\n */\n register(namespaceId, hostElement) {\n /** @type {?} */\n let ns = this._namespaceLookup[namespaceId];\n if (!ns) {\n ns = this.createNamespace(namespaceId, hostElement);\n }\n return ns;\n }\n /**\n * @param {?} namespaceId\n * @param {?} name\n * @param {?} trigger\n * @return {?}\n */\n registerTrigger(namespaceId, name, trigger) {\n /** @type {?} */\n let ns = this._namespaceLookup[namespaceId];\n if (ns && ns.register(name, trigger)) {\n this.totalAnimations++;\n }\n }\n /**\n * @param {?} namespaceId\n * @param {?} context\n * @return {?}\n */\n destroy(namespaceId, context) {\n if (!namespaceId)\n return;\n /** @type {?} */\n const ns = this._fetchNamespace(namespaceId);\n this.afterFlush((/**\n * @return {?}\n */\n () => {\n this.namespacesByHostElement.delete(ns.hostElement);\n delete this._namespaceLookup[namespaceId];\n /** @type {?} */\n const index = this._namespaceList.indexOf(ns);\n if (index >= 0) {\n this._namespaceList.splice(index, 1);\n }\n }));\n this.afterFlushAnimationsDone((/**\n * @return {?}\n */\n () => ns.destroy(context)));\n }\n /**\n * @private\n * @param {?} id\n * @return {?}\n */\n _fetchNamespace(id) { return this._namespaceLookup[id]; }\n /**\n * @param {?} element\n * @return {?}\n */\n fetchNamespacesByElement(element) {\n // normally there should only be one namespace per element, however\n // if @triggers are placed on both the component element and then\n // its host element (within the component code) then there will be\n // two namespaces returned. We use a set here to simply the dedupe\n // of namespaces incase there are multiple triggers both the elm and host\n /** @type {?} */\n const namespaces = new Set();\n /** @type {?} */\n const elementStates = this.statesByElement.get(element);\n if (elementStates) {\n /** @type {?} */\n const keys = Object.keys(elementStates);\n for (let i = 0; i < keys.length; i++) {\n /** @type {?} */\n const nsId = elementStates[keys[i]].namespaceId;\n if (nsId) {\n /** @type {?} */\n const ns = this._fetchNamespace(nsId);\n if (ns) {\n namespaces.add(ns);\n }\n }\n }\n }\n return namespaces;\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n trigger(namespaceId, element, name, value) {\n if (isElementNode(element)) {\n /** @type {?} */\n const ns = this._fetchNamespace(namespaceId);\n if (ns) {\n ns.trigger(element, name, value);\n return true;\n }\n }\n return false;\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} parent\n * @param {?} insertBefore\n * @return {?}\n */\n insertNode(namespaceId, element, parent, insertBefore) {\n if (!isElementNode(element))\n return;\n // special case for when an element is removed and reinserted (move operation)\n // when this occurs we do not want to use the element for deletion later\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n if (details && details.setForRemoval) {\n details.setForRemoval = false;\n details.setForMove = true;\n /** @type {?} */\n const index = this.collectedLeaveElements.indexOf(element);\n if (index >= 0) {\n this.collectedLeaveElements.splice(index, 1);\n }\n }\n // in the event that the namespaceId is blank then the caller\n // code does not contain any animation code in it, but it is\n // just being called so that the node is marked as being inserted\n if (namespaceId) {\n /** @type {?} */\n const ns = this._fetchNamespace(namespaceId);\n // This if-statement is a workaround for router issue #21947.\n // The router sometimes hits a race condition where while a route\n // is being instantiated a new navigation arrives, triggering leave\n // animation of DOM that has not been fully initialized, until this\n // is resolved, we need to handle the scenario when DOM is not in a\n // consistent state during the animation.\n if (ns) {\n ns.insertNode(element, parent);\n }\n }\n // only *directives and host elements are inserted before\n if (insertBefore) {\n this.collectEnterElement(element);\n }\n }\n /**\n * @param {?} element\n * @return {?}\n */\n collectEnterElement(element) { this.collectedEnterElements.push(element); }\n /**\n * @param {?} element\n * @param {?} value\n * @return {?}\n */\n markElementAsDisabled(element, value) {\n if (value) {\n if (!this.disabledNodes.has(element)) {\n this.disabledNodes.add(element);\n addClass(element, DISABLED_CLASSNAME);\n }\n }\n else if (this.disabledNodes.has(element)) {\n this.disabledNodes.delete(element);\n removeClass(element, DISABLED_CLASSNAME);\n }\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} isHostElement\n * @param {?} context\n * @return {?}\n */\n removeNode(namespaceId, element, isHostElement, context) {\n if (isElementNode(element)) {\n /** @type {?} */\n const ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n if (ns) {\n ns.removeNode(element, context);\n }\n else {\n this.markElementAsRemoved(namespaceId, element, false, context);\n }\n if (isHostElement) {\n /** @type {?} */\n const hostNS = this.namespacesByHostElement.get(element);\n if (hostNS && hostNS.id !== namespaceId) {\n hostNS.removeNode(element, context);\n }\n }\n }\n else {\n this._onRemovalComplete(element, context);\n }\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?=} hasAnimation\n * @param {?=} context\n * @return {?}\n */\n markElementAsRemoved(namespaceId, element, hasAnimation, context) {\n this.collectedLeaveElements.push(element);\n element[REMOVAL_FLAG] = {\n namespaceId,\n setForRemoval: context, hasAnimation,\n removedBeforeQueried: false\n };\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} name\n * @param {?} phase\n * @param {?} callback\n * @return {?}\n */\n listen(namespaceId, element, name, phase, callback) {\n if (isElementNode(element)) {\n return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n }\n return (/**\n * @return {?}\n */\n () => { });\n }\n /**\n * @private\n * @param {?} entry\n * @param {?} subTimelines\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?=} skipBuildAst\n * @return {?}\n */\n _buildInstruction(entry, subTimelines, enterClassName, leaveClassName, skipBuildAst) {\n return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines, skipBuildAst);\n }\n /**\n * @param {?} containerElement\n * @return {?}\n */\n destroyInnerAnimations(containerElement) {\n /** @type {?} */\n let elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n elements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => this.destroyActiveAnimationsForElement(element)));\n if (this.playersByQueriedElement.size == 0)\n return;\n elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n elements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => this.finishActiveQueriedAnimationOnElement(element)));\n }\n /**\n * @param {?} element\n * @return {?}\n */\n destroyActiveAnimationsForElement(element) {\n /** @type {?} */\n const players = this.playersByElement.get(element);\n if (players) {\n players.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n // special case for when an element is set for destruction, but hasn't started.\n // in this situation we want to delay the destruction until the flush occurs\n // so that any event listeners attached to the player are triggered.\n if (player.queued) {\n player.markedForDestroy = true;\n }\n else {\n player.destroy();\n }\n }));\n }\n }\n /**\n * @param {?} element\n * @return {?}\n */\n finishActiveQueriedAnimationOnElement(element) {\n /** @type {?} */\n const players = this.playersByQueriedElement.get(element);\n if (players) {\n players.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => player.finish()));\n }\n }\n /**\n * @return {?}\n */\n whenRenderingDone() {\n return new Promise((/**\n * @param {?} resolve\n * @return {?}\n */\n resolve => {\n if (this.players.length) {\n return optimizeGroupPlayer(this.players).onDone((/**\n * @return {?}\n */\n () => resolve()));\n }\n else {\n resolve();\n }\n }));\n }\n /**\n * @param {?} element\n * @return {?}\n */\n processLeaveNode(element) {\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n if (details && details.setForRemoval) {\n // this will prevent it from removing it twice\n element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n if (details.namespaceId) {\n this.destroyInnerAnimations(element);\n /** @type {?} */\n const ns = this._fetchNamespace(details.namespaceId);\n if (ns) {\n ns.clearElementCache(element);\n }\n }\n this._onRemovalComplete(element, details.setForRemoval);\n }\n if (this.driver.matchesElement(element, DISABLED_SELECTOR)) {\n this.markElementAsDisabled(element, false);\n }\n this.driver.query(element, DISABLED_SELECTOR, true).forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n this.markElementAsDisabled(node, false);\n }));\n }\n /**\n * @param {?=} microtaskId\n * @return {?}\n */\n flush(microtaskId = -1) {\n /** @type {?} */\n let players = [];\n if (this.newHostElements.size) {\n this.newHostElements.forEach((/**\n * @param {?} ns\n * @param {?} element\n * @return {?}\n */\n (ns, element) => this._balanceNamespaceList(ns, element)));\n this.newHostElements.clear();\n }\n if (this.totalAnimations && this.collectedEnterElements.length) {\n for (let i = 0; i < this.collectedEnterElements.length; i++) {\n /** @type {?} */\n const elm = this.collectedEnterElements[i];\n addClass(elm, STAR_CLASSNAME);\n }\n }\n if (this._namespaceList.length &&\n (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n /** @type {?} */\n const cleanupFns = [];\n try {\n players = this._flushAnimations(cleanupFns, microtaskId);\n }\n finally {\n for (let i = 0; i < cleanupFns.length; i++) {\n cleanupFns[i]();\n }\n }\n }\n else {\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n /** @type {?} */\n const element = this.collectedLeaveElements[i];\n this.processLeaveNode(element);\n }\n }\n this.totalQueuedPlayers = 0;\n this.collectedEnterElements.length = 0;\n this.collectedLeaveElements.length = 0;\n this._flushFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._flushFns = [];\n if (this._whenQuietFns.length) {\n // we move these over to a variable so that\n // if any new callbacks are registered in another\n // flush they do not populate the existing set\n /** @type {?} */\n const quietFns = this._whenQuietFns;\n this._whenQuietFns = [];\n if (players.length) {\n optimizeGroupPlayer(players).onDone((/**\n * @return {?}\n */\n () => { quietFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn())); }));\n }\n else {\n quietFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n }\n }\n }\n /**\n * @param {?} errors\n * @return {?}\n */\n reportError(errors) {\n throw new Error(`Unable to process animations due to the following failed trigger transitions\\n ${errors.join('\\n')}`);\n }\n /**\n * @private\n * @param {?} cleanupFns\n * @param {?} microtaskId\n * @return {?}\n */\n _flushAnimations(cleanupFns, microtaskId) {\n /** @type {?} */\n const subTimelines = new ElementInstructionMap();\n /** @type {?} */\n const skippedPlayers = [];\n /** @type {?} */\n const skippedPlayersMap = new Map();\n /** @type {?} */\n const queuedInstructions = [];\n /** @type {?} */\n const queriedElements = new Map();\n /** @type {?} */\n const allPreStyleElements = new Map();\n /** @type {?} */\n const allPostStyleElements = new Map();\n /** @type {?} */\n const disabledElementsSet = new Set();\n this.disabledNodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n disabledElementsSet.add(node);\n /** @type {?} */\n const nodesThatAreDisabled = this.driver.query(node, QUEUED_SELECTOR, true);\n for (let i = 0; i < nodesThatAreDisabled.length; i++) {\n disabledElementsSet.add(nodesThatAreDisabled[i]);\n }\n }));\n /** @type {?} */\n const bodyNode = this.bodyNode;\n /** @type {?} */\n const allTriggerElements = Array.from(this.statesByElement.keys());\n /** @type {?} */\n const enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n // this must occur before the instructions are built below such that\n // the :enter queries match the elements (since the timeline queries\n // are fired during instruction building).\n /** @type {?} */\n const enterNodeMapIds = new Map();\n /** @type {?} */\n let i = 0;\n enterNodeMap.forEach((/**\n * @param {?} nodes\n * @param {?} root\n * @return {?}\n */\n (nodes, root) => {\n /** @type {?} */\n const className = ENTER_CLASSNAME + i++;\n enterNodeMapIds.set(root, className);\n nodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => addClass(node, className)));\n }));\n /** @type {?} */\n const allLeaveNodes = [];\n /** @type {?} */\n const mergedLeaveNodes = new Set();\n /** @type {?} */\n const leaveNodesWithoutAnimations = new Set();\n for (let i = 0; i < this.collectedLeaveElements.length; i++) {\n /** @type {?} */\n const element = this.collectedLeaveElements[i];\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n if (details && details.setForRemoval) {\n allLeaveNodes.push(element);\n mergedLeaveNodes.add(element);\n if (details.hasAnimation) {\n this.driver.query(element, STAR_SELECTOR, true).forEach((/**\n * @param {?} elm\n * @return {?}\n */\n elm => mergedLeaveNodes.add(elm)));\n }\n else {\n leaveNodesWithoutAnimations.add(element);\n }\n }\n }\n /** @type {?} */\n const leaveNodeMapIds = new Map();\n /** @type {?} */\n const leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n leaveNodeMap.forEach((/**\n * @param {?} nodes\n * @param {?} root\n * @return {?}\n */\n (nodes, root) => {\n /** @type {?} */\n const className = LEAVE_CLASSNAME + i++;\n leaveNodeMapIds.set(root, className);\n nodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => addClass(node, className)));\n }));\n cleanupFns.push((/**\n * @return {?}\n */\n () => {\n enterNodeMap.forEach((/**\n * @param {?} nodes\n * @param {?} root\n * @return {?}\n */\n (nodes, root) => {\n /** @type {?} */\n const className = (/** @type {?} */ (enterNodeMapIds.get(root)));\n nodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => removeClass(node, className)));\n }));\n leaveNodeMap.forEach((/**\n * @param {?} nodes\n * @param {?} root\n * @return {?}\n */\n (nodes, root) => {\n /** @type {?} */\n const className = (/** @type {?} */ (leaveNodeMapIds.get(root)));\n nodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => removeClass(node, className)));\n }));\n allLeaveNodes.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => { this.processLeaveNode(element); }));\n }));\n /** @type {?} */\n const allPlayers = [];\n /** @type {?} */\n const erroneousTransitions = [];\n for (let i = this._namespaceList.length - 1; i >= 0; i--) {\n /** @type {?} */\n const ns = this._namespaceList[i];\n ns.drainQueuedTransitions(microtaskId).forEach((/**\n * @param {?} entry\n * @return {?}\n */\n entry => {\n /** @type {?} */\n const player = entry.player;\n /** @type {?} */\n const element = entry.element;\n allPlayers.push(player);\n if (this.collectedEnterElements.length) {\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n // move animations are currently not supported...\n if (details && details.setForMove) {\n player.destroy();\n return;\n }\n }\n /** @type {?} */\n const nodeIsOrphaned = !bodyNode || !this.driver.containsElement(bodyNode, element);\n /** @type {?} */\n const leaveClassName = (/** @type {?} */ (leaveNodeMapIds.get(element)));\n /** @type {?} */\n const enterClassName = (/** @type {?} */ (enterNodeMapIds.get(element)));\n /** @type {?} */\n const instruction = (/** @type {?} */ (this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName, nodeIsOrphaned)));\n if (instruction.errors && instruction.errors.length) {\n erroneousTransitions.push(instruction);\n return;\n }\n // even though the element may not be apart of the DOM, it may\n // still be added at a later point (due to the mechanics of content\n // projection and/or dynamic component insertion) therefore it's\n // important we still style the element.\n if (nodeIsOrphaned) {\n player.onStart((/**\n * @return {?}\n */\n () => eraseStyles(element, instruction.fromStyles)));\n player.onDestroy((/**\n * @return {?}\n */\n () => setStyles(element, instruction.toStyles)));\n skippedPlayers.push(player);\n return;\n }\n // if a unmatched transition is queued to go then it SHOULD NOT render\n // an animation and cancel the previously running animations.\n if (entry.isFallbackTransition) {\n player.onStart((/**\n * @return {?}\n */\n () => eraseStyles(element, instruction.fromStyles)));\n player.onDestroy((/**\n * @return {?}\n */\n () => setStyles(element, instruction.toStyles)));\n skippedPlayers.push(player);\n return;\n }\n // this means that if a parent animation uses this animation as a sub trigger\n // then it will instruct the timeline builder to not add a player delay, but\n // instead stretch the first keyframe gap up until the animation starts. The\n // reason this is important is to prevent extra initialization styles from being\n // required by the user in the animation.\n instruction.timelines.forEach((/**\n * @param {?} tl\n * @return {?}\n */\n tl => tl.stretchStartingKeyframe = true));\n subTimelines.append(element, instruction.timelines);\n /** @type {?} */\n const tuple = { instruction, player, element };\n queuedInstructions.push(tuple);\n instruction.queriedElements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => getOrSetAsInMap(queriedElements, element, []).push(player)));\n instruction.preStyleProps.forEach((/**\n * @param {?} stringMap\n * @param {?} element\n * @return {?}\n */\n (stringMap, element) => {\n /** @type {?} */\n const props = Object.keys(stringMap);\n if (props.length) {\n /** @type {?} */\n let setVal = (/** @type {?} */ (allPreStyleElements.get(element)));\n if (!setVal) {\n allPreStyleElements.set(element, setVal = new Set());\n }\n props.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => setVal.add(prop)));\n }\n }));\n instruction.postStyleProps.forEach((/**\n * @param {?} stringMap\n * @param {?} element\n * @return {?}\n */\n (stringMap, element) => {\n /** @type {?} */\n const props = Object.keys(stringMap);\n /** @type {?} */\n let setVal = (/** @type {?} */ (allPostStyleElements.get(element)));\n if (!setVal) {\n allPostStyleElements.set(element, setVal = new Set());\n }\n props.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => setVal.add(prop)));\n }));\n }));\n }\n if (erroneousTransitions.length) {\n /** @type {?} */\n const errors = [];\n erroneousTransitions.forEach((/**\n * @param {?} instruction\n * @return {?}\n */\n instruction => {\n errors.push(`@${instruction.triggerName} has failed due to:\\n`);\n (/** @type {?} */ (instruction.errors)).forEach((/**\n * @param {?} error\n * @return {?}\n */\n error => errors.push(`- ${error}\\n`)));\n }));\n allPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => player.destroy()));\n this.reportError(errors);\n }\n /** @type {?} */\n const allPreviousPlayersMap = new Map();\n // this map works to tell which element in the DOM tree is contained by\n // which animation. Further down below this map will get populated once\n // the players are built and in doing so it can efficiently figure out\n // if a sub player is skipped due to a parent player having priority.\n /** @type {?} */\n const animationElementMap = new Map();\n queuedInstructions.forEach((/**\n * @param {?} entry\n * @return {?}\n */\n entry => {\n /** @type {?} */\n const element = entry.element;\n if (subTimelines.has(element)) {\n animationElementMap.set(element, element);\n this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n }\n }));\n skippedPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n /** @type {?} */\n const element = player.element;\n /** @type {?} */\n const previousPlayers = this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n previousPlayers.forEach((/**\n * @param {?} prevPlayer\n * @return {?}\n */\n prevPlayer => {\n getOrSetAsInMap(allPreviousPlayersMap, element, []).push(prevPlayer);\n prevPlayer.destroy();\n }));\n }));\n // this is a special case for nodes that will be removed (either by)\n // having their own leave animations or by being queried in a container\n // that will be removed once a parent animation is complete. The idea\n // here is that * styles must be identical to ! styles because of\n // backwards compatibility (* is also filled in by default in many places).\n // Otherwise * styles will return an empty value or auto since the element\n // that is being getComputedStyle'd will not be visible (since * = destination)\n /** @type {?} */\n const replaceNodes = allLeaveNodes.filter((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n }));\n // POST STAGE: fill the * styles\n /** @type {?} */\n const postStylesMap = new Map();\n /** @type {?} */\n const allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n allLeaveQueriedNodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n replaceNodes.push(node);\n }\n }));\n // PRE STAGE: fill the ! styles\n /** @type {?} */\n const preStylesMap = new Map();\n enterNodeMap.forEach((/**\n * @param {?} nodes\n * @param {?} root\n * @return {?}\n */\n (nodes, root) => {\n cloakAndComputeStyles(preStylesMap, this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n }));\n replaceNodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n /** @type {?} */\n const post = postStylesMap.get(node);\n /** @type {?} */\n const pre = preStylesMap.get(node);\n postStylesMap.set(node, (/** @type {?} */ (Object.assign(Object.assign({}, post), pre))));\n }));\n /** @type {?} */\n const rootPlayers = [];\n /** @type {?} */\n const subPlayers = [];\n /** @type {?} */\n const NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n queuedInstructions.forEach((/**\n * @param {?} entry\n * @return {?}\n */\n entry => {\n const { element, player, instruction } = entry;\n // this means that it was never consumed by a parent animation which\n // means that it is independent and therefore should be set for animation\n if (subTimelines.has(element)) {\n if (disabledElementsSet.has(element)) {\n player.onDestroy((/**\n * @return {?}\n */\n () => setStyles(element, instruction.toStyles)));\n player.disabled = true;\n player.overrideTotalTime(instruction.totalTime);\n skippedPlayers.push(player);\n return;\n }\n // this will flow up the DOM and query the map to figure out\n // if a parent animation has priority over it. In the situation\n // that a parent is detected then it will cancel the loop. If\n // nothing is detected, or it takes a few hops to find a parent,\n // then it will fill in the missing nodes and signal them as having\n // a detected parent (or a NO_PARENT value via a special constant).\n /** @type {?} */\n let parentWithAnimation = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n if (animationElementMap.size > 1) {\n /** @type {?} */\n let elm = element;\n /** @type {?} */\n const parentsToAdd = [];\n while (elm = elm.parentNode) {\n /** @type {?} */\n const detectedParent = animationElementMap.get(elm);\n if (detectedParent) {\n parentWithAnimation = detectedParent;\n break;\n }\n parentsToAdd.push(elm);\n }\n parentsToAdd.forEach((/**\n * @param {?} parent\n * @return {?}\n */\n parent => animationElementMap.set(parent, parentWithAnimation)));\n }\n /** @type {?} */\n const innerPlayer = this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n player.setRealPlayer(innerPlayer);\n if (parentWithAnimation === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n rootPlayers.push(player);\n }\n else {\n /** @type {?} */\n const parentPlayers = this.playersByElement.get(parentWithAnimation);\n if (parentPlayers && parentPlayers.length) {\n player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n }\n skippedPlayers.push(player);\n }\n }\n else {\n eraseStyles(element, instruction.fromStyles);\n player.onDestroy((/**\n * @return {?}\n */\n () => setStyles(element, instruction.toStyles)));\n // there still might be a ancestor player animating this\n // element therefore we will still add it as a sub player\n // even if its animation may be disabled\n subPlayers.push(player);\n if (disabledElementsSet.has(element)) {\n skippedPlayers.push(player);\n }\n }\n }));\n // find all of the sub players' corresponding inner animation player\n subPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n // even if any players are not found for a sub animation then it\n // will still complete itself after the next tick since it's Noop\n /** @type {?} */\n const playersForElement = skippedPlayersMap.get(player.element);\n if (playersForElement && playersForElement.length) {\n /** @type {?} */\n const innerPlayer = optimizeGroupPlayer(playersForElement);\n player.setRealPlayer(innerPlayer);\n }\n }));\n // the reason why we don't actually play the animation is\n // because all that a skipped player is designed to do is to\n // fire the start/done transition callback events\n skippedPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n if (player.parentPlayer) {\n player.syncPlayerEvents(player.parentPlayer);\n }\n else {\n player.destroy();\n }\n }));\n // run through all of the queued removals and see if they\n // were picked up by a query. If not then perform the removal\n // operation right away unless a parent animation is ongoing.\n for (let i = 0; i < allLeaveNodes.length; i++) {\n /** @type {?} */\n const element = allLeaveNodes[i];\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n removeClass(element, LEAVE_CLASSNAME);\n // this means the element has a removal animation that is being\n // taken care of and therefore the inner elements will hang around\n // until that animation is over (or the parent queried animation)\n if (details && details.hasAnimation)\n continue;\n /** @type {?} */\n let players = [];\n // if this element is queried or if it contains queried children\n // then we want for the element not to be removed from the page\n // until the queried animations have finished\n if (queriedElements.size) {\n /** @type {?} */\n let queriedPlayerResults = queriedElements.get(element);\n if (queriedPlayerResults && queriedPlayerResults.length) {\n players.push(...queriedPlayerResults);\n }\n /** @type {?} */\n let queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n for (let j = 0; j < queriedInnerElements.length; j++) {\n /** @type {?} */\n let queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n if (queriedPlayers && queriedPlayers.length) {\n players.push(...queriedPlayers);\n }\n }\n }\n /** @type {?} */\n const activePlayers = players.filter((/**\n * @param {?} p\n * @return {?}\n */\n p => !p.destroyed));\n if (activePlayers.length) {\n removeNodesAfterAnimationDone(this, element, activePlayers);\n }\n else {\n this.processLeaveNode(element);\n }\n }\n // this is required so the cleanup method doesn't remove them\n allLeaveNodes.length = 0;\n rootPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n this.players.push(player);\n player.onDone((/**\n * @return {?}\n */\n () => {\n player.destroy();\n /** @type {?} */\n const index = this.players.indexOf(player);\n this.players.splice(index, 1);\n }));\n player.play();\n }));\n return rootPlayers;\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @return {?}\n */\n elementContainsData(namespaceId, element) {\n /** @type {?} */\n let containsData = false;\n /** @type {?} */\n const details = (/** @type {?} */ (element[REMOVAL_FLAG]));\n if (details && details.setForRemoval)\n containsData = true;\n if (this.playersByElement.has(element))\n containsData = true;\n if (this.playersByQueriedElement.has(element))\n containsData = true;\n if (this.statesByElement.has(element))\n containsData = true;\n return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;\n }\n /**\n * @param {?} callback\n * @return {?}\n */\n afterFlush(callback) { this._flushFns.push(callback); }\n /**\n * @param {?} callback\n * @return {?}\n */\n afterFlushAnimationsDone(callback) { this._whenQuietFns.push(callback); }\n /**\n * @private\n * @param {?} element\n * @param {?} isQueriedElement\n * @param {?=} namespaceId\n * @param {?=} triggerName\n * @param {?=} toStateValue\n * @return {?}\n */\n _getPreviousPlayers(element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n /** @type {?} */\n let players = [];\n if (isQueriedElement) {\n /** @type {?} */\n const queriedElementPlayers = this.playersByQueriedElement.get(element);\n if (queriedElementPlayers) {\n players = queriedElementPlayers;\n }\n }\n else {\n /** @type {?} */\n const elementPlayers = this.playersByElement.get(element);\n if (elementPlayers) {\n /** @type {?} */\n const isRemovalAnimation = !toStateValue || toStateValue == VOID_VALUE;\n elementPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n if (player.queued)\n return;\n if (!isRemovalAnimation && player.triggerName != triggerName)\n return;\n players.push(player);\n }));\n }\n }\n if (namespaceId || triggerName) {\n players = players.filter((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n if (namespaceId && namespaceId != player.namespaceId)\n return false;\n if (triggerName && triggerName != player.triggerName)\n return false;\n return true;\n }));\n }\n return players;\n }\n /**\n * @private\n * @param {?} namespaceId\n * @param {?} instruction\n * @param {?} allPreviousPlayersMap\n * @return {?}\n */\n _beforeAnimationBuild(namespaceId, instruction, allPreviousPlayersMap) {\n /** @type {?} */\n const triggerName = instruction.triggerName;\n /** @type {?} */\n const rootElement = instruction.element;\n // when a removal animation occurs, ALL previous players are collected\n // and destroyed (even if they are outside of the current namespace)\n /** @type {?} */\n const targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n /** @type {?} */\n const targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n for (const timelineInstruction of instruction.timelines) {\n /** @type {?} */\n const element = timelineInstruction.element;\n /** @type {?} */\n const isQueriedElement = element !== rootElement;\n /** @type {?} */\n const players = getOrSetAsInMap(allPreviousPlayersMap, element, []);\n /** @type {?} */\n const previousPlayers = this._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n previousPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n /** @type {?} */\n const realPlayer = (/** @type {?} */ (((/** @type {?} */ (player))).getRealPlayer()));\n if (realPlayer.beforeDestroy) {\n realPlayer.beforeDestroy();\n }\n player.destroy();\n players.push(player);\n }));\n }\n // this needs to be done so that the PRE/POST styles can be\n // computed properly without interfering with the previous animation\n eraseStyles(rootElement, instruction.fromStyles);\n }\n /**\n * @private\n * @param {?} namespaceId\n * @param {?} instruction\n * @param {?} allPreviousPlayersMap\n * @param {?} skippedPlayersMap\n * @param {?} preStylesMap\n * @param {?} postStylesMap\n * @return {?}\n */\n _buildAnimation(namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n /** @type {?} */\n const triggerName = instruction.triggerName;\n /** @type {?} */\n const rootElement = instruction.element;\n // we first run this so that the previous animation player\n // data can be passed into the successive animation players\n /** @type {?} */\n const allQueriedPlayers = [];\n /** @type {?} */\n const allConsumedElements = new Set();\n /** @type {?} */\n const allSubElements = new Set();\n /** @type {?} */\n const allNewPlayers = instruction.timelines.map((/**\n * @param {?} timelineInstruction\n * @return {?}\n */\n timelineInstruction => {\n /** @type {?} */\n const element = timelineInstruction.element;\n allConsumedElements.add(element);\n // FIXME (matsko): make sure to-be-removed animations are removed properly\n /** @type {?} */\n const details = element[REMOVAL_FLAG];\n if (details && details.removedBeforeQueried)\n return new NoopAnimationPlayer(timelineInstruction.duration, timelineInstruction.delay);\n /** @type {?} */\n const isQueriedElement = element !== rootElement;\n /** @type {?} */\n const previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n .map((/**\n * @param {?} p\n * @return {?}\n */\n p => p.getRealPlayer())))\n .filter((/**\n * @param {?} p\n * @return {?}\n */\n p => {\n // the `element` is not apart of the AnimationPlayer definition, but\n // Mock/WebAnimations\n // use the element within their implementation. This will be added in Angular5 to\n // AnimationPlayer\n /** @type {?} */\n const pp = (/** @type {?} */ (p));\n return pp.element ? pp.element === element : false;\n }));\n /** @type {?} */\n const preStyles = preStylesMap.get(element);\n /** @type {?} */\n const postStyles = postStylesMap.get(element);\n /** @type {?} */\n const keyframes = normalizeKeyframes(this.driver, this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n /** @type {?} */\n const player = this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n // this means that this particular player belongs to a sub trigger. It is\n // important that we match this player up with the corresponding (@trigger.listener)\n if (timelineInstruction.subTimeline && skippedPlayersMap) {\n allSubElements.add(element);\n }\n if (isQueriedElement) {\n /** @type {?} */\n const wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n wrappedPlayer.setRealPlayer(player);\n allQueriedPlayers.push(wrappedPlayer);\n }\n return player;\n }));\n allQueriedPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n getOrSetAsInMap(this.playersByQueriedElement, player.element, []).push(player);\n player.onDone((/**\n * @return {?}\n */\n () => deleteOrUnsetInMap(this.playersByQueriedElement, player.element, player)));\n }));\n allConsumedElements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => addClass(element, NG_ANIMATING_CLASSNAME)));\n /** @type {?} */\n const player = optimizeGroupPlayer(allNewPlayers);\n player.onDestroy((/**\n * @return {?}\n */\n () => {\n allConsumedElements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => removeClass(element, NG_ANIMATING_CLASSNAME)));\n setStyles(rootElement, instruction.toStyles);\n }));\n // this basically makes all of the callbacks for sub element animations\n // be dependent on the upper players for when they finish\n allSubElements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => { getOrSetAsInMap(skippedPlayersMap, element, []).push(player); }));\n return player;\n }\n /**\n * @private\n * @param {?} instruction\n * @param {?} keyframes\n * @param {?} previousPlayers\n * @return {?}\n */\n _buildPlayer(instruction, keyframes, previousPlayers) {\n if (keyframes.length > 0) {\n return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n }\n // special case for when an empty transition|definition is provided\n // ... there is no point in rendering an empty animation\n return new NoopAnimationPlayer(instruction.duration, instruction.delay);\n }\n}\nif (false) {\n /** @type {?} */\n TransitionAnimationEngine.prototype.players;\n /** @type {?} */\n TransitionAnimationEngine.prototype.newHostElements;\n /** @type {?} */\n TransitionAnimationEngine.prototype.playersByElement;\n /** @type {?} */\n TransitionAnimationEngine.prototype.playersByQueriedElement;\n /** @type {?} */\n TransitionAnimationEngine.prototype.statesByElement;\n /** @type {?} */\n TransitionAnimationEngine.prototype.disabledNodes;\n /** @type {?} */\n TransitionAnimationEngine.prototype.totalAnimations;\n /** @type {?} */\n TransitionAnimationEngine.prototype.totalQueuedPlayers;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationEngine.prototype._namespaceLookup;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationEngine.prototype._namespaceList;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationEngine.prototype._flushFns;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationEngine.prototype._whenQuietFns;\n /** @type {?} */\n TransitionAnimationEngine.prototype.namespacesByHostElement;\n /** @type {?} */\n TransitionAnimationEngine.prototype.collectedEnterElements;\n /** @type {?} */\n TransitionAnimationEngine.prototype.collectedLeaveElements;\n /** @type {?} */\n TransitionAnimationEngine.prototype.onRemovalComplete;\n /** @type {?} */\n TransitionAnimationEngine.prototype.bodyNode;\n /** @type {?} */\n TransitionAnimationEngine.prototype.driver;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationEngine.prototype._normalizer;\n}\nclass TransitionAnimationPlayer {\n /**\n * @param {?} namespaceId\n * @param {?} triggerName\n * @param {?} element\n */\n constructor(namespaceId, triggerName, element) {\n this.namespaceId = namespaceId;\n this.triggerName = triggerName;\n this.element = element;\n this._player = new NoopAnimationPlayer();\n this._containsRealPlayer = false;\n this._queuedCallbacks = {};\n this.destroyed = false;\n this.markedForDestroy = false;\n this.disabled = false;\n this.queued = true;\n this.totalTime = 0;\n }\n /**\n * @param {?} player\n * @return {?}\n */\n setRealPlayer(player) {\n if (this._containsRealPlayer)\n return;\n this._player = player;\n Object.keys(this._queuedCallbacks).forEach((/**\n * @param {?} phase\n * @return {?}\n */\n phase => {\n this._queuedCallbacks[phase].forEach((/**\n * @param {?} callback\n * @return {?}\n */\n callback => listenOnPlayer(player, phase, undefined, callback)));\n }));\n this._queuedCallbacks = {};\n this._containsRealPlayer = true;\n this.overrideTotalTime(player.totalTime);\n ((/** @type {?} */ (this))).queued = false;\n }\n /**\n * @return {?}\n */\n getRealPlayer() { return this._player; }\n /**\n * @param {?} totalTime\n * @return {?}\n */\n overrideTotalTime(totalTime) { ((/** @type {?} */ (this))).totalTime = totalTime; }\n /**\n * @param {?} player\n * @return {?}\n */\n syncPlayerEvents(player) {\n /** @type {?} */\n const p = (/** @type {?} */ (this._player));\n if (p.triggerCallback) {\n player.onStart((/**\n * @return {?}\n */\n () => (/** @type {?} */ (p.triggerCallback))('start')));\n }\n player.onDone((/**\n * @return {?}\n */\n () => this.finish()));\n player.onDestroy((/**\n * @return {?}\n */\n () => this.destroy()));\n }\n /**\n * @private\n * @param {?} name\n * @param {?} callback\n * @return {?}\n */\n _queueEvent(name, callback) {\n getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDone(fn) {\n if (this.queued) {\n this._queueEvent('done', fn);\n }\n this._player.onDone(fn);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onStart(fn) {\n if (this.queued) {\n this._queueEvent('start', fn);\n }\n this._player.onStart(fn);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDestroy(fn) {\n if (this.queued) {\n this._queueEvent('destroy', fn);\n }\n this._player.onDestroy(fn);\n }\n /**\n * @return {?}\n */\n init() { this._player.init(); }\n /**\n * @return {?}\n */\n hasStarted() { return this.queued ? false : this._player.hasStarted(); }\n /**\n * @return {?}\n */\n play() { !this.queued && this._player.play(); }\n /**\n * @return {?}\n */\n pause() { !this.queued && this._player.pause(); }\n /**\n * @return {?}\n */\n restart() { !this.queued && this._player.restart(); }\n /**\n * @return {?}\n */\n finish() { this._player.finish(); }\n /**\n * @return {?}\n */\n destroy() {\n ((/** @type {?} */ (this))).destroyed = true;\n this._player.destroy();\n }\n /**\n * @return {?}\n */\n reset() { !this.queued && this._player.reset(); }\n /**\n * @param {?} p\n * @return {?}\n */\n setPosition(p) {\n if (!this.queued) {\n this._player.setPosition(p);\n }\n }\n /**\n * @return {?}\n */\n getPosition() { return this.queued ? 0 : this._player.getPosition(); }\n /**\n * \\@internal\n * @param {?} phaseName\n * @return {?}\n */\n triggerCallback(phaseName) {\n /** @type {?} */\n const p = (/** @type {?} */ (this._player));\n if (p.triggerCallback) {\n p.triggerCallback(phaseName);\n }\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationPlayer.prototype._player;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationPlayer.prototype._containsRealPlayer;\n /**\n * @type {?}\n * @private\n */\n TransitionAnimationPlayer.prototype._queuedCallbacks;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.destroyed;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.parentPlayer;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.markedForDestroy;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.disabled;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.queued;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.totalTime;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.namespaceId;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.triggerName;\n /** @type {?} */\n TransitionAnimationPlayer.prototype.element;\n}\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction deleteOrUnsetInMap(map, key, value) {\n /** @type {?} */\n let currentValues;\n if (map instanceof Map) {\n currentValues = map.get(key);\n if (currentValues) {\n if (currentValues.length) {\n /** @type {?} */\n const index = currentValues.indexOf(value);\n currentValues.splice(index, 1);\n }\n if (currentValues.length == 0) {\n map.delete(key);\n }\n }\n }\n else {\n currentValues = map[key];\n if (currentValues) {\n if (currentValues.length) {\n /** @type {?} */\n const index = currentValues.indexOf(value);\n currentValues.splice(index, 1);\n }\n if (currentValues.length == 0) {\n delete map[key];\n }\n }\n }\n return currentValues;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction normalizeTriggerValue(value) {\n // we use `!= null` here because it's the most simple\n // way to test against a \"falsy\" value without mixing\n // in empty strings or a zero value. DO NOT OPTIMIZE.\n return value != null ? value : null;\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction isElementNode(node) {\n return node && node['nodeType'] === 1;\n}\n/**\n * @param {?} eventName\n * @return {?}\n */\nfunction isTriggerEventValid(eventName) {\n return eventName == 'start' || eventName == 'done';\n}\n/**\n * @param {?} element\n * @param {?=} value\n * @return {?}\n */\nfunction cloakElement(element, value) {\n /** @type {?} */\n const oldValue = element.style.display;\n element.style.display = value != null ? value : 'none';\n return oldValue;\n}\n/**\n * @param {?} valuesMap\n * @param {?} driver\n * @param {?} elements\n * @param {?} elementPropsMap\n * @param {?} defaultStyle\n * @return {?}\n */\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n /** @type {?} */\n const cloakVals = [];\n elements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => cloakVals.push(cloakElement(element))));\n /** @type {?} */\n const failedElements = [];\n elementPropsMap.forEach((/**\n * @param {?} props\n * @param {?} element\n * @return {?}\n */\n (props, element) => {\n /** @type {?} */\n const styles = {};\n props.forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const value = styles[prop] = driver.computeStyle(element, prop, defaultStyle);\n // there is no easy way to detect this because a sub element could be removed\n // by a parent animation element being detached.\n if (!value || value.length == 0) {\n element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n failedElements.push(element);\n }\n }));\n valuesMap.set(element, styles);\n }));\n // we use a index variable here since Set.forEach(a, i) does not return\n // an index value for the closure (but instead just the value)\n /** @type {?} */\n let i = 0;\n elements.forEach((/**\n * @param {?} element\n * @return {?}\n */\n element => cloakElement(element, cloakVals[i++])));\n return failedElements;\n}\n/*\nSince the Angular renderer code will return a collection of inserted\nnodes in all areas of a DOM tree, it's up to this algorithm to figure\nout which nodes are roots for each animation @trigger.\n\nBy placing each inserted node into a Set and traversing upwards, it\nis possible to find the @trigger elements and well any direct *star\ninsertion nodes, if a @trigger root is found then the enter element\nis placed into the Map[@trigger] spot.\n */\n/**\n * @param {?} roots\n * @param {?} nodes\n * @return {?}\n */\nfunction buildRootMap(roots, nodes) {\n /** @type {?} */\n const rootMap = new Map();\n roots.forEach((/**\n * @param {?} root\n * @return {?}\n */\n root => rootMap.set(root, [])));\n if (nodes.length == 0)\n return rootMap;\n /** @type {?} */\n const NULL_NODE = 1;\n /** @type {?} */\n const nodeSet = new Set(nodes);\n /** @type {?} */\n const localRootMap = new Map();\n /**\n * @param {?} node\n * @return {?}\n */\n function getRoot(node) {\n if (!node)\n return NULL_NODE;\n /** @type {?} */\n let root = localRootMap.get(node);\n if (root)\n return root;\n /** @type {?} */\n const parent = node.parentNode;\n if (rootMap.has(parent)) { // ngIf inside @trigger\n root = parent;\n }\n else if (nodeSet.has(parent)) { // ngIf inside ngIf\n root = NULL_NODE;\n }\n else { // recurse upwards\n root = getRoot(parent);\n }\n localRootMap.set(node, root);\n return root;\n }\n nodes.forEach((/**\n * @param {?} node\n * @return {?}\n */\n node => {\n /** @type {?} */\n const root = getRoot(node);\n if (root !== NULL_NODE) {\n (/** @type {?} */ (rootMap.get(root))).push(node);\n }\n }));\n return rootMap;\n}\n/** @type {?} */\nconst CLASSES_CACHE_KEY = '$$classes';\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction containsClass(element, className) {\n if (element.classList) {\n return element.classList.contains(className);\n }\n else {\n /** @type {?} */\n const classes = element[CLASSES_CACHE_KEY];\n return classes && classes[className];\n }\n}\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction addClass(element, className) {\n if (element.classList) {\n element.classList.add(className);\n }\n else {\n /** @type {?} */\n let classes = element[CLASSES_CACHE_KEY];\n if (!classes) {\n classes = element[CLASSES_CACHE_KEY] = {};\n }\n classes[className] = true;\n }\n}\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n }\n else {\n /** @type {?} */\n let classes = element[CLASSES_CACHE_KEY];\n if (classes) {\n delete classes[className];\n }\n }\n}\n/**\n * @param {?} engine\n * @param {?} element\n * @param {?} players\n * @return {?}\n */\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n optimizeGroupPlayer(players).onDone((/**\n * @return {?}\n */\n () => engine.processLeaveNode(element)));\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction flattenGroupPlayers(players) {\n /** @type {?} */\n const finalPlayers = [];\n _flattenGroupPlayersRecur(players, finalPlayers);\n return finalPlayers;\n}\n/**\n * @param {?} players\n * @param {?} finalPlayers\n * @return {?}\n */\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n for (let i = 0; i < players.length; i++) {\n /** @type {?} */\n const player = players[i];\n if (player instanceof ɵAnimationGroupPlayer) {\n _flattenGroupPlayersRecur(player.players, finalPlayers);\n }\n else {\n finalPlayers.push(player);\n }\n }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction objEquals(a, b) {\n /** @type {?} */\n const k1 = Object.keys(a);\n /** @type {?} */\n const k2 = Object.keys(b);\n if (k1.length != k2.length)\n return false;\n for (let i = 0; i < k1.length; i++) {\n /** @type {?} */\n const prop = k1[i];\n if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n return false;\n }\n return true;\n}\n/**\n * @param {?} element\n * @param {?} allPreStyleElements\n * @param {?} allPostStyleElements\n * @return {?}\n */\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n /** @type {?} */\n const postEntry = allPostStyleElements.get(element);\n if (!postEntry)\n return false;\n /** @type {?} */\n let preEntry = allPreStyleElements.get(element);\n if (preEntry) {\n postEntry.forEach((/**\n * @param {?} data\n * @return {?}\n */\n data => (/** @type {?} */ (preEntry)).add(data)));\n }\n else {\n allPreStyleElements.set(element, postEntry);\n }\n allPostStyleElements.delete(element);\n return true;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/animation_engine_next.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass AnimationEngine {\n /**\n * @param {?} bodyNode\n * @param {?} _driver\n * @param {?} normalizer\n */\n constructor(bodyNode, _driver, normalizer) {\n this.bodyNode = bodyNode;\n this._driver = _driver;\n this._triggerCache = {};\n // this method is designed to be overridden by the code that uses this engine\n this.onRemovalComplete = (/**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n (element, context) => { });\n this._transitionEngine = new TransitionAnimationEngine(bodyNode, _driver, normalizer);\n this._timelineEngine = new TimelineAnimationEngine(bodyNode, _driver, normalizer);\n this._transitionEngine.onRemovalComplete = (/**\n * @param {?} element\n * @param {?} context\n * @return {?}\n */\n (element, context) => this.onRemovalComplete(element, context));\n }\n /**\n * @param {?} componentId\n * @param {?} namespaceId\n * @param {?} hostElement\n * @param {?} name\n * @param {?} metadata\n * @return {?}\n */\n registerTrigger(componentId, namespaceId, hostElement, name, metadata) {\n /** @type {?} */\n const cacheKey = componentId + '-' + name;\n /** @type {?} */\n let trigger = this._triggerCache[cacheKey];\n if (!trigger) {\n /** @type {?} */\n const errors = [];\n /** @type {?} */\n const ast = (/** @type {?} */ (buildAnimationAst(this._driver, (/** @type {?} */ (metadata)), errors)));\n if (errors.length) {\n throw new Error(`The animation trigger \"${name}\" has failed to build due to the following errors:\\n - ${errors.join(\"\\n - \")}`);\n }\n trigger = buildTrigger(name, ast);\n this._triggerCache[cacheKey] = trigger;\n }\n this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n }\n /**\n * @param {?} namespaceId\n * @param {?} hostElement\n * @return {?}\n */\n register(namespaceId, hostElement) {\n this._transitionEngine.register(namespaceId, hostElement);\n }\n /**\n * @param {?} namespaceId\n * @param {?} context\n * @return {?}\n */\n destroy(namespaceId, context) {\n this._transitionEngine.destroy(namespaceId, context);\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} parent\n * @param {?} insertBefore\n * @return {?}\n */\n onInsert(namespaceId, element, parent, insertBefore) {\n this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} context\n * @param {?=} isHostElement\n * @return {?}\n */\n onRemove(namespaceId, element, context, isHostElement) {\n this._transitionEngine.removeNode(namespaceId, element, isHostElement || false, context);\n }\n /**\n * @param {?} element\n * @param {?} disable\n * @return {?}\n */\n disableAnimations(element, disable) {\n this._transitionEngine.markElementAsDisabled(element, disable);\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} property\n * @param {?} value\n * @return {?}\n */\n process(namespaceId, element, property, value) {\n if (property.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(property);\n /** @type {?} */\n const args = (/** @type {?} */ (value));\n this._timelineEngine.command(id, element, action, args);\n }\n else {\n this._transitionEngine.trigger(namespaceId, element, property, value);\n }\n }\n /**\n * @param {?} namespaceId\n * @param {?} element\n * @param {?} eventName\n * @param {?} eventPhase\n * @param {?} callback\n * @return {?}\n */\n listen(namespaceId, element, eventName, eventPhase, callback) {\n // @@listen\n if (eventName.charAt(0) == '@') {\n const [id, action] = parseTimelineCommand(eventName);\n return this._timelineEngine.listen(id, element, action, callback);\n }\n return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n }\n /**\n * @param {?=} microtaskId\n * @return {?}\n */\n flush(microtaskId = -1) { this._transitionEngine.flush(microtaskId); }\n /**\n * @return {?}\n */\n get players() {\n return ((/** @type {?} */ (this._transitionEngine.players)))\n .concat((/** @type {?} */ (this._timelineEngine.players)));\n }\n /**\n * @return {?}\n */\n whenRenderingDone() { return this._transitionEngine.whenRenderingDone(); }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n AnimationEngine.prototype._transitionEngine;\n /**\n * @type {?}\n * @private\n */\n AnimationEngine.prototype._timelineEngine;\n /**\n * @type {?}\n * @private\n */\n AnimationEngine.prototype._triggerCache;\n /** @type {?} */\n AnimationEngine.prototype.onRemovalComplete;\n /**\n * @type {?}\n * @private\n */\n AnimationEngine.prototype.bodyNode;\n /**\n * @type {?}\n * @private\n */\n AnimationEngine.prototype._driver;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/special_cased_styles.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Returns an instance of `SpecialCasedStyles` if and when any special (non animateable) styles are\n * detected.\n *\n * In CSS there exist properties that cannot be animated within a keyframe animation\n * (whether it be via CSS keyframes or web-animations) and the animation implementation\n * will ignore them. This function is designed to detect those special cased styles and\n * return a container that will be executed at the start and end of the animation.\n *\n * @param {?} element\n * @param {?} styles\n * @return {?} an instance of `SpecialCasedStyles` if any special styles are detected otherwise `null`\n */\nfunction packageNonAnimatableStyles(element, styles) {\n /** @type {?} */\n let startStyles = null;\n /** @type {?} */\n let endStyles = null;\n if (Array.isArray(styles) && styles.length) {\n startStyles = filterNonAnimatableStyles(styles[0]);\n if (styles.length > 1) {\n endStyles = filterNonAnimatableStyles(styles[styles.length - 1]);\n }\n }\n else if (styles) {\n startStyles = filterNonAnimatableStyles(styles);\n }\n return (startStyles || endStyles) ? new SpecialCasedStyles(element, startStyles, endStyles) :\n null;\n}\n/**\n * Designed to be executed during a keyframe-based animation to apply any special-cased styles.\n *\n * When started (when the `start()` method is run) then the provided `startStyles`\n * will be applied. When finished (when the `finish()` method is called) the\n * `endStyles` will be applied as well any any starting styles. Finally when\n * `destroy()` is called then all styles will be removed.\n */\nclass SpecialCasedStyles {\n /**\n * @param {?} _element\n * @param {?} _startStyles\n * @param {?} _endStyles\n */\n constructor(_element, _startStyles, _endStyles) {\n this._element = _element;\n this._startStyles = _startStyles;\n this._endStyles = _endStyles;\n this._state = 0 /* Pending */;\n /** @type {?} */\n let initialStyles = SpecialCasedStyles.initialStylesByElement.get(_element);\n if (!initialStyles) {\n SpecialCasedStyles.initialStylesByElement.set(_element, initialStyles = {});\n }\n this._initialStyles = initialStyles;\n }\n /**\n * @return {?}\n */\n start() {\n if (this._state < 1 /* Started */) {\n if (this._startStyles) {\n setStyles(this._element, this._startStyles, this._initialStyles);\n }\n this._state = 1 /* Started */;\n }\n }\n /**\n * @return {?}\n */\n finish() {\n this.start();\n if (this._state < 2 /* Finished */) {\n setStyles(this._element, this._initialStyles);\n if (this._endStyles) {\n setStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n this._state = 1 /* Started */;\n }\n }\n /**\n * @return {?}\n */\n destroy() {\n this.finish();\n if (this._state < 3 /* Destroyed */) {\n SpecialCasedStyles.initialStylesByElement.delete(this._element);\n if (this._startStyles) {\n eraseStyles(this._element, this._startStyles);\n this._endStyles = null;\n }\n if (this._endStyles) {\n eraseStyles(this._element, this._endStyles);\n this._endStyles = null;\n }\n setStyles(this._element, this._initialStyles);\n this._state = 3 /* Destroyed */;\n }\n }\n}\nSpecialCasedStyles.initialStylesByElement = new WeakMap();\nif (false) {\n /** @type {?} */\n SpecialCasedStyles.initialStylesByElement;\n /**\n * @type {?}\n * @private\n */\n SpecialCasedStyles.prototype._state;\n /**\n * @type {?}\n * @private\n */\n SpecialCasedStyles.prototype._initialStyles;\n /**\n * @type {?}\n * @private\n */\n SpecialCasedStyles.prototype._element;\n /**\n * @type {?}\n * @private\n */\n SpecialCasedStyles.prototype._startStyles;\n /**\n * @type {?}\n * @private\n */\n SpecialCasedStyles.prototype._endStyles;\n}\n/** @enum {number} */\nconst SpecialCasedStylesState = {\n Pending: 0,\n Started: 1,\n Finished: 2,\n Destroyed: 3,\n};\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction filterNonAnimatableStyles(styles) {\n /** @type {?} */\n let result = null;\n /** @type {?} */\n const props = Object.keys(styles);\n for (let i = 0; i < props.length; i++) {\n /** @type {?} */\n const prop = props[i];\n if (isNonAnimatableStyle(prop)) {\n result = result || {};\n result[prop] = styles[prop];\n }\n }\n return result;\n}\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction isNonAnimatableStyle(prop) {\n return prop === 'display' || prop === 'position';\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/css_keyframes/element_animation_style_handler.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n * @type {?}\n */\nconst ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;\n/** @type {?} */\nconst ANIMATION_PROP = 'animation';\n/** @type {?} */\nconst ANIMATIONEND_EVENT = 'animationend';\n/** @type {?} */\nconst ONE_SECOND$1 = 1000;\nclass ElementAnimationStyleHandler {\n /**\n * @param {?} _element\n * @param {?} _name\n * @param {?} _duration\n * @param {?} _delay\n * @param {?} _easing\n * @param {?} _fillMode\n * @param {?} _onDoneFn\n */\n constructor(_element, _name, _duration, _delay, _easing, _fillMode, _onDoneFn) {\n this._element = _element;\n this._name = _name;\n this._duration = _duration;\n this._delay = _delay;\n this._easing = _easing;\n this._fillMode = _fillMode;\n this._onDoneFn = _onDoneFn;\n this._finished = false;\n this._destroyed = false;\n this._startTime = 0;\n this._position = 0;\n this._eventFn = (/**\n * @param {?} e\n * @return {?}\n */\n (e) => this._handleCallback(e));\n }\n /**\n * @return {?}\n */\n apply() {\n applyKeyframeAnimation(this._element, `${this._duration}ms ${this._easing} ${this._delay}ms 1 normal ${this._fillMode} ${this._name}`);\n addRemoveAnimationEvent(this._element, this._eventFn, false);\n this._startTime = Date.now();\n }\n /**\n * @return {?}\n */\n pause() { playPauseAnimation(this._element, this._name, 'paused'); }\n /**\n * @return {?}\n */\n resume() { playPauseAnimation(this._element, this._name, 'running'); }\n /**\n * @param {?} position\n * @return {?}\n */\n setPosition(position) {\n /** @type {?} */\n const index = findIndexForAnimation(this._element, this._name);\n this._position = position * this._duration;\n setAnimationStyle(this._element, 'Delay', `-${this._position}ms`, index);\n }\n /**\n * @return {?}\n */\n getPosition() { return this._position; }\n /**\n * @private\n * @param {?} event\n * @return {?}\n */\n _handleCallback(event) {\n /** @type {?} */\n const timestamp = event._ngTestManualTimestamp || Date.now();\n /** @type {?} */\n const elapsedTime = parseFloat(event.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES)) * ONE_SECOND$1;\n if (event.animationName == this._name &&\n Math.max(timestamp - this._startTime, 0) >= this._delay && elapsedTime >= this._duration) {\n this.finish();\n }\n }\n /**\n * @return {?}\n */\n finish() {\n if (this._finished)\n return;\n this._finished = true;\n this._onDoneFn();\n addRemoveAnimationEvent(this._element, this._eventFn, true);\n }\n /**\n * @return {?}\n */\n destroy() {\n if (this._destroyed)\n return;\n this._destroyed = true;\n this.finish();\n removeKeyframeAnimation(this._element, this._name);\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._eventFn;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._finished;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._destroyed;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._startTime;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._position;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._element;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._name;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._duration;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._delay;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._easing;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._fillMode;\n /**\n * @type {?}\n * @private\n */\n ElementAnimationStyleHandler.prototype._onDoneFn;\n}\n/**\n * @param {?} element\n * @param {?} name\n * @param {?} status\n * @return {?}\n */\nfunction playPauseAnimation(element, name, status) {\n /** @type {?} */\n const index = findIndexForAnimation(element, name);\n setAnimationStyle(element, 'PlayState', status, index);\n}\n/**\n * @param {?} element\n * @param {?} value\n * @return {?}\n */\nfunction applyKeyframeAnimation(element, value) {\n /** @type {?} */\n const anim = getAnimationStyle(element, '').trim();\n /** @type {?} */\n let index = 0;\n if (anim.length) {\n index = countChars(anim, ',') + 1;\n value = `${anim}, ${value}`;\n }\n setAnimationStyle(element, '', value);\n return index;\n}\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\nfunction removeKeyframeAnimation(element, name) {\n /** @type {?} */\n const anim = getAnimationStyle(element, '');\n /** @type {?} */\n const tokens = anim.split(',');\n /** @type {?} */\n const index = findMatchingTokenIndex(tokens, name);\n if (index >= 0) {\n tokens.splice(index, 1);\n /** @type {?} */\n const newValue = tokens.join(',');\n setAnimationStyle(element, '', newValue);\n }\n}\n/**\n * @param {?} element\n * @param {?} value\n * @return {?}\n */\nfunction findIndexForAnimation(element, value) {\n /** @type {?} */\n const anim = getAnimationStyle(element, '');\n if (anim.indexOf(',') > 0) {\n /** @type {?} */\n const tokens = anim.split(',');\n return findMatchingTokenIndex(tokens, value);\n }\n return findMatchingTokenIndex([anim], value);\n}\n/**\n * @param {?} tokens\n * @param {?} searchToken\n * @return {?}\n */\nfunction findMatchingTokenIndex(tokens, searchToken) {\n for (let i = 0; i < tokens.length; i++) {\n if (tokens[i].indexOf(searchToken) >= 0) {\n return i;\n }\n }\n return -1;\n}\n/**\n * @param {?} element\n * @param {?} fn\n * @param {?} doRemove\n * @return {?}\n */\nfunction addRemoveAnimationEvent(element, fn, doRemove) {\n doRemove ? element.removeEventListener(ANIMATIONEND_EVENT, fn) :\n element.addEventListener(ANIMATIONEND_EVENT, fn);\n}\n/**\n * @param {?} element\n * @param {?} name\n * @param {?} value\n * @param {?=} index\n * @return {?}\n */\nfunction setAnimationStyle(element, name, value, index) {\n /** @type {?} */\n const prop = ANIMATION_PROP + name;\n if (index != null) {\n /** @type {?} */\n const oldValue = element.style[prop];\n if (oldValue.length) {\n /** @type {?} */\n const tokens = oldValue.split(',');\n tokens[index] = value;\n value = tokens.join(',');\n }\n }\n element.style[prop] = value;\n}\n/**\n * @param {?} element\n * @param {?} name\n * @return {?}\n */\nfunction getAnimationStyle(element, name) {\n return element.style[ANIMATION_PROP + name];\n}\n/**\n * @param {?} value\n * @param {?} char\n * @return {?}\n */\nfunction countChars(value, char) {\n /** @type {?} */\n let count = 0;\n for (let i = 0; i < value.length; i++) {\n /** @type {?} */\n const c = value.charAt(i);\n if (c === char)\n count++;\n }\n return count;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/css_keyframes/css_keyframes_player.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst DEFAULT_FILL_MODE = 'forwards';\n/** @type {?} */\nconst DEFAULT_EASING = 'linear';\n/** @enum {number} */\nconst AnimatorControlState = {\n INITIALIZED: 1, STARTED: 2, FINISHED: 3, DESTROYED: 4,\n};\nclass CssKeyframesPlayer {\n /**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} animationName\n * @param {?} _duration\n * @param {?} _delay\n * @param {?} easing\n * @param {?} _finalStyles\n * @param {?=} _specialStyles\n */\n constructor(element, keyframes, animationName, _duration, _delay, easing, _finalStyles, _specialStyles) {\n this.element = element;\n this.keyframes = keyframes;\n this.animationName = animationName;\n this._duration = _duration;\n this._delay = _delay;\n this._finalStyles = _finalStyles;\n this._specialStyles = _specialStyles;\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._started = false;\n this.currentSnapshot = {};\n this._state = 0;\n this.easing = easing || DEFAULT_EASING;\n this.totalTime = _duration + _delay;\n this._buildStyler();\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onStart(fn) { this._onStartFns.push(fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDone(fn) { this._onDoneFns.push(fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDestroy(fn) { this._onDestroyFns.push(fn); }\n /**\n * @return {?}\n */\n destroy() {\n this.init();\n if (this._state >= 4 /* DESTROYED */)\n return;\n this._state = 4 /* DESTROYED */;\n this._styler.destroy();\n this._flushStartFns();\n this._flushDoneFns();\n if (this._specialStyles) {\n this._specialStyles.destroy();\n }\n this._onDestroyFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onDestroyFns = [];\n }\n /**\n * @private\n * @return {?}\n */\n _flushDoneFns() {\n this._onDoneFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onDoneFns = [];\n }\n /**\n * @private\n * @return {?}\n */\n _flushStartFns() {\n this._onStartFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onStartFns = [];\n }\n /**\n * @return {?}\n */\n finish() {\n this.init();\n if (this._state >= 3 /* FINISHED */)\n return;\n this._state = 3 /* FINISHED */;\n this._styler.finish();\n this._flushStartFns();\n if (this._specialStyles) {\n this._specialStyles.finish();\n }\n this._flushDoneFns();\n }\n /**\n * @param {?} value\n * @return {?}\n */\n setPosition(value) { this._styler.setPosition(value); }\n /**\n * @return {?}\n */\n getPosition() { return this._styler.getPosition(); }\n /**\n * @return {?}\n */\n hasStarted() { return this._state >= 2 /* STARTED */; }\n /**\n * @return {?}\n */\n init() {\n if (this._state >= 1 /* INITIALIZED */)\n return;\n this._state = 1 /* INITIALIZED */;\n /** @type {?} */\n const elm = this.element;\n this._styler.apply();\n if (this._delay) {\n this._styler.pause();\n }\n }\n /**\n * @return {?}\n */\n play() {\n this.init();\n if (!this.hasStarted()) {\n this._flushStartFns();\n this._state = 2 /* STARTED */;\n if (this._specialStyles) {\n this._specialStyles.start();\n }\n }\n this._styler.resume();\n }\n /**\n * @return {?}\n */\n pause() {\n this.init();\n this._styler.pause();\n }\n /**\n * @return {?}\n */\n restart() {\n this.reset();\n this.play();\n }\n /**\n * @return {?}\n */\n reset() {\n this._styler.destroy();\n this._buildStyler();\n this._styler.apply();\n }\n /**\n * @private\n * @return {?}\n */\n _buildStyler() {\n this._styler = new ElementAnimationStyleHandler(this.element, this.animationName, this._duration, this._delay, this.easing, DEFAULT_FILL_MODE, (/**\n * @return {?}\n */\n () => this.finish()));\n }\n /**\n * \\@internal\n * @param {?} phaseName\n * @return {?}\n */\n triggerCallback(phaseName) {\n /** @type {?} */\n const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n methods.length = 0;\n }\n /**\n * @return {?}\n */\n beforeDestroy() {\n this.init();\n /** @type {?} */\n const styles = {};\n if (this.hasStarted()) {\n /** @type {?} */\n const finished = this._state >= 3 /* FINISHED */;\n Object.keys(this._finalStyles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (prop != 'offset') {\n styles[prop] = finished ? this._finalStyles[prop] : computeStyle(this.element, prop);\n }\n }));\n }\n this.currentSnapshot = styles;\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._onDoneFns;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._onStartFns;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._onDestroyFns;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._started;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._styler;\n /** @type {?} */\n CssKeyframesPlayer.prototype.parentPlayer;\n /** @type {?} */\n CssKeyframesPlayer.prototype.totalTime;\n /** @type {?} */\n CssKeyframesPlayer.prototype.easing;\n /** @type {?} */\n CssKeyframesPlayer.prototype.currentSnapshot;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._state;\n /** @type {?} */\n CssKeyframesPlayer.prototype.element;\n /** @type {?} */\n CssKeyframesPlayer.prototype.keyframes;\n /** @type {?} */\n CssKeyframesPlayer.prototype.animationName;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._duration;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._delay;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._finalStyles;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesPlayer.prototype._specialStyles;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/css_keyframes/direct_style_player.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass DirectStylePlayer extends NoopAnimationPlayer {\n /**\n * @param {?} element\n * @param {?} styles\n */\n constructor(element, styles) {\n super();\n this.element = element;\n this._startingStyles = {};\n this.__initialized = false;\n this._styles = hypenatePropsObject(styles);\n }\n /**\n * @return {?}\n */\n init() {\n if (this.__initialized || !this._startingStyles)\n return;\n this.__initialized = true;\n Object.keys(this._styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n (/** @type {?} */ (this._startingStyles))[prop] = this.element.style[prop];\n }));\n super.init();\n }\n /**\n * @return {?}\n */\n play() {\n if (!this._startingStyles)\n return;\n this.init();\n Object.keys(this._styles)\n .forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => this.element.style.setProperty(prop, this._styles[prop])));\n super.play();\n }\n /**\n * @return {?}\n */\n destroy() {\n if (!this._startingStyles)\n return;\n Object.keys(this._startingStyles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const value = (/** @type {?} */ (this._startingStyles))[prop];\n if (value) {\n this.element.style.setProperty(prop, value);\n }\n else {\n this.element.style.removeProperty(prop);\n }\n }));\n this._startingStyles = null;\n super.destroy();\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n DirectStylePlayer.prototype._startingStyles;\n /**\n * @type {?}\n * @private\n */\n DirectStylePlayer.prototype.__initialized;\n /**\n * @type {?}\n * @private\n */\n DirectStylePlayer.prototype._styles;\n /** @type {?} */\n DirectStylePlayer.prototype.element;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/css_keyframes/css_keyframes_driver.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst KEYFRAMES_NAME_PREFIX = 'gen_css_kf_';\n/** @type {?} */\nconst TAB_SPACE = ' ';\nclass CssKeyframesDriver {\n constructor() {\n this._count = 0;\n this._head = document.querySelector('head');\n this._warningIssued = false;\n }\n /**\n * @param {?} prop\n * @return {?}\n */\n validateStyleProperty(prop) { return validateStyleProperty(prop); }\n /**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n matchesElement(element, selector) {\n return matchesElement(element, selector);\n }\n /**\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n containsElement(elm1, elm2) { return containsElement(elm1, elm2); }\n /**\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n /**\n * @param {?} element\n * @param {?} prop\n * @param {?=} defaultValue\n * @return {?}\n */\n computeStyle(element, prop, defaultValue) {\n return (/** @type {?} */ (((/** @type {?} */ (window.getComputedStyle(element))))[prop]));\n }\n /**\n * @param {?} element\n * @param {?} name\n * @param {?} keyframes\n * @return {?}\n */\n buildKeyframeElement(element, name, keyframes) {\n keyframes = keyframes.map((/**\n * @param {?} kf\n * @return {?}\n */\n kf => hypenatePropsObject(kf)));\n /** @type {?} */\n let keyframeStr = `@keyframes ${name} {\\n`;\n /** @type {?} */\n let tab = '';\n keyframes.forEach((/**\n * @param {?} kf\n * @return {?}\n */\n kf => {\n tab = TAB_SPACE;\n /** @type {?} */\n const offset = parseFloat(kf['offset']);\n keyframeStr += `${tab}${offset * 100}% {\\n`;\n tab += TAB_SPACE;\n Object.keys(kf).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n /** @type {?} */\n const value = kf[prop];\n switch (prop) {\n case 'offset':\n return;\n case 'easing':\n if (value) {\n keyframeStr += `${tab}animation-timing-function: ${value};\\n`;\n }\n return;\n default:\n keyframeStr += `${tab}${prop}: ${value};\\n`;\n return;\n }\n }));\n keyframeStr += `${tab}}\\n`;\n }));\n keyframeStr += `}\\n`;\n /** @type {?} */\n const kfElm = document.createElement('style');\n kfElm.innerHTML = keyframeStr;\n return kfElm;\n }\n /**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @param {?=} previousPlayers\n * @param {?=} scrubberAccessRequested\n * @return {?}\n */\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n if (scrubberAccessRequested) {\n this._notifyFaultyScrubber();\n }\n /** @type {?} */\n const previousCssKeyframePlayers = (/** @type {?} */ (previousPlayers.filter((/**\n * @param {?} player\n * @return {?}\n */\n player => player instanceof CssKeyframesPlayer))));\n /** @type {?} */\n const previousStyles = {};\n if (allowPreviousPlayerStylesMerge(duration, delay)) {\n previousCssKeyframePlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n /** @type {?} */\n let styles = player.currentSnapshot;\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => previousStyles[prop] = styles[prop]));\n }));\n }\n keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);\n /** @type {?} */\n const finalStyles = flattenKeyframesIntoStyles(keyframes);\n // if there is no animation then there is no point in applying\n // styles and waiting for an event to get fired. This causes lag.\n // It's better to just directly apply the styles to the element\n // via the direct styling animation player.\n if (duration == 0) {\n return new DirectStylePlayer(element, finalStyles);\n }\n /** @type {?} */\n const animationName = `${KEYFRAMES_NAME_PREFIX}${this._count++}`;\n /** @type {?} */\n const kfElm = this.buildKeyframeElement(element, animationName, keyframes);\n (/** @type {?} */ (document.querySelector('head'))).appendChild(kfElm);\n /** @type {?} */\n const specialStyles = packageNonAnimatableStyles(element, keyframes);\n /** @type {?} */\n const player = new CssKeyframesPlayer(element, keyframes, animationName, duration, delay, easing, finalStyles, specialStyles);\n player.onDestroy((/**\n * @return {?}\n */\n () => removeElement(kfElm)));\n return player;\n }\n /**\n * @private\n * @return {?}\n */\n _notifyFaultyScrubber() {\n if (!this._warningIssued) {\n console.warn('@angular/animations: please load the web-animations.js polyfill to allow programmatic access...\\n', ' visit http://bit.ly/IWukam to learn more about using the web-animation-js polyfill.');\n this._warningIssued = true;\n }\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n CssKeyframesDriver.prototype._count;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesDriver.prototype._head;\n /**\n * @type {?}\n * @private\n */\n CssKeyframesDriver.prototype._warningIssued;\n}\n/**\n * @param {?} keyframes\n * @return {?}\n */\nfunction flattenKeyframesIntoStyles(keyframes) {\n /** @type {?} */\n let flatKeyframes = {};\n if (keyframes) {\n /** @type {?} */\n const kfs = Array.isArray(keyframes) ? keyframes : [keyframes];\n kfs.forEach((/**\n * @param {?} kf\n * @return {?}\n */\n kf => {\n Object.keys(kf).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (prop == 'offset' || prop == 'easing')\n return;\n flatKeyframes[prop] = kf[prop];\n }));\n }));\n }\n return flatKeyframes;\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction removeElement(node) {\n node.parentNode.removeChild(node);\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/web_animations/web_animations_player.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass WebAnimationsPlayer {\n /**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} options\n * @param {?=} _specialStyles\n */\n constructor(element, keyframes, options, _specialStyles) {\n this.element = element;\n this.keyframes = keyframes;\n this.options = options;\n this._specialStyles = _specialStyles;\n this._onDoneFns = [];\n this._onStartFns = [];\n this._onDestroyFns = [];\n this._initialized = false;\n this._finished = false;\n this._started = false;\n this._destroyed = false;\n this.time = 0;\n this.parentPlayer = null;\n this.currentSnapshot = {};\n this._duration = (/** @type {?} */ (options['duration']));\n this._delay = (/** @type {?} */ (options['delay'])) || 0;\n this.time = this._duration + this._delay;\n }\n /**\n * @private\n * @return {?}\n */\n _onFinish() {\n if (!this._finished) {\n this._finished = true;\n this._onDoneFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onDoneFns = [];\n }\n }\n /**\n * @return {?}\n */\n init() {\n this._buildPlayer();\n this._preparePlayerBeforeStart();\n }\n /**\n * @private\n * @return {?}\n */\n _buildPlayer() {\n if (this._initialized)\n return;\n this._initialized = true;\n /** @type {?} */\n const keyframes = this.keyframes;\n ((/** @type {?} */ (this))).domPlayer =\n this._triggerWebAnimation(this.element, keyframes, this.options);\n this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};\n this.domPlayer.addEventListener('finish', (/**\n * @return {?}\n */\n () => this._onFinish()));\n }\n /**\n * @private\n * @return {?}\n */\n _preparePlayerBeforeStart() {\n // this is required so that the player doesn't start to animate right away\n if (this._delay) {\n this._resetDomPlayerState();\n }\n else {\n this.domPlayer.pause();\n }\n }\n /**\n * \\@internal\n * @param {?} element\n * @param {?} keyframes\n * @param {?} options\n * @return {?}\n */\n _triggerWebAnimation(element, keyframes, options) {\n // jscompiler doesn't seem to know animate is a native property because it's not fully\n // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]\n return (/** @type {?} */ (element['animate'](keyframes, options)));\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onStart(fn) { this._onStartFns.push(fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDone(fn) { this._onDoneFns.push(fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDestroy(fn) { this._onDestroyFns.push(fn); }\n /**\n * @return {?}\n */\n play() {\n this._buildPlayer();\n if (!this.hasStarted()) {\n this._onStartFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onStartFns = [];\n this._started = true;\n if (this._specialStyles) {\n this._specialStyles.start();\n }\n }\n this.domPlayer.play();\n }\n /**\n * @return {?}\n */\n pause() {\n this.init();\n this.domPlayer.pause();\n }\n /**\n * @return {?}\n */\n finish() {\n this.init();\n if (this._specialStyles) {\n this._specialStyles.finish();\n }\n this._onFinish();\n this.domPlayer.finish();\n }\n /**\n * @return {?}\n */\n reset() {\n this._resetDomPlayerState();\n this._destroyed = false;\n this._finished = false;\n this._started = false;\n }\n /**\n * @private\n * @return {?}\n */\n _resetDomPlayerState() {\n if (this.domPlayer) {\n this.domPlayer.cancel();\n }\n }\n /**\n * @return {?}\n */\n restart() {\n this.reset();\n this.play();\n }\n /**\n * @return {?}\n */\n hasStarted() { return this._started; }\n /**\n * @return {?}\n */\n destroy() {\n if (!this._destroyed) {\n this._destroyed = true;\n this._resetDomPlayerState();\n this._onFinish();\n if (this._specialStyles) {\n this._specialStyles.destroy();\n }\n this._onDestroyFns.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n this._onDestroyFns = [];\n }\n }\n /**\n * @param {?} p\n * @return {?}\n */\n setPosition(p) { this.domPlayer.currentTime = p * this.time; }\n /**\n * @return {?}\n */\n getPosition() { return this.domPlayer.currentTime / this.time; }\n /**\n * @return {?}\n */\n get totalTime() { return this._delay + this._duration; }\n /**\n * @return {?}\n */\n beforeDestroy() {\n /** @type {?} */\n const styles = {};\n if (this.hasStarted()) {\n Object.keys(this._finalKeyframe).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => {\n if (prop != 'offset') {\n styles[prop] =\n this._finished ? this._finalKeyframe[prop] : computeStyle(this.element, prop);\n }\n }));\n }\n this.currentSnapshot = styles;\n }\n /**\n * \\@internal\n * @param {?} phaseName\n * @return {?}\n */\n triggerCallback(phaseName) {\n /** @type {?} */\n const methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n methods.forEach((/**\n * @param {?} fn\n * @return {?}\n */\n fn => fn()));\n methods.length = 0;\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._onDoneFns;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._onStartFns;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._onDestroyFns;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._duration;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._delay;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._initialized;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._finished;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._started;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._destroyed;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._finalKeyframe;\n /** @type {?} */\n WebAnimationsPlayer.prototype.domPlayer;\n /** @type {?} */\n WebAnimationsPlayer.prototype.time;\n /** @type {?} */\n WebAnimationsPlayer.prototype.parentPlayer;\n /** @type {?} */\n WebAnimationsPlayer.prototype.currentSnapshot;\n /** @type {?} */\n WebAnimationsPlayer.prototype.element;\n /** @type {?} */\n WebAnimationsPlayer.prototype.keyframes;\n /** @type {?} */\n WebAnimationsPlayer.prototype.options;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsPlayer.prototype._specialStyles;\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/render/web_animations/web_animations_driver.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass WebAnimationsDriver {\n constructor() {\n this._isNativeImpl = /\\{\\s*\\[native\\s+code\\]\\s*\\}/.test(getElementAnimateFn().toString());\n this._cssKeyframesDriver = new CssKeyframesDriver();\n }\n /**\n * @param {?} prop\n * @return {?}\n */\n validateStyleProperty(prop) { return validateStyleProperty(prop); }\n /**\n * @param {?} element\n * @param {?} selector\n * @return {?}\n */\n matchesElement(element, selector) {\n return matchesElement(element, selector);\n }\n /**\n * @param {?} elm1\n * @param {?} elm2\n * @return {?}\n */\n containsElement(elm1, elm2) { return containsElement(elm1, elm2); }\n /**\n * @param {?} element\n * @param {?} selector\n * @param {?} multi\n * @return {?}\n */\n query(element, selector, multi) {\n return invokeQuery(element, selector, multi);\n }\n /**\n * @param {?} element\n * @param {?} prop\n * @param {?=} defaultValue\n * @return {?}\n */\n computeStyle(element, prop, defaultValue) {\n return (/** @type {?} */ (((/** @type {?} */ (window.getComputedStyle(element))))[prop]));\n }\n /**\n * @param {?} supported\n * @return {?}\n */\n overrideWebAnimationsSupport(supported) { this._isNativeImpl = supported; }\n /**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @param {?=} previousPlayers\n * @param {?=} scrubberAccessRequested\n * @return {?}\n */\n animate(element, keyframes, duration, delay, easing, previousPlayers = [], scrubberAccessRequested) {\n /** @type {?} */\n const useKeyframes = !scrubberAccessRequested && !this._isNativeImpl;\n if (useKeyframes) {\n return this._cssKeyframesDriver.animate(element, keyframes, duration, delay, easing, previousPlayers);\n }\n /** @type {?} */\n const fill = delay == 0 ? 'both' : 'forwards';\n /** @type {?} */\n const playerOptions = { duration, delay, fill };\n // we check for this to avoid having a null|undefined value be present\n // for the easing (which results in an error for certain browsers #9752)\n if (easing) {\n playerOptions['easing'] = easing;\n }\n /** @type {?} */\n const previousStyles = {};\n /** @type {?} */\n const previousWebAnimationPlayers = (/** @type {?} */ (previousPlayers.filter((/**\n * @param {?} player\n * @return {?}\n */\n player => player instanceof WebAnimationsPlayer))));\n if (allowPreviousPlayerStylesMerge(duration, delay)) {\n previousWebAnimationPlayers.forEach((/**\n * @param {?} player\n * @return {?}\n */\n player => {\n /** @type {?} */\n let styles = player.currentSnapshot;\n Object.keys(styles).forEach((/**\n * @param {?} prop\n * @return {?}\n */\n prop => previousStyles[prop] = styles[prop]));\n }));\n }\n keyframes = keyframes.map((/**\n * @param {?} styles\n * @return {?}\n */\n styles => copyStyles(styles, false)));\n keyframes = balancePreviousStylesIntoKeyframes(element, keyframes, previousStyles);\n /** @type {?} */\n const specialStyles = packageNonAnimatableStyles(element, keyframes);\n return new WebAnimationsPlayer(element, keyframes, playerOptions, specialStyles);\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n WebAnimationsDriver.prototype._isNativeImpl;\n /**\n * @type {?}\n * @private\n */\n WebAnimationsDriver.prototype._cssKeyframesDriver;\n}\n/**\n * @return {?}\n */\nfunction supportsWebAnimations() {\n return typeof getElementAnimateFn() === 'function';\n}\n/**\n * @return {?}\n */\nfunction getElementAnimateFn() {\n return (isBrowser() && ((/** @type {?} */ (Element))).prototype['animate']) || {};\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/private_export.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/src/browser.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/public_api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/animations/browser/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, Animation as ɵAnimation, AnimationEngine as ɵAnimationEngine, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, CssKeyframesDriver as ɵCssKeyframesDriver, CssKeyframesPlayer as ɵCssKeyframesPlayer, NoopAnimationDriver as ɵNoopAnimationDriver, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsDriver as ɵWebAnimationsDriver, WebAnimationsPlayer as ɵWebAnimationsPlayer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, allowPreviousPlayerStylesMerge as ɵallowPreviousPlayerStylesMerge, SpecialCasedStyles as ɵangular_packages_animations_browser_browser_a, containsElement as ɵcontainsElement, invokeQuery as ɵinvokeQuery, matchesElement as ɵmatchesElement, supportsWebAnimations as ɵsupportsWebAnimations, validateStyleProperty as ɵvalidateStyleProperty };\n\n//# sourceMappingURL=browser.js.map","/**\n * @license Angular v9.0.7\n * (c) 2010-2020 Google LLC. https://angular.io/\n * License: MIT\n */\n\nimport { ViewEncapsulation, Injectable, RendererFactory2, Inject, NgZone, InjectionToken, NgModule } from '@angular/core';\nimport { ɵDomRendererFactory2, BrowserModule } from '@angular/platform-browser';\nimport { AnimationBuilder, sequence, AnimationFactory } from '@angular/animations';\nimport { ɵAnimationEngine, AnimationDriver, ɵAnimationStyleNormalizer, ɵsupportsWebAnimations, ɵWebAnimationsDriver, ɵCssKeyframesDriver, ɵWebAnimationsStyleNormalizer, ɵNoopAnimationDriver } from '@angular/animations/browser';\nimport { DOCUMENT } from '@angular/common';\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/animation_builder.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nimport * as ɵngcc0 from '@angular/core';\nimport * as ɵngcc1 from '@angular/animations/browser';\nclass BrowserAnimationBuilder extends AnimationBuilder {\n /**\n * @param {?} rootRenderer\n * @param {?} doc\n */\n constructor(rootRenderer, doc) {\n super();\n this._nextAnimationId = 0;\n /** @type {?} */\n const typeData = (/** @type {?} */ ({\n id: '0',\n encapsulation: ViewEncapsulation.None,\n styles: [],\n data: { animation: [] }\n }));\n this._renderer = (/** @type {?} */ (rootRenderer.createRenderer(doc.body, typeData)));\n }\n /**\n * @param {?} animation\n * @return {?}\n */\n build(animation) {\n /** @type {?} */\n const id = this._nextAnimationId.toString();\n this._nextAnimationId++;\n /** @type {?} */\n const entry = Array.isArray(animation) ? sequence(animation) : animation;\n issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n return new BrowserAnimationFactory(id, this._renderer);\n }\n}\nBrowserAnimationBuilder.ɵfac = function BrowserAnimationBuilder_Factory(t) { return new (t || BrowserAnimationBuilder)(ɵngcc0.ɵɵinject(ɵngcc0.RendererFactory2), ɵngcc0.ɵɵinject(DOCUMENT)); };\nBrowserAnimationBuilder.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: BrowserAnimationBuilder, factory: BrowserAnimationBuilder.ɵfac });\n/** @nocollapse */\nBrowserAnimationBuilder.ctorParameters = () => [\n { type: RendererFactory2 },\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BrowserAnimationBuilder, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.RendererFactory2 }, { type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }]; }, null); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n BrowserAnimationBuilder.prototype._nextAnimationId;\n /**\n * @type {?}\n * @private\n */\n BrowserAnimationBuilder.prototype._renderer;\n}\nclass BrowserAnimationFactory extends AnimationFactory {\n /**\n * @param {?} _id\n * @param {?} _renderer\n */\n constructor(_id, _renderer) {\n super();\n this._id = _id;\n this._renderer = _renderer;\n }\n /**\n * @param {?} element\n * @param {?=} options\n * @return {?}\n */\n create(element, options) {\n return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n }\n}\nif (false) {\n /**\n * @type {?}\n * @private\n */\n BrowserAnimationFactory.prototype._id;\n /**\n * @type {?}\n * @private\n */\n BrowserAnimationFactory.prototype._renderer;\n}\nclass RendererAnimationPlayer {\n /**\n * @param {?} id\n * @param {?} element\n * @param {?} options\n * @param {?} _renderer\n */\n constructor(id, element, options, _renderer) {\n this.id = id;\n this.element = element;\n this._renderer = _renderer;\n this.parentPlayer = null;\n this._started = false;\n this.totalTime = 0;\n this._command('create', options);\n }\n /**\n * @private\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n _listen(eventName, callback) {\n return this._renderer.listen(this.element, `@@${this.id}:${eventName}`, callback);\n }\n /**\n * @private\n * @param {?} command\n * @param {...?} args\n * @return {?}\n */\n _command(command, ...args) {\n return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDone(fn) { this._listen('done', fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onStart(fn) { this._listen('start', fn); }\n /**\n * @param {?} fn\n * @return {?}\n */\n onDestroy(fn) { this._listen('destroy', fn); }\n /**\n * @return {?}\n */\n init() { this._command('init'); }\n /**\n * @return {?}\n */\n hasStarted() { return this._started; }\n /**\n * @return {?}\n */\n play() {\n this._command('play');\n this._started = true;\n }\n /**\n * @return {?}\n */\n pause() { this._command('pause'); }\n /**\n * @return {?}\n */\n restart() { this._command('restart'); }\n /**\n * @return {?}\n */\n finish() { this._command('finish'); }\n /**\n * @return {?}\n */\n destroy() { this._command('destroy'); }\n /**\n * @return {?}\n */\n reset() { this._command('reset'); }\n /**\n * @param {?} p\n * @return {?}\n */\n setPosition(p) { this._command('setPosition', p); }\n /**\n * @return {?}\n */\n getPosition() { return 0; }\n}\nif (false) {\n /** @type {?} */\n RendererAnimationPlayer.prototype.parentPlayer;\n /**\n * @type {?}\n * @private\n */\n RendererAnimationPlayer.prototype._started;\n /** @type {?} */\n RendererAnimationPlayer.prototype.totalTime;\n /** @type {?} */\n RendererAnimationPlayer.prototype.id;\n /** @type {?} */\n RendererAnimationPlayer.prototype.element;\n /**\n * @type {?}\n * @private\n */\n RendererAnimationPlayer.prototype._renderer;\n}\n/**\n * @param {?} renderer\n * @param {?} element\n * @param {?} id\n * @param {?} command\n * @param {?} args\n * @return {?}\n */\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n return renderer.setProperty(element, `@@${id}:${command}`, args);\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/animation_renderer.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/** @type {?} */\nconst ANIMATION_PREFIX = '@';\n/** @type {?} */\nconst DISABLE_ANIMATIONS_FLAG = '@.disabled';\n/**\n * @record\n */\nfunction RecursiveAnimationTriggerMetadata() { }\nclass AnimationRendererFactory {\n /**\n * @param {?} delegate\n * @param {?} engine\n * @param {?} _zone\n */\n constructor(delegate, engine, _zone) {\n this.delegate = delegate;\n this.engine = engine;\n this._zone = _zone;\n this._currentId = 0;\n this._microtaskId = 1;\n this._animationCallbacksBuffer = [];\n this._rendererCache = new Map();\n this._cdRecurDepth = 0;\n this.promise = Promise.resolve(0);\n engine.onRemovalComplete = (/**\n * @param {?} element\n * @param {?} delegate\n * @return {?}\n */\n (element, delegate) => {\n // Note: if an component element has a leave animation, and the component\n // a host leave animation, the view engine will call `removeChild` for the parent\n // component renderer as well as for the child component renderer.\n // Therefore, we need to check if we already removed the element.\n if (delegate && delegate.parentNode(element)) {\n delegate.removeChild(element.parentNode, element);\n }\n });\n }\n /**\n * @param {?} hostElement\n * @param {?} type\n * @return {?}\n */\n createRenderer(hostElement, type) {\n /** @type {?} */\n const EMPTY_NAMESPACE_ID = '';\n // cache the delegates to find out which cached delegate can\n // be used by which cached renderer\n /** @type {?} */\n const delegate = this.delegate.createRenderer(hostElement, type);\n if (!hostElement || !type || !type.data || !type.data['animation']) {\n /** @type {?} */\n let renderer = this._rendererCache.get(delegate);\n if (!renderer) {\n renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine);\n // only cache this result when the base renderer is used\n this._rendererCache.set(delegate, renderer);\n }\n return renderer;\n }\n /** @type {?} */\n const componentId = type.id;\n /** @type {?} */\n const namespaceId = type.id + '-' + this._currentId;\n this._currentId++;\n this.engine.register(namespaceId, hostElement);\n /** @type {?} */\n const registerTrigger = (/**\n * @param {?} trigger\n * @return {?}\n */\n (trigger) => {\n if (Array.isArray(trigger)) {\n trigger.forEach(registerTrigger);\n }\n else {\n this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n }\n });\n /** @type {?} */\n const animationTriggers = (/** @type {?} */ (type.data['animation']));\n animationTriggers.forEach(registerTrigger);\n return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n }\n /**\n * @return {?}\n */\n begin() {\n this._cdRecurDepth++;\n if (this.delegate.begin) {\n this.delegate.begin();\n }\n }\n /**\n * @private\n * @return {?}\n */\n _scheduleCountTask() {\n // always use promise to schedule microtask instead of use Zone\n this.promise.then((/**\n * @return {?}\n */\n () => { this._microtaskId++; }));\n }\n /**\n * \\@internal\n * @param {?} count\n * @param {?} fn\n * @param {?} data\n * @return {?}\n */\n scheduleListenerCallback(count, fn, data) {\n if (count >= 0 && count < this._microtaskId) {\n this._zone.run((/**\n * @return {?}\n */\n () => fn(data)));\n return;\n }\n if (this._animationCallbacksBuffer.length == 0) {\n Promise.resolve(null).then((/**\n * @return {?}\n */\n () => {\n this._zone.run((/**\n * @return {?}\n */\n () => {\n this._animationCallbacksBuffer.forEach((/**\n * @param {?} tuple\n * @return {?}\n */\n tuple => {\n const [fn, data] = tuple;\n fn(data);\n }));\n this._animationCallbacksBuffer = [];\n }));\n }));\n }\n this._animationCallbacksBuffer.push([fn, data]);\n }\n /**\n * @return {?}\n */\n end() {\n this._cdRecurDepth--;\n // this is to prevent animations from running twice when an inner\n // component does CD when a parent component instead has inserted it\n if (this._cdRecurDepth == 0) {\n this._zone.runOutsideAngular((/**\n * @return {?}\n */\n () => {\n this._scheduleCountTask();\n this.engine.flush(this._microtaskId);\n }));\n }\n if (this.delegate.end) {\n this.delegate.end();\n }\n }\n /**\n * @return {?}\n */\n whenRenderingDone() { return this.engine.whenRenderingDone(); }\n}\nAnimationRendererFactory.ɵfac = function AnimationRendererFactory_Factory(t) { return new (t || AnimationRendererFactory)(ɵngcc0.ɵɵinject(ɵngcc0.RendererFactory2), ɵngcc0.ɵɵinject(ɵngcc1.ɵAnimationEngine), ɵngcc0.ɵɵinject(ɵngcc0.NgZone)); };\nAnimationRendererFactory.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: AnimationRendererFactory, factory: AnimationRendererFactory.ɵfac });\n/** @nocollapse */\nAnimationRendererFactory.ctorParameters = () => [\n { type: RendererFactory2 },\n { type: ɵAnimationEngine },\n { type: NgZone }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(AnimationRendererFactory, [{\n type: Injectable\n }], function () { return [{ type: ɵngcc0.RendererFactory2 }, { type: ɵngcc1.ɵAnimationEngine }, { type: ɵngcc0.NgZone }]; }, null); })();\nif (false) {\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._currentId;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._microtaskId;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._animationCallbacksBuffer;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._rendererCache;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._cdRecurDepth;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype.promise;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype.delegate;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype.engine;\n /**\n * @type {?}\n * @private\n */\n AnimationRendererFactory.prototype._zone;\n}\nclass BaseAnimationRenderer {\n /**\n * @param {?} namespaceId\n * @param {?} delegate\n * @param {?} engine\n */\n constructor(namespaceId, delegate, engine) {\n this.namespaceId = namespaceId;\n this.delegate = delegate;\n this.engine = engine;\n this.destroyNode = this.delegate.destroyNode ? (/**\n * @param {?} n\n * @return {?}\n */\n (n) => (/** @type {?} */ (delegate.destroyNode))(n)) : null;\n }\n /**\n * @return {?}\n */\n get data() { return this.delegate.data; }\n /**\n * @return {?}\n */\n destroy() {\n this.engine.destroy(this.namespaceId, this.delegate);\n this.delegate.destroy();\n }\n /**\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n createElement(name, namespace) {\n return this.delegate.createElement(name, namespace);\n }\n /**\n * @param {?} value\n * @return {?}\n */\n createComment(value) { return this.delegate.createComment(value); }\n /**\n * @param {?} value\n * @return {?}\n */\n createText(value) { return this.delegate.createText(value); }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @return {?}\n */\n appendChild(parent, newChild) {\n this.delegate.appendChild(parent, newChild);\n this.engine.onInsert(this.namespaceId, newChild, parent, false);\n }\n /**\n * @param {?} parent\n * @param {?} newChild\n * @param {?} refChild\n * @return {?}\n */\n insertBefore(parent, newChild, refChild) {\n this.delegate.insertBefore(parent, newChild, refChild);\n this.engine.onInsert(this.namespaceId, newChild, parent, true);\n }\n /**\n * @param {?} parent\n * @param {?} oldChild\n * @param {?} isHostElement\n * @return {?}\n */\n removeChild(parent, oldChild, isHostElement) {\n this.engine.onRemove(this.namespaceId, oldChild, this.delegate, isHostElement);\n }\n /**\n * @param {?} selectorOrNode\n * @param {?=} preserveContent\n * @return {?}\n */\n selectRootElement(selectorOrNode, preserveContent) {\n return this.delegate.selectRootElement(selectorOrNode, preserveContent);\n }\n /**\n * @param {?} node\n * @return {?}\n */\n parentNode(node) { return this.delegate.parentNode(node); }\n /**\n * @param {?} node\n * @return {?}\n */\n nextSibling(node) { return this.delegate.nextSibling(node); }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @param {?=} namespace\n * @return {?}\n */\n setAttribute(el, name, value, namespace) {\n this.delegate.setAttribute(el, name, value, namespace);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?=} namespace\n * @return {?}\n */\n removeAttribute(el, name, namespace) {\n this.delegate.removeAttribute(el, name, namespace);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n addClass(el, name) { this.delegate.addClass(el, name); }\n /**\n * @param {?} el\n * @param {?} name\n * @return {?}\n */\n removeClass(el, name) { this.delegate.removeClass(el, name); }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?} value\n * @param {?=} flags\n * @return {?}\n */\n setStyle(el, style, value, flags) {\n this.delegate.setStyle(el, style, value, flags);\n }\n /**\n * @param {?} el\n * @param {?} style\n * @param {?=} flags\n * @return {?}\n */\n removeStyle(el, style, flags) {\n this.delegate.removeStyle(el, style, flags);\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n this.disableAnimations(el, !!value);\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n /**\n * @param {?} node\n * @param {?} value\n * @return {?}\n */\n setValue(node, value) { this.delegate.setValue(node, value); }\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n listen(target, eventName, callback) {\n return this.delegate.listen(target, eventName, callback);\n }\n /**\n * @protected\n * @param {?} element\n * @param {?} value\n * @return {?}\n */\n disableAnimations(element, value) {\n this.engine.disableAnimations(element, value);\n }\n}\nif (false) {\n /** @type {?} */\n BaseAnimationRenderer.prototype.destroyNode;\n /**\n * @type {?}\n * @protected\n */\n BaseAnimationRenderer.prototype.namespaceId;\n /** @type {?} */\n BaseAnimationRenderer.prototype.delegate;\n /** @type {?} */\n BaseAnimationRenderer.prototype.engine;\n}\nclass AnimationRenderer extends BaseAnimationRenderer {\n /**\n * @param {?} factory\n * @param {?} namespaceId\n * @param {?} delegate\n * @param {?} engine\n */\n constructor(factory, namespaceId, delegate, engine) {\n super(namespaceId, delegate, engine);\n this.factory = factory;\n this.namespaceId = namespaceId;\n }\n /**\n * @param {?} el\n * @param {?} name\n * @param {?} value\n * @return {?}\n */\n setProperty(el, name, value) {\n if (name.charAt(0) == ANIMATION_PREFIX) {\n if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n value = value === undefined ? true : !!value;\n this.disableAnimations(el, (/** @type {?} */ (value)));\n }\n else {\n this.engine.process(this.namespaceId, el, name.substr(1), value);\n }\n }\n else {\n this.delegate.setProperty(el, name, value);\n }\n }\n /**\n * @param {?} target\n * @param {?} eventName\n * @param {?} callback\n * @return {?}\n */\n listen(target, eventName, callback) {\n if (eventName.charAt(0) == ANIMATION_PREFIX) {\n /** @type {?} */\n const element = resolveElementFromTarget(target);\n /** @type {?} */\n let name = eventName.substr(1);\n /** @type {?} */\n let phase = '';\n // @listener.phase is for trigger animation callbacks\n // @@listener is for animation builder callbacks\n if (name.charAt(0) != ANIMATION_PREFIX) {\n [name, phase] = parseTriggerCallbackName(name);\n }\n return this.engine.listen(this.namespaceId, element, name, phase, (/**\n * @param {?} event\n * @return {?}\n */\n event => {\n /** @type {?} */\n const countId = ((/** @type {?} */ (event)))['_data'] || -1;\n this.factory.scheduleListenerCallback(countId, callback, event);\n }));\n }\n return this.delegate.listen(target, eventName, callback);\n }\n}\nif (false) {\n /** @type {?} */\n AnimationRenderer.prototype.factory;\n}\n/**\n * @param {?} target\n * @return {?}\n */\nfunction resolveElementFromTarget(target) {\n switch (target) {\n case 'body':\n return document.body;\n case 'document':\n return document;\n case 'window':\n return window;\n default:\n return target;\n }\n}\n/**\n * @param {?} triggerName\n * @return {?}\n */\nfunction parseTriggerCallbackName(triggerName) {\n /** @type {?} */\n const dotIndex = triggerName.indexOf('.');\n /** @type {?} */\n const trigger = triggerName.substring(0, dotIndex);\n /** @type {?} */\n const phase = triggerName.substr(dotIndex + 1);\n return [trigger, phase];\n}\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/providers.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\nclass InjectableAnimationEngine extends ɵAnimationEngine {\n /**\n * @param {?} doc\n * @param {?} driver\n * @param {?} normalizer\n */\n constructor(doc, driver, normalizer) {\n super(doc.body, driver, normalizer);\n }\n}\nInjectableAnimationEngine.ɵfac = function InjectableAnimationEngine_Factory(t) { return new (t || InjectableAnimationEngine)(ɵngcc0.ɵɵinject(DOCUMENT), ɵngcc0.ɵɵinject(ɵngcc1.AnimationDriver), ɵngcc0.ɵɵinject(ɵngcc1.ɵAnimationStyleNormalizer)); };\nInjectableAnimationEngine.ɵprov = ɵngcc0.ɵɵdefineInjectable({ token: InjectableAnimationEngine, factory: InjectableAnimationEngine.ɵfac });\n/** @nocollapse */\nInjectableAnimationEngine.ctorParameters = () => [\n { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },\n { type: AnimationDriver },\n { type: ɵAnimationStyleNormalizer }\n];\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(InjectableAnimationEngine, [{\n type: Injectable\n }], function () { return [{ type: undefined, decorators: [{\n type: Inject,\n args: [DOCUMENT]\n }] }, { type: ɵngcc1.AnimationDriver }, { type: ɵngcc1.ɵAnimationStyleNormalizer }]; }, null); })();\n/**\n * @return {?}\n */\nfunction instantiateSupportedAnimationDriver() {\n return ɵsupportsWebAnimations() ? new ɵWebAnimationsDriver() : new ɵCssKeyframesDriver();\n}\n/**\n * @return {?}\n */\nfunction instantiateDefaultStyleNormalizer() {\n return new ɵWebAnimationsStyleNormalizer();\n}\n/**\n * @param {?} renderer\n * @param {?} engine\n * @param {?} zone\n * @return {?}\n */\nfunction instantiateRendererFactory(renderer, engine, zone) {\n return new AnimationRendererFactory(renderer, engine, zone);\n}\n/**\n * \\@publicApi\n * @type {?}\n */\nconst ANIMATION_MODULE_TYPE = new InjectionToken('AnimationModuleType');\n/** @type {?} */\nconst SHARED_ANIMATION_PROVIDERS = [\n { provide: AnimationBuilder, useClass: BrowserAnimationBuilder },\n { provide: ɵAnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n { provide: ɵAnimationEngine, useClass: InjectableAnimationEngine }, {\n provide: RendererFactory2,\n useFactory: instantiateRendererFactory,\n deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n * @type {?}\n */\nconst BROWSER_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useFactory: instantiateSupportedAnimationDriver },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'BrowserAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n * @type {?}\n */\nconst BROWSER_NOOP_ANIMATIONS_PROVIDERS = [\n { provide: AnimationDriver, useClass: ɵNoopAnimationDriver },\n { provide: ANIMATION_MODULE_TYPE, useValue: 'NoopAnimations' }, ...SHARED_ANIMATION_PROVIDERS\n];\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/module.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n/**\n * Exports `BrowserModule` with additional [dependency-injection providers](guide/glossary#provider)\n * for use with animations. See [Animations](guide/animations).\n * \\@publicApi\n */\nclass BrowserAnimationsModule {\n}\nBrowserAnimationsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: BrowserAnimationsModule });\nBrowserAnimationsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function BrowserAnimationsModule_Factory(t) { return new (t || BrowserAnimationsModule)(); }, providers: BROWSER_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(BrowserAnimationsModule, { exports: function () { return [BrowserModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(BrowserAnimationsModule, [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_ANIMATIONS_PROVIDERS\n }]\n }], null, null); })();\n/**\n * A null player that must be imported to allow disabling of animations.\n * \\@publicApi\n */\nclass NoopAnimationsModule {\n}\nNoopAnimationsModule.ɵmod = ɵngcc0.ɵɵdefineNgModule({ type: NoopAnimationsModule });\nNoopAnimationsModule.ɵinj = ɵngcc0.ɵɵdefineInjector({ factory: function NoopAnimationsModule_Factory(t) { return new (t || NoopAnimationsModule)(); }, providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS, imports: [BrowserModule] });\n(function () { (typeof ngJitMode === \"undefined\" || ngJitMode) && ɵngcc0.ɵɵsetNgModuleScope(NoopAnimationsModule, { exports: function () { return [BrowserModule]; } }); })();\n/*@__PURE__*/ (function () { ɵngcc0.ɵsetClassMetadata(NoopAnimationsModule, [{\n type: NgModule,\n args: [{\n exports: [BrowserModule],\n providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS\n }]\n }], null, null); })();\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/private_export.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/src/animations.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/public_api.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * Generated from: packages/platform-browser/animations/index.ts\n * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc\n */\n\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { ANIMATION_MODULE_TYPE, BrowserAnimationsModule, NoopAnimationsModule, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory, InjectableAnimationEngine as ɵInjectableAnimationEngine, instantiateSupportedAnimationDriver as ɵangular_packages_platform_browser_animations_animations_a, instantiateDefaultStyleNormalizer as ɵangular_packages_platform_browser_animations_animations_b, instantiateRendererFactory as ɵangular_packages_platform_browser_animations_animations_c, BROWSER_ANIMATIONS_PROVIDERS as ɵangular_packages_platform_browser_animations_animations_d, BROWSER_NOOP_ANIMATIONS_PROVIDERS as ɵangular_packages_platform_browser_animations_animations_e, BaseAnimationRenderer as ɵangular_packages_platform_browser_animations_animations_f };\n\n//# sourceMappingURL=animations.js.map","import { BrowserModule } from '@angular/platform-browser';\nimport { NgModule } from '@angular/core';\nimport {HTTP_INTERCEPTORS, HttpClientModule} from '@angular/common/http';\n\nimport { AppComponent } from './app.component';\nimport { AppRoutingModule } from './app-routing.module';\nimport { ChartsModule } from '@progress/kendo-angular-charts';\nimport { ExcelModule, GridModule } from '@progress/kendo-angular-grid';\nimport { ButtonsModule } from '@progress/kendo-angular-buttons';\nimport { PopupModule } from '@progress/kendo-angular-popup';\nimport { TooltipModule } from '@progress/kendo-angular-tooltip';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport 'hammerjs';\nimport { PieChartComponent } from './tiles/base/pie-chart/pie-chart.component';\nimport { DashboardComponent } from './dashboards/dashboard/dashboard.component';\nimport { TileInsertComponent } from './dashboards/tile-insert/tile-insert.component';\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { ShapeIndicatorsComponent } from './tiles/base/shape-indicators/shape-indicators.component';\nimport { DashboardNavbarComponent } from './navigation/dashboard-navbar/dashboard-navbar.component';\nimport { MetricDetailNavbarComponent } from './navigation/metric-detail-navbar/metric-detail-navbar.component';\nimport { ParameterSwitchesComponent } from './navigation/parameter-switches/parameter-switches.component';\nimport { BookmarksComponent } from './navigation/bookmarks/bookmarks.component';\nimport { SearchComponent } from './navigation/search/search.component';\nimport { CustomerSelectorComponent } from './filter_selection/customer-selector/customer-selector.component';\nimport { StackedBarLineChartComponent } from './tiles/base/stacked-bar-line-chart/stacked-bar-line-chart.component';\nimport { MultiLineChartComponent } from './tiles/base/multi-line-chart/multi-line-chart.component';\nimport { EmptyValueMaskPipe } from './ui_tools/formatter/empty-value-mask-pipe';\nimport { CustomerComponent } from './dashboards/customer/customer.component';\nimport { InstrumentsComponent } from './dashboards/instruments/instruments.component';\nimport { AmbassadorComponent } from './dashboards/ambassador/ambassador.component';\nimport { PlaceholderComponent } from './tiles/placeholder/placeholder.component';\nimport { AreaLineChartComponent } from './tiles/base/area-line-chart/area-line-chart.component';\nimport { CustomerToggleComponent } from './filter_selection/toggle-switches/customer-toggle/customer-toggle.component';\nimport { InstrumentToggleComponent } from './filter_selection/toggle-switches/instrument-toggle/instrument-toggle.component';\nimport { TrackToggleComponent } from './filter_selection/toggle-switches/track-toggle/track-toggle.component';\nimport { FlagshipToggleComponent } from './filter_selection/toggle-switches/flagship-toggle/flagship-toggle.component';\nimport { PersonaSelectorComponent } from './filter_selection/persona-selector/persona-selector.component';\nimport { DropDownsModule} from '@progress/kendo-angular-dropdowns';\nimport { TssAmbassadorSelectorComponent} from './filter_selection/tss-ambassador-selector/tss-ambassador-selector.component';\nimport { ManagerSelectorComponent} from './filter_selection/manager-selector/manager-selector.component';\nimport { InstrumentSelectorComponent} from './filter_selection/instrument-selector/instrument-selector.component';\nimport { GeoLocationSelectorComponent} from './filter_selection/geo-location-selector/geo-location-selector.component';\nimport { InputsModule} from '@progress/kendo-angular-inputs';\nimport { LabelModule} from '@progress/kendo-angular-label';\nimport { AutoselectListComponent } from './ui_tools/autoselect-list/autoselect-list.component';\nimport { TextIndicatorsComponent } from './tiles/base/text-indicators/text-indicators.component';\nimport { VerticalSplitTextIndicatorsComponent } from './tiles/base/vertical-split-text-indicators/vertical-split-text-indicators.component';\nimport { StateHandlerComponent } from './api/state-handler/state-handler.component';\nimport { TopStatsListComponent } from './tiles/base/top-stats-list/top-stats-list.component';\nimport { ToolSelectorComponent } from './navigation/tool-selector/tool-selector.component';\nimport { AlertsNavbarComponent } from './navigation/alerts-navbar/alerts-navbar.component';\nimport { CtNavbarComponent } from './navigation/ct-navbar/ct-navbar.component';\nimport { CtDashboardComponent } from './control_tower/ct-dashboard/ct-dashboard.component';\nimport { AlertsDashboardComponent } from './alerts/alerts-dashboard/alerts-dashboard.component';\nimport { Style1Component } from './details/style1/style1.component';\nimport { Style1GridComponent } from './details/style1-grid/style1-grid.component';\nimport { LayoutModule } from '@progress/kendo-angular-layout';\nimport { FilterInsertComponent } from './filter_selection/details/filter-insert/filter-insert.component';\nimport { DetailCustomerFilterComponent } from './filter_selection/details/detail-customer-filter/detail-customer-filter.component';\nimport { DetailProductLineFilterComponent } from './filter_selection/details/detail-product-line-filter/detail-product-line-filter.component';\nimport { SetValuesGridComponent } from './details/set-values-grid/set-values-grid.component';\nimport { StackedBarChartByProductComponent } from './tiles/base/stacked-bar-chart-by-product/stacked-bar-chart-by-product.component';\nimport { CustomGridComponent } from './details/custom-grid/custom-grid.component';\nimport { AbbottBigNumberFormatterPipe } from './ui_tools/formatter/abbott-big-number-formatter-pipe';\nimport { CustomComplianceGridComponent } from './details/custom-compliance-grid/custom-compliance-grid.component';\nimport { Style2Component } from './details/style2/style2.component';\nimport { Style2GridComponent } from './details/style2-grid/style2-grid.component';\nimport { ComplianceChartComponent } from './tiles/metrics/compliance-chart/compliance-chart.component';\nimport { LinearGaugeModule } from '@progress/kendo-angular-gauges';\nimport { SnSelectorComponent } from './filter_selection/sn-selector/sn-selector.component';\nimport { UtilizationTpdComponent } from './tiles/metrics/utilization-tpd/utilization-tpd.component';\nimport { ManagerAmbSelectorComponent } from './filter_selection/manager-amb-selector/manager-amb-selector.component';\nimport { Style3Component } from './details/style3/style3.component';\nimport { Style3GridComponent } from './details/style3-grid/style3-grid.component';\nimport { Style4Component } from './details/style4/style4.component';\nimport { NpsComponent } from './tiles/metrics/nps/nps.component';\nimport { DetailAccountFilterComponent } from './filter_selection/details/detail-account-filter/detail-account-filter.component';\nimport { DetailAssayFilterComponent } from './filter_selection/details/detail-assay-filter/detail-assay-filter.component';\nimport { DetailDiseaseStateFilterComponent } from './filter_selection/details/detail-disease-state-filter/detail-disease-state-filter.component';\nimport { DetailCategorySwitchesFilterComponent } from './filter_selection/details/detail-category-switches-filter/detail-category-switches-filter.component';\nimport { DetailCapitalServiceAssaySwitchesFilterComponent } from './filter_selection/details/detail-capital-service-assay-switches-filter/detail-capital-service-assay-switches-filter.component';\nimport { ServiceContractsLevel2Component } from './details/service-contracts/service-contracts-level2/service-contracts-level2.component';\nimport { ServiceContractsLevel3Component } from './details/service-contracts/service-contracts-level3/service-contracts-level3.component';\nimport { ServiceContractsLevel4Component } from './details/service-contracts/service-contracts-level4/service-contracts-level4.component';\nimport { UptimeCustomerDetailsComponent } from './details/uptime-customer-details/uptime-customer-details.component';\nimport { SurveyCommentDetailsComponent } from './details/survey-comment-details/survey-comment-details.component';\nimport { CustomerOrderDetailsComponent } from './details/customer-order-details/customer-order-details.component';\nimport { PersonaSelector2Component } from './filter_selection/persona-selector2/persona-selector2.component';\nimport { SearchIconComponent } from './navigation/search-icon/search-icon.component';\nimport { SGMDetailsComponent } from './details/sgm-details/sgm-details.component';\nimport { PredictiveAlertsLevel2Component } from './details/predictive-alerts/predictive-alerts-level2/predictive-alerts-level2.component';\nimport { PredictiveAlertsLevel3Component } from './details/predictive-alerts/predictive-alerts-level3/predictive-alerts-level3.component';\nimport { DetailPersonaSelectorComponent } from './filter_selection/detail-persona-selector/detail-persona-selector.component';\nimport { CustomerHealthGridComponent } from './control_tower/customer-health-grid/customer-health-grid.component';\nimport { CustomerDataTrendsComponent } from './control_tower/customer-data-trends/customer-data-trends.component';\nimport { CustomerHealthAlertsGridComponent } from './control_tower/customer-health-alerts-grid/customer-health-alerts-grid.component';\nimport { DataTrendChartComponent } from './control_tower/data-trend-chart/data-trend-chart.component';\nimport { CtCustomerSelectorComponent } from './filter_selection/ct-customer-selector/ct-customer-selector.component';\nimport { RnpsSurveyCommentDetailsComponent } from './details/rnps-survey-comment-details/rnps-survey-comment-details.component';\nimport { SalesSummaryComponent } from './details/sales/sales-summary/sales-summary.component';\nimport { SalesDetailsComponent } from './details/sales/sales-details/sales-details.component';\nimport { CtProductSetSelectorComponent } from './filter_selection/ct-product-set-selector/ct-product-set-selector.component';\nimport { AlertsGridComponent } from './alerts/alerts-grid/alerts-grid.component';\nimport { DialogsModule, WindowModule } from '@progress/kendo-angular-dialog';\nimport { SearchPopupComponent } from './filter_selection/search-popup/search-popup.component';\nimport { ApiselectListComponent } from './ui_tools/apiselect-list/apiselect-list.component';\nimport { ServiceWorkerModule } from '@angular/service-worker';\nimport { environment } from '../environments/environment';\nimport { GsAlertsDashboardComponent } from './alerts/gs-alerts-dashboard/gs-alerts-dashboard.component';\nimport { GsAlertsNavbarComponent } from './navigation/gs-alerts-navbar/gs-alerts-navbar.component';\nimport { SafeHtmlPipe, SafeStylePipe } from './ui_tools/formatter/safe-html-pipe';\nimport { MsalModule, MsalInterceptor } from '@azure/msal-angular';\nimport { PreferencesComponent } from './navigation/preferences/preferences.component';\nimport { AccountComponent } from './filter_selection/account/account.component';\nimport { ListViewModule } from '@progress/kendo-angular-listview';\nimport { CustomDateFormatterPipe } from './ui_tools/formatter/custom-date-formatter-pipe';\nimport { DataTrendTableComponent } from './control_tower/data-trend-table/data-trend-table.component';\nimport { MetricDetailNoFilterComponent } from './navigation/metric-detail-no-filter/metric-detail-no-filter.component';\nimport { CtAccountSelectorComponent } from './filter_selection/ct-account-selector/ct-account-selector.component';\nimport { CustomerProfileInfoComponent } from './control_tower/customer-profile-info/customer-profile-info.component';\nimport { CuaManagerSelectorComponent } from './filter_selection/cua-manager-selector/cua-manager-selector.component';\nimport { AccountSelectListComponent } from './ui_tools/account-select-list/account-select-list.component';\nimport { CustomerSelectListComponent } from './ui_tools/customer-select-list/customer-select-list.component';\nimport { StateHandlerSearchComponent } from './api/state-handler-search/state-handler-search.component';\nimport { CtManagerAmbSelectorComponent } from './filter_selection/ct-manager-amb-selector/ct-manager-amb-selector.component';\nimport { AccountRepComponent } from './filter_selection/account-rep/account-rep.component';\nimport { BrDashboardComponent } from './business_review/br-dashboard/br-dashboard.component';\nimport { BrTileInsertComponent } from './business_review/br-tile-insert/br-tile-insert.component';\nimport { BrPlaceholderComponent } from './business_review/snapshots/br-placeholder/br-placeholder.component';\nimport { BrNavbarComponent } from './business_review/br-navbar/br-navbar.component';\nimport { BrTemplateEditorComponent } from './business_review/br-template-editor/br-template-editor.component';\nimport { BrTemplateSelectorComponent } from './business_review/br-template-selector/br-template-selector.component';\nimport { AccountCustomerSelectorComponent } from './business_review/search_options/account-customer-selector/account-customer-selector.component';\nimport { AccountCustomerMenuComponent } from './business_review/search_options/account-customer-menu/account-customer-menu.component';\nimport { MultiLevelSelectWidgetComponent } from './business_review/search_options/multi-level-select-widget/multi-level-select-widget.component';\nimport { ProductMenuComponent } from './business_review/search_options/product-menu/product-menu.component';\nimport { HistoryRangeMenuComponent } from './business_review/search_options/history-range-menu/history-range-menu.component';\nimport { ServicingGroupMenuComponent } from './business_review/search_options/servicing-group-menu/servicing-group-menu.component';\nimport { BusinessSegmentMenuComponent } from './business_review/search_options/business-segment-menu/business-segment-menu.component';\nimport { BrStackedBarLineChartComponent } from './business_review/snapshots/br-stacked-bar-line-chart/br-stacked-bar-line-chart.component';\nimport { UiMultiColumnListSelectComponent } from './business_review/ui-multi-column-list-select/ui-multi-column-list-select.component';\nimport { PresentationSelectComponent } from './business_review/presentation-select/presentation-select.component';\nimport { BrLocationSelectorComponent } from './business_review/search_options/br-location-selector/br-location-selector.component';\nimport { BrProductSelectorComponent } from './business_review/search_options/br-product-selector/br-product-selector.component';\nimport { BrBusinessSegmentSelectorComponent } from './business_review/search_options/br-business-segment-selector/br-business-segment-selector.component';\nimport { BrHistoryRangeSelectorComponent } from './business_review/search_options/br-history-range-selector/br-history-range-selector.component';\nimport { PresentationToggleSwitchComponent } from './business_review/presentation-toggle-switch/presentation-toggle-switch.component';\nimport { BrServicingGroupSelectorComponent } from './business_review/search_options/br-servicing-group-selector/br-servicing-group-selector.component';\nimport { BrMultiLineChartComponent } from './business_review/snapshots/br-multi-line-chart/br-multi-line-chart.component';\nimport { BrExpandedChartViewComponent } from './business_review/detail_pages/br-expanded-chart-view/br-expanded-chart-view.component';\nimport { BrListViewComponent } from './business_review/detail_pages/br-list-view/br-list-view.component';\nimport { BrSystemComparisonListViewComponent } from './business_review/system-comparison-pages/br-system-comparison-list-view/br-system-comparison-list-view.component';\nimport { BrPieChartComponent } from './business_review/snapshots/br-pie-chart/br-pie-chart.component';\nimport { BrTemplateViewerComponent } from './business_review/br-template-viewer/br-template-viewer.component';\nimport { BrStackedBarChartByProductComponent } from './business_review/snapshots/br-stacked-bar-chart-by-product/br-stacked-bar-chart-by-product.component';\nimport { BrTimelineViewComponent } from './business_review/timeline-pages/br-timeline-view/br-timeline-view.component';\nimport { BrTextIndicatorComponent } from './business_review/snapshots/br-text-indicator/br-text-indicator.component';\nimport { BrTopItemsComponent } from './business_review/snapshots/br-top-items/br-top-items.component';\nimport { BrNpsScoresComponent } from './business_review/snapshots/br-nps-scores/br-nps-scores.component';\nimport { BrLineChartComponent } from './business_review/snapshots/br-line-chart/br-line-chart.component';\nimport { ApiTestComponent } from './business_review/snapshots/api-test/api-test.component';\nimport { FormsModule } from '@angular/forms';\nimport { BrExamplePieChartComponent } from './business_review/snapshots/br-example-pie-chart/br-example-pie-chart.component';\nimport { FilterPresentationHeaderComponent } from './business_review/filter-presentation-header/filter-presentation-header.component';\nimport { FilterPresentationFooterComponent } from './business_review/filter-presentation-footer/filter-presentation-footer.component';\nimport { DynamicDataTableComponent } from './business_review/dynamic-data-table/dynamic-data-table.component';\nimport { DdtLoaderComponent } from './business_review/ddt-loader/ddt-loader.component';\nimport { BrDetailComponentViewerComponent } from './business_review/br-detail-component-viewer/br-detail-component-viewer.component';\nimport { BrMultiBarChartComponent } from './business_review/snapshots/br-multi-bar-chart/br-multi-bar-chart.component';\n\nconst isIE = window.navigator.userAgent.indexOf('MSIE ') > -1 || window.navigator.userAgent.indexOf('Trident/') > -1;\n\n@NgModule({\n declarations: [\n AppComponent,\n AreaLineChartComponent,\n PieChartComponent,\n DashboardComponent,\n TileInsertComponent,\n ShapeIndicatorsComponent,\n TextIndicatorsComponent,\n DashboardNavbarComponent,\n MetricDetailNavbarComponent,\n ParameterSwitchesComponent,\n BookmarksComponent,\n SearchComponent,\n CustomerSelectorComponent,\n StackedBarLineChartComponent,\n MultiLineChartComponent,\n EmptyValueMaskPipe,\n CustomerComponent,\n InstrumentsComponent,\n AmbassadorComponent,\n PlaceholderComponent,\n AreaLineChartComponent,\n CustomerToggleComponent,\n InstrumentToggleComponent,\n TrackToggleComponent,\n FlagshipToggleComponent,\n PersonaSelectorComponent,\n TssAmbassadorSelectorComponent,\n ManagerSelectorComponent,\n CustomerSelectorComponent,\n InstrumentSelectorComponent,\n GeoLocationSelectorComponent,\n AutoselectListComponent,\n VerticalSplitTextIndicatorsComponent,\n StateHandlerComponent,\n TopStatsListComponent,\n ToolSelectorComponent,\n AlertsNavbarComponent,\n CtNavbarComponent,\n CtDashboardComponent,\n AlertsDashboardComponent,\n Style1Component,\n Style1GridComponent,\n FilterInsertComponent,\n DetailCustomerFilterComponent,\n DetailProductLineFilterComponent,\n SetValuesGridComponent,\n StackedBarChartByProductComponent,\n CustomGridComponent,\n AbbottBigNumberFormatterPipe,\n CustomComplianceGridComponent,\n Style2Component,\n Style2GridComponent,\n ComplianceChartComponent,\n SnSelectorComponent,\n UtilizationTpdComponent,\n ManagerAmbSelectorComponent,\n Style3Component,\n Style3GridComponent,\n Style4Component,\n NpsComponent,\n DetailAccountFilterComponent,\n DetailAssayFilterComponent,\n DetailDiseaseStateFilterComponent,\n DetailCategorySwitchesFilterComponent,\n DetailCapitalServiceAssaySwitchesFilterComponent,\n ServiceContractsLevel2Component,\n ServiceContractsLevel3Component,\n ServiceContractsLevel4Component,\n UptimeCustomerDetailsComponent,\n SurveyCommentDetailsComponent,\n CustomerOrderDetailsComponent,\n PersonaSelector2Component,\n SearchIconComponent,\n SGMDetailsComponent,\n PredictiveAlertsLevel2Component,\n PredictiveAlertsLevel3Component,\n DetailPersonaSelectorComponent,\n RnpsSurveyCommentDetailsComponent,\n SalesSummaryComponent,\n SalesDetailsComponent,\n CustomerHealthGridComponent,\n CustomerDataTrendsComponent,\n CustomerHealthAlertsGridComponent,\n DataTrendChartComponent,\n CtCustomerSelectorComponent,\n RnpsSurveyCommentDetailsComponent,\n CtProductSetSelectorComponent,\n AlertsGridComponent,\n SearchPopupComponent,\n ApiselectListComponent,\n GsAlertsDashboardComponent,\n GsAlertsNavbarComponent,\n SafeHtmlPipe,\n SafeStylePipe,\n PreferencesComponent,\n AccountComponent,\n CustomDateFormatterPipe,\n DataTrendTableComponent,\n MetricDetailNoFilterComponent,\n CtAccountSelectorComponent,\n CustomerProfileInfoComponent,\n CuaManagerSelectorComponent,\n AccountSelectListComponent,\n CustomerSelectListComponent,\n StateHandlerSearchComponent,\n CtManagerAmbSelectorComponent,\n AccountRepComponent,\n BrDashboardComponent,\n BrTileInsertComponent,\n BrPlaceholderComponent,\n BrNavbarComponent,\n BrTemplateEditorComponent,\n BrTemplateSelectorComponent,\n AccountCustomerSelectorComponent,\n AccountCustomerMenuComponent,\n MultiLevelSelectWidgetComponent,\n ProductMenuComponent,\n HistoryRangeMenuComponent,\n ServicingGroupMenuComponent,\n BusinessSegmentMenuComponent,\n BrStackedBarLineChartComponent,\n UiMultiColumnListSelectComponent,\n PresentationSelectComponent,\n BrLocationSelectorComponent,\n BrProductSelectorComponent,\n BrBusinessSegmentSelectorComponent,\n BrHistoryRangeSelectorComponent,\n PresentationToggleSwitchComponent,\n BrServicingGroupSelectorComponent,\n BrMultiLineChartComponent,\n BrExpandedChartViewComponent,\n BrListViewComponent,\n BrSystemComparisonListViewComponent,\n BrPieChartComponent,\n BrStackedBarChartByProductComponent,\n BrTemplateViewerComponent,\n BrTimelineViewComponent,\n BrTextIndicatorComponent,\n BrTopItemsComponent,\n BrNpsScoresComponent,\n BrLineChartComponent,\n ApiTestComponent,\n BrExamplePieChartComponent,\n FilterPresentationHeaderComponent,\n FilterPresentationFooterComponent,\n DynamicDataTableComponent,\n DdtLoaderComponent,\n BrDetailComponentViewerComponent,\n BrMultiBarChartComponent\n ],\n imports: [\n FormsModule,\n BrowserModule,\n AppRoutingModule,\n ChartsModule,\n GridModule,\n ExcelModule,\n ButtonsModule,\n PopupModule,\n DropDownsModule,\n BrowserAnimationsModule,\n HttpClientModule,\n FontAwesomeModule,\n InputsModule,\n LayoutModule,\n LabelModule,\n LinearGaugeModule,\n TooltipModule,\n DialogsModule,\n WindowModule,\n ListViewModule,\n ServiceWorkerModule.register('ngsw-worker.js', { enabled: environment.production }),\n MsalModule.forRoot({\n auth: {\n clientId: environment.clientId,\n authority: 'https://login.microsoftonline.com/' + environment.tenantId, // This is your tenant info\n redirectUri: environment.authRedirectUrl // This is your redirect URI\n },\n cache: {\n cacheLocation: 'localStorage',\n storeAuthStateInCookie: isIE, // set to true for IE 11\n }\n }\n // ,\n // {\n // popUp: true,//isIE?\n // consentScopes: [\n // 'openid',\n // ]\n // }\n )\n ],\n providers: [\n // {\n // provide: HTTP_INTERCEPTORS,\n // useClass: MsalInterceptor,\n // multi: true\n // }\n ],\n bootstrap: [AppComponent],\n entryComponents: [\n AreaLineChartComponent,\n PieChartComponent,\n MultiLineChartComponent,\n ShapeIndicatorsComponent,\n TextIndicatorsComponent,\n VerticalSplitTextIndicatorsComponent,\n StackedBarLineChartComponent,\n PlaceholderComponent,\n TopStatsListComponent,\n DetailCustomerFilterComponent,\n DetailProductLineFilterComponent,\n StackedBarChartByProductComponent,\n ComplianceChartComponent,\n UtilizationTpdComponent,\n NpsComponent,\n DetailAccountFilterComponent,\n DetailAssayFilterComponent,\n DetailDiseaseStateFilterComponent,\n DetailCategorySwitchesFilterComponent,\n DetailCapitalServiceAssaySwitchesFilterComponent,\n BrPlaceholderComponent,\n BrStackedBarLineChartComponent,\n BrMultiLineChartComponent,\n BrMultiBarChartComponent,\n BrPieChartComponent,\n BrStackedBarChartByProductComponent,\n BrTextIndicatorComponent,\n BrTopItemsComponent,\n BrNpsScoresComponent,\n BrLineChartComponent,\n BrExamplePieChartComponent,\n ApiTestComponent\n\n ]\n})\nexport class AppModule { }\n","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule)\n .catch(err => console.error(err));\n","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"zn8P\";"]}